Almost Baseball, CSE and Diary

korean-tokenizer-experiments

형태소 분석기 비교

자연언어처리 모델 설계 전 데이터 전처리는 매우 중요합니다. 특히, 한국어 자연언어처리에서는 문장 분해의 여러 가지 최소 단위를 가질 수 있습니다. 한국어에서 최소 단위는 자소, 음절, 형태소 등이 될 수 있고 자소나 음절 분해보다 형태소 분해는 문장에서의 위치나 문맥에 따라 달라지므로 쉽지 않은 문제가 있는데요. 예를 들어 '하늘을 나는 자동차'와 '나는 밥을 먹는다'에서 '나는'은 문맥에 따라 주어 '나'를 의미할 수도 있고 '날다'를 의미할 수도 있습니다.

최근 카카오에서 딥러닝 기반의 형태소 분석기 khaiii를 발표했습니다. 기존에도 여러 형태소 분석기(한나눔, KOMORAN 등)들이 존재했지만, 딥러닝 기반의 형태소 분석기는 제가 아는 한 처음이었기 때문에 관심이 생겨 여러 형태소 분석기의 성능(수행 시간, 분석 품질 등)을 비교해보고자 합니다.

실험 환경

하드웨어 (MacBook Pro Mid 2015)

  • macOS Mojave (Ver 10.14.1)
  • Processor: Intel Core i7 2.5GHz
  • Memory: 16GB 1600MHz DDR3

소프트웨어

  • Python 3.6.5
  • KoNLPy 0.5.1

데이터

실험 내용

실행 시간 비교

Python의 timeit를 활용해서 측정

로딩 시간

로딩 시간은 100회의 반복 수행 후 최솟값을 로딩 시간으로 간주함

분석기로딩 시간 (초)
khaiii0.0016
한나눔0.0001
꼬꼬마0.0002
KOMORAN0.9542
Open Korean Text (이하 OKT)0.0001
mecab0.0004

KOMORAN의 로딩 시간이 다른 분석기의 로딩 시간에 비해 눈에 띄네요.

형태소 분석 시간

우선 10, 100, 1000, 10000 문장에 대해서 형태소 분석 시간을 계산해봤습니다. 꼬꼬마 분석기가 갯수가 늘어날 수록 압도적으로 시간이 많이 소요되는 것을 볼 수 있네요.

시간이 오래걸리는 꼬꼬마 분석기를 제외하고 10만 문장까지 늘려서 분석 시간을 체크해봤습니다.

mecab이 압도적으로 빠른 형태소 분석 시간을 보여주고 있네요. 그 뒤를 khaiii와 KOMORAN이 따라가고 있습니다. KOMORAN은 Java 기반 형태소 분석기임에도 khaiii와 큰 차이 없는 수행 시간을 보여주네요.

문장 분석 품질 비교

형태소 분석기의 수행 속도에 대해서는 위에서 비교를 해봤습니다. 수행 속도도 중요하지만, 더 중요한 것은 입력에 대해서 정말 분석을 잘하는 지가 더 중요하다고 생각합니다. 따라서, 분석기가 쉽게 처리하기 어려운 유형 3가지에 대해서 실험을 해봤고 예제 문장에 대해서 결과를 공유합니다. 아래 3개 유형은 쉽진 않지만, 모바일 기기의 사용량이 많은 현재 충분히 입력으로 들어올 수 있는 유형이라고 생각합니다.

  • 띄어쓰기가 없는 문장
  • 자소 분리 및 오탈자가 포함된 문장
  • 긴 문장
띄어쓰기가 없는 문장

실험 문장 1: 너무기대안하고갔나재밌게봤다

khaiii한나눔꼬꼬마KOMORANOKTmecab
너/MAG너무기대안하고갔나재밌게봤다/N너무/MAG너무/MAG너/Modifier너무/MAG
무/NNG 기대/NNG기대/NNG무기/Noun기대/NNG
기/MAG 안/NNG안/NNG대안/Noun안/MAG
대안/NNG 하/XSV하/XSV하고/Josa하/VV
하/XSV 고/ECE고/EC갔나/Verb고/EC
고/EC 가/VV가/VX재밌게/Adjective갔/VV+EP
가/VX 었/EPT았/EP봤다/Verb나/EC
았/EP 나/EFQ나/EC 재밌/VA
나/VV 재밌/VA재밌/VA 게/EC
재밌/VA 게/ECD게/EC 봤/VX+EP
게/EC 보/VXV보/VX 다/EC
보/VV 았/EPT았/EP  
았/EP 다/EFN다/EC  
다/EC     

실험 문장 2: 굉장히잘만든수작지루할틈이없음

khaiii한나눔꼬꼬마KOMORANOKTmecab
굉/MAG굉장히잘만든수작지루할틈이없음/N굉장히/MAG 굉장히/MAG 굉장히/Adjective굉장히/MAG
장히/VV 잘/MAG잘/MAG잘만/Noun잘/MAG
잘/NNP 만들/VV만들/VV든/Josa만든/VV+ETM
만/VV ㄴ/ETDㄴ/ETM수작/Noun수작/NNG
든/XSA 수작/NNG수작/NNG지루할/Adjective지루/XR
수작지루/NNG 지루/XR지루/XR틈/Noun할/XSA+ETM
할틈이/NNG 하/XSA하/XSA이/Josa틈/NNG
없/VA ㄹ/ETDㄹ/ETM없음/Adjective이/JKS
음/ETN 틈/NNG틈/NNG 없/VA
  이/JKS이/JKS 음/ETN
  없/VA없/VA  
  음/ETN음/ETN  

역시나 띄어쓰기가 없는 문장은 분석이 쉽지 않은 것으로 보입니다. khaiii나 한나눔 분석기는 서로 다른 결과(너무 잘게 분석하거나 아예 분석을 못하거나)로 나쁜 분석 품질을 보여준다. 해당 분석기를 사용할 계획이 있다면 앞에서 띄어쓰기 전처리를 해줘야 할 것으로 보입니다. 그래도 꼬꼬마, KOMORAN, mecab 분석기는 생각보다 훌륭한 분석 품질을 보여주며 선전했네요.

자소 분리 및 오탈자가 포함된 문장

실험 문장 1: ㄱㅐOOO같은영화 뭐가무섭다는건지ㅡㅡ

khaiii한나눔꼬꼬마KOMORANOKTmecab
ㄱ/SHㄱㅐOOO같은영화/Nㄱ/NNG개/NNBㄱㅐ/KoreanParticleㄱ/NNG
ㅐOOO/SL뭐가무섭다는건지ㅡㅡ/Nㅐ/UNOOO/NNPOOO/Alphaㅐ/UNKNOWN
같/JKB OOO/OL같/VA같은/AdjectiveOOO/SL
은영화/NNG 같/VA은/ETM영화/Noun같/VA
뭐/XPN 은/ETD영화/NNP뭐/Noun은/ETM
가무/VV 영화/NNG뭐가무섭다는건지ㅡㅡ/NA가/Josa영화/NNG
섭/VA 뭐/NP 무섭다는/Adjective뭐/NP
다/EF 가/JKS 건지/Verb가/JKS
는/ETM 무섭/VA ㅡㅡ/KoreanParticle무섭/VA
건지/NNG 다는/ETD  다는/ETM
ㅡ/MAG 것/NNB  건지/NNB+VCP+EC
ㅡ/NNG 이/VCP  ㅡㅡ/UNKNOWN
  ㄴ지/ECS   
  ㅡㅡ/EMO   

실험 문장 2: ㄴㅓ무합니다이무슨..유치찬란..오글거려못보겠네요

khaiii한나눔꼬꼬마KOMORANOKTmecab
ㄴㅓ무/NNGㄴㅓ무합니다이무슨/Nㄴㅓ무합니다이무슨/UN너무/MAGㄴㅓ/KoreanParticleㄴ/NNG
하/XSA../S../SW하/XSV무/Nounㅓ무합니다이무슨/UNKNOWN
ㅂ/EC유치찬란/N유치찬란/XRㅂ니다/EC합니다/Verb./SF
니다이무슨/NNP../S../SW이/NNB이/Determiner./SY
./SF오글거려못보/N오글거리/VV무스/NNP무슨/Noun유치찬란/XR
./SP이/J어/ECSㄴ/JX../Punctuation./SF
유치/NNG겠네요/E못/MAG../SE유치/Noun./SY
찬/NNP 보/VV유치/NNP찬란/Noun오/NR
란/NNG 겠/EPT찬란/XR../Punctuation글/NNG
./SE 네요/EFN../SE오글거려못/Verb거려/XSV+EC
./SP  오/NNP보겠네요/Verb못/MAG
오글거리/VV  글/NNG 보/VV
어/EC  걸/VV 겠/EP
못보/VV  려/EC 네요/EC
겠/EP  못/MAG  
네요/EC  보/VV  
   겠/EP  
   네요/EC  

KOMORAN만 유일하게 자소가 분리된 문장이나 오탈자에 대해서도 어느 정도 강건함을 보여주고 있습니다. 확실하진 않지만 추측컨데, 다른 형태소 분석기는 최소 단위를 음절로 보고 KOMORAN은 자소로 보고 학습을 한 것으로 보이네요.

긴 문장

실험 문장: 개봉했을때부터 지금까지 마음이답답하거나 힘들때 이영화 보고있어요 그때마다 심적인 위로를 받을수있는영화같아요 장면 하나하나가 너무예쁘고 마음에 남아서 진한 여운까지 주는영화 감사합니다

khaiii한나눔꼬꼬마KOMORANOKTmecab
개봉/NNG개봉/N개봉/NNG개봉/NNG개봉/Noun개봉/NNG
하/XSV하/X하/XSV하/XSV했을/Verb했/XSV+EP
였/EP었을/E었/EPT았/EP때/Noun을/ETM
을/ETM때/N을/ETD을/ETM부터/Josa때/NNG
때/NNG부터/J때/NNG때/NNG지금/Noun부터/JX
부터/JX지금/M부터/JX부터/JX까지/Josa지금/NNG
지금/NNG까지/J지금/NNG지금/NNG마음/Noun까지/JX
까지/JX마음이답답하거/N까지/JX까지/JX이/Josa마음/NNG
마음/NNG나/J마음/NNG마음/NNG답답하거나/Adjective이/JKS
이/VCP힘들/P이/JKS이/JKS힘들/Adjective답답/XR
답답/NNGㄹ/E답답/XR답답/XR때/Noun하/XSA
하/XSA때/N하/XSA하/XSA이영화/Noun거나/EC
거나/EC이영화/N거나/ECE거나/EC보고있어요/Verb힘들/VA+ETM
힘들/VA보/P힘들/VV힘/NNG그때/Noun때/NNG
ㄹ/ETM고/Eㄹ/ETD들/XSN마다/Josa이/MM
때/NNG있/P때/NNG때/NNG심/Noun영화/NNG
이영화/NNP어/E이/MDT이영화/NNP적/Suffix보/VV
보/VV요/J영화/NNG보/VV인/Josa고/EC
고/EC그때/N보/VV고/EC위로/Noun있/VX
있/VX마다/J고/ECE있/VX를/Josa어요/EF
어요/EC심/N있/VXV어요/EC받을수있는/Verb그때/NNG
그때/NNG적/X어요/EFN그때/NNG영화/Noun마다/JX
마다/JX이/J그때/NNG마다/JX같아요/Adjective심/NNG
심/NNGㄴ/E마다/JX심/NNG장면/Noun적/XSN
적/XSN위로/N심적/NNG적/XSN하나/Noun인/VCP+ETM
이/VCP를/J이/VCP이/VCP하나/Noun위로/NNG
ㄴ/ETM받을수있는영화같아요/Nㄴ/ETDㄴ/ETM가/Josa를/JKO
위로/NNG장면/N위로/NNG위로/NNG너무/Adverb받/VV
를/JKO하나하나/N를/JKO를/JKO예쁘고/Adjective을/ETM
받/VV가/J받/VV받/VV마음/Noun수/NNB
을/ETM너무예쁘/N을/ETD을/ETM에/Josa있/VV
수/NNB이/J수/NNB수/NNB남아/Noun는/ETM
있/VV고/E있/VV있/VX서/Josa영화/NNG
는/ETM마음/N는/ETD는/ETM진한/Adjective같/VA
영화/NNG에/J영화/NNG영화/NNP여운/Noun아요/EF
같/VA남/P같/VA같/VA까지/Josa장면/NNG
아요/EC아/E아요/EFN아요/EC주는/Verb하나하나/NNG
장면/NNG지/P장면/NNG장면/NNG영화/Noun가/JKS
하나하나/NNGㄴ/E하나하나/NNG하나하나/NNG 감사합니다/Verb너무/MAG
가/JKS한/N가/JKS가/JKS 예쁘/VA
너무/MAG여운/N너무/MAG너무/MAG 고/EC
예/VV까지/J예쁘/VA예쁘/VA 마음/NNG
쁘/VA주는영화/N고/ECE고/EC 에/JKB
고/EC감사/N마음/NNG마음/NNG 남/VV
마음/NNG하/X에/JKM에/JKB 아서/EC
에/JKBㅂ니다/E남/VV남/VV 진한/VA+ETM
남/VV 아서/ECD아서/EC 여운/NNG
아서/EC 진하/VA진한/NNP 까지/JX
진하/VA ㄴ/ETD여운/NNP 주/VX
ㄴ/ETM 여운/NNG까지/JX 는/ETM
여운/NNG 까/VV주/VX 영화/NNG
까지/JX 지/ECD는/ETM 감사/NNG
주는영화/NNG 주/VXV영화/NNP 합니다/XSV+EC
감사/NNG 는/ETD감사/NNG  
하/XSV 영화/NNG하/XSV  
ㅂ니다/EC 감사/NNGㅂ니다/EC  
  하/XSV   
  ㅂ니다/EFN   

긴 문장이지만 띄어쓰기가 어느 정도 되어있는 문장에 대해서 테스트 결과입니다. 조금씩의 차이는 있지만 대부분의 분석기들이 잘 분석해주고 있는 것을 볼 수 있습니다. 따라서 문장의 길이는 띄어쓰기 유무와 자소/오탈자와 달리 형태소 분석기의 분석 품질에 큰 영향을 주지 않는 것으로 보입니다.

결론

  • 사용할 데이터의 특성(띄어쓰기 유무 등)이나 개발 환경(Python, Java)에 따라서 적합한 형태소 분석기를 고려해야함
  • 연산 속도가 중요하다면 mecab을 최우선으로 고려해야하며, 심지어 분석 품질도 상위권으로 보여짐
  • 자소 분리나 오탈자에 대해서도 어느 정도 분석 품질이 보장되야 한다면 KOMORAN 사용을 고려
  • 한나눔과 khaiii는 일부 케이스에 대한 분석 품질, 꼬꼬마는 분석 시간에서 약간 아쉬운 점이 보임



티스토리 툴바