Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

3 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

NER(๊ฐœ์ฒด๋ช…์ธ์‹)์‚ฌ์ „์— ๋Œ€ํ•œ ์ •๋ฆฌ

๋ช…๋ช…

(ํ•œ) ๊ฐœ์ฒด๋ช… ์ธ์‹, (์˜) named entitiy recognition,(์ผ) ๅ›บๆœ‰่กจ็พๆŠฝๅ‡บ (์ค‘) ๅ‘ฝๅๅฎžไฝ“่ฏ†ๅˆซ

๊ฐœ์ฒด๋ช… ์ธ์‹๊ณผ ๊ฐœ์ฒด๋ช… ๋ง๋ญ‰์น˜ ๊ตฌ์ถ•

NER ์ด๋ž€

๋ฌธ๋งฅ์„ ํŒŒ์•…ํ•ด์„œ ์ธ๋ช…, ๊ธฐ๊ด€๋ช…, ์ง€๋ช… ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฌธ์žฅ ๋˜๋Š” ๋ฌธ์„œ์—์„œ ํŠน์ •ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‹จ์–ด ๋˜๋Š” ์–ด๊ตฌ๋ฅผ ์ธ์‹ํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•จ

  • ์งˆ์˜ ์‘๋‹ต ์‹œ์Šคํ…œ๊ณผ ์ •๋ณด ๊ฒ€์ƒ‰ ๋ถ„์•ผ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ์ •๋ณด ์ถ”์ถœ์˜ ํ•œ ๋ถ„์•ผ

  • ๋ฌธ์„œ๋‚˜ ๋ฌธ์žฅ ๋‚ด์—์„œ ๊ฐœ์ฒด๋ช…์„ ์ถ”์ถœํ•˜๊ณ  ์ถ”์ถœ๋œ ๊ฐœ์ฒด๋ช…์˜ ์ข…๋ฅ˜๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ž‘์—… abtNER

  • ๊ฐœ์ฒด๋ช… ์ธ์‹(Named Entity Recognition, ์ดํ•˜ NER)์ด๋ผ๊ณ  ํ•˜์ง€๋งŒ ๊ฐœ์ฒด๋ช…์„ ์ธ์‹ํ•˜๋Š” ๊ณผ์ œ๋ผ๊ธฐ ๋ณด๋‹ค๋Š” ๋ฌธ์ž์—ด์—์„œ ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ฐœ์ฒด๋ช… ํƒ€์ž…์— ๋Œ€ํ•ด ๊ฐœ์ฒด๋ช…์˜ ๊ฒฝ๊ณ„๋ฅผ ํƒ์ง€ํ•˜๊ณ  ํ•ด๋‹นํ•˜๋Š” ํƒ€์ž…์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ง๋ญ‰์น˜๋ฅผ ๊ตฌ์ถ•ํ•จ

  • ์ž์—ฐ์–ด์ฒ˜๋ฆฌ ์ค‘ ์ •๋ณด ์ถ”์ถœ ๊ณผ์ œ์˜ ํ•˜๋‚˜๋กœ ์ฃผ๋กœ ์ƒํ˜ธ ์ฐธ์กฐ(coreference resolution), ๊ด€๊ณ„ ์ถ”์ถœ(relation extraction), ์‚ฌ์ „ ์ถ”์ถœ, ์‹œ๊ฐ„ ํ‘œํ˜„ ๋“ฑ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋จ

    • ํ•œ๊ตญ์–ด ๊ฐœ์ฒด๋ช… ๋ฐ์ดํ„ฐ ๊ตฌ์ถ•์„ ์œ„ํ•œ ์ง€์นจ์€ TTA ํ‘œ์ค€์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์œผ๋‚˜ 2020๋…„๊ณผ 2021๋…„์— ๊ณต๊ฐœ๋œ ๋ชจ๋‘์˜ ๋ง๋ญ‰์น˜์—์„œ๋Š” ์‹ ๋ฌธ์„ ์ค‘์‹ฌ์œผ๋กœ ํ•˜๋Š” ๋ฌธ์–ด ์™ธ์—๋„ ์›น ๋“ฑ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์–ด์ฒด ๋ง๋ญ‰์น˜ ํƒœ๊น…์„ ์œ„ํ•ด ๊ฐœ์ฒด๋ช…์˜ ํƒ€์ž… ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํŽญ์ˆ˜์™€ ๊ฐ™์€ ์บ๋ฆญํ„ฐ, ๊ฐ•์•„์ง€ ์ด๋ฆ„ ๋“ฑ์„ ํƒœ๊น…ํ•˜๊ธฐ ์œ„ํ•ด PS_CHARACTER, PS_PET ๋“ฑ์ด ์ถ”๊ฐ€๋œ ๊ฒƒ์ด ์ด๋Ÿฌํ•œ ํŠน์ง•์„ ๋ฐ˜์˜ํ•œ๋‹ค.

์—ญ์‚ฌ

  • ๊ฐœ์ฒด๋ช… ์ธ์‹์€ ์ •๋ณด ์ถ”์ถœ์˜ ๋ชฉ์ ์œผ๋กœ ๊ฐœ์ตœ๋˜๋˜ MUC-6 (Message Understanding Conference)์—์„œ ์ฒ˜์Œ์œผ๋กœ ์ •์˜๋˜๊ณ  ๋ณธ๊ฒฉ์ ์œผ๋กœ ์—ฐ๊ตฌ๋˜๊ธฐ ์‚ฌ์ž‘ํ•ด, ์‚ฌ๋žŒ, ์กฐ์ง, ์žฅ์†Œ, ์‹œ๊ฐ„, ํ†ตํ™”, ๋ฐฑ๋ถ„์œจ์˜ ํ‘œํ˜„๋“ค์„ ํ…์ŠคํŠธ๋กœ ์ธ์‹ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง„ํ–‰๋จ. eng_ner_hist
  1. 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์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. ์ดํ›„ CoNLL(2002, 2003) shared task์—์„œ Language-Independent Named Entity Recognition ๊ณผ์ œ๊ฐ€ ์ด๋ฃจ์–ด์กŒ๋‹ค.

๊ฐœ์ฒด๋ช… ์ธ์‹์€ ํฌ๊ฒŒ 3๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์—ฐ๊ตฌ๋จ

  1. ๊ทœ์น™ ๊ธฐ๋ฐ˜
  • ์ •๊ทœํ‘œํ˜„์‹
  • ์ž์—ฐ์–ด ํŠน์ง•์„ ์ด์šฉํ•œ ๊ทœ์น™๊ณผ ์‚ฌ์ „ ์ •๋ณด์‚ฌ์šฉ
  1. ํ†ต๊ณ„๊ธฐ๋ฐ˜์˜ ๊ธฐ๊ณ„ ํ•™์Šต ๋ฐฉ๋ฒ•
  • Hidden Markov Model
  • Maximum Entropy Model
  • Conditional Random Fields
  • Decision Tree
  1. ๊ทœ์น™ ๊ธฐ๋ฐ˜ ๋ฐ ๊ธฐ๊ณ„ํ•™์Šต
  • ๊ทœ์น™ ๊ธฐ๋ฐ˜๊ณผ ๊ธฐ๊ณ„ํ•™์Šต์„ ํ˜ผํ•ฉํ•จ์œผ๋กœ ๋” ํ–ฅ์ƒ๋œ ์„ฑ๋Šฅ์„ ๋ณด์˜€์Œ

CORPUS
CoNLL-2002 NER corpus
QUICK PEEK conll2013

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

๊ณต๊ฐœ๋œ ํ•œ๊ตญ์–ด NER ๋ง๋ญ‰์น˜ ๋ฐ์ดํ„ฐ

  1. HLCT 2016์—์„œ ์ œ๊ณตํ•œ ๋ฐ์ดํ„ฐ ์„ธํŠธ ์›๋ณธ์˜ ์ผ๋ถ€ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๊ณต๊ฐœํ•œ ๋ง๋ญ‰์น˜
  1. ํ•œ๊ตญ์–ด ๊ฐœ์ฒด๋ช… ์ •์˜ ๋ฐ ํ‘œ์ง€ ํ‘œ์ค€ํ™” ๊ธฐ์ˆ ๋ณด๊ณ ์„œ์™€ ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์ž‘๋œ ๊ฐœ์ฒด๋ช… ํ˜•ํƒœ์†Œ ๋ง๋ญ‰์น˜
  1. aihub์—์„œ ์‚ฌ์šฉ์ž ์˜๋„๊ฐ€ ๋ฐ˜์˜๋œ ๊ฐœ์ฒด(Entity)๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์‹œ์†Œ๋Ÿฌ์Šค ๋ฐ ์†Œ์ƒ๊ณต์ธ, ๊ณต๊ณต๋ฏผ์› ๋ถ„์•ผ๋ฅผ ์œ„ํ•ด ๊ตฌ์ถ•ํ•œ ๋ฐ์ดํ„ฐ
    QUICK PEEK aihub_data_img

ํ•œ๊ตญ์–ด ๊ฐœ์ฒด๋ช… ๋ง๋ญ‰์น˜์˜ ๋ฐฉํ–ฅ

  • ํฌ๋ฉง์ด ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•˜๊ณ  ์‚ฌ์šฉ ์˜ˆ์‹œ๊ฐ€ ๋ถ„๋ช…ํ•œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋˜๊ณ  ์žˆ์Œ
  • ๊ฐœ์ฒด๋ช… ํƒœ๊ทธ์˜ ์ข…๋ฅ˜๊ฐ€ ๋‹ค์–‘ํ•ด์ง€๊ณ  ๋‹ค์–‘ํ•œ ๋„๋ฉ”์ธ์—์„œ๋„ ์œ ์—ฐํ•˜๊ฒŒ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์„ ๋ชจ์ƒ‰ํ•˜๋Š” ์ค‘

๊ฐœ์ฒด๋ช… ๋ง๋ญ‰์น˜ ๊ตฌ์ถ•์˜ ์–ด๋ ค์›€

  • ๊ฐœ์ฒด๋ช… ์ธ์‹์„ ์œ„ํ•œ ๋ง๋ญ‰์น˜ ๊ตฌ์ถ•์ด ์–ด๋ ค์šด ์ด์œ ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ์ฒด๋ช…์ด ๊ณ„์† ๋งŒ๋“ค์–ด์ง€๊ณ  ์žˆ์–ด์„œ ์™„์„ฑ๋œ ์‚ฌ์ „์„ ๊ฐ€์ง€๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๊ฐ™์€ ๋‹จ์–ด๋ผ๋„ ์‚ฌ์šฉ๋˜๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ ํ•ด์„๋˜๋Š” ์ค‘์˜์„ฑ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„ธ๋ถ„๋ฅ˜ ํƒœ๊น…๋ณด๋‹ค ๋Œ€๋ถ„๋ฅ˜ ํƒœ๊น…์ด, ๊ฐœ์ฒด๋ช…์˜ ๋ถ„๋ฅ˜ ํƒ€์ž…์„ ๊ทœ์ •ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฒฝ๊ณ„๋ฅผ ํƒ์ง€(์ŠคํŒฌ ์„ค์ •)ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚œ์ด๋„๊ฐ€ ๋†’์€ ๊ณผ์ œ๋กœ ์—ฌ๊ฒจ์ง„๋‹ค. ๊ฐ€๋ น <์„œ์šธ ํŒจ์…˜ ์œ„ํฌ:EV_FESTIVAL> ์—์„œ ์„œ์šธ์€ ๋ถ„๋ฆฌํ•ด์„œ ๋„์‹œ๋กœ ํƒœ๊น…ํ•˜์ง€ ์•Š๊ณ  ํŒจ์…˜ ์œ„ํฌ์˜ ํ•˜์œ„ ์ด๋ฒคํŠธ๋กœ ํŒ๋‹จํ•˜์—ฌ ํ•œ๊บผ๋ฒˆ์— ํƒœ๊น…ํ•œ๋‹ค.

open domain ๋˜๋Š” closed domain

  • ๋„๋ฉ”์ธ์„ ๊ตฌ๋ถ„ ํ•˜๋Š” ์ด์œ  ์—ญ์‹œ ์‰ฝ๊ฒŒ ์ค‘์˜์„ฑ์„ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด์„œ
    • '์—ฌ์ž ์นœ๊ตฌ'์˜ ์—ฌ๋ฆ„์—ฌ๋ฆ„ํ•ด'๋ผ๋Š” ๊ณก์ด ์žˆ๋‹ค๋ฉด ์‚ฌ์ „์  ์˜๋ฏธ๋กœ๋Š” ์˜ฌ๋ฐ”๋ฅธ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜๋„ ์žˆ๋‹ค.

    • ์ด๋ฅผ ๋Œ€์ค‘ ๊ฐ€์š”๋ผ๋Š” closed domain์— ๊ฐ€์ˆ˜์™€ ๊ณก๋ช…์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ ๊ฐœ์ฒด๋กœ ํƒœ๊น…ํ•ด ์ฃผ๋ฉด ๋น ๋ฅด๊ฒŒ ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

    • ๋˜ํ•œ, ๋ณ‘์›์˜ ์ฐจํŠธ, ๋ฒ•์› ๋…น์ทจ๋ก ๋“ฑ์€ ํŠน์ •ํ•œ ๋ชฉ์ ์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„๋กœ ๊ตฌ์ถ•ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ˆ˜์˜ ์ „๋ฌธ ์šฉ์–ด๋“ค์ด ํŠน์ •ํ•œ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋˜๊ฒŒ ๋œ๋‹ค.

      • ์•„์Šคํ”ผ๋ฆฐ๊ณผ ๊ฐ™์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์ด ์“ฐ์ด๋Š” ์šฉ์–ด๋„ ์žˆ์ง€๋งŒ, ๋Œ€์ฒด๋กœ๋Š” ํŠน์ •ํ•œ ์šฉ์–ด๋ฅผ ๊ฐœ์ฒด๋กœ ํƒœ๊น…ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ์ดํ„ฐ ๊ตฌ์ถ•์‹œ ์ฃผ์š” ์ž‘์—…์ผ ๊ฒƒ์ด๋‹ค.
      • ์ด ๋•Œ ๊ฒฐ๊ณผ๋ฌผ์€ ๊ฐœ์ฒด๋ช…๊ณผ ๋ฒ”์ฃผ๋กœ ์ด๋ฃจ์–ด์ง„ ์‚ฌ์ „ ๋˜๋Š” ํƒœ๊น…๋œ ๋ฌธ์„œ๊ฐ€ ๋œ๋‹ค.

NER์˜ ํƒœ๊น… ์‹œ์Šคํ…œ

ner_tagging_sys ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 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] ๊ฐœ์ฒด๋ช… ์ธ์‹ ๋ชจ๋ธ ์ถ”๋ก  ๊ฒฐ๊ณผ

infer_ner

์ถ”๋ก  ์˜ˆ์‹œ

ner_example

token classification ์‚ดํŽด๋ณด๊ธฐ

  • 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)

์„ฑ๋Šฅ

model_cmp

  • ๊ฐœ์ฒด๋ช… ์ธ์‹์˜ ์ตœ์ข… ํ† ํฐ์— ๋Œ€ํ•œ ๊ฐœ์ฒด๋ช…์˜ ์ธ์‹์— ์žˆ์–ด์„œ 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์ด ์ˆ˜ํ–‰ํ•ด์•ผํ•  ๋ถ„ํฌ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ธฐ

TOKEN CLASSIFICATION ์€ CROSS ENTROPY LOSS๋ฅผ ์‚ฌ์šฉ

  • 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

์ฐธ๊ณ ๋ฌธํ—Œ

๋ฐ์ดํ„ฐ

์˜จ๋ผ์ธ ํด๋ž˜์Šค

ํ‚ค๋…ธํŠธ

๊ทธ์™ธ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์•„๋ณด์ด๋Š”..

About

Named Entity Recognition

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors