본문 바로가기
📂 머신러닝 | 딥러닝/◾ NLP

[NLP] 한국어 형태소 분석기 Kiwipiepy

by 이 정규 2023. 7. 24.
728x90
반응형

Kiwipiepy Github

https://github.com/bab2min/kiwipiepy

 

GitHub - bab2min/kiwipiepy: Python API for Kiwi

Python API for Kiwi. Contribute to bab2min/kiwipiepy development by creating an account on GitHub.

github.com

Kiwipiepy Docs

https://bab2min.github.io/kiwipiepy/v0.15.2/kr/

 

kiwipiepy API documentation (v0.15.2)

Package kiwipiepy Kiwipiepy란? Kiwipiepy는 한국어 형태소 분석기인 Kiwi(Korean Intelligent Word Identifier)의 Python 모듈입니다. C++로 작성되었고 다른 패키지에 의존성이 없으므로 C++ 컴파일이 가능한 환경이라

bab2min.github.io


Kiwipepy를 사용해야 하는 이유 3가지

1. 텍스트 분석 속도

지난 포스팅에서 이야기했듯 최근 NLP 관련 개발을 진행하다보니 성능이 좋은 형태소 분석기를 찾아보게 됐다. 아래 그래프를 보면 한국어 분석기의 텍스트 분석 속도를 나타내고 있다. 이 중 Mecab이 두드러져 보인다. 그 다음으로 이번 포스팅의 주제인 Kiwipiepy가 뒤를 잇는다. 고로 나쁘지 않는 텍스트 분석 속도를 보여주고 있다고 평할 수 있겠다.

한국어 형태소 분석기들의 텍스트 분석 속도 비교 그래프


2. 모호성 해소 정확도

단순히 속도가 빠르다고 장땡이 아니니, 한국어 분석의 난제인 모호성 해소 정확도 그래프를 확인해보자. 속도 면에서 압도적 우위를 가졌던 Mecab이 모호성 해소 부분에서는 다소 아쉬운 성능을 보여줬다. 그러나 Kiwipiepy는 90%에 준하는 성능을 보여준다. 기본적으로 KoNLPy 라이브러리들 보다는 모호성 해소 정확도에서 좋은 성능을 보여주고 있다.

한국어 형태소 분석기들의 모호성 해소 정확도 비교 그래프


3. 문장 분리 정확도

자체적으로 경량 언어모델을 탑재하여 모호성이 있는 경우에도 제법 정확하게 형태소를 분석해낸다. 특히 SBG모델을 사용 시 모호성 해소 성능이 크게 향상된다고 한다.

 

한국어 형태소 분석기들의 문장 분리 정확도 비교 그래프

또한, 문장 분리 기능을 비롯한 다양한 편의기능을 제공한다. 라이브러리 차원에서 멀티스레딩을 지원하기 때문에 대량의 텍스트를 분석해야할 경우 멀티코어를 활용하여 빠른 분석이 가능하다. 또한 다양한 시스템에서 상황에 맞춰 선택할 수 있도록 소형/중형/대형 모델을 제공한다.


설치 방법

pip install kiwipiepy

지원하는 OS와 Python 버전은 다음과 같습니다:

  • Python 3.6 이상이 설치된 Linux (x86-64)
  • Python 3.6 이상이 설치된 macOS 10.13이나 그 이후 버전
  • Python 3.6 이상이 설치된 Windows 7 이나 그 이후 버전 (x86, x86-64)
  • Python 3.6 이상이 설치된 다른 OS: 이 경우 소스 코드 컴파일을 위해 C++11이 지원되는 컴파일러가 필요합니다.

예제

from kiwipiepy import Kiwi
kiwi = Kiwi()
for result, score in kiwi.analyze("형태소 분석 결과입니다", top_n=5):
    print(score, result, sep='\t')

# 위 코드를 실행하면 다음과 같은 결과가 나옵니다.
# -34.33329391479492      [Token(form='형태소', tag='NNG', start=0, len=3), Token(form='분석', tag='NNG', start=4, len=2), Token(form='결과', tag='NNG', start=7, len=2), Token(form='이', tag='VCP', start=9, len=1), Token(form='ᆸ니다', tag='EF', start=10, len=2)]
# -38.10548400878906      [Token(form='형태소', tag='NNG', start=0, len=3), Token(form='분석', tag='NNG', start=4, len=2), Token(form='결과', tag='NNG', start=7, len=2), Token(form='이', tag='MM', start=9, len=1), Token(form='ᆸ니다', tag='EC', start=10, len=2)]
# -51.977012634277344     [Token(form='형태소', tag='NNG', start=0, len=3), Token(form='분석', tag='NNG', start=4, len=2), Token(form='결과', tag='NNG', start=7, len=2), Token(form='이', tag='MM', start=9, len=1), Token(form='ᆸ니다', tag='NNP', start=10, len=2)]
# -51.978363037109375     [Token(form='형태소', tag='NNG', start=0, len=3), Token(form='분석', tag='NNG', start=4, len=2), Token(form='결과', tag='NNG', start=7, len=2), Token(form='이', tag='MM', start=9, len=1), Token(form='ᆸ', tag='NNG', start=10, len=0), Token(form='니', tag='EC', start=10, len=1), Token(form='다', tag='EC', start=11, len=1)]
# -52.152374267578125     [Token(form='형태소', tag='NNG', start=0, len=3), Token(form='분석', tag='NNG', start=4, len=2), Token(form='결과', tag='NNG', start=7, len=2), Token(form='이', tag='MM', start=9, len=1), Token(form='ᆸ', tag='NNG', start=10, len=0), Token(form='니다', tag='EF', start=10, len=2)]

# 간단하게 형태소 분석 결과만 얻고 싶다면 `tokenize` 메소드를 사용하면 됩니다.

result = kiwi.tokenize("형태소 분석 결과입니다")
print(result)
# [Token(form='형태소', tag='NNG', start=0, len=3), Token(form='분석', tag='NNG', start=4, len=2), Token(form='결과', tag='NNG', start=7, len=2), Token(form='이', tag='VCP', start=9, len=1), Token(form='ᆸ니다', tag='EF', start=10, len=2)]

맺음말

Kiwipiepy를 사용해 본 후기를 간단히 이야기 해보자면 원광디지털대학교 2014년부터 8년 간의 강의 평가 데이터를 형태소 분석했을 때, 이것저것 파라미터를 추가하긴 했지만 대략 15-20분 정도 시간이 걸렸다. 비교 대상이 없어 오래 걸린건지 모르겠지만 위에서 보여준 그래프를 봤을 때는 다른 형태소 분석기가 느리면 느렸지 더 빠를 것 같다는 생각은 들지 않았다.

그리고 다양한 파라미터를 제공해서 번거롭게 데이터프레임을 일일이 뒤져보고 이상 케이스를 찾아보는 번거로움을 줄일 수 있었다. 그렇게 사용법이 어렵지도 않고, 깃헙과 공식문서에 자세하게 설명되어 있어 더 디테일한 설명이 필요하다면 찾아보면 다 나올 거라고 생각된다. 

오늘은 한국어 형태소 분석기 Kiwipiepy를 알아보았다. 다들 즐거운 한 주의 시작이 되셨길 바라며 글을 마치도록 하겠다.

728x90
반응형

댓글