한국어 형태소 분석기(POS) 분석 - 3편. 형태소 분석기 비교

metterian·2021년 3월 5일
5

코모란(Komoran)


  • 개발: Shin285 (github에 공개), shinware
  • 개발언어: java
  • 알고리즘: HMM

장점

여러 어절을 하나의 품사로 분석 가능함으로써 형태소 분석기의 적용 분야에 따라 공백이 포함된 고유명사(영화 제목, 음식점명, 노래 제목, 전문 용어 등)를 더 정확하게 분석할 수 있다.
개발자가 지속적으로 업데이트
KOMORAN만 유일하게 자소가 분리된 문장이나 오탈자에 대해서도 괜찮은 분석 품질을 보여준다.
한계점 다른 형태소 분석기에 비해 로딩시간이 길다. 하지만 분석속도는 빠름,
띄어쓰기 없는 문장 분석에 취약한편

업데이트 (2016)

속도 개선

  • 버전 2.0: 초당 0.4MB 분석 (MB/sec)
  • 버전 3.0: 초당 1.0MB 분석 (MB/sec)

기능 추가

  • 형태소 분석 결과로 입력 문장 내 형태소 위치 정보 제공
  • 형태소 분석 결과 중 명사 추출 기능 제공
  • 형태소 분석 결과를 plain text로 제공
  • Training 모듈 추가

특징

  • 빠른 속도와 보통의 분석 품질
  • 자바가 설치된 환경이라면 어디서든 사용가능
  • 자체 제작한 library들만 사용해 외부 library와의 의존성 문제가 없음
  • 자소 단위 처리, TRIE 사전 등으로 약 50MB 메모리 상에서도 동작 가능
  • 사전 관리 용이
  • 타 형태소 분석기와 달리 공백이 포함된 형태소 단위로 분석 가능



한나눔(Hannanum)


  • 개발: KAIST CILab
  • 개발언어: java
  • 알고리즘: HMM
  • 사전: 시스템 사전(카이스트 코퍼스를 기반으로 구축), 사용자 사전, 숫자 사전(오토마타를 이용한 프로그램)

태그

집합 총 69개의 확장된 카이스트 태그셋을 기본으로 사용, 현재는 6개 상위 태그에 대해서 20개의 새로운 태그를 세분화하여 사용

한계점

띄어쓰기가 없는 문장은 분석 품질이 좋지 않다. 정제된 언어가 사용되지 않는 문서에 대한 형태소 분석 정확도가 높지 않은 문제점

특징

전체 시스템은 각 모듈들의 조합으로 구성되며, 현재까지 개발된 모듈은 입력 필터, 문장 분리기, 형태소 분석기, 미등록어 처리기, 형태소 분석 후처리기, 그리고 태거가 있다.




Kkma(꼬고마)


  • 개발: Seoul University IDSLab
  • 개발언어: Java
  • 사전: 세종계획 산출물
  • 태그집합: 총56개의 확장된 세종 태그셋을 기본으로 사용

장점

띄어쓰기 오류에 덜 민감한 한글 형태소 분석기

알고리즘

기본적으로 동적 프로그래밍을 이용해서 모든 가능한 형태소 분석 후보를 생성하고 적합하다고 판단되는 순서대로 분석 후보들을 정렬
상용 형태소 분석기에 뒤지지 않는 성능을 보이기 위해서 다양한 최적화 방법을 이용함

  1. 기분석 사전을 이용한 인접 조건 검사 방식을 이용(속도를 위해)
  2. 몇 가지 휴리스틱, 히든 마르코프 모델(HMM: Hidden Markov Model)에 기반한 확률 모델을 이용(품질을 위해)

특징

구분분석기 일부 탑재되었다. 세종품사태그에 가장 가깝고 분석 범주 또한 가장 많다.

한계점

분석시간이 Knlpy 중에서 가장 오래 걸린다. 정제된 언어가 사용되지 않는 문서에 대한 형태소 분석 정확도가 높지 않은 문제이 있다.




Mecab


  • 개발: 은전한닢 프로젝트
  • 개발언어: C/C++

한나눔이나 꼬꼬마(kkma) 분석기 프로젝트 등이 진행되고 있긴 하지만, 형태소 분석기임에도 띄어기 구분의 오류나 공개 소스를 구하기 어렵다는 문제등의 문제들이 있어 이런 문제에 어떤 기여를 할 수 있을 것인지 고민하는 차원에서 은전한닢(mecab) 프로젝트가 시작 되었다.

장점

새로운 사전 추가 기능

지능형 형태소 분석기(분석 결과를 수작업으로 수정가능), MACH, HAM, KKMA, UTagger는 분석 사전이 분석기에 포함 되어 있어 새로운 단어 추가 불가능 → Mecab이 이를 해결

CRF 채용하여 HMM 보다 성능 향상

CRF 값 추정 가능, 추가적으로 Twitter가 공개 되기 전, 띄어쓰기에서 가장 좋은 성능과 속도 정확도 모두 좋은 성능을 보여 주었다.

한계점

미등록어 처리 문제점, 동음이의어 처리문제




Twitter


  • 개발: 트위터
  • 개발언어: 스칼라/자바

장점

기존에 미캡이 띄어쓰기에서 가장 좋은 성능을 보여주었지만 트위터 등장 후 트위터가 가장 좋은 성능을 보여준다. 또한 어근화(stemming)이 가능하다. Kkma(꼬꼬마) 대비 분석 범주가 다소 적은 편이지만 이모티콘이나 해쉬태그 같은 인터넷 텍스트에 특화된 범주가 추가 되었다. 이로 인해 이모티콘이나 비표준어, 비속어 등이 많이 포함되어 있는 정제되지 않은 데이터에 대해서 강점을 갖는다.

한계점

미등록어 처리 문제점, 동음이의어 처리문제, 분석 범주(사용가능한 태그)가 다른 형태소 분석기들에 적음,

특징

정규화, 토큰화, 어근화(Stemming),

Twitter 형태소 분석기만이 유일하게 어간화(stemming)기능을 제공한다.

아직 KoNLPy 단에서 dictionary를 업데이트 하는 방법을 제공하고 있지는 않지만 전처리 또는 후처리를 통해 처리하면 될 것이다. 처리하는 양이 GB인 경우 속도가 빠른 Mecab을 사용하는 것이 좋다.




Khaiii


입력된 각 음절에 대해 하나의 출력 태그를 결정하는 분류 문제로 접근한 딥러닝 모델이다.

  • 개발: 카카오
  • 개발언어: C++

장점

음절 기반 모델

한국어 형태소 분석 결과는 원형 복원, 불규칙 활용 등의 이유로 입력 문자와는 형태와 길이가 달라짐.
ex) ‘져줄래’와 같은 입력 어절의 분석 결과는 ’지/VV + 어/EC + 주/VX + ㄹ래/EF’와 같이 출력의 길이와 형태 모두 쉽게 예측이 가능하지 않음
이러한 길이의 불일치 문제가 있기에 기계학습 분류기에 기반한 모델의 출력을 설계하는 부분이 중요

알고리즘

신경망 알고리즘들 중 CNN(Convolutional Neural Network)을 사용한다.

자연어 처리에 많이 사용하는 LSTM(Long-Short Term Memory, 장단기 메모리)와 같은 RNN(Recurrent Neural Network, 순환 신경망) 알고리즘은 속도 면에서 활용도가 떨어질 수 있다.

최신의 딥러닝 방법

기존에 고전적인 HMM(Hidden Markov Model, 은닉 마르코프 모델), CRF(Conditional Random Fields, 조건부 랜덤 필드) 등의 방법들은 트라이(TRIE) 사전을 이용하여 들쑥날쑥한 형태의 격자(lattice)를 비터비(Viterbi) 알고리즘을 통해 최적의 경로를 탐색하는 형식으로 많이 접근하였다.

Khaii의 경우seq2seq(sequence to sequence) 방식을 사용하여 '져', '줄', '래' 라는 입력 원문에 대해 인코더를 통해 latent 벡터를 생성하고 디코더를 통해 차례대로 '지/VV', '어/EC', '주/VX', 'ㄹ래/EF' 라는 출력을 생성한다. (seq2seq 방식에서 주로 사용하는 RNN은 속도가 느리고, 입력 음절과 출력 형태소 간의 연결 정보가 끊어져 형태소 분석 결과가 입력의 어느 부분으로부터 나왔는지에 대한 정보가 소실되는 단점이 존재한다.)

업데이트

  • 데이터 기반으로 동작하므로 기계학습 알고리즘(딥러닝) 사용
  • 기존의 분석기(dha1, dha2)는 규칙 기반으로 동작하기 때문에 사람이 직접 지속적으로 규칙 입력, 사전과 규칙 기반
  • 첫번째 버전: dha1
  • 두번째 버전: dha2

특징

Kakao Hangul Analyzer III”의 첫 글자들만 모아 만든 이름으로 카카오에서 개발한 세 번째 형태소 분석기

  • 세종 코퍼스를 이용하여 CNN(Convolutional Neural Network, 합성곱 신경망) 기술을 적용해 학습한 형태소 분석기
  • 디코더를 C++로 구현하여 GPU 없이도 비교적 빠르게 동작하며, Python 바인딩을 제공하고 있어서 편리하게 사용할 수 있다.
  • 학습에 사용한 코퍼스는 국립국어원에서 배포한 21세기 세종계획 최종 성과물을 카카오에서 일부 내용을 추가하거나 오류를 수정한 것, 전처리 과정에서 오류가 발생하는 문장을 제외하고 약 85만 개의 문장, 그리고 1천만 개 어절의 코퍼스를 사용하여 학습을 진행하였다.



Conclusion


형태소 분석기의 각 장점과 단점에 따라 프로젝트에서 사용할 형태소 분석기를 사용해야 한다. Konlpy(코모란, 한나눔, kkma, mecab, twitter)에서 선택하여 사용 하는 것을 추천한다. Konlpy 안에서 각 형태소의 장단점을 표로 정리 하면 다음과 같다.

코모란한나눔KkmaMecabTwitter
장점자소 분리 가능, 오탈자 분석 가능, 고유명사 분석 가능로딩시간이 빠른편띄어쓰기 오류에 덜 민감새로운 사전 추가 가능, (twitter 공개전) 띄어쓰기에서 가장 좋은 성능, 속도, 정확도띄어쓰기 성능이 가장 좋다, stemming 가능, 이모티콘, 해쉬태그 같은 인터넷 텍스트에 강함 , 비속어, 비표준어도 분석 가능
한계점로딩 속도가 길다, 띄어쓰기 없는 문장분석에 취약하다띄어쓰기 없는 문장 분석에 매우 취약, 정제된 언어가 사용되지 않는 문서에 대한 형태소 분석 정확도가 높지 않은 문제점분석 시간 오래 걸림, 정제된 언어가 사용되지 않는 문서에 대한 형태소 분석 정확도가 높지 않은 문제점미등록어 처리 문제, 동음의어 처리 문제미등록어 처리 문제, 동음의어 처리문제, 분석 범주 적은편

Twitter를 제외한 나머지는 어간화(stemming)을 제공하고 있지 않다.

예를 들어, 리뷰 데이터의 경우 띄어쓰기 오류, 줄임말, 이모티콘, 비속어 등이 많고, ''좋은데'', ''좋아요", "좋아", "좋지만" 등 같은 의미를 가지는 단어의 어근화(stemming)이 필요하다. 그러므의 Twitter를 사용하는 것이 좋다. 하지만, 어근화 기능이 필요하지 않다면 Mecab 사용을 권장한다. 일반적인 상황에서 띄어쓰기가 되지 않은 문장에서 가장 좋은 형태소 분석 성능과 높은 정확도를 보여 주기 때문이다.



Reference

🔖Notion

  • "한국어 자동 형태소 분석 사전의 개발", 스가이 요시노리, 2015

  • "형태소 분석 및 품사 태깅", KoNLPy, 2015

  • "중의성 해결을 위한 말뭉치 기반의 한국어 형태소분석기의 설계 및 구현", 정희연, 2001

  • "온톨로지 지식베이스를 활용한 의미기반 콘텐츠 검색 기술에 관한 연구", Xiuyan Cai et. al, 2012

  • "형태소 분석 결과를 사용한 통사 지표 자동 부여", 박정열 외, 2013

  • "워드임베딩과 그래프 기반 준지도학습을 통한 한국어 어휘 감성 점수 산출", 서덕성 외, 2017

  • 형태소 분석 '은전한닢' 프로젝트와 MeCab(메카브),

  • "인스타그램 기반의 전이학습과 게시글 메타 정보를 활용한 페이스북 스팸 게시글 판별", 2017, 김준홍 외

profile
내일을 기록하기 위해서 오늘을 기록합니다 🤗

0개의 댓글