바이그램 한국어 품사 태거

Abstract This blog is a study on making a bigram Korean part-of-speech tagger. I implemented a Korean morphological transducer (please read the former blog I wrote), and composed it with a bigram transducer, which is very common in statistical natural language processing society. I tried to making a single transducer (not to need to compose the transducers on-the-fly when an input text is given.), The resulting transducer is so big, about 600Mbyte-sized, while I think there would be another more effective way of making the compact transducer.

이 블로그에서는 바이그램 한국어 형태소 분석기를 오픈하고자 합니다. 어떻게 만들었는지 짧게 설명하고 최종 파일을 올립니다.

어떻게 만들었나?

우선, 바이그램 품사 태거는 아래의 수식과 같다.

bigram 품사 태거

위 수식을 수행하는 하나의 확률 유한 상태 변환기 (weighted finite state transducer)를 만들기 위해서 세 개의 변환기를 준비하였다.

lexical 확률 변환기

bigram 변환기

위에서 구한 세 개의 변환기 M, L, T를 모두 composition하면 하나의 변환기가 나오게 되며, 이것이 최종적으로 우리가 구하고자 하는 변환기이다. 참고로 ρ 심벌을 이용하여 composition을 하기 위해서는 openfst에 있는 fstcompose를 사용하는 것이 아니라 다른 composition 프로그램을 사용해야 된다. 이를 위해 fstphirhocompose를 사용하였다.

실행하기

최종 만들어진 파일의 크기를 압축하여도 크기가 커서, 두 개의 파일 bitagger_aabitagger_ab로 나누었다. 이 파일은 unix 명령어 split을 이용해서 단순히 나눈 것이어서, 아래와 같이 실행하면 원래의 하나의 파일로 만들 수 있다.

shlee@shlee:~$ ls -l
-rw-r--r-- 1 shlee shlee  94371840 10월  4 bitagger_aa
-rw-r--r-- 1 shlee shlee  89417271 10월  4 bitagger_ab
shlee@shlee:~$ cat bitagger_* > bitaggerfile.tar.gz
shlee@shlee:~$ ls -l
-rw-r--r-- 1 shlee shlee  94371840 10월  4 bitagger_aa
-rw-r--r-- 1 shlee shlee  89417271 10월  4 bitagger_ab
-rw-r--r-- 1 shlee shlee 183789111 10월  4 bitaggerfile.tar.gz
shlee@shlee:~$ tar zxvf bitaggerfile.tar.gz 
BiTagger/
BiTagger/testme.txt
BiTagger/korinvertwordbifinal.fst
BiTagger/korinvert.sym
BiTagger/kyfd
BiTagger/koreanbi.xml
BiTagger/wordbiprob.sym
shlee@shlee:~$ cd BiTagger/
shlee@shlee:~/BiTagger$ cat testme.txt | ./kyfd koreanbi.xml
--------------------------
-- Started Kyfd Decoder --
--------------------------
...

이 블로그에서 올린 바이그램 태거의 성능은 교과서에 나오는 바이그램 태거와 비슷하거나 못 할 것으로 생각됩니다. 제가 unigram backoff 모델을 적용하지 않았고, 또한 프로그램의 결과를 보면서 튜닝하지 않았기 때문입니다. 하지만 한국어 처리를 공부하고 계신 분은 위 태거를 이용해서 가장 기본이 되는 태거의 성능은 어떤가를 알고 싶을 때 도움이 될 것 같습니다.

컴파일 관련

신명철님께서 Rouzeta 컴파일 글과, Rouzeta 파이썬 랩퍼 글을 올리셨습니다. 참고하세요.