Search Results for 'statistical machine translation'

2 POSTS

  1. 2015.07.05 Moses 학습 & 실행
  2. 2015.06.29 Moses 설치

Moses 학습 & 실행

Posted 2015. 7. 5. 07:17

이번 글에서는 moses를 이용하여 번역 모델을 학습하고, 실행하는 방법에 대해 공유한다.

moses 공식 사이트에 있는 baseline 실행하고, 정리한 내용이다.

baseline url : http://www.statmt.org/moses/?n=Moses.Baseline



이 글을 검색해서 보고 있다는 것 자체가 번역모델이 무엇인지, 그리고 학습이 왜 필요한지에 대해 알고 있는 분이라 생각하여 why에 대한 부분은 생략하고 바로 실행하는 부분에 대해 설명한다.


학습과정을 나누면 5단계로 구성되어 있다.(baseline 기준)


1. 말뭉치를 전처리하고, moses 학습 형태로 변경

2. 언어 모델(lanaguage model)을 빌드

3. 번역 모델 학습 

4. 파라미터 튜닝

5. 번역 모델 바이너리화


* 영어를 한국어로 번역하기 위해, 번역모델을 학습하는 방법이다.

* 학습에 사용할 말뭉치가 준비되어 있다고 가정한다.

  (말뭉치 : eng_kor.learn.kor, eng_kor.learn.eng)


1. 말뭉치 전처리


# tokenisation

$ ~/mosesdecoder/scripts/tokenizer/tokenizer.perl -l en \

    < eng_kor.learn.eng \

    > eng_kor.learn.tok.eng


$ ~/mosesdecoder/scripts/tokenizer/tokenizer.perl -l ko \

    < eng_kor.learn.kor \

    > eng_kor.learn.tok.kor


# truecaser : 말뭉치에서 각 단어의 대소문자 빈도를 조사하여 대소문자 변환을 위한 모델 빌드

$ ~/mosesdecoder/scripts/recaser/train-truecaser.perl \

    --corpus eng_kor.learn.tok.eng \

    --model truecase-model.en


$ ~/mosesdecoder/scripts/recaser/train-truecaser.perl \

    --corpus eng_kor.learn.tok.kor \

    --model truecase-model.ko


# truecasing : truecasing에서 빌드된 모델을 토대로 대소문자 변환

$ ~/mosesdecoder/scripts/recaser/truecase.perl \

    --model truecase-model.en \

    < eng_kor.learn.tok.eng \

    > eng_kor.learn.true.eng


$ ~/mosesdecoder/scripts/recaser/truecase.perl \

    --model truecase-model.ko \

    < eng_kor.learn.tok.kor \

    > eng_kor.learn.true.kor


# limit sentence length to 80(with direction)

$ ~/mosesdecoder/scripts/training/clean-corpus-n.perl \

    eng_kor.learn.true en ko \

    eng_kor.learn.clean 1 80


2. 언어 모델(lanaguage model) 빌드 : target language에 대해 언어 모델을 빌드한다.


# build lm (eng to kor, using ko) : tri-grams 빌드

$ ~/mosesdecoder/bin/lmplz -o 3 --discount_fallback < eng_kor.learn.true.ko > kor.arpa


# make binarise : 바이너리화

$ ~/mosesdecoder/bin/build_binary kor.arpa kor.blm


3. 번역 모델 학습 : 학습 말뭉치의 크기에 따라 시간이 오래 걸리는 작업이므로, 백그라운드로 실행하는 것이 좋다.

-mgiza, -cores는 필요에 따라 설정하여 사용하면 된다.


$ ~/mosesdecoder/scripts/training/train-model.perl \

    -root-dir train \

    -corpus eng_kor.learn.clean \

    -f en -e ko -alignment grow-dial-final-and -reordering msd-bidirectional-fe \

    -lm 0:3:kor.blm:8 \

    -mgiza -cores 12 \

    -external-bin-dir ~/mosesdecoder/tools/


4. 파라미터 튜닝


- 튜닝 데이터 준비


# tokenisation

$ ~/mosesdecoder/scripts/tokenizer/tokenizer.perl -l en \

    < eng_kor.tune.eng \

    > eng_kor.tune.tok.en


$ ~/mosesdecoder/scripts/tokenizer/tokenizer.perl -l ko \

    < eng_kor.tune.kor \

    > eng_kor.tune.tok.ko


# truecasing

$ ~/mosesdecoder/scripts/recaser/truecase.perl \

    --model truecase-model.en \

    < eng_kor.tune.tok.en \

    > eng_kor.tune.true.en


$ ~/mosesdecoder/scripts/recaser/truecase.perl \

    --model truecase-model.ko \

    < eng_kor.tune.tok.ko \

    > eng_kor.tune.true.ko


- 파라미터 튜닝


$ ~/mosesdecoder/scripts/training/mert-moses.pl \

    --working-dir=mert-work \

    --decoder-flags="-threads 12" \

    eng_kor.tune.true.en eng_kor.tune.true.ko \

    ~/mosesdecoder/bin/moses ./train/model/moses.ini --mertdir ~/mosesdecoder/bin/


5. 번역 모델 바이너리화
cmph를 설치했을 경우에 가능한 과정이다.
phrase table, reordering table을 바이너리화하여, 로딩 속도를 향상 시킬 수 있다.

# compress
$ ~/mosesdecoder/bin/processPhraseTableMin \
    -in train/model/phrase-table.gz \
    -nscores 4 \
    -out phrase-table

$ ~/mosesdecoder/bin/processLexicalTableMin \
    -in train/model/reordering-table.wbe-msd-bidirectional-fe.gz \
    -out reordering-table

이렇게 한 다음에는 mert-work/moses.ini에서
PhraseDictionaryMemory => PhraseDictionaryCompact로 변경
PhraseDictionaryCompact Path, LexicalReordering path = 바이너리화 되어 있는 파일로 변경해야 한다.

* 실행
$ ~/mosesdecoder/bin/moses -f mert-work/moses.ini

끝.


Write your message and submit

Moses 설치

Posted 2015. 6. 29. 10:49

moses는 smt(statistical machine translation) tool이다.

예전에 더 어려웠던 것 같은데, 설치 과정이 많이 단순해졌다.


직접 경험했던 설치 과정을 공유한다.


일단 링크부터...

http://www.statmt.org/moses/?n=Development.GetStarted


위 사이트를 가서 한 단계씩 따라한다면 아주 쉽게 설치할 수 있다...

(사실 여러번의 삽질을 통해 쉽게 설치할 수 있다는 것을 알았다.)


1. moses download & release 3.0 선택


$ git clone https://github.com/moses-smt/mosesdecoder.git


$ git checkout RELEASE-3.0


처음에 릴리즈 된 버전을 선택하지 않고, 사용했다가 설치를 못했었는데...

내가 받았던 그 버전이 ... 한참 수정중인 버전이였다. ㅠㅠ


릴리즈 관련 링크: http://www.statmt.org/moses/?n=Moses.Releases


2. boost_1_55_0 설치(moses 사이트에 있는 설명 그대로... 하면 된다.)


설치 문서에 있는 링크를 통해 1_55_0을 설치한다.

1.48 버전 이상 있다면 따로 설치하지 않아도 되는데, 따로 설치하는 것을 추천한다.


$ wget http://downloads.sourceforge.net/project/boost/boost/1.55.0/boost_1_55_0.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fboost%2Ffiles%2Fboost%2F1.55.0%2F&ts=1389613041&use_mirror=kent


$ tar zxvf boost_1_55_0.tar.gz


$ cd boost_1_55_0/


$ ./bootstrap.sh


$ ./b2 -j4 --prefix=$PWD --libdir=$PWD/lib64 --layout=system link=static install || echo FAILURE


3. moses 설치


$ ./bjam --with-boost=$prefix/boost_1_55_0 -j4


2번에서 설치한 boost를 --with-boost를 이용하여 지정하고 설치한다.


4. mgiza 설치


http://www.statmt.org/moses/?n=Moses.ExternalTools#ntoc3


여기에 있는 내용이다.


$ git clone https://github.com/moses-smt/mgiza.git

$ cd mgiza/mgizapp

$ cmake .

$ make; make install


그리고, bin 파일의 모든 파일과 $prefix/mosesdecoder/tools에 복사하고

scripts/merge_alignment.py 파일 또한 $prefix/mosesdecoder/tools에 복사한다.


이렇게 하면 일단 설치는 완료 된다!


이제 잘 되는지 확인을 해봐야 하니...sample을 다운로드 받고, 실행해본다.


$ cd ~/mosesdecoder


$ wget http://www.statmt.org/moses/download/sample-models.tgz


$ tar xzf sample-models.tgz


$ cd sample-models


$ cd ~/mosesdecoder/sample-models


$ ~/mosesdecoder/bin/moses -f phrase-model/moses.ini < phrase-model/in > out


이렇게 해보면, in 파일에 있는

das ist ein kleines haus가 this is a small house로 번역 된 것을 볼 수 있다.


끝.

Write your message and submit