ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 한국어 NER 시작하기 - flair 사용방법
    프로그래밍/자연어처리 2024. 8. 23. 18:21
    반응형

     

     

     

    최근에 진행하는 프로젝트에서 다양한 태그(사람, 회사, 조직 등)를 지원하면서 성능이 좋은 한국어 NER 모델이 필요해졌습니다. 

     

    최근에 나온 NER 모델 위주로 사용방법과 성능 관련 내용을 정리해보겠습니다. 

     

     

     

    Flair 소개 

     

     

     

    Flair는 자연어 처리(NLP) 작업을 간단하고 직관적으로 수행할 수 있도록 하는 Python 기반의 라이브러리입니다.

     

    문장 임베딩(sentence embeddings), 이름된 엔티티 인식(NER), 텍스트 분류(text classification), 품사 태깅(POS tagging) 등의 작업을 지원합니다.

     

    성능이 괜찮고 사용이 간단하다고 해서 사용해봤습니다. 

     

     

    https://github.com/flairNLP/flair

     

    GitHub - flairNLP/flair: A very simple framework for state-of-the-art Natural Language Processing (NLP)

    A very simple framework for state-of-the-art Natural Language Processing (NLP) - flairNLP/flair

    github.com

     

     

    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
    반응형
Designed by Tistory.