연구/형태소 분석2014.08.15 06:45

꼬꼬마 저작권이 학교에 있기에 마음대로 코드를 공유하거나 하면 안될 것 같다.

아직까지는 별 문제가 없었지만, 향후에는 문제가 될 여지가 있기에 private으로 전환했다.

이를 위해서 매달 7,000원을 지불하기로 큰 결심을 했다.


이전에 아래와 같은 큰 개선 항목들을 도출했었다.

일정은 없고 러프하게 항목만 도출하였는데, 

3번에 대해서만 JFlex를 이용해서 automata를 직접 작성해서 만드는 것으로 개선을 1차적으로 완료했다.


1) 사전 관리를 위한 새로운 프로젝트 생성

2) 사전 Compile & Loading 통합

3) Tokenizer 성능 개선 (품질 및 속도)

4) 확률 모델 처리 모듈 오류 수정

5) Lucene Wrapper 개발

6) Socialization


기존 성능의 문제가 확률 모델에서 오는 것들이 있는데,

HMM의 변형을 사용하는 현재 상태에서는 더이상 개선의 여지가 크지는 않을 것 같다.

따라서, Conditional Random Field를 적용해 볼까 생각중이다.

하지만, 이를 위해서는 전체 구조를 새로 만들어야 하며, 기존의 구조적 성능상 장점들을 살릴 수 있는 방안들을 마련해야할 것 같아서 고민 중이다.

어쨌든, 관련 논문도 있고 하니 한단계씩 차근차근 수행하면서 개선해 볼까 생각중이다.


관련 작업들은 아래의 것들이 필요하지 않을까 생각중이다.

1) CRF + 기존 꼬꼬마 특성 결합 방안

2) CRF를 위한 sejong 말뭉치 기반 학습 데이터 구축

3) 변환 사전 생성

4) 성능 검증 및 최적화


CRF와 관련하여 maximum entropy 등 관련 잘들과 함께 과정을 쭉 정리하면 좋을 것 같다.

Posted by 락끄
연구/형태소 분석2014.02.27 15:33

마지막 블로그가 무려 6년 전이다. 

학교 졸업 후 꼬꼬마에 대한 개발을 거의 하지 않고 있긴 했지만, 졸업 직전까지 수행한 작업으로 인해서 나름 꼬꼬마의 성능은 많이 향상 되었다.

현재 버젼은 최근 마지막 배포 버젼(2011)에 비해서는 확률 모델 개선, 속도 개선 (무려 300배 가량 향상)이 되었다. 

하지만 아직도 해야할 일들이 많다.





1) 사전 관리를 위한 새로운 프로젝트 생성

아무래도 사전 기반이다보니 사전에 대한 의존성이 큰데, 신조어를 추가해주지 못하다 보니 성능이 떨어지는 부분들이 계속 발견된다. 이를 개선할 수 있도록 사전 관련 프로젝트를 하나 추가해서 독립적으로 개선해 나갈 생각이다.


2) 사전 Compile & Loading 통합

꼬꼬마는 사전을 기반으로 후보 탐색을 하기에 사전의 성능에 따라서 속도가 많이 좌지우지 된다. 이를 위해 지인의 도움을 통해 속도와 메모리 사용을 현격히 개선하였는다. 하지만, 이로 인해 사전에 대한 compile과정이 필요하게 되어서, 항상 사전이 변경될 때마다 사전에 대한 compile과정이 추가되어야 했다. 이를 수정하여 compile과 loading을 runtime시에 수행할 수 있도록 할 예이다.


3) Tokenizer 성능 개선 (품질 및 속도)

사전 탐색 등 후보 생성은 잘하고 있지만, Tokenizer를 이용해서 단순 분석할 수 있는 것들이 잘 처리가 안된다. 성능 문제로 인해서 추가하지 않기도 했는데, automata를 잘 적용해서 Tokenization 품질 및 성능을 향상 시킬 계획이다. 특히 JFlex와 같은 library를 활용하는 방법과 직접 코딩을 하는 방법에 대한 성능 비교를 통해 최적 방법을 찾아볼 생각이다.


4) 확률 모델 처리 모듈 오류 수정

Viterbi algorithm을 이용하여 후보 생성 및 후보 우선 순위를 계산하게 구현이 되어 있다. 확률 모델 자체에오류가 있는 것 같은데, 이를 수정해야 기대하는 분석 품질을 얻을 수 있을 것 같다. 현재는 종종 이상한 분석 결과가 만들어 진다.


5) Lucene Wrapper 개발

현재 이수명님이 제작하신 Lucene Korean Analyzer가 Lucene 기반의 검색 엔진을 위한 한글 인덱스 생성에 활용될 수 있다. 최근에는 정식으로 arirang으로 등록되는 것 같은데, 꼬꼬마도 Lucene에 활용될 수 있도록 wrapper를 만들 생각이다. Lucene의 인덱싱 메카니즘을 정확히 이해할 필요가 있을 것 같고, 해당 모듈에 대한 이해가 부족한 상황이라 공부하면서 진행할 계획이다.


6) Socialization

처음에는 알아서 사용하고, 몇몇 개발자 분들은 개발에 활용했다고 메일도 보내고 그랬었는데, 지금은 관리가 안되고 있기도 하고 활용도가 많이 떨어진 것 같다. 나름 경쟁력 있는 성을을 갖추었다고 생각하는데, 더 많은 사람들이 활용할 수 있도록 해야할 것 같다. 이를 위해서는 좀더 체계적인 프로세스를 따를 수 있는 개발 환경을 만드는 것을 선행해야하지 않을까 생각한다.


나름 가장 오랜 시간 많은 에너지를 쏟아 부은 것인데 활용이 되지 못하고 있어서 안타깝다.

많이 사용해서 세상에 도움이 됐으면 좋겠다.


See.

- http://kkma.snu.ac.kr/

https://github.com/therocks/kkma



Posted by 락끄
연구/형태소 분석2008.03.21 15:22

처음으로 형태소 분석기를 만들어보고 개선한지 대략 2년 정도 된 것 같다. 단순 사전을 바탕으로 개발을 해오던 것이 이제는 나름 다양한 기술들을 적용시켰다. 여전히 즉흥적이고, 수작업을 요하는 작업들이 많이 있지만, 다양한 업그레이드 거친 것 같다.

  • 사전 기반 형태소 태깅
  • 동적 프로그래밍 적용
  • 비트 기반 오퍼레이션으로 성능 개선
  • 사전 정리 및 사전의확장성 개선

다른 방법들은 논문을 보고 구현해보면 되는 것들이었는데, 사전을 정비하는 것은 개인이 하기에 너무 힘든 일이고 쏟은 노력이 정말 눈물날 정도였던 것 같다. 일일이 수만 단어들을 보면서 눈 침침해지면서 단일 명사인지 복합명사인지 구분하고 태그 정보도 수정하고, 어휘가 단일 태그를 갖지 않도록 하고 참 많은 노력을 했다. 그러면서 국어에 대한 이해도 더 풍부해지고, 규칙, 불규칙 어휘들을 처리하면서 고생도 했고 말이다.

개인적으로 가지고 있던 생각이 어휘의 의미를 명확히 하려면 통계적 기법을 적용하는데에는 한계가 있다고 보고 있었다. 문장내에서의 단어나 형태소의 역할은 문장에 의해서 결정되는 것이고, 각 "단어" 수준에서 그러한 것들이 상호 고려되어야 한다고 생각한다. 이를 위해 당연히 풍부한 사전이 필요하였는데, 작년 말에 21세기 세종 계획에서 전자사전을 발표했는데, 정말 훌륭한 수준이다. 미등록어에 대한 처리를 좀더 고려하면 되겠지만, 사전만으로 본다면 정말 풍부한 의미와 어휘 용례를 잘 표현하고 있어 이를 통해 형태소 분석기를 개선한다면, 형태소 분석과 띄어쓰기와 구문 분석을 단번에 처리할 수 있지 않을까 생각한다.

NLP연구실도 아니고 DB연구실에서 연구실 연구 주제와 달리 혼자만 이걸 하고 있어서 정체성에 대한 고민을 하고 있었는데, 교수님께서도 우리 연구실의 Semantic Core Module의 하나로 가지고 있으면 좋을 것이라는 말씀을 해주셔서 나름 힘도 난다. 일단 해야할 일들이 많겠지만, 일단 사전을 형태소 분석할 수 있는 형태로 구성하고, 이를 가단히 시각화 하는 것으로부터 시작하려고 한다. 이를 위해 어휘간의 관계를 모델링하고, 저장구조를 확립하는 과정이 있어야 할 듯 하다. 기존에는 파일에 간단한 형태소 사전을 구성하였는데, 앞으로는 좀더 다른 구조로 가야할 듯 하다. 다양한 관계를 표현할 수 있는 사전과 형태소간의 상관관계를 표현할 수 있도록 모델링 할 것이다.

21세기 세종 계획의 결과물이 너무 잘 되 있어서 상당히 놀랐고, 이를 활용할 수 있다는 기대에 조금 들뜨기도 한다. 빨리 추진해서 좋은 결과물을 만들 수 있도록 해야겠다.

아마 다음과 같은 작업들이 추가적으로 이루어지지 않을까 생각한다.

  • 어휘 관계 모델링
  • 세종 계획 전자 사전 포팅
  • 사전 시각화
  • 형태소 분석기 적용 방안 수립
  • 형태소 분석기에 적용
  • 통계적 기법 적용으로 성능 개선 방안 마련
  • 통계 기법 적용을 위한 데이터 수집 및 학습
  • 통계 기법 적용

21세기 세종 계획 http://www.sejong.or.kr

Posted by 락끄