Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

데이터 오류 #2

Open
dsindex opened this issue Oct 18, 2019 · 3 comments
Open

데이터 오류 #2

dsindex opened this issue Oct 18, 2019 · 3 comments

Comments

@dsindex
Copy link

dsindex commented Oct 18, 2019

데이터를 보면 두번째, 세번째 필드에 오류가 있는 경우가 있습니다.
세번째 tags 필드의 시작이 '+'인 경우에 태그가 빠져있어서 살펴보니,
대략 아래와 같은 규칙으로 교정이 가능해보였습니다.

if tags[0] == '+':
                if morphi == '봤':
                    morphs = '보+았'
                    tags   = 'VV+EP'
                if morphi == '됐':
                    morphs = '되+었'
                    tags   = 'VV+EP'
                if morphi == '되':
                    morphs = '되'
                    tags   = 'VV'
                if morphi == '했':
                    morphs = '하+였'
                    tags   = 'VV+EP'
                if morphi == '했었':
                    morphs = '하+였었'
                    tags   = 'VV+EP'
                if morphi == '왔':
                    morphs = '오+았'
                    tags   = 'VV+EP'
                if morphi == '왔었':
                    morphs = '오+았었'
                    tags   = 'VV+EP'
                if morphi == '와':
                    morphs = '오+아'
                    tags   = 'VV+EC'
                if morphi == '와야':
                    morphs = '오+아야'
                    tags   = 'VV+EC'
                if morphi == '와서':
                    morphs = '오+아서'
                    tags   = 'VV+EC'
                if morphi == '컸':
                    morphs = '크+었'
                    tags   = 'VA+EP'
                if morphi == '커서':
                    morphs = '크+어서'
                    tags   = 'VA+EC'
                if morphi == '커':
                    morphs = '크+어'
                    tags   = 'VA+EC'
                if morphi == '줬':
                    morphs = '주+었'
                    tags   = 'VV+EP'
                if morphi == '졌':
                    morphs = '지+었'
                    tags   = 'VX+EP'
                if morphi == '써야':
                    morphs = '쓰+어야'
                    tags   = 'VV+EC'
                if morphi == '써서':
                    morphs = '쓰+어서'
                    tags   = 'VV+EC'
                if morphi == '써':
                    morphs = '쓰+어'
                    tags   = 'VV+EC'
                if morphi == '써도':
                    morphs = '쓰+어도'
                    tags   = 'VV+EC'
                if morphi == '썼':
                    morphs = '쓰+었'
                    tags   = 'VV+EP'
                if morphi == '쐈':
                    morphs = '쏘+았'
                    tags   = 'VV+EP'
                if morphi == '꿨':
                    morphs = '꾸+었'
                    tags   = 'VV+EP'
                if morphi == '쳤':
                    morphs = '치+었'
                    tags   = 'VV+EP'
                if morphi == '췄':
                    morphs = '추+었'
                    tags   = 'VV+EP'
                if morphi == '놨':
                    morphs = '노+았'
                    tags   = 'VV+EP'
                if morphi == '겠':
                    morphs = '겠'
                    tags   = 'EP'
                if morphi == '퍼':
                    morphs = '푸+어'
                    tags   = 'VV+EC'
                if morphi == '뒀':
                    morphs = '두+었'
                    tags   = 'VV+EP'
                if morphi == '꼈':
                    morphs = '끼+었'
                    tags   = 'VV+EP'
                if morphi == '떴':
                    morphs = '뜨+었'
                    tags   = 'VV+EP'
                if morphi == '떠':
                    morphs = '뜨+어'
                    tags   = 'VV+EC'
...
@ho-lol
Copy link
Contributor

ho-lol commented Nov 12, 2019

안녕하세요 한국해양대학교 자연언어처리연구실입니다.

위의 오류를 인지하고 있으며 이후에 음절과 형태소 별로 따로 올리도록 하겠습니다.

이 이슈는 다른사람이 보면 좋을 것 같아서 오픈해놓도록하겠습니다.

이후에 음절과 형태소 별로 올리면 이 이슈는 닫도록하겠습니다.

감사합니다.

@dsindex
Copy link
Author

dsindex commented Mar 17, 2020

@ho-lol

https://github.com/eagle705/pytorch-bert-crf-ner
이 프로젝트에서 학습/평가로 사용했던 방법과 동일하게 학습/평가 데이터를 구성하고,
형태소 단위로 교정/변환하는 스크립트를 만들었습니다.

https://github.com/dsindex/ntagger#requirements

스크린샷 2020-03-17 오후 4 42 56

이렇게 만든 데이터를 대상으로 NER 모델을 학습/평가한 결과는 아래와 같습니다.
https://github.com/dsindex/ntagger#kmou-ner-2019-korean

* 현재까지 최고 성능
model : ELMo, Glove, BiLSTM-CRF
features : morph, character, pos
span-level(by conlleval) F1 : 89.09
token-level F1 : 89.90

<참고> NAVER NER 2019 결과
https://github.com/dsindex/ntagger#naver-ner-2019-korean

* 현재까지 최고 성능
model : ELMo, Glove, BiLSTM-CRF
features : morph, character, pos
span-level(by conlleval) F1 : 86.75

* KoBERT : 84.23
  HanBert : 84.84

* NAVER NER 데이터의 경우는 첫번째 형태소에 의존적으로 어절의 NER 태그를 결정하는 문제가 있어서, 
  형태소 단위로 변환해서 학습하고 어절의 첫번째 형태소를 어절의 NER 태그로 판단하면 성능이 높아지는 
  bias가 있습니다. Glove+ELMo가 BERT보다 좀더 좋기는 하지만, 이정도 차이가 나는 원인은 그것입니다.

@ho-lol
Copy link
Contributor

ho-lol commented Mar 17, 2020

안녕하세요.
한국해양대학교 자연언어처리연구실입니다.

저희 말뭉치를 형태소 단위로 교정/변환하는 데 관심을 가져주셔서 감사합니다.

현재 실험실 내부에서도 해당 이슈와 관련하여 음절 및 형태소 단위의 말뭉치를 정제하고 있습니다.
또한 미등록어에 대한 처리 능력을 향상시키기 위해 형태소 분석 결과를 바탕으로 수정하는 작업도 함께 진행하고 있습니다.
두 작업 모두 수작업으로 진행하고 있어 조금 더 시간이 걸릴 것으로 예상되나,
수정 및 배포된 말뭉치를 사용하면 한국어 개체명 인식 성능 향상에 기여하는 바가 클 것으로 기대하고 있습니다.

또한, 향후 실험실에서 공개적으로 훈련/평가/검증 말뭉치를 분할하여 배포할 계획이며,
이를 기준으로 여러 모델에 대한 객관적인 평가가 진행될 수 있을 것입니다.

다시 한번 KMOU 개체명 말뭉치와 변환 스크립트 작성에 관심을 가져 주셔서 감사합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants