한국어는 어휘, 문법 구조, 형태소 체계 등의 측면에서 영어나 다른 언어와 구별되는 독특한 특성을 가지고 있다. 따라서 한국어 자연어처리(NLP)를 수행할 때는 영어에 비해 조금 더 고려해야할 사항이 많다.
한국어 자연어처리의 어려움
- 한국어는 교착어로 형태소 분석기가 필요
- 영어에 비해 띄어쓰기가 잘 지켜지지 않음
- 어순이 그렇게 중요하지 않음
- 한자어라는 특성상 하나의 음절도 다른 의미를 가질 수 있음
- 주어가 쉽게 생략됨
- 데이터와 언어에 특화된 모델이 영어에 비해 부족
교착어인 한국어의 특성으로 인해 한국어는 Tokenizer(토크나이저)로 형태소 분석기를 사용하는 것이 보편적이다. 다양한 형태소 분석기가 존재하므로 원하는 Task에 따라 맞는 형태소 분석기를 선택할 수 있다. 또 text를 어떻게 단위별로 나누어 처리할지에 따라 Word 토크나이저와 Sentence 토크나이저로 나누어진다.
Word Tokenization
단어 토큰화를 위해서 영어에 NLTK가 있다면 한국어는 형태소 분석기 패키지인 KoNLPy가 있다.
KoNLPy에서 지원하는 한국어 Word Tokenization은 다음과 같이 여러 형태소 분석기가 있다.
- Okt : 카카오에서 공개한 오픈소스 형태소 분석기로 쉽게 사용할 수 있으며, 신조어 처리에도 비교적 유연하다는 장점이 있음
- 꼬꼬마 : 학술 연구용으로도 활발히 사용되며, 다양한 품사 태그를 제공
- 코모란 : 빠른 처리 속도와 비교적 안정적인 성능을 보여주며, 자바 환경에서 사용하기에 편리
- 한나눔 : 기본적인 성능은 안정적이지만, 실제 대규모 환경보다는 연구용으로 많이 사용되고 있음
- Mecab : 오픈소스 생태계와 실제 서비스 환경에서 가장 폭넓게 활용되는 형태소 분석기
- 띄어쓰기를 기준으로 하는 단어 토큰화 : 형태소 분석기라기 보다는 공백 단위로 단어를 잘라 사용하는 가장 단순한 방법으로 한국어의 특성상 정확도 개선에는 한계가 있어 보조적 용도로 사용되는 경우가 많다.
KoNLPy 패키지에 위와 같은 여러 형태소 분석기를 지원해서 사용할 수 있는데, Mecab은 별도로 설치를 해야 한다.
Sentence Tokenization
문장 토큰화는 text 전체를 구두점(마침표, 느낌표, 물음표 등)을 기준으로 문장 단위로 분할한다. 영어에서는 구두점과 대문자 등을 단서로 하는 Rule-based 접근이 흔하고, 한국어는 마침표(., ?, !) 외에도 다양한 종결어미(“-다”, “-까?”, “-네요” 등)를 고려한 세분화가 필요할 수 있는데, 영어 문장 토큰화는 NLTK를 사용할 수 있고, 한국어 문장 토큰화는 KSS가 있다.
* Word 토크나이저와 Sentence 토크나이저 용도
Sentence 토크나이저는 문서 요약, 문맥 분석, 문장 재배열, Q&A 등 문장 단위 처리가 중요할 때, 문장 단위 토큰화가 먼저 이루어 지고 그 후, 추가적으로 Word Tokenizer를 적용해 단어(형태소) 수준 정보를 얻기도 한다.
감성 분석, 스팸 필터링, 키워드 추출, 주제 분류 등과 같이 단어(형태소) 수준 처리가 필요할 때는 Word 토크나이저가 중요하다. subword 단위 분석이 필요한 신조어 처리, 희소 문제 해결 등에 활용될 수 있다.
일반적으로 “문장 -> 단어(형태소)” 순으로 분할하여 사용하는 경우도 많다.
요약하면 Sentence 토크나이저는 text를 문장 단위로 나눈 뒤, 주로 문장 레벨에서 문맥이나 구조를 살펴보는 작업에 유리하고, Word 토크나이저는 text를 단어(형태소) 단위로 세분화하여, 실제 모델 학습이나 빈도분석, 키워드 추출 등 어휘 수준 작업에 유용하다.
mecab 설치
pip install mecab-python3