Candle

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

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

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

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

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

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

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

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

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

Trackback 0 | Comments 4

형태소 분석기에 대한 다양한 문의가 오고, 몇몇 분들이 라이센스에 대한 문의를 해주셔서 이를 정리하고자 한다. 정리하면서 몇 가지 이상한 분석 결과를 만들어내는 것들을 수정해서 재배포 한다.

1. Korean Morpheme Analyzer V0.9.1 by therocks.
이전 버젼들은 모두 삭제해서 지금 올라가는 것을 사용하는 것을 권장한다.


* 수정된 점

1) 부정확한 띄어쓰기 추가 개선
'검색서비스를' 과 같은 문장을 처리할 때, 속도를 향상시키기 위해서 앞부분에서 적당히 검색결과가 나오면 띄어쓰기 처리를 해주고 다음 문자열들을 처리하도록 하였는데, 검색(명사)+서(조사)+[ ]+비(명사) 가 되는 순간 잘라버려서 서비스가 정상적으로 추출되지 않는 문제가 있었는데, 이를 5글자 이후에 처리하도록 하여 5글자 내에서의 부정확한 띄어쓰기를 없앴다. 5글자가 넘는 경우에 대해서는 추후 고려해야할 것같고, 아마도 속도가 좀 느려질 것 같다.

2) 미등록어 처리 기능 개선
미등록 어휘가 이상한 사전 어휘들로 완결되지 않은 상태(어미나 나타날 것이라 고려하였지만, 나타나지 않고 끝나는 경우)에서 조합되는 경우가 발생하는데, 이를 위해 미등록어를 prune하는 것을 방지하도록 수정하였다.

2. Licensing
생각외로 많은 분들이 관심을 주시고, 프로그램을 사용하시는 것 같아서 이전에 고민하지 않던 라이센스를 고려해야할 것 같다. 사전에 대한 문제가 아직 남아 있지만, 일단은 GPL로 진행할 것이다. 아직 정확한 체계를 잡지 않았지만, Dual License 를 취해서 개인이나 비영리에 대해서는 무료로 하고, 영리에 대해서는 다른 라이센스를 적용하고자 한다. 처음부터 많은 사람들이 활용할 수 있는 형태소 분석기를 배포하는 것이 목적이었기 때문에, 돈에는 별 욕심이 없다.

기본적으로 다음의 네 가지의 원칙을 가지고 라이센싱에 대해서 고민하고자 한다.

  • 소스와 내부 데이터의 수정과 활용은 자유롭게 할 수 있다.
  • 소프트웨어에 대한 지원을 하지 않는다.
  • 다른 프로그램이나, 서비스에 활용시 출처를 밝혀야 한다.
  • 영리적인 목적으로 프로그램을 배포하여서는 안된다.

조만간 다른 자료들을 검토하여 자세한 라이센스 정책에 대해서 업데이트 하고자 한다.

Trackback 1 | Comments 8

수많은 삽질 끝에 APM_SETUP6.0과 Tomcat6.0을 연동하는데 성공해서 이와 관련된 내용을 정리해서 올리고자 한다. 나와 비슷하게 많은 사람들이 삽질을 할 수 있을 듯 한데, 조금이나마 도움이 되었으면 좋겠다.

먼저 웹에서 받을 수도 있겠지만, 일단 본인이 사용한 파일들을 올려두겠다. 현재 날짜로 (2008년 02월 18일) 최신 릴리즈를 사용한 것들이라 추후에는 사라질 수도 있을 것 같다. 그리고 이전 버젼들과는 파일들이 서로 호환되지 않는다고 하니 파일들의 버젼도 유의해서 확인해야할 것 같다.


먼저 위의 파일들을 적당한 폴더에 받아두고, 설치와 설정을 다음 순서와 같이 진행하면 된다.

0. JDK 설치
java기반의 Tomcat을 구동해야하기 때문에 JDK는 기본적으로 설치가 되어 있어야 한다. 본인은 JDK6.0을 설치했다.

1. APM 설치
내려 받은 APM을 클릭하여 설치하면 된다. 설치는 아주 간단히 되므로 굳이 상세히 언급하진 않겠다. 다만 본인은 C:\APM_Setup 이 root directory가 되도록 설치하였으며 그 외에도 기본 설정을 사용하였다.

2. Tomcat 설치
마찬가지로 간단히 설치하였다. JDK가 설치되었다면 큰 문제 없이 설정된다. 다만 본인은 C:\APM_Setup\Server\Tomcat 6.0 에 설치되도록 하였는데, APM_Setup이 그런 디렉토리 구조를 가지고 있어서 왠지 통일하는게 좋을 것 같아서였다. Tomcat은 파일 복사만으로도 별 문제 없이 실행할 수 있으나, Windows Service로 구동하기 위해서 서비스와 함께 설치되도록 하였다.

3. JK 설정

  • mod_jk.so 복사 먼저 내려 받은 jk library를 APM이 설치된 하위의 Apache module 폴더에 복사한다. 이때 파일 이름을 mod_jk.so로 바꾸어 준다. 본인의 경우에는 C:\APM_Setup\Server\Apache\modules\mod_jk.so 파일이 생성되었다. 이후부터는 C:\APM_Setup\Server\Apache를 %APACHE_HOME% 이라 작성하겠다. 설치하는 각자의 Apache가 있는 곳과 대응된다고 보면 된다.
  • httpd.conf 설정 다음으로 %APACHE_HOME%\conf\httpd.conf 파일을 수정하여 apache가 jsp를 인식했을 때 tomcat으로 그 처리를 전달하도록 한다. httpd.conf 파일에 다음과 같은 부분들을 추가한다.
    아래에서 붉은색으로 되어 있는 부분들이 중요한 부분들이고 그 외에는 로그와 같은 정보를 확인하도록 설정하는 것이다. tomcat과 관련된 worker를 설정해주기 위해 이와 관련된 파일을 지정하고 설정 정보를 제공해주어야 한다.
##########################################################################
# @START tomcat jk connector
#
# Load mod_jk module
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile conf/workers.properties
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel debug
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# Send JSPs for context /*.jsp to worker1
JkMount /servlets-examples/* worker1
JkMount *.jsp worker1
#
# @END tomcat jk connector
##########################################################################
  • workers.properties 설정 %APACHE_HOME%\conf\workers.properties 파일을 생성하고 해당 worker와 관련된 정보를 지정해준다.
# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

이같이 하고, Tomcat과 APM을 구동하면 무리 없이 jsp파일이 처리되는 것을 확인할 수 있다. apache가 jsp파일에 대해서 요청이 오면 tomcat을 호출하는 것이기 때문에 jsp에 대해서는 모두 tomcat의 context path설정을 따라서 진행이 되었다. 예를 들어 /test/index.jsp라고 하면 tomcat의 ROOT 하위의 /test/index.jsp를 호출하게 된다. php나 html은 여전히 apache의 context path를 따르기 때문에 둘간의 혼동을 없애려면 둘의 root directory를 하나로 통일해 두는 것이 좋을 것 같다.

그리고 중요한 것은 혹시나 virtual host를 사용하는 경우에는 JkMount *.jsp worker1 와 같이 worker를 지정할 때 각 virtual host마다 지정해주어야 한다. 본인의 경우 Virtual Host를 사용하였는데, 문제 없이 잘 동작하는 것을 확인할 수 있었다.

보통은 Tomcat으로 작업하면 java 기반으로 하고, APM을 사용하는 경우에는 php를 기반으로 하기 때문에 크게 연동할 일이 없을 것 같은데, 본인의 경우 wiki 기반의 홈페이지에 java 기반의 appliation demo를 보여주기 위해서 연동할 필요가 있었다. 물론 Apache와 Tomcat을 각각 80, 8080 포트에 따로 구동할 수도 있었지만, 본인이 사용하는 Network내에서는 8080포트를 외부로 공개하는 것을 꺼리기 때문에 이같은 연동이 필요했다.
또한 하나의 서버에서 Virtual Host로 두개의 홈페이지를 구동하는 경우에 한 홈페이지는 php기반이고, 다른 홈페이지는 jsp기반이라면 유용하게 적용될 것이라 생각한다. 본인도 아직 설치해보지는 않았지만, 추후 이같은 작업이 필요했기에 연동을 시도했다.

* 참고 사이트
http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html

Trackback 0 | Comments 5

락끄's Blog is powered by Daum & tistory