Khaiii 형태소 분석기 사용하기

한국어로 된 데이터를 분석할 때, 이를 적절한 형태로 토크나이즈 (tokenize)하는 과정은 반드시 필요하다.

특히나 한국어는 영어와 달리 최소 의미 전달이 단어로 이루어진 언어가 아니기 때문에 형태소 단위로 잘라주는 패키지를 자주 사용한다.

오늘은 내가 평소에 자주 사용하는 형태소 분석기 중 Khaiii 형태소 분석기 에 대해 포스팅하고자 한다.

Khaiii 는 카카오에서 18년도 말에 공개한 딥러닝 기반의 형태소 분석기이다. 기존의 사전 의존 방법과는 달리 세종 코퍼스 약 1000만 어절을 학습하여 형태소 단위로 분리한다고 한다.

설치하기

설치가 생각보다 까다롭다. 오래전에 설치하여 정확한 프로세스는 잘 기억이 나지 않지만, 상당히 많은 에러 동반 끝에 설치한 기억이..

기본적으로 리눅스 환경에서만 지원한다. 윈도우에서도 할 수 있는 방법이 있는지는 잘 모르겠다.

나는 한번 설치의 어려움을 경험한 후, 다시는 리눅스 커멘드로 일일히 설치하지 않는다. 대신 도커파일을 받아서 그대로 활용한다. 도커 파일의 경우 여기를 참고하자.

위 도커파일로 Khaiii를 설치 후, 원하는 세팅을 해서 나만의 도커 이미지를 만들어 놓으면 세팅 하는데 시간을 획기적으로 줄일 수 있다. 도커 사용법의 경우 시간 날때 천천히 정리할 계획.

사용하기

설치를 완료했다면, 이제 사용해 보자. 주피터 노트북에서 아래와 같은 코드를 실행한다.

1
2
3
4
5
6
7
8
9
from khaiii import KhaiiiApi
api = KhaiiiApi(rsc_dir='/deps/khaiii/build/share/khaiii') # 내 설치 경로

morphs = []
sentence = "하스스톤 전장이 새로 나왔는데 재밌어요!"

for word in api.analyze(sentence):
for morph in word.morphs:
morphs.append((morph.lex, morph.tag))

적당한 sentence로 출력을 해보면 아래와 같이 형태소 단위로 잘 토크나이즈 된 것을 확인할 수 있다.

위 코드에서 rsc_dir 부분은 현재는 중요하지 않지만, 기분석 사전이나 오분석 패치 기능을 활용할 때 엄청 중요하다. 먼저 짚고 넘어가보자.

대부분이 비슷한 경로에 설치가 될 것 같은데 혹시 모르니 커멘드 창에 아래와 같은 코드를 입력한다.

1
find / -name 'khaiii*' -type d

khaiii 라는 이름을 가진 디렉토리를 모두 찾으라는 뜻이다. 코드를 실행하여 /deps/khaiii/build/share/khaiii' 와 비슷하게 share 폴더 안의 khaiii의 경로를 찾으면 된다.

기분석 사전 추가

기분석 사전이란 내가 원하는 단일 어절에 대해, 문맥에 상관없이 일괄적인 분석 결과를 얻고 싶을 때 추가한다.

기본적인 사용 방법은 Khaiii 깃헙 페이지에 잘 정리되어 있다.

페이지에 적힌 대로 사전 형식은 따라하면 되는데, 내가 문제를 겪은 부분은 다름 아닌 사전 빌드였다.

요약하자면, modulenotfounderror: no module named ‘khaiii.munjong’ 이런 에러가 뜬다.

대부분이 PYTHONPATH 경로 문제인데, 위와 유사한 방법으로 찾아보자.

1
find / -name 'munjong*' -type d

위 코드로 munjong 이 있는 디렉토리 위치를 찾는다. 나는 약 4개의 디렉토리 위치가 떴는데, 이중에서 적당히 파이썬 위치가 어딜까 하고 보니 보인다.

이제 위치를 찾았으니, PYTHONPATH 경로를 수정한 코드를 차례대로 커멘드 창에 입력하여 사전을 빌드하면 된다.

1
2
3
cd rsc # 어디에 있던 rsc로 와서 실행하기
mkdir -p ../build/share/khaiii
PYTHONPATH=/deps/khaiii/src/main/python/ ./bin/compile_preanal.py --rsc-src=./src --rsc-dir=/deps/khaiii/build/share/khaiii

빌드 완료! 혹시 빌드한 사전이 적용이 안된다면, rsc_dir 경로를 다시 확인하자.

오분석 패치

오분석 패치는 기계학습 모델의 결과로 출력된 결과가 오분석일 경우, 이를 원하는 정분석으로 바로잡을 수 있는 사용자 사전이다.

기분석 사전과 마찬가지로 기본적인 사용 방법은 Khaiii 깃헙 페이지에 잘 정리되어 있다.

정해진 포멧을 맞추어 등록하고, 이를 빌드하면 되는데 위의 오분석 패치와 마찬가지로 약간의 코드 수정이 필요하다. (PYTHONPATH 부분)

1
2
3
cd rsc # 어디에 있던 rsc로 와서 실행하기
mkdir -p ../build/share/khaiii
PYTHONPATH=/deps/khaiii/src/main/python/ ./bin/compile_errpatch.py --model-size=base --rsc-src ./src --rsc-dir=/deps/khaiii/build/share/khaiii

빌드 완료!

맺음말

Khaiii 형태소 분석기를 사용해보면 딥러닝 기반인데 사전 기반처럼 정확하게 작동함을 확인할 수 있다.

그러나, 아쉬운 점은 띄어쓰기가 잘 안된 비문들을 넣으면 기존에 잘 사용하는 Mecab 형태소 분석기보다 성능이 조금 떨어진다.

그리고 내가 다루는 데이터 안에 ‘후쿠시마’ 라는 단어가 있는데, 이를 Mecab을 사용했을 땐 몰랐는데 자꾸 후 + 쿠시마 또는 후쿠시 + 마 로 오분석이 되더라.. 기분석 사전에 추가하는 번거로움이 있었다.

서로 장단점이 있으니 적절하게 사용하면 될 것 같다.

기분석 사전 및 오분석 패치 사전 작성 시에 기본 한글 형태소 품사표를 알고 싶다면 한글 형태소 품사 (POS) 태그표를 참고하자.