3. 1. 개요
Ⅰ. 개요
배경
− NER을 하기 위해서는 단순히 DNN 알고리즘 구현을 하는 것 외에 Tagging 결과를 Entity별로 성능을 확인할
수 있는 모듈을 필요로 합니다. 또한 예측된 결과의 Entity 정보를 포함하는 JSON 형태와 같은 구조화된
결과를 도출할 수 있어야 합니다.
− Python, Keras, Bidirectional-LSTM으로 되어 있는 오픈소스 ANAGO를 활용 한글데이터에 적용하여 경량의
솔루션을 찾고자 함.
Keras 기반 오픈소스를 ANAGO를 이용한 한글 NER 의 개요를 소개합니다.
4. 2. Tagging
Ⅰ. 개요
Character 기반 BIO Tagging
아 B-LC
프 I-LC
가 I-LC
니 I-LC
스 I-LC
탄 E-LC
의 O
O
활용된 Tagging 형식을 소개 합니다.
Location Entity의 시작
Location Entity의 마지막
5. 3. Class 구성
Ⅰ. 개요
데이터 구성
학습 및 테스트에 사용된 데이터 셋 구성을 소개합니다.
Entity Tag Name Entity Logical Name TRAIN SET TEST SET
DT 날짜 472 131
TI 시간 64 11
OG 기관 533 154
LC 위치 473 210
6. 4. 모델 작성 시 고려 사항
Ⅰ. 개요
고려사항
− 영어 텍스트 기반 NER에서는 word 기반 내지는 word + character 기반으로 라벨링 및 모델을 만들면 됨.
하지만 한글 기반 NER은 단어기반으로 하기가 어려움.
− [ 문제점 ] 이름을 Entity로 식별한다고 하면 “최순실은 국정 농단을 저질렀다". 에서 "최순실/은/으로"
구분되면 좋은데, 최/순실은 또는 최순/실은 등 tokenizer에 따라 다양하게 나뉘게 됨. 즉 Entity의 종류 및
tokenizer의 종류에 따라 달라 token이 달라지게 됨. 이는 학습 및 성능에 매우 부정적인 영향을 미치게 됨.
− [ 방향 1 ] tagging을 할때 결국은 문자열 중에서 character 기반으로 하는 것이 합리적. “최순실은 국정농단을
저질렀다“ 같으면 최(B-NM)순(I-NM)실(E-NM)은(O) 국(O)정(O)농(O)단(O)을(O)... 와 같이 tagging의 결과가
나오게 됨.
− [ 방향 2 ] NER의 성능은 character 단위가 아니라 객체(Entity) 단위로 성능이 측정되어야 함. 즉 후처리로
객체 단위로 Detecting 여부를 식별하고 객체 단위로 Multi-Class 기준의 성능결과가 나와야 함!!!
− 임베딩 방식 및 알고리즘의 선택 이전에 위의 방향1, 방향2가 기본적으로 가능해야 함.
NER 에 한글 대상 적용 시 고려 사항을 소개합니다.
7. 5. ANAGO 소개
Ⅰ. 개요
Anago 소개
− Bidirectional LSTM 기반으로 작성이 되어 있음.
− word 기반에서는 다양하게 적용할 수 있는 옵션들에 제공됨.
− CRF 적용 여부
− WORD + Character 동시 적용
− word embedding 선택적으로 적용 등.
− https://github.com/Hironsan/anag
Python, Keras 기반 오픈소스 ANAGO를 소개합니다.
8. 6. 예측 결과 예시
Ⅰ. 개요
한글 적용 성능 결과 및 예측 예시를 소개 합니다. 오탈자가 있어도 잘 식별 합니다.
예측 예1
입력 데이터 :아프니스칸의 장래를
출력 결과 :
{'words': ['아', '프', '니', '스', '칸', '의', ' ', '장', '래', '를'],
'entities': [{'text': '아 프 니 스 칸',
'type': 'LC',
'score': 0.9482332468032837,
'beginOffset': 0,
'endOffset': 5}]}
예측 예2 ( 오탈자 )
입력 데이터 : 아프니스탄의 장래를
출력 결과 :
{'words': ['아', '프', '니', '스', '탄', '의', ' ', '장', '래', '를'],
'entities': [{'text': '아 프 니 스 탄',
'type': 'LC',
'score': 0.9648435711860657,
'beginOffset': 0,
'endOffset': 5}]}