지난 글(텍스트 분석의 현실적인 문제들)에 이어서 이번에는 텍스트 분석의 전처리 및 단어 추출을 위해 필요한 형태소분석기에 대해 살펴보려 한다.

지난 글 :

Motivation

진행 중인 프로젝트에서 전처리 과정을 셋팅할 때 어떤 형태소분석기를 적용해야 할지 고민 중이고, 9월 중에는 결정을 해야 하는 상황이다.

처리 속도와 같은 기술적인 관점에서의 검토는 개발자 분들의 조언을 얻을 예정이다. 하지만 데이터의 특징과 분석 목적에 맞는 형태소분석기를 정하려고 하니, 각각을 사용해보고 검토하는 과정이 필요할 것 같다.

실제로 예시 문장/단어를 넣고 형태소분석 결과를 비교하기에 앞서, 형태소분석기를 비교하는 기준들에 대해 정리해보았다.


WHY | 형태소분석기, 왜 필요한가?

텍스트 분석을 할 때는 우선 기초적인 집계를 위해 단어 추출을 하게 된다. 그리고 이 단어를 빈도 순으로 집계한 랭킹 테이블, 워드 클라우드 등이 흔히 시각화로 쓰인다.

따라서 최소한의 의미 단위로 자르는 작업이 필요한데, 이 파싱(parsing) 작업은 단순히 띄어쓰기로 할 수가 없다. 자연어는 아래와 같은 복잡한 특징을 가지고 있기 때문이다.

  • 동사/부사/형용사에 어미 변화가 있다. 즉 어간(stem)과 어미로 구성되어 있다.
  • 한국어는 조사가 붙는 형태의 교착어이다. (ex. 소식/명사 + 이/조사)

그래서 의미를 고려한 형태소분석기가 기본적으로 필요하게 된다.


WHAT | 한국어 형태소분석기, 어떤 것들이 있나?

‘한국어 형태소분석기 비교’로 구글링하면 많은 글들을 찾아볼 수 있다. python을 이용한 텍스트 분석에 관심을 가지면 한번쯤 접해봤을 konlpy 라이브러리를 이용하는 방법들이다.

하지만 나는 3년 전에 데이터 분석 관련 수업을 들을 때도 꼬박 반나절을 설치 문제로 고생해야 했고, 이번에도 몇 번을 설치하고 갈아엎는 시행착오를 겪어야 했다.

  • 대부분의 형태소분석기들은 Java 등 다른 언어로 만들어져 있고,
  • 이를 python으로 사용할 수 있게 감싸놓은 것이 konlpy 라이브러리이며,
  • Java와 konlpy 라이브러리를 연결하는 패키지를 설치하는 등

비개발자가 맞닥뜨리면 당황할 만한 수많은 오류들을 접하게 되었기 때문이다.

따라서 이 글에서는 python을 이용한다는 전제 하에, 초보자도 접근할 수 있는지 설치 용이성 관점에서 3 그룹으로 분류해보려고 한다. (konlpy 설치는 다른 좋은 글들이 많으니 구글링해서 참조해주시기 바란다)

1) KONLPY 패키지 설치를 통해 이용할 수 있는 형태소분석기

  • komoran (코모란)
  • okt (Open Korea Text, 구. 트위터 분석기)
  • kkma (꼬꼬마)

2) KONLPY + 추가 설치 과정이 필요한 형태소분석기

  • mecab (구. 은전한닢 프로젝트)
    • 이전 글들을 보면 Windows에서 사용할 수 없다고 되어 있으나, 최근에는 Windows에도 설치 가능하다.
    • 검색어 ‘mecab windows 설치’로 구글링하면 관련 문서들을 쉽게 찾아볼 수 있다.

3) Linux에서 사용 가능한 형태소분석기

  • khaiii : 카카오 형태소분석기
    • C++로 개발되었고 리눅스에서 사용 가능하며, 2022년 8월 현재 Windows 환경을 지원하지 않는다.
    • Window에서 사용하려면 Cmake라는 컴파일러 설치가 필요하다.
    • 공식 문서 : https://github.com/kakao/khaiii

위에서 언급한 것 외에도 다른 형태소분석기가 더 있겠지만 가장 많이 언급되고 관련 자료를 찾아보기 쉬운 것들만 정리해 보았다.


HOW | 어떤 관점에서 비교할 것인가?

분석할 텍스트를 갖고 혼자서 이런저런 실험을 해봐야 하는 데이터 분석가로서의 관점과, 서비스를 운영하고 유지보수해야 하는 서비스기획자의 관점이 녹아들어 있다는 점을 감안해주시기 바란다.


1. 처리 속도

  • 데이터의 양이 많아지더라도 빠르게 처리할 수 있는가?
  • 이를 분석한 관련 글들이 많으므로, konlpy 패키지 중에는 okt, komoran, mecab의 성능이 좋은 편이다.


2. 설치 접근성

  • 내 분석환경에서 설치가 가능한가? (Windows)
  • 내 개발 지식/경험으로 덜 고생하고 설치/사용이 가능한가? (특히 mecab)
  • 서비스 운영환경에 설치/운영이 가능한가? (Windows/Linux)


3. 사용자 사전 관리 편리성

  • 잘못 잘리는 복합명사/고유명사 관리를 위해 사용자 사전이 필요하다.
    • 예를 들어 ‘카카오톡’이 하나의 명사로 인식되지 않고 ‘카카오’와 ‘톡’으로 잘리는 현상
  • 사용자 사전을 지원하는가?
    • 지원하는지 여부를 각 형태소분석기별로 확인하는 것 자체가 어려웠다.
  • 사용자 사전 관리가 쉽고 편리한가?
    • 사전에 단어를 등록하는 과정이 편리한지
    • 다른 경로를 통해 확보된 단어를 자동 등록하도록 셋팅하는 게 용이한지

다음은 형태소분석기별로 사용자 사전에 대해 조사해본 내용이다.

  • mecab
    • 현 시점에 구글링해서 참고할 자료가 가장 많다.
    • 다만 설치과정과 마찬가지로, 사용자 사전 등록 과정도 비교적 복잡하다.
    • 1)사전에 단어를 등록하고, 2)사전을 빌드하는 단계를 거치게 된다.
  • komoran :
    • 사용자 사전 관리가 쉽고 간편하다.
      • python 코드 앞쪽에 사전 파일을 참고하도록 한 줄만 넣어주면 된다.
      • 사전 파일은 txt로 ‘단어’,’품사’만 지정해주면 된다.
    • 간편한 대신, 적용 우선순위 등 정교한 부분은 설정할 수 없는 것으로 보인다.
    • 이 글에서 사용법을 확인할 수 있다. ([NLP] 코모란(Komoran) 사용자사전 만들기)
  • okt
    • 사용자 사전에 등록/관리하는 방법을 찾지 못했다. (알고 계시면 정정 부탁드립니다)


4. 형태소 분석 성능

  • 형태소 분석기의 본질적인 성능을 비교하는 부분이다.
  • 데이터의 특징과, 분석 목적이 고려되어야 한다.
    • 데이터의 특성 : 뉴스기사 등 장 정제된 문어체 vs. SNS 등 띄어쓰기 파괴, 신조어 등이 많은 구어체
    • 따라서 정량적인 비교보다는 정성적인 비교 측면도 강하고, 사람에 따라 생각이 다를 수 있다.
  • 조사를 통해 어떤 항목들을 비교해야 하는지 파악해가는 중이다.
  • 4번의 본격적인 비교는 다음 글에 이어서 하려 한다.


마무리하며

  • 형태소분석기에 대해 공부하면서 느낀 점은, 표면적으로 가볍게 비교한 글은 많지만 데이터의 특징과 각 형태소분석기의 분석 원리까지 고려해서 깊이 다룬 자료는 적다는 점이었다. 글 쓰신 분의 내공이 깊다고 느껴지는 블로그는 차근차근 아카이브해놓고, 블로그 내의 글들을 차근차근 읽으며 공부하는 과정이 필요할 것 같다.
  • 카카오는 khaiii를 오픈소스로 공개했는데, 네이버는 왜 공개하지 않을까? 우리가 사용하는 일반적인 오픈소스 형태소분석기 형태로 가공하는 데 공수가 들어서일지도 모르겠다. 긍/부정 분류 등의 API는 많이 공개하고 있는데, 공개 여부를 결정하는 기준이 궁금하다.
  • 구매리뷰 등 구어체 특성이 강한 데이터를 분석할 때는 카카오의 khaiii도 한번 사용해보고 싶다.