-
한국어 NER 시작하기 - flair 사용방법프로그래밍/자연어처리 2024. 8. 23. 18:21728x90반응형
최근에 진행하는 프로젝트에서 다양한 태그(사람, 회사, 조직 등)를 지원하면서 성능이 좋은 한국어 NER 모델이 필요해졌습니다.
최근에 나온 NER 모델 위주로 사용방법과 성능 관련 내용을 정리해보겠습니다.
Flair 소개
Flair는 자연어 처리(NLP) 작업을 간단하고 직관적으로 수행할 수 있도록 하는 Python 기반의 라이브러리입니다.
문장 임베딩(sentence embeddings), 이름된 엔티티 인식(NER), 텍스트 분류(text classification), 품사 태깅(POS tagging) 등의 작업을 지원합니다.
성능이 괜찮고 사용이 간단하다고 해서 사용해봤습니다.
https://github.com/flairNLP/flair
Flair 설치
설치는 간단합니다.
pip install flair
ner사용하기
from flair.data import Sentence from flair.nn import Classifier # make a sentence sentence = Sentence('I love Berlin .') # load the NER tagger #tagger = Classifier.load('ner') tagger = Classifier.load('ner-large') # run NER over sentence tagger.predict(sentence) # print the sentence with all annotations print(sentence)
모델 로딩과 사용방법도 간단합니다.
ner 모델은 419메가이고 ner-large 모델은 2.24기가네요
ner-large 모델이 다국어를 지원하는데 성능 비교를 위해 우선 두 개 다 써보겠습니다.
sentence()에 입력된 문장에서 장소(LOC)를 인식합니다.
"I love Berlin ." → ["Berlin"/LOC]
한국어로도 테스트해보겠습니다.
ner: Sentence[6]: "나는 서울 역삼동에 있는 삼성전자에 다니고있어" -> 결과 없음
ner-large: Sentence[6]: "나는 서울 역삼동에 있는 삼성전자에 다니고있어" → ["서울"/LOC, "역삼동에"/LOC, "삼성전자에"/ORG]확실히 ner-large 모델이 다국어를 지원해서 성능이 좋네요.
다만 조사까지 붙어서 인식하는 것은 아쉬운 부분입니다...
NER 태그 종류
지원하는 태그 종류는 20개입니다.
Dictionary with 20 tags: <unk>, O, S-ORG, S-MISC, B-PER, E-PER, S-LOC, B-ORG, E-ORG, I-PER, S-PER, B-MISC, I-MISC, E-MISC, I-ORG, B-LOC, E-LOC, I-LOC, <START>, <STOP>
ORG(조직), PER(사람), LOC(장소) 태그를 제공합니다.
태그의 종류도 좀 많이 단순하네요.. 이래서 성능이 높게 나온건가..?!
모델별 성능
언어별로 특화된 모델도 지원하긴 하는데 아쉽게도 한국어는 없습니다...
언어마다 다르긴 하지만 대체적으로 90% 근처의 성능(F1기준)을 제공하네요
역시 영어가 제일 성능이 좋습니다...
참고: https://flairnlp.github.io/docs/tutorial-basics/tagging-entities
결론 : 플레어는 사용방법이 간단하고 훈련없이도 바로 사용가능한 것은 좋은데 태그 종류가 적고 조사를 따로 분리해야 하는 이슈가 있네요.
우선 다른 한국어 특화된 NER도 써보고 어떤 모델을 사용할지 좀 더 고민해보겠습니다.
728x90반응형'프로그래밍 > 자연어처리' 카테고리의 다른 글
flair 모델로 fine-tuning하기 (0) 2024.09.05 한국어 ner 시작하기 - pytorch-bert-crf-ner 사용후기 (0) 2024.08.26 azure openai 사용하여 임베딩 변환하기 (0) 2024.08.20 fasttext 사용하여 임베딩 하기 (1) 2022.09.24 conda: 명령을 찾을 수 없습니다 (0) 2022.09.11