슬기로운 연구생활

Classification - [5] 형태소 분석기 본문

슬기로운 NLP 생활

Classification - [5] 형태소 분석기

vhrehfdl 2020. 8. 23. 16:09

이전 글

[1] 자연어처리란?

[2] Classification Task

[3] POS Tagging

[4] Stemming, Lemmatizing

 

들어가며

이전 글에서는 전처리 방법인 Stemming, Lemmatizing에 대해 설명했습니다.

이번 글에서는 한국어 자연어 처리의 핵심인 형태소 분석기에 대해 알아보겠습니다.

 

형태소 분석기

형태소 분석기는 문장을 형태소로 분리해주는 도구입니다.

형태소의 정의는 "뜻을 가진 가장 작은 말의 단위. ‘이야기책’의 ‘이야기’, ‘책’ 따위이다." 입니다 [네이버 국어사전].

예를 들어, "아버지가 방에 들어가신다"라는 문장에 형태소 분석을 적용하면 "아버지/NNG, 가/JKS, 방/NNG, 에/JKB, 들어가/VV, 신다/EP+EC"로 분리가 됩니다.

 

그러나 모든 형태소 분석기가 위와 같이 정확히 분리하는 것은 아닙니다.

(그림1) Konlpy 각 모듈의 분석 결과

(그림1)은 Konlpy의 각 모듈의 분석 결과인데 정확히 분리하지 못하는 모듈도 존재하는 것을 확인할 수 있습니다.

 

형태소 분석은 자연어 처리의 가장 근본적인 부분입니다.

그런데 왜 형태소 분석이 중요할까요?

우리가 사용하는 언어는 사람마다 사용하는 형태가 다르며 무수한 단어의 조합으로 이루어져 있습니다.

 

사람은 "방에들어가신다"라는 문장의 띄어쓰기가 틀리게된 것을 추론할 수 있습니다.

그러나 컴퓨터는 추론할 수 있는 능력이 부족하기 때문에, 해당 어절을 새로운 어절로 인식하게 됩니다.

그래서 여러 다양한 형태의 문장을 형태소 단위로 정확히 분리한 후, 유사한 문장은 같은 문장으로 분리하는 것이 중요합니다.

 

형태소 분석기 종류

한국어 형태소 분석기의 종류는 다양하며 이번 글에서는 대표적인 형태소 분석기에 대해서 소개하겠습니다.

 

Konlpy

- Konlpy는 Python 기반의 형태소 분석기로 사용이 간편한 것이 장점입니다.

- Konlpy에는 꼬꼬마, 한나눔, 코모란, 트위터, 메캅 총 5개의 모듈로 구성되어있습니다. 

 

위와 같이 konlpy를 설치한 후, 사용하고 싶은 모듈을 불러와 적용합니다.

 

Mecab 같은 경우에는 윈도우에서 사용하기 힘들며 konlpy에서 추가적인 설치 작업이 필요합니다.

 

Khaiii

- khaiii는 카카오에서 만든 개발한 형태소 분석기입니다.

- HMM기반의 Konlpy 모듈들과는 다르게 khaiii는 CNN을 사용해 만들었습니다.

- 윈도우에서는 사용하기 힘들며 리눅스에서 사용하는 것을 추천드립니다.

 

전체 코드는 Github에 공개되어 있습니다.

https://github.com/vhrehfdl/Blog_code/blob/master/%EC%8A%AC%EA%B8%B0%EB%A1%9C%EC%9A%B4%20%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC/%EC%8A%AC%EA%B8%B0%EB%A1%9C%EC%9A%B4_%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC_%5B5%5D_%ED%98%95%ED%83%9C%EC%86%8C_%EB%B6%84%EC%84%9D%EA%B8%B0.ipynb

 

vhrehfdl/Blog_code

Contribute to vhrehfdl/Blog_code development by creating an account on GitHub.

github.com

 

마무리

이번 글에서는 형태소 분석기의 정의와 사용방법에 대해서 알아보았습니다.

각각의 형태소 분석기 세부 알고리즘은 추후에 정리해 업로드하도록 하겠습니다.

 

이제 POS Tagging, Stemming, Lematazation, 형태소 분석기에 거쳐 전처리 부분에 대한 설명이 끝났습니다.

전처리를 거친 후에 단어 집합은 어떻게 숫자로 변환되는 것일까요?

다음글에서는 Text To Vector에 대해 설명드리겠습니다.

 

Comments