S/W 테스트 전에 자체적으로 요구사항을 만들어 해당사항이 충족되는 솔루션 위주로 테스트 제품군을 선정하였는데, 자체 요구사항은 다음과 같습니다.
1. 오픈소스 여부
2. 사용자 사전 지원 여부
상기 2가지 요구사항을 충족하는 솔루션으로 서베이를 진행하였고 서베이 결과 아래의 제품군들로 압축되었습니다.
A. MeCab
B. HanNanum
위의 솔루션은 모두 오픈소스(Apache, GPL)이며, 사전기반으로 작동하기 때문에 커스텀 사전을 제작할수 있다는데 의미가 있습니다.
각 솔루션별로 장단점을 파악해 볼까요?
MeCab 은 2006년 일본어 형태소 분석기에서 시작되어 2013년 한국어 분석기로 fork 되었습니다.
정식 프로젝트명은 은전한닢 프로젝트입니다. (https://bitbucket.org/eunjeon/mecab-ko)
지원 기능은, 형태소 파싱, 품사태깅, 개체명 추출 입니다.
게다가 현재 오픈 검색엔진의 양대산맥이라 할수있는 Solr 와 Elastic Search 모두 지원합니다.(Solr 의 경우 4.8.1 에서 동작 확인)
개발 환경은 아래와 같습니다.
지원 OS : Linux, Windows
개발언어 : C++
사전형식 : csv
개발 언어가 C++ 인데 Java 기반인 Lucene 검색엔진에서 어떤식으로 동작하느냐..저도 처음엔 이것이 궁금하여 소스를 들여다 보았는데, 의외로 답은 간단하더군요.
MeCab-Ko 는 Solr 와 Elastic Search 형태소 분석기에 JNI(Java Native Interface)를 사용합니다.
미리 mecab 시스템 라이브러리가 OS 에 설치되어 있어야 합니다.
개발자분이 Linux 용 configure, make tool 등을 모두 만들어 두었더군요. 소스 컴파일 하여 설치하면 됩니다.
단점이라면, Linux 시스템에 익숙하지 않은 사용자는 사용하는데 어려운점이 있을수 있겠군요.
그럼 이번엔 카이스트에서 개발한 HanNanum 분석기를 볼까요?
정식 사이트 주소는 (http://semanticweb.kaist.ac.kr/home/index.php/HanNanum) 입니다.
한나눔에서 이야기하는 특징은 아래와 같습니다.
지원 OS : Platform independent
개발언어 : Java
사전형식 : txt
지원 기능은, 형태소 파싱, 품사태깅, 명사 추출 입니다.
사용자 사전은 보시면 알겠지만, 매우 간단한 구조로 구성되어 있어 커스텀 제작에 편리하게 되어있습니다.
개발언어로 Java를 사용하다 보니 간단히 Eclipse 에 프로젝트 포팅이 가능합니다.
여기까지 각 S/W의 기술적인 백그라운드를 살펴보았고,
다음은 우리 모두가 궁금해 하는, 정확도에 대해 테스트 해보겠습니다.
제가 형태소 분석기를 테스트 할때 가장 먼저 시험 해보는 문장이 있습니다.
"아버지가방에들어가신다."
위 문장에 대해 정확한 형태소 분석을 하려면 어떤식으로 진행하여야 할까요?
아마도 언어학자는 위 문장의 형태소 분석 방법 만으로도 논문 몇편은 쓰고도 남을 것입니다. :)
다음은 테스트 결과 입니다.
1. MeCab
>> input 아버지가방에들어가신다
<< output
아버지 NNG,*,F,아버지,*,*,*,*,*
가 JKS,*,F,가,*,*,*,*,*
방 NNG,*,T,방,*,*,*,*,*
에 JKB,*,F,에,*,*,*,*,*
들어가 VV,*,F,들어가,*,*,*,*,*
신다 EP+EC,*,F,신다,Inflect,EP,EC,시/EP+ㄴ다/EC,*
2. HanNanum
>> input 아버지가방에들어가신다
<< output
아버지가방에들어가/unk+이/jp+시/ep+ㄴ다/ef
두 분석기에 대한 결과가 사뭇 다르게 나옵니다. 위의 결과로만 봐서는 MeCab 의 정확도가 HanNanum 에 비해 압승입니다. (주) 품사정의는 아래 링크 참조
두 분석기에 대한 결과가 사뭇 다르게 나옵니다. 위의 결과로만 봐서는 MeCab 의 정확도가 HanNanum 에 비해 압승입니다. (주) 품사정의는 아래 링크 참조
그러나 당연한 이야기지만 정확도는 위처럼 간단한 문장만으로 판단해서는 안됩니다.
다양한 매체들로 다면 분석을 한후 평균치를 측정해야 하므로 여러번에 걸쳐 테스트를 진행합니다. 1차 분석대상은 뉴스와 블로그로 선정해보았습니다.
뉴스는 IT 관련 뉴스(지디넷 포스팅)로 블로그는 IT 와 관련이 없는 내용으로 분석을 해보았습니다.
아래는 데이터 샘플 입니다.
1. 지디넷 뉴스 (분석결과는 사람이 읽기 쉽게 일부 가공하였습니다)
아래는 데이터 샘플 입니다.
1. 지디넷 뉴스 (분석결과는 사람이 읽기 쉽게 일부 가공하였습니다)
원문 | 상용분석기 (S사) | MeCab | HanNanum |
---|---|---|---|
한국에서 IT분야 '남초현상'은 당연하게 여겨진다. 남자들만 우글거리는 사무실은 종종 유머의 소재로도 다뤄진다. 남초현상은 개발자 세계에서 더욱 두드러진다. | 한국:한국:NNP
에서:에서:GAC IT:IT:ASCII 분야:분야:NN ':':PUNC 남초:남초:NN 현상:현상:NN ':':PUNC 은:은:GAX 당연하게:당연하다:AJ 여겨:여기다:VB 진다:지다:VB .:.:PUNC 남자:남자:NN 들:들:GAX 만:만:GAX 우글거리는:우글거리다:VB 사무실:사무실:NN 은:은:GAX 종종:종종:AD 유머:유머:NN 의:의:GAC 소재:소재:NN 로:로:GAC 도:도:GAX 다뤄:다루다:VB 진다:지다:VB .:.:PUNC 남초:남초:NN 현상:현상:NN 은:은:GAX 개발자:개발자:NN 세계:세계:NNP 에서:에서:GAC 더욱:더욱:AD 두드러진다:두드러지다:VB |
한국 NNP,지명,T,한국,
에서 JKB,*,F,에서, IT SL,,*,*,* 분야 NNG,*,F,분야, ' SY,,*,*,* 남초 NNG,*,F,남초, 현상 NNG,*,T,현상, ' SY,,*,*,* 은 JX,*,T,은, 당연 XR,*,T,당연, 하 XSA,*,F,하, 게 EC,*,F,게, 여겨진다 VV+EC+VX+EF,*,F,여겨진다, . SF,,*,*,* 남자 NNG,*,F,남자, 들 XSN,*,T,들, 만 JX,*,T,만, 우글거리 VV,*,F,우글거리, 는 ETM,*,T,는, 사무실 NNG,*,T,사무실,Compound,*,*,사무+실, 은 JX,*,T,은, 종종 MAG,성분부사/시간부사,T,종종, 유머 NNG,*,F,유머, 의 JKG,*,F,의, 소재 NNG,*,F,소재, 로 JKB,*,F,로, 도 JX,*,F,도, 다뤄진다 VV+EC+VX+EF,*,F,다뤄진다, . SF,,*,*,* 남초 NNG,*,F,남초, 현상 NNG,*,T,현상, 은 JX,*,T,은, 개발자 NNG,*,F,개발자,Compound, 세계 NNG,*,F,세계, 에서 JKB,*,F,에서, 더욱 MAG,성분부사/정도부사,T,더욱 두드러진다 VV+EF,*,F,두드러진다, . SF,,*,*,* |
한국에서
한국/unk+에서/jca IT분야 IT/f+분야/ncn '남초현상'은 '남초현상'/unk+은/jxc 당연하게 당연/ncps+하/xsms+게/ecs 여겨진다 여기/pvg+어/ecx+지/px+ㄴ다/ef . ./sf 남자들만 남자들/ncn+만/jxc 우글거리는 우글거리/pvg+는/etm 사무실은 사무실/ncn+은/jxc 종종 종종/mag 유머의 유머/ncn+의/jcm 소재로도 소재/ncn+로/jca+도/jxc 다뤄진다 다루/pvg+어/ecx+지/px+ㄴ다/ef . ./sf 남초현상은 남초현상/unk+은/jxc 개발자 개발자/ncn 세계에서 세계/ncn+에서/jca 더욱 더욱/mag 두드러진다 두드러지/paa+ㄴ다/ef |
분석결과중 눈에 띄는것 위주로 살펴보겠습니다. 우선 복합명사(Compound noun) 분석결과 부터 볼까요.
상기 원문에서 '남초현상' 이라는 단어가 눈에 띕니다. 대표적인 복합명사로서 형태소 추출과 품사태깅이 어떤식으로 진행되었는지 살펴봅시다.
상용분석엔진 : 남초(일반명사:NN), 현상(일반명사:NN)
MeCab : 남초(일반명사:NNG), 현상(일반명사:NNG)
HanNanum : 남초현상(미등록 명사:unk)
상용분석엔진(이하 S엔진)의 형태소 분석기와 MeCab은 '남초' 와 '현상'의 두 형태소를 일반명사로 분석한 반면, HanNanum 분석기는 '남초현상'에 대해 미등록명사(unk)라는 결과를 출력 합니다.
HanNanum 은 사전에 있지 아니한 단어일 경우, 명사일것이라 추측하는 단어에 대해 미등록 명사(unknown) 태깅을 합니다. (주) HanNanum 플러그인 중, UnknownMorphProcessor 를 사용하면, 미등록명사(unk)를 자체적으로 판단하여 일반명사 와 고유명사로 태깅하여 출력함.
위의 경우 어떤결과가 맞는걸까요.
분석을 진행하고자 하는 Domain 별로 S엔진,MeCab의 결과가 정답이 될수도 있고, 또는 HanNanum의 결과가 정답일 수도 있습니다.
예를 들면, 문서를 색인하여 검색결과를 제공하는 검색엔진의 경우는 '남초현상' 이라는 단어가 문서내에 있을때 사용자가 '남초현상' 을 검색 하였을때 해당 문서가 검색결과로 나오는것은 당연한것입니다.
또한 '남초' 나 '현상' 으로 검색을 하여도 '남초현상'이 포함된 문서가 출력이 되어야 바람직 할것입니다.
그러기에 위의 S엔진,MeCab 분석기의 결과처럼, 복합명사인 '남초현상'을 형태소 단위로 쪼개어 '남초' 와 '현상', '남초현상' 3개의 단어로 색인하는 것이 검색엔진 입장에선 바람직합니다.
그러나, Domain 이 검색엔진이 아니라 특정 키워드에 대한 일자별 변화 추이를 살펴봐야 한다던지, 키워드 자체에 대한 분석을 요구하는 domain 일 경우, HanNanum 결과가 좀더 바람직합니다.
예를들면 후자의 경우, 상기 원문에서 의미있는 키워드 및 분석대상은 '남초현상' 그 자체 이지, 형태소 분석된 '남초' 나 '현상' 은 분석 대상에서 제외하는게 바람직합니다.
포털사이트 실시간 검색어 랭킹을 automated 한다고 하였을때 1위에 '남초현상' 이 있고, 2위에 '남초' 3위에 '현상' 이 있다고 생각해보세요 :(
포털사이트 실시간 검색어 랭킹을 automated 한다고 하였을때 1위에 '남초현상' 이 있고, 2위에 '남초' 3위에 '현상' 이 있다고 생각해보세요 :(
이처럼, 형태소를 추출해야 하는 도메인이 별도로 있고, 형태소가 아닌 키워드 중심으로 분석해야 할 도메인이 있습니다.
이것은 무엇을 의미하는 걸까요.
이미 아시는분도 계시겠지만 업무성격에 따라 형태소 분석기의 정확도는 다른 방식으로 측정되어야 한다 입니다.
앞서 이야기 하였지만, 검색엔진의 경우 S엔진 과 MeCab 의 분석결과가 좀더 정확합니다.
그러나 포털사이트의 실시간 키워드 랭킹이나 원시 키워드에 대한 인터넷 파급력을 분석할 경우 HanNanum 의 분석결과가 좀더 적합합니다.
물론 각 S/W의 분석 결과를 제각기 업무에 맞게 재가공(커스터마이징)하여 쓸수도 있지만, 이경우 원시성 훼손 과 동시에 잠재적 버그 가능성을 한층더 높인다는 의미를 내포하기도 합니다.
이처럼, 업무성격에 맞는 S/W를 다양한 분석을 통하여 자신의 Domain 에 최적인 S/W를 선택하시기 바랍니다.
분석에 사용된 품사사전및 분석결과 원본파일은 여기 를 클릭하시면 확인 가능합니다.
이것은 무엇을 의미하는 걸까요.
이미 아시는분도 계시겠지만 업무성격에 따라 형태소 분석기의 정확도는 다른 방식으로 측정되어야 한다 입니다.
앞서 이야기 하였지만, 검색엔진의 경우 S엔진 과 MeCab 의 분석결과가 좀더 정확합니다.
그러나 포털사이트의 실시간 키워드 랭킹이나 원시 키워드에 대한 인터넷 파급력을 분석할 경우 HanNanum 의 분석결과가 좀더 적합합니다.
물론 각 S/W의 분석 결과를 제각기 업무에 맞게 재가공(커스터마이징)하여 쓸수도 있지만, 이경우 원시성 훼손 과 동시에 잠재적 버그 가능성을 한층더 높인다는 의미를 내포하기도 합니다.
이처럼, 업무성격에 맞는 S/W를 다양한 분석을 통하여 자신의 Domain 에 최적인 S/W를 선택하시기 바랍니다.
분석에 사용된 품사사전및 분석결과 원본파일은 여기 를 클릭하시면 확인 가능합니다.
- References
- 은전한닢 프로젝트 (https://bitbucket.org/eunjeon/mecab-ko)
- HanNanum 분석기 (http://semanticweb.kaist.ac.kr/home/index.php/HanNanum)
- 품사주석 (http://ko.wikipedia.org/wiki/%EB%A7%90%EB%AD%89%EC%B9%98_%EC%A3%BC%EC%84%9D#.ED.92.88.EC.82.AC_.EC.A3.BC.EC.84.9D)
- 말뭉치 (http://ko.wikipedia.org/wiki/%EB%A7%90%EB%AD%89%EC%B9%98)