(ํ) ๊ฐ์ฒด๋ช ์ธ์, (์) named entitiy recognition,(์ผ) ๅบๆ่กจ็พๆฝๅบ (์ค) ๅฝๅๅฎไฝ่ฏๅซ
๋ฌธ๋งฅ์ ํ์ ํด์ ์ธ๋ช , ๊ธฐ๊ด๋ช , ์ง๋ช ๋ฑ๊ณผ ๊ฐ์ ๋ฌธ์ฅ ๋๋ ๋ฌธ์์์ ํน์ ํ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋จ์ด ๋๋ ์ด๊ตฌ๋ฅผ ์ธ์ํ๋ ๊ณผ์ ์ ์๋ฏธํจ
-
์ง์ ์๋ต ์์คํ ๊ณผ ์ ๋ณด ๊ฒ์ ๋ถ์ผ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๊ณ ์๋ ์ ๋ณด ์ถ์ถ์ ํ ๋ถ์ผ
-
๋ฌธ์๋ ๋ฌธ์ฅ ๋ด์์ ๊ฐ์ฒด๋ช ์ ์ถ์ถํ๊ณ ์ถ์ถ๋ ๊ฐ์ฒด๋ช ์ ์ข ๋ฅ๋ฅผ ์๋ณํ๋ ์์

-
๊ฐ์ฒด๋ช ์ธ์(Named Entity Recognition, ์ดํ NER)์ด๋ผ๊ณ ํ์ง๋ง ๊ฐ์ฒด๋ช ์ ์ธ์ํ๋ ๊ณผ์ ๋ผ๊ธฐ ๋ณด๋ค๋ ๋ฌธ์์ด์์ ๋ฏธ๋ฆฌ ์ ์๋ ๊ฐ์ฒด๋ช ํ์ ์ ๋ํด ๊ฐ์ฒด๋ช ์ ๊ฒฝ๊ณ๋ฅผ ํ์งํ๊ณ ํด๋นํ๋ ํ์ ์ผ๋ก ๋ถ๋ฅํ๋ ๋ฐฉ์์ผ๋ก ๋ง๋ญ์น๋ฅผ ๊ตฌ์ถํจ
-
์์ฐ์ด์ฒ๋ฆฌ ์ค ์ ๋ณด ์ถ์ถ ๊ณผ์ ์ ํ๋๋ก ์ฃผ๋ก ์ํธ ์ฐธ์กฐ(coreference resolution), ๊ด๊ณ ์ถ์ถ(relation extraction), ์ฌ์ ์ถ์ถ, ์๊ฐ ํํ ๋ฑ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋จ
- ํ๊ตญ์ด ๊ฐ์ฒด๋ช ๋ฐ์ดํฐ ๊ตฌ์ถ์ ์ํ ์ง์นจ์ TTA ํ์ค์ด ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ผ๋ 2020๋ ๊ณผ 2021๋ ์ ๊ณต๊ฐ๋ ๋ชจ๋์ ๋ง๋ญ์น์์๋ ์ ๋ฌธ์ ์ค์ฌ์ผ๋ก ํ๋ ๋ฌธ์ด ์ธ์๋ ์น ๋ฑ์์ ๋ง์ด ์ฌ์ฉ๋๋ ๊ตฌ์ด์ฒด ๋ง๋ญ์น ํ๊น ์ ์ํด ๊ฐ์ฒด๋ช ์ ํ์ ์๊ฐ ๋์ด๋ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ํญ์์ ๊ฐ์ ์บ๋ฆญํฐ, ๊ฐ์์ง ์ด๋ฆ ๋ฑ์ ํ๊น ํ๊ธฐ ์ํด PS_CHARACTER, PS_PET ๋ฑ์ด ์ถ๊ฐ๋ ๊ฒ์ด ์ด๋ฌํ ํน์ง์ ๋ฐ์ํ๋ค.
- ๊ฐ์ฒด๋ช
์ธ์์ ์ ๋ณด ์ถ์ถ์ ๋ชฉ์ ์ผ๋ก ๊ฐ์ต๋๋ MUC-6 (Message Understanding Conference)์์ ์ฒ์์ผ๋ก ์ ์๋๊ณ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ฐ๊ตฌ๋๊ธฐ ์ฌ์ํด, ์ฌ๋, ์กฐ์ง, ์ฅ์, ์๊ฐ, ํตํ, ๋ฐฑ๋ถ์จ์ ํํ๋ค์ ํ
์คํธ๋ก ์ธ์ํ๊ธฐ ์ํด์ ์งํ๋จ.

-
1995๋ MUC-6[the Sixth Message Understanding Conference] (https://cs.nyu.edu/faculty/grishman/muc6.html) ์์ ์์๋์๋๋ฐ ๋น์ ๋ถ๋ฅ์ ๊ธฐ์ค์ 5 ๊ฐ์ง๋ก ์ธ๋ช (PS), ๊ธฐ๊ด๋ช (OG), ์ฅ์(LC), ๋ ์ง(DT), ์๊ฐ(TI) ๋ถ๋ฅ ๋ฐ BIO(Begin, in, out) tag ๋ฅผ ๋ถ์ด๋ ๊ณผ์ ์๋ค. NEtask20์์ ์ฐธ์กฐํ ์ ์๋ค.
-
์ดํ CoNLL(2002, 2003) shared task์์ Language-Independent Named Entity Recognition ๊ณผ์ ๊ฐ ์ด๋ฃจ์ด์ก๋ค.
๊ฐ์ฒด๋ช ์ธ์์ ํฌ๊ฒ 3๊ฐ์ง์ ๋ฐฉ๋ฒ์ผ๋ก ์ฐ๊ตฌ๋จ
- ๊ท์น ๊ธฐ๋ฐ
- ์ ๊ทํํ์
- ์์ฐ์ด ํน์ง์ ์ด์ฉํ ๊ท์น๊ณผ ์ฌ์ ์ ๋ณด์ฌ์ฉ
- ํต๊ณ๊ธฐ๋ฐ์ ๊ธฐ๊ณ ํ์ต ๋ฐฉ๋ฒ
- Hidden Markov Model
- Maximum Entropy Model
- Conditional Random Fields
- Decision Tree
- ๊ท์น ๊ธฐ๋ฐ ๋ฐ ๊ธฐ๊ณํ์ต
- ๊ท์น ๊ธฐ๋ฐ๊ณผ ๊ธฐ๊ณํ์ต์ ํผํฉํจ์ผ๋ก ๋ ํฅ์๋ ์ฑ๋ฅ์ ๋ณด์์
CORPUS
CoNLL-2002 NER corpus
QUICK PEEK

CORPUS
CoNLL-2003 NER corpus : ์์ด NER
COUPUS
NUT Named Entity Recognition in Twitter Shared task
TOOLKIT
Stanford Named Entity Recognizer
TOOLKIT
์์ด์ ๊ฒฝ์ฐ nltk ํจํค์ง๋ฅผ ํตํด ๋ค์์ 4๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ฉด ์
๋ ฅ ๋ฌธ์ฅ์์ ์ฌ๋, ์กฐ์ง, ์ฅ์ ์ด๋ฆ์ ์ถ์ถํ ์ ์๋ค.
- ๋ฌธ์ฅ๋ถ๋ฆฌ nltk.sent_tokenize
- ์ด์ ๋ถ๋ฆฌ nltk.word_tokenize
- ํํ์ ํ๊น nltk.pos_tag
- ๊ฐ์ฒด๋ช ์ธ์ nltk.chunk.ne_chunk
- HLCT 2016์์ ์ ๊ณตํ ๋ฐ์ดํฐ ์ธํธ ์๋ณธ์ ์ผ๋ถ ์ค๋ฅ๋ฅผ ์์ ํ๊ณ ๊ณต๊ฐํ ๋ง๋ญ์น
- KoreanNERCorpus
QUICK PEEK
- ํ๊ตญ์ด ๊ฐ์ฒด๋ช ์ ์ ๋ฐ ํ์ง ํ์คํ ๊ธฐ์ ๋ณด๊ณ ์์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์๋ ๊ฐ์ฒด๋ช ํํ์ ๋ง๋ญ์น
- mounlp_NER
QUICK PEEK
- aihub์์ ์ฌ์ฉ์ ์๋๊ฐ ๋ฐ์๋ ๊ฐ์ฒด(Entity)๋ฅผ ์ถ์ถํ์ฌ ์์๋ฌ์ค ๋ฐ ์์๊ณต์ธ, ๊ณต๊ณต๋ฏผ์ ๋ถ์ผ๋ฅผ ์ํด ๊ตฌ์ถํ ๋ฐ์ดํฐ
QUICK PEEK
- ํฌ๋ฉง์ด ์ฌ์ฉํ๊ธฐ ํธํ๊ณ ์ฌ์ฉ ์์๊ฐ ๋ถ๋ช ํ ๋จ๊ณ๋ก ์งํ๋๊ณ ์์
- ๊ฐ์ฒด๋ช ํ๊ทธ์ ์ข ๋ฅ๊ฐ ๋ค์ํด์ง๊ณ ๋ค์ํ ๋๋ฉ์ธ์์๋ ์ ์ฐํ๊ฒ ์์ฉํ ์ ์๋ ๋ฐฉํฅ์ ๋ชจ์ํ๋ ์ค
- ๊ฐ์ฒด๋ช ์ธ์์ ์ํ ๋ง๋ญ์น ๊ตฌ์ถ์ด ์ด๋ ค์ด ์ด์ ๋ ์๋ก์ด ๊ฐ์ฒด๋ช ์ด ๊ณ์ ๋ง๋ค์ด์ง๊ณ ์์ด์ ์์ฑ๋ ์ฌ์ ์ ๊ฐ์ง๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ฐ์ ๋จ์ด๋ผ๋ ์ฌ์ฉ๋๋ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ์๋ฏธ๋ก ํด์๋๋ ์ค์์ฑ์ด ๋ฐ์ํ ์ ์๋ค.
- ์ธ๋ถ๋ฅ ํ๊น ๋ณด๋ค ๋๋ถ๋ฅ ํ๊น ์ด, ๊ฐ์ฒด๋ช ์ ๋ถ๋ฅ ํ์ ์ ๊ท์ ํ๋ ๊ฒ๋ณด๋ค ๊ฒฝ๊ณ๋ฅผ ํ์ง(์คํฌ ์ค์ )ํ๋ ๊ฒ์ด ๋ ๋์ด๋๊ฐ ๋์ ๊ณผ์ ๋ก ์ฌ๊ฒจ์ง๋ค. ๊ฐ๋ น <์์ธ ํจ์ ์ํฌ:EV_FESTIVAL> ์์ ์์ธ์ ๋ถ๋ฆฌํด์ ๋์๋ก ํ๊น ํ์ง ์๊ณ ํจ์ ์ํฌ์ ํ์ ์ด๋ฒคํธ๋ก ํ๋จํ์ฌ ํ๊บผ๋ฒ์ ํ๊น ํ๋ค.
- ๋๋ฉ์ธ์ ๊ตฌ๋ถ ํ๋ ์ด์ ์ญ์ ์ฝ๊ฒ ์ค์์ฑ์ ํด์ํ๊ธฐ ์ํด์
-
'์ฌ์ ์น๊ตฌ'์ ์ฌ๋ฆ์ฌ๋ฆํด'๋ผ๋ ๊ณก์ด ์๋ค๋ฉด ์ฌ์ ์ ์๋ฏธ๋ก๋ ์ฌ๋ฐ๋ฅธ ์ ๋ณด๋ฅผ ์ถ์ถํ๊ธฐ ์ด๋ ค์ธ ์๋ ์๋ค.
-
์ด๋ฅผ ๋์ค ๊ฐ์๋ผ๋ closed domain์ ๊ฐ์์ ๊ณก๋ช ์ผ๋ก ๋ถ๋ฅํ์ฌ ๊ฐ์ฒด๋ก ํ๊น ํด ์ฃผ๋ฉด ๋น ๋ฅด๊ฒ ์ ๋ณด์ ์ ๊ทผํ ์ ์์ ๊ฒ์ด๋ค.
-
๋ํ, ๋ณ์์ ์ฐจํธ, ๋ฒ์ ๋ น์ทจ๋ก ๋ฑ์ ํน์ ํ ๋ชฉ์ ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ๋ณ๋๋ก ๊ตฌ์ถํ๊ธฐ ๋๋ฌธ์ ๋ค์์ ์ ๋ฌธ ์ฉ์ด๋ค์ด ํน์ ํ ์๋ฏธ๋ก ์ฌ์ฉ๋๊ฒ ๋๋ค.
- ์์คํผ๋ฆฐ๊ณผ ๊ฐ์ด ์ผ๋ฐ์ ์ผ๋ก ๋ง์ด ์ฐ์ด๋ ์ฉ์ด๋ ์์ง๋ง, ๋์ฒด๋ก๋ ํน์ ํ ์ฉ์ด๋ฅผ ๊ฐ์ฒด๋ก ํ๊น ํด ์ฃผ๋ ๊ฒ์ด ๋ฐ์ดํฐ ๊ตฌ์ถ์ ์ฃผ์ ์์ ์ผ ๊ฒ์ด๋ค.
- ์ด ๋ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์ฒด๋ช ๊ณผ ๋ฒ์ฃผ๋ก ์ด๋ฃจ์ด์ง ์ฌ์ ๋๋ ํ๊น ๋ ๋ฌธ์๊ฐ ๋๋ค.
-
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด B,I,O ๋๋ B,I,E,S,O ๋ฑ์ suffix๋ก ๋ถ๋ฆฌ๋ ํ ํฐ์ ํ๋๋ก ๋ฌถ์ด์ฃผ๋ ๋ฐฉ๋ฒ์ด ๊ณ ์๋์ด ์๋๋ฐ, ์์ฆ๊ฐ์ด ๋ฅ๋ฌ๋์ ์ฌ์ฉ๋๋ ํ ํฌ๋์ด์ ๋ฅผ ํ์ฉํ๋ฉด, ๋จ์ด๋ฅผ subwords unit์ผ๋ก ๋๋๊ฒ ๋๋๋ฐ, ์ด๋ ๋จ์ด๊ฐ ๋ถ๋ฆฌ๋๋ฉด ํ ํฌ๋์ด์ ์ ๋ฐ๋ผ '##' ๋๋ '_' ํ์์ผ๋ก ๋ถ๋ฆฌ๋ ๋๋ฒ์งธ subwords ๋ถํฐ ํน์ ๋ฌธ์๊ฐ ๋ถ๊ฒ ๋์ด์ I, E๋ฑ์ ์ ๋ณด๋ ํ์๊ฐ ์์ด์ง
๋ฅ๋ฌ๋ ํ์ต์์๋ ์ ์๋ฅผ ํ๊ฐ(evaluate)ํ ๋, seqeval_metrics.precision_score(labels, preds, suffix=True)๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ, ์ฌ๊ธฐ์ suffix๋ AGE-B๋, B-AGE ์ฒ๋ผ ๊ฐ์ฒด์ ์๋๋ ๋ค์ ๋ถ์ ์ ๋ฌด์ ๋ฐ๋ผ์ True/False ์ง์ ์ ํ๋ฏ๋ก์จ, ์ต์ข ํ๊ฐ ์ ์์ ํํ์๋ suffix๋ฅผ ๋ฐ์ํ์ง ์์์ ์๋ ๊ฒฐ๊ณผ์ ๊ฐ์ด ํ์ธ์ด ๊ฐ๋ฅํจ
ํ์ง๋ง ๋ชจ๋ธ์ cross entropy loss ์ I ๋๋ B์ ๋ํ ๊ฐ๊ฐ์ ์ถ๋ ฅ์ด ์์๊ฒ์ด๋ผ ์๊ฐ์ด๋จ
- ์ด์ ๋ ๋ชจ๋ธ config์์ ๋ผ๋ฒจ์ ๊ฐ์๋ฅผ ์ง์ ํด ์ฃผ๋๋ฐ ์๋ ์์ธ์ ๋ฐ์ดํฐ์ ๋ํ ํ๊ทธ๋ [AGE],[LOC],[SEX]๊น์ง ์ด 3๊ฐ์ ํ๊ทธ๋ B, I์ ๊ฐ suffix์ ์ํด 6๊ฐ๊ฐ ๋๊ณ suffix O๋ฅผ ๋ํด ์ด 7๊ฐ์ ํ๊ทธ๋ก ํ์ต์ ์งํํ๊ธฐ ๋๋ฌธ์
#####################################################
# roberta ์์ธ์(seoul-si) ๋ฐ์ดํฐ ํ์ต ๊ฒฐ๊ณผ
# ckpt 1200
f1 = 0.9991445680068435
loss = 0.002619927439946457
precision = 0.9988159452703592
recall = 0.9994734070563455
precision recall f1-score support
AGE 0.97 0.99 0.98 231
LOC 1.00 1.00 1.00 5932
SEX 1.00 1.00 1.00 1433
micro avg 1.00 1.00 1.00 7596
macro avg 0.99 1.00 0.99 7596
weighted avg 1.00 1.00 1.00 7596
#####################################################
#####################################################
# KoElectra 119(ner-119) ๊ธด๊ธ์ ๊ณ ์ ์ NER ๋ฐ์ดํฐ ํ์ต ๊ฒฐ๊ณผ
f1 = 0.7518783854621702
loss = 0.37201588021384346
precision = 0.7110046265697291
recall = 0.7977382276603634
precision recall f1-score support
DAN 1.00 0.83 0.91 6
DIR 0.70 0.76 0.73 3650
LOC 0.79 0.85 0.82 1368
MET 0.82 0.87 0.84 52
NUM 0.66 0.66 0.66 884
ORG 0.77 0.84 0.81 2690
PER 0.77 0.90 0.83 3709
QTY 0.56 0.74 0.64 250
SIT 0.42 0.50 0.46 1532
TIM 0.74 0.88 0.81 2041
micro avg 0.71 0.80 0.75 16182
macro avg 0.72 0.78 0.75 16182
weighted avg 0.71 0.80 0.75 16182
#####################################################
#####################################################
# KoElectra + CRF 119(ner-119) ๊ธด๊ธ์ ๊ณ ์ ์ NER ๋ฐ์ดํฐ ํ์ต ๊ฒฐ๊ณผ
# ckpt = 2000
f1 = 0.825208846781679
loss = 2.4524980651007757
precision = 0.852579365079365
recall = 0.7995410283446008
precision recall f1-score support
DAN 0.86 0.50 0.63 12
DIR 0.84 0.70 0.77 3605
LOC 0.85 0.87 0.86 1245
MET 0.90 0.95 0.92 64
NUM 0.81 0.69 0.75 906
ORG 0.83 0.85 0.84 2803
PER 0.91 0.89 0.90 3641
QTY 0.74 0.82 0.78 299
SIT 0.73 0.58 0.65 1481
TIM 0.90 0.89 0.90 2067
micro avg 0.85 0.80 0.83 16123
macro avg 0.84 0.78 0.80 16123
weighted avg 0.85 0.80 0.82 16123
#####################################################
์์ธ์ [LOC], [AGE], [SEX] ๊ฐ์ฒด๋ช ์ธ์ ๋ชจ๋ธ ์ถ๋ก ๊ฒฐ๊ณผ
- nn.linear -> 7๊ฐ ํด๋์ค์๋ํ logits -> CrossEntropyLoss -> ํ์ต -> ๋ชจ๋ธ์์ฑ -> ์ถ๋ก -> ๊ฐ ํ ํฐ๋ณ ์ ๋ ฅ์ ๋ํ ๊ฐ์ฒด๋ณ logits๊ฐ์ด ์ถ๋ ฅ ํ์ธ
PATH_Klue_roberta = WORK_DIR + '/ner_finetune/model_KlueRoberta_ckpt/roberta-large-seoul-si-lr5e-5/checkpoint-2200'
tokenizer = AutoTokenizer.from_pretrained('klue/roberta-large')
model = AutoModelForTokenClassification.from_pretrained(PATH_Klue_roberta)
ner = NerPipeline(model=model,
tokenizer=tokenizer,
ignore_labels=[],
ignore_special_tokens=True)
text = '์์ธํน๋ณ์ ๊ฐ๋จ๊ตฌ ์ธ๊ณก๋์ ์ฌ๋ ๋จ์ฑ 30๋๋ง ๊ณ ์ฉ๋ฅ ์ ์ ์๋์'
inputs = tokenizer(text, return_tensors='pt')
with torch.no_grad():
logits = model(**inputs).logits
print(tokenizer.tokenize(text))
print(tokenizer(text)['input_ids'])
len(tokenizer(text)['input_ids'])
# ['์์ธํน๋ณ์', '๊ฐ๋จ๊ตฌ', '์ธ', '##๊ณก๋', '##์', '์ฌ', '##๋', '๋จ์ฑ', '30', '##๋', '##๋ง', '๊ณ ์ฉ', '##๋ฅ ', '์', '์', '์', '##๋', '##์']
# [0, 30500, 9549, 1269, 13506, 2170, 1233, 2259, 4576, 3740, 2104, 2154, 4571, 2595, 1381, 1295, 1513, 2075, 2182, 2]
# 20
# ๋ก์ง์ ๊ธธ์ด๋ 20์ ์์ํ ํฐ(1 ๊ฐ) + ๋ฌธ์ฅํ ํฐ(text : 18 ๊ฐ) + ๋ฌธ์ฅ๋ ํ ํฐ(1 ๊ฐ)
tokenizer.tokenize(text)
len(str(tokenizer.bos_token_id)) + len(tokenizer.tokenize(text)) + len(str(tokenizer.eos_token_id))
print(len(logits[0]))
print(logits) # ๊ฐ ํ ํฐ๋ณ 7๊ฐ์ ํ๊ทธ๋ค์ ๋ํ logits ๊ฒฐ๊ณผ
# ์ฌ๊ธฐ์ ์ฒซ๋ฒ์งธ logit์ '์์ธํน๋ณ์'์ ๋ํ logit์
predictions = torch.argmax(logits, dim=2)
predictions # argmax๋ก ๋ณด์์๋ 3๋ฒ ์ธ๋ฑ์ค์ ๊ฐ์ฒด๊ฐ ๊ฐ์ฅ ๋์ ํ๋ฅ ์
# Output exceeds the size limit. Open the full output data in a text editor
# 20
# tensor([[[-1.0638e-01, -2.3128e+00, -9.8020e-01, 2.9688e+00, -3.6005e+00,
# -2.8416e-01, 1.9760e+00],
# [-2.6486e+00, -1.9731e+00, -2.2968e+00, 1.0179e+01, -2.4592e+00,
# -5.8233e-01, -1.3004e+00],
# [-2.0368e+00, -3.3225e+00, -1.7676e+00, -2.2002e+00, -3.3691e+00,
# -6.6381e-01, 9.4754e+00],
# [-2.0584e+00, -3.3303e+00, -1.7535e+00, -2.1740e+00, -3.3938e+00,
# -6.6947e-01, 9.4550e+00],
# [-2.0432e+00, -3.3191e+00, -1.7638e+00, -2.1874e+00, -3.3828e+00,
# -6.6951e-01, 9.4682e+00],
# [ 1.0786e+01, -3.0063e+00, -1.3876e+00, -1.2231e+00, -3.3049e+00,
# -1.5784e+00, -1.2131e+00],
# [ 1.1107e+01, -3.1188e+00, -1.5399e+00, -1.1353e+00, -3.0952e+00,
# -1.6931e+00, -1.5426e+00],
# [ 1.1295e+01, -2.8823e+00, -1.5599e+00, -1.3841e+00, -3.1316e+00,
# -1.3819e+00, -1.4931e+00],
# [-2.1313e+00, 1.1725e+01, -2.2336e+00, -1.6570e+00, -9.9801e-01,
# -9.7593e-01, -2.3810e+00],
# [-2.0532e+00, -1.4382e+00, 8.9992e+00, -1.4494e+00, -1.3441e+00,
# 1.9819e-01, -1.8532e+00],
# [ 3.4401e+00, -2.9372e+00, 1.6621e+00, 1.5478e+00, -4.4614e+00,
# -7.5508e-01, 1.1595e+00],
# [ 4.2103e-01, -2.8174e+00, 7.1775e+00, -3.2325e-01, -3.4736e+00,
# 7.0342e-03, -2.3290e-01],
# ...
# [ 1.1441e+01, -2.6780e+00, -1.7298e+00, -1.5472e+00, -2.8277e+00,
# -1.3263e+00, -1.9278e+00],
# [-2.0267e+00, -3.3193e+00, -1.7481e+00, -2.2055e+00, -3.3961e+00,
# -6.6399e-01, 9.4623e+00]]])
# tensor([[3, 3, 6, 6, 6, 0, 0, 0, 1, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 6]])
print(model.config.id2label) # ๋ชจ๋ธ์ ๋ผ๋ฒจ ์ ๋ณด
# {0: 'O', 1: 'SEX-B', 2: 'AGE-B', 3: 'LOC-B', 4: 'SEX-I', 5: 'AGE-I', 6: 'LOC-I'}
print(logits[0,0], 'argmax =',np.argmax(logits[0,0])) # 'bos_token' -> 'LOC-B'
print(logits[0,1], 'argmax =',np.argmax(logits[0,1])) # '์์ธํน๋ณ์' -> 'LOC-B'
print(logits[0,2], 'argmax =',np.argmax(logits[0,2])) # '๊ฐ๋จ๊ตฌ' -> 'LOC-I'
print(logits[0,3], 'argmax =',np.argmax(logits[0,3])) # '์ธ' -> 'LOC-I'
print(logits[0,4], 'argmax =',np.argmax(logits[0,4])) # '##๊ณก๋' -> 'LOC-I'
# ๋ค์๊ณผ ๊ฐ์ด ํ ํฐ๋ณ๋ก ์์ธก ๋๋๊ฒ์ ํ์ธํ ์ ์์
# tensor([-0.1064, -2.3128, -0.9802, 2.9688, -3.6005, -0.2842, 1.9760]) argmax = tensor(3)
# tensor([-2.6486, -1.9731, -2.2968, 10.1791, -2.4592, -0.5823, -1.3004]) argmax = tensor(3)
# tensor([-2.0368, -3.3225, -1.7676, -2.2002, -3.3691, -0.6638, 9.4754]) argmax = tensor(6)
# tensor([-2.0584, -3.3303, -1.7535, -2.1740, -3.3938, -0.6695, 9.4550]) argmax = tensor(6)
# tensor([-2.0432, -3.3191, -1.7638, -2.1874, -3.3828, -0.6695, 9.4682]) argmax = tensor(6)
- ๊ฐ์ฒด๋ช
์ธ์์ ์ต์ข
ํ ํฐ์ ๋ํ ๊ฐ์ฒด๋ช
์ ์ธ์์ ์์ด์ B์ I์ ๋ํ suffix์ ์ ํ๋๋ฅผ ์ฌ๋ฆฌ๊ธฐ ์ํด์๋ deep learning๋ชจ๋ธ์ ๋ฏธ์ธ์กฐ์ ์ CRF(Conditional Random Field)๋ ์ด์ด๋ฅผ ์ถ๊ฐํด์ ํน์ ํ ํฐ์ ๊ฐ์ฒด ๋ค์์ ์ค๋ ๊ฐ์ฒด์ suffix๋ฅผ ๋ณด์ํด์ค ์ ์๋ ๋ฉ์ปค๋์ฆ์ ์ถ๊ฐ๋ก ํ์ต ๊ฒฐ๊ณผ๊ฐ ๋ ์ข๊ฒ ๋์ฌ ์ ์์ ๊ฑฐ๋ผ๋ ์๊ฐ์ด ๋ฆ
- ์ฌ๊ธฐ์ ์คํ์ด ํ์ํจ
- CRF ์ ์ฉ / ๋ฏธ์ ์ฉ ์ฑ๋ฅ๋น๊ต ํ์
- ๋ฐ์ดํฐ์ : 119-ner
- ๋ชจ๋ธ : ELECTRA / RoBERTa
๊ฐ ํ ํฐ๋ณ ๊ฐ์ฒด์ ๋ถํฌ๋ฅผ ๋ณด๊ธฐ (์: ์ค๋ ์์ธ์ ๋ ์จ๋ -> ์ค๋[TIM] ์์ธ[LOC] ##์[LOC] ๋ ์จ[WHT] ##๋) ์ด๋ฉด [TIM] : 1, [LOC] : 2, [WHT] : 1 ์ด๋ฐ์์ผ๋ก ๊ฐ๊ฐ์ TOKEN CLASSIFICATION์ด ์ํํด์ผํ ๋ถํฌ์ ๋ํด ์ดํด๋ณด๊ธฐ
- torch.nn.CrossEntropyLoss
- torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='mean', label_smoothing=0.0) ํ์ต ํ์ดํ๋ผ์ธ์์ -100์ด ๋ค์ด๊ฐ๋ ์ด์
- ๊ฐ์ค์น๋ฅผ ๊ฐ๊ฐ์ ํด๋์ค์ ํ ๋นํ๋ฏ๋ก ๋ถ๊ท ํํ ํ์ต์ ์ ํ์ตํ ๋ ์ฉ์ดํ๋ค.
ELECTRA, RoBERTa์ ์ฑ๋ฅ๋น๊ต์งํ ELECTRA+CRF, RoBERTa+CRF์ ์ฑ๋ฅ๋น๊ต์งํ
| Naver NER | ํ๊ตญํด์๋ํ๊ต | KLP NER | EXOBRAIN | KLUE | ์ ์ | ๊ธด๊ธ์ ๊ณ ์ ์ | ๊ตญ๋ฆฝ๊ตญ์ด์ | ํ๊ตญ์ ๋ณดํต์ ํํ(TTA) | ์ํํํ์ ํ | ์์ด๋์ด | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ๋ ์ง | 12์31์ผ | DAT | DAT | DAT | DAT | DAT | DAT | DAT | DT | DT | ||
| ์ฅ์ | ์์ธํน๋ณ์ ์ฑ์๋ 1๊ฐ | LOC | LOC | LOC | LOC | LOC | LOC | LOC | LOC | LC | LC | |
| ๊ธฐ๊ด/๋จ์ฒด | ํ๊ต๋ช | ORG | ORG | ORG | ORG | ORG | ORG | ORG | ORG | OG | OG | |
| ์ฌ๋/์ด๋ฆ | ๊น์ง์, ๊ฒฝ์ฐฐ๊ด, ์์ฌ | PER | PER | PER | PER | PER | PER | PER | PER | PS | PS | |
| ์๊ฐ | 12์30๋ถ | TIM | TIM | TIM | TIM | TIM | TIM | TIM | TIM | TI | TI | |
| ์๋ | ๋ช ๊ฐ, ๋ช ๋ช , ํ ์ฌ๋ | QTY | QTY | QTY | QT | QT | ||||||
| ๊ธฐํ ์๋ | NOH | NOH | NUM | |||||||||
| ์ํ | ์ํ๋ช | BNK | ||||||||||
| ๋ณ์ | ๋ณ์๋ช | HOS | ||||||||||
| ๋ณ๋ช | ์ฝ๋ก๋, ๊ฐ๊ธฐ | DIS | ||||||||||
| ํ์ฌ | ํ์ฌ๋ช | CMP | ||||||||||
| ํ๋ฌธ ๋ถ์ผ | FLD | FLD | FD | |||||||||
| ์ธ๊ณต๋ฌผ | ์ฌ๋์ด ๋ง๋ ๋ฌผ๊ฑด: ์ฑ , ๋ฌด๊ธฐ, ๋ฑ๋ฑ | AFW | AFW | AF | ||||||||
| ๋ฌธํ์ฉ์ด | CVL | CVL | CV | |||||||||
| ์ซ์ | NUM | |||||||||||
| ์ฌ๊ฑด | EVT | EVT | EV | |||||||||
| 119์ฌ๊ฑด | SIT | |||||||||||
| ๋๋ฌผ | ANM | ANM | AM | |||||||||
| ์๋ฌผ | PLT | PLT | PT | |||||||||
| ๊ธ์/ํํ๋ฌผ์ง | MAT | MAT | MT | MT | ||||||||
| ์ฉ์ด | TRM | TRM | TM | |||||||||
| ๊ธฐํ๊ณ ์ ๋ช ์ฌ | POH | |||||||||||
| ๊ธฐ๊ฐ | ๋ช์ผ ๋์, 3์ผ๋์ | DUR | ||||||||||
| ํตํ | ์, ๋ฌ๋ฌ | MNY | ||||||||||
| ๋น์จ | %, ๋ชํผ | PNT | ||||||||||
| ์์์ก์ฒด(๋ง์ค๊ฒ) | FDL | |||||||||||
| ์์๊ณ ์ฒด(๋จน์๊ฒ) | FDS | |||||||||||
| ๋ ์จ | WHT | |||||||||||
| ์ด๋ก | THR | TR | ||||||||||
| ๋ธ๋๋ | BR | |||||||||||
| ๋ชจ๋ธ๋ช | MN | |||||||||||
| ์ ํํ์ | PT | |||||||||||
| ๋ชจ์ํ์ | ST | |||||||||||
| ์ ์ ๊ฒฝ๋ก | IR | |||||||||||
| ๋ฐฉํฅ,์ชฝ,๋ฐฉ๋ฉด | DIR | |||||||||||
| ์ธก์ ๊ธธ์ด ๋์ด | ๋ช ๋ฏธํฐ ๋ฑ | MET | ||||||||||
| ์ํ๋ฌผ์ง | DAN |
- klue-benchmark
- songys-๊ฐ์ฒด๋ช ์ธ์
- ๋ํํ ๊ฐ์ธ ๋น์ ์์คํ ์ ์ธ์ด ์ธ์ ๋ชจ๋์ ์ํ ๊ฐ์ฒด๋ช ๋ฐ ๋ฌธ์ฅ๋ชฉ์ ๋์ ์ธ์ ๋ฐฉ๋ฒ
- ์ฌ์ ํ์ต ์ธ์ด๋ชจ๋ธ์ ํ์ฉํ ๋ฒ์ฃ์์ฌ ๋๋ฉ์ธ ๊ฐ์ฒด๋ช ์ธ์
- ํจ์จ์ ๋ํ ์ ๋ณด ์์ธก์ ์ํ ๊ฐ์ฒด๋ช ์ธ์ ์ฐ๊ตฌ
- K-ICT ๋น ๋ฐ์ดํฐ์ผํฐ
- ํ๊ตญ์ด ๋ํ
- ์์๊ณต์ธ ๊ณ ๊ฐ ์ฃผ๋ฌธ ์ง์-์๋ต ํ ์คํธ
- AwesomeKorean_Data


