ํ๊ตญ ์ญ์ฌ ์ง๋ช ๊ฐ์ฒด๋ช ์ธ์ ๋ชจ๋ธ (Korean Historical Place-Name NER)
ํ๊ตญ ๊ณ ์ ํ๋ฌธ ์ฌ๋ฃ์์ ์ง๋ช ๊ฐ์ฒด๋ฅผ ์ถ์ถํ๋ ๊ฐ์ฒด๋ช ์ธ์(NER) ๋ชจ๋ธ์ ๋๋ค. ๊ตญ์ฌํธ์ฐฌ์์ํ ํ๊ตญ์ฌ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ธ XML ํ๊ทธ๋ฅผ ํ์ต ์ ๋ต(gold label)์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ๊ธฐ๋ฐ ๋ชจ๋ธ๋ก ๊ณ ์ ํ๋ฌธ์ ํนํ ์ฌ์ ํ์ต๋ SikuRoBERTa๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด ์ ์ฅ์๋ ํ์ต ์ถ์ฒ ๊ตฌ์ฑ์ด ๋ค๋ฅธ ๋ ๋ชจ๋ธ์ ๊ฐ์ค์น๋ฅผ ํจ๊ป ๋ฐฐํฌํฉ๋๋ค. ๋ ๋ชจ๋ธ์ ์๋ณด์ ํ์ ์์์ ์ง๋๋ฉฐ, ์ถ๋ ฅ์ ๊ฐ์ฒด ์์ค์์ ๊ฒฐํฉํ๋ ์์๋ธ(ํฉ์งํฉ + ๊ฒน์นจ ์ต์ฅ) ๊ตฌ์กฐ๋ก ์ฌํ๊ณผ ์ ๋ฐ์ ํจ๊ป ํ๋ณดํฉ๋๋ค.
- ์์ค ์ฝ๋ยทํ์ดํ๋ผ์ธ: GitHub
- ๊ด๋ จ ๋ ผ๋ฌธ: ์์ ํ, 2026, ใ์์ธ XML ์ฌ๋ฃ๋ฅผ ํ์ฉํ ํ๊ตญ ์ญ์ฌ ์ง๋ช ๊ฐ์ฒด๋ช ์ธ์ ๋ชจ๋ธ์ ๊ตฌ์ถใ, ใํ๊ตญ์ฌํ๋ณดใ104
๋ชจ๋ธ ๊ตฌ์ฑ
| ํ์ผ | ๋ชจ๋ธ | ํ์ต ์ถ์ฒ | ์ฑ๊ฒฉ |
|---|---|---|---|
sjw_sillok.ckpt |
์น์ ์์ผ๊ธฐยท์ค๋ก ๋ชจ๋ธ | ์กฐ์ ์์กฐ์ค๋กยท์น์ ์์ผ๊ธฐยท๊ณ ์์ข ์ค๋ก | ๊ณ ์ฌํยท์ ์ ๋ฐ |
jonghap.ckpt |
์ข ํฉ ๋ชจ๋ธ | ์ + ํ๊ตญ์ฌ๋ฃ์ด์ยท๊ณ ๋ ค์ฌยท๊ณ ๋ ค์ฌ์ ์ยท์ผ๊ตญ์ฌ๊ธฐยท์ผ๊ตญ์ ์ฌ | ์ ์ฌํยท๊ณ ์ ๋ฐ |
- ์ํคํ ์ฒ: SikuRoBERTa(108M) + Dropout + Linear(hiddenโ3). ๋ฌธ์ ๋จ์ BIO(0=O, 1=B-LOC, 2=I-LOC).
- ์์ค: CrossEntropyLoss(ignore_index=-100). ํ์ต: bf16-mixed, 3 epochs, lr 2e-5(AdamW), ์ ํจ ๋ฐฐ์น 160.
์ฑ๋ฅ (์์ฒด ๊ฒ์ฆ์ , span exact match)
| ๋ชจ๋ธ | F1 | Precision | Recall |
|---|---|---|---|
| ์น์ ์์ผ๊ธฐยท์ค๋ก ๋ชจ๋ธ | 0.9049 | 0.8982 | 0.9118 |
| ์ข ํฉ ๋ชจ๋ธ | 0.8915 | 0.8803 | 0.9030 |
ํ๊ฐ ๋จ์๋ ํ ํฐ์ด ์๋๋ผ ๊ฐ์ฒด ์์ ์ผ์น์ ๋๋ค. O ๋ผ๋ฒจ์ด ์ฝ 98.3%๋ฅผ ์ฐจ์งํ์ฌ ํ ํฐ micro F1์ด ์ฑ๋ฅ์ ๋ถํ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ ๋ชจ๋ธ์ ๊ฒ์ฆ์ ์ ๊ตฌ์ฑ์ด ๋ฌ๋ผ(์น์ ์์ผ๊ธฐยท์ค๋ก val์ ์์ ์ฐ๋๊ธฐ, ์ข ํฉ val์ 7์ข ์ ์ฒด) F1์ ์ง์ ๋น๊ตํ์ง ๋ง์ญ์์ค.
ํ์ต ์๋ฃ: 1,334๊ฐ ํ์ผ, ์ด ํ์ 293,652,373์, ์ง๋ช ๊ฐ์ฒด 2,075,132๊ฐ, ๊ณ ์ ์ง๋ช 94,846์ข .
์ฌ์ฉ๋ฒ
์ด ๋ชจ๋ธ์ ํ์ค AutoModelForTokenClassification์ด ์๋๋ผ SikuRoBERTa ์ธ์ฝ๋ ์์ 3-ํด๋์ค ์ ํ ๋ถ๋ฅ๊ธฐ๋ฅผ ์น์ ๊ตฌ์กฐ๋ก, PyTorch Lightning ์ฒดํฌํฌ์ธํธ(.ckpt)๋ก ๋ฐฐํฌ๋ฉ๋๋ค. ๋ก๋ฉยท์ถ๋ก ยท์์๋ธ ๋ณํฉ์ GitHub ์ ์ฅ์์ NER_model_loader.py์ 4_NER_์ถ๋ก _txt.py๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํ์ค์
๋๋ค.
huggingface-cli download yachagye/korean-historical-placename-ner sjw_sillok.ckpt jonghap.ckpt --local-dir ./ckpt
python 4_NER_์ถ๋ก _txt.py # ๋ชจ๋ยท์
๋ ฅ ๋ฐฉ์ ์ ํ ํ ๋ ckpt ์ง์ โ ํตํฉ๋ณธ ์์ฑ
๊ตฌ์กฐ ์ฐธ๊ณ (์ถ๋ก ์ ๋ฌธ์ ๋จ์ ์ ๋ ฅ, word_ids ์ ๋ ฌ, ์๊ฒฉ BIO ๋ณต์, ๊ฐ์ฒด ์์ ์ผ์น ์ฑ์ ):
import torch
from transformers import AutoTokenizer, AutoModel
tok = AutoTokenizer.from_pretrained("SIKU-BERT/sikuroberta")
enc = AutoModel.from_pretrained("SIKU-BERT/sikuroberta")
classifier = torch.nn.Linear(enc.config.hidden_size, 3) # 0=O, 1=B-LOC, 2=I-LOC
# ckpt์ state_dict์์ ์ธ์ฝ๋ยท๋ถ๋ฅ๊ธฐ ๊ฐ์ค์น๋ฅผ ๋ณต์ (NER_model_loader.py ์ฐธ์กฐ)
์ถ๋ ฅ์ ์ง๋ช
๊ฐ์ฒด๋ฅผ ๋๊ดํธ [ ]๋ก ํ์ํ ํ๋ฌธ ํ
์คํธ์
๋๋ค.
[็ซนๅฑฑ็ธฃ]
ๆฑ่ณ[้ฐ็ซน็ธฃ]็ไบๅไบ้๏ผๅ่ณ[ๅฟ ๆทธ้][้ญๅท็ธฃ]็ไบๅๅ
ญ้๏ผ่ฅฟ่ณ[ๅฎๅ้ก]็ไบๅไธ้โฆ
์์๋ธยท๊ฒ์
- ํฉ์งํฉ: ๋ ๋ชจ๋ธ span์ ๋ชจ๋ ํ๋ณด๋ก โ ๋๋ฝ ๋ณต๊ตฌ(์ฌํ).
- ๊ฒน์นจ ์ ์ต์ฅ: ๊ฒน์น๋ span์ ๊ฐ์ฅ ๋์ ๊ฒ ํ๋๋ง โ ๊ฒฝ๊ณ ์ ๋ฐ.
- ๋จ๊ณ์ ๊ฒ์: ์๋ ๋ณํฉ โ ์๋ ๊ฒ์ โ ์ง๋ช DB ์ต์ฅ์ผ์น ๋ณด์กฐ ๊ฒ์.
ํ๊ณ
- ๋ถํ ์์ฌ ๋จํธ(
่ทฏยทๅ งยท่ฅฟ๋ฑ ๋น์ง๋ช 1๊ธ์)๊ณผ ์ ํ ํ์ฌ ํก์(้ท๋ฅ)๊ฐ ํตํฉ๋ณธ์ ๋จ์ ์ ์์ต๋๋ค. ์ด๋ ์ง๋ช ๊ฒฝ๊ณ๊ฐ ๋ณธ๋ ํ์ ์ ์ด์ง ์์ ์๋ฃ ํน์ฑ์ ํ๋ฉดํ๋ก, ๋ค์ด์คํธ๋ฆผ ์ ์ ์์ ๊ฑฐ๋ฆ ๋๋ค. - ๋จ์์ ์ง๋ช
(
ไบฌ๋ฑ)์ ๋ฌธ๋งฅ ์์กด ํ์ ์ด ํ์ํฉ๋๋ค.
ํ์ต ๋ฐ์ดํฐยท์ถ์ฒ
๊ตญ์ฌํธ์ฐฌ์์ํ ํ๊ตญ์ฌ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ธ XML ์ฌ๋ฃ. ์๋ณธ์ ๊ณต๊ณต๋ฐ์ดํฐํฌํธ์์ ์ ๊ณต๋ฉ๋๋ค. ๋ณธ ์ ์ฅ์๋ ์๋ณธ ์ฌ๋ฃ๋ฅผ ์ฌ๋ฐฐํฌํ์ง ์๊ณ ํ์ ๊ฐ์ค์น๋ง ๊ณต๊ฐํฉ๋๋ค.
์ธ์ฉ
@article{yang_placename_ner,
author = {์์ ํ},
title = {์์ธ XML ์ฌ๋ฃ๋ฅผ ํ์ฉํ ํ๊ตญ ์ญ์ฌ ์ง๋ช
๊ฐ์ฒด๋ช
์ธ์ ๋ชจ๋ธ์ ๊ตฌ์ถ},
journal = {ํ๊ตญ์ฌํ๋ณด},
number = {104},
year = {2026},
note = {๋ฉด์ยทDOI ํ์ ์ ๊ฐฑ์ ์์ }
}
๋ผ์ด์ ์ค
Apache-2.0. ๊ธฐ๋ฐ ๋ชจ๋ธ SikuRoBERTa๊ฐ Apache-2.0์ผ๋ก ๋ฐฐํฌ๋๋ฏ๋ก(2026๋
7์ ํ์ธ), ํ์ ๊ฐ์ค์น๋ ๋์ผ ๋ผ์ด์ ์ค๋ก ๊ณต๊ฐํฉ๋๋ค. Apache-2.0์ ๋ฐ๋ผ ๊ธฐ๋ฐ ๋ชจ๋ธ์ ๋ผ์ด์ ์คยท์ ์๊ถ ๊ณ ์ง๋ฅผ ์ ์งํ๊ณ ๊ฐ์กฐ ๋ด์ญ์ ๋ช
์ํฉ๋๋ค(์ ์ฅ์ NOTICE ์ฐธ์กฐ). ํ์ต์ ์ฌ์ฉํ ์์ธ XML ์ฌ๋ฃ๋ ์ฌ๋ฐฐํฌํ์ง ์์ผ๋ฉฐ, ์๋ณธ์ ๊ตญ์ฌํธ์ฐฌ์์ํยท๊ณต๊ณต๋ฐ์ดํฐํฌํธ์ ์ด์ฉ ์กฐ๊ฑด์ ๋ฐ๋ฆ
๋๋ค.
Model tree for yachagye/korean-historical-placename-ner
Base model
SIKU-BERT/sikuroberta