SoyNLP : 한국어 자연어 처리 패키지


SOYNLP : 형태소 분석, 품사 판별 등을 지원하는 파이썬 기반 한국어 자연어 처리 패키지

  • 데이터 패턴을 스스로 학습하는 비지도 학습 접근법을 지향하기 때문에 하나의 문장 혹은 문서에서보다는 어느정도 규모가 있으면서 동질적인 문서 집합에서 잘 작동한다.

  • soynlp 패키지에 포함된 형태소 분석기는 데이터의 통계량을 확인해 만든 단어 점수 표로 작동한다.

    • 단어 점수는 크기 응집 확률 (Cohesion Probability)과 브랜칭 엔트로피 (Branching Entropy)를 활용한다.
      • 응집 확률이 높을 때 : 주어진 문자열이 유기적으로 연결돼 함께 자주 나타나는 것
      • 브랜칭 엔트로피가 높을 때 : 그 단어 앞뒤로 다양한 조사, 어미 혹은 다른 단어가 등장하는 경우
  • soynlp의 형태소 분석기는 우리가 가지고 있는 말뭉치의 통계량을 바탕으로 힘

    • 말뭉치의 분포가 어떻게 돼 있는지 확인하고 단어별로 응집 확률과 브랜칭 엔트로피 점수표를 만드는 절차가 필요함
  • soynlp의 단어 점수를 학습하는 코드

    from soynlp.word import WordExtractor
    
    corpus_fname = "/path/processed_ratings.txt"
    model_fname = "soyword.model"
    
    sentences = [sent.strip() for sent in open(corpus_fname, 'r').readlines()]
    word_extractor = WordExtractor(min_frequency = 100,
    															 min_cohesion_forward = 0.05
    															 min_right_branching_entropy = 0.0)
    word_extractor.load(model_fname)
    • 해당 코드를 실행하면 단어 점수표가 model_fname 경로에 저장됨
    • soynlp의 LTokenizer 클래스는 입력 문장의 왼쪽부터 문자 단위로 슬라이딩해 가면서 단어 점수가 높은 문자열을 우선으로 형태소로 취급하여 분리함
      • 단, 띄어쓰기가 되어있다면 해당 어절을 단어로 인식
      • 한국어는 명사에 조사가 붙거나 용언에 어미가 붙어 활용되는 교착어이기 때문에 왼쪽부터 슬라이딩해 가면서 분석해도 높은 품질을 기대할 수 있음
      • “애비는 종이었다” ➡️ [”애비”, “는”, “종”, “이었다”]

reference

GitHub - lovit/soynlp 한국어 임베딩 (이기창 지음)