형태소 분석 및 품사 태깅

형태소 분석 이란 형태소를 비롯하여, 어근, 접두사/접미사, 품사(POS, part-of-speech) 등 다양한 언어적 속성의 구조를 파악하는 것입니다.

품사 태깅 은 형태소의 뜻과 문맥을 고려하여 그것에 마크업을 하는 일입니다. 예를 들어:

가방에 들어가신다 -> 가방/NNG + /JKM + 들어가/VV + /EPH + ㄴ다/EFN

KoNLPy로 품사 태깅하기

KoNLPy에는 품사 태깅을 하기 위한 옵션이 여럿 있는데, 이들은 모두 문구(phrase)를 입력받아 태깅된 형태소를 출력하는 동일한 입출력 구조를 가집니다.

더 자세한 설명을 보기 위해서는 tag Package 를 참고해주시기 바랍니다.

더 보기

한국어 품사 태그 비교표

각종 한국어 형태소 분석기의 품사 태그를 비교해 보세요.

품사 태깅 클래스 간 비교

이제 tag Package 에 있는 태거들의 성능을 확인해볼까요? 실험은 4개의 코어가 있는 인텔 i7 CPU, 파이썬 2.7, KoNLPy 0.4.1을 이용해 수행되었습니다.

Time analysis [1]

  1. 로딩 시간: 사전 로딩을 포함하여 클래스를 로딩하는 시간.

  2. 실행시간: 10만 문자의 문서를 대상으로 각 클래스의 pos 메소드를 실행하는데 소요되는 시간.

    문자의 개수를 늘려감에 따라 모든 클래스의 실행 시간은 기하급수적으로 증가합니다.

    ../_images/time.png

성능 분석

성능 검증은 몇 개의 샘플 문장을 비교하는 것으로 대체합니다.

  1. “아버지가방에들어가신다”

    이 예시를 통해 띄어쓰기 알고리즘의 성능을 확인해볼 수 있습니다. 이상적인 경우, 이 예시에 대해서는 아버지 + 가방에 + 들어가신다 보다는 아버지가 + 방에 + 들어가신다 로 해석하는 것이 더 바람직하겠지요.

Hannanum Kkma Komoran Mecab Twitter
아버지가방에들어가 / N 아버지 / NNG 아버지가방에들어가신다 / NNP 아버지 / NNG 아버지 / Noun
이 / J 가방 / NNG   가 / JKS 가방 / Noun
시ㄴ다 / E 에 / JKM   방 / NNG 에 / Josa
  들어가 / VV   에 / JKB 들어가신 / Verb
  시 / EPH   들어가 / VV 다 / Eomi
  ㄴ다 / EFN   신다 / EP+EC  
  1. “나는 밥을 먹는다” vs “하늘을 나는 자동차”

    두 문장에서 “나는”에 집중해서 본다면, 각 분석기가 태깅할 때 단어의 의미와 주변부를 잘 살피는지 확인해볼 수 있습니다. 첫번째 문장에서 “나는”은 나/N + 는/J, 두번째 문장에서는 나(-ㄹ다)/V + 는/E 이 되는 것이 바람직합니다.

Hannanum Kkma Komoran Mecab Twitter
나 / N 나 / NP 나 / NP 나 / NP 나 / Noun
는 / J 는 / JX 는 / JX 는 / JX 는 / Josa
밥 / N 밥 / NNG 밥 / NNG 밥 / NNG 밥 / Noun
을 / J 을 / JKO 을 / JKO 을 / JKO 을 / Josa
먹 / P 먹 / VV 먹 / VV 먹 / VV 먹는 / Verb
는다 / E 는 / EPT 는다 / EC 는다 / EC 다 / Eomi
  다 / EFN      
Hannanum Kkma Komoran Mecab Twitter
하늘 / N 하늘 / NNG 하늘 / NNG 하늘 / NNG 하늘 / Noun
을 / J 을 / JKO 을 / JKO 을 / JKO 을 / Josa
나 / N 날 / VV 나 / NP 나 / NP 나 / Noun
는 / J 는 / ETD 는 / JX 는 / JX 는 / Josa
자동차 / N 자동차 / NNG 자동차 / NNG 자동차 / NNG 자동차 / Noun
  1. “아이폰 기다리다 지쳐 애플공홈에서 언락폰질러버렸다 6+ 128기가실버ㅋ”

    각 분석기가 사전에 포함되지 않은 단어를 어떻게 해결하는지 확인해볼까요?

Hannanum Kkma Komoran Mecab Twitter
아이폰 / N 아이 / NNG 아이폰 / NNP 아이폰 / NNP 아이폰 / Noun
기다리 / P 폰 / NNG 기다리 / VV 기다리 / VV 기다리 / Verb
다 / E 기다리 / VV 다 / EC 다 / EC 다 / Eomi
지치 / P 다 / ECS 지치 / VV 지쳐 / VV+EC 지쳐 / Verb
어 / E 지치 / VV 어 / EC 애플 / NNP 애플 / Noun
애플공홈 / N 어 / ECS 애플 / NNP 공 / NNG 공홈 / Noun
에서 / J 애플 / NNP 공 / NNG 홈 / NNG 에서 / Josa
언락폰질러버렸다 / N 공 / NNG 홈 / NNG 에서 / JKB 언락폰 / Noun
6+ / N 홈 / NNG 에서 / JKB 언락 / NNG 질 / Verb
128기가실벜 / N 에서 / JKM 언 / NNG 폰 / NNG 러 / Eomi
  언락 / NNG 락 / NNG 질러버렸 / VV+EC+VX+EP 버렸 / Verb
  폰 / NNG 폰 / NNG 다 / EC 다 / Eomi
  질르 / VV 지르 / VV 6 / SN 6 / Number
  어 / ECS 어 / EC + / SY + / Punctuation
  버리 / VXV 버리 / VX 128 / SN 128 / Number
  었 / EPT 었 / EP 기 / NNG 기 / Noun
  다 / ECS 다 / EC 가 / JKS 가 / Josa
  6 / NR 6 / SN 실버 / NNP 실버 / Noun
  + / SW + / SW ㅋ / UNKNOWN ㅋ / KoreanParticle
  128 / NR 128기가실벜 / NA    
  기가 / NNG      
  실버 / NNG      
  ㅋ / UN      

주석

이 코드를 컴퓨터에서 실행하시면 위 비교 실험을 직접 수행하실 수 있습니다.

[1]각 형태소 분석기 배포판이 아닌, KoNLPy 내부 모듈 간 비교임에 유의해주시기 바랍니다.