LoginSignup
6
2

More than 5 years have passed since last update.

Mosesの使い方

Last updated at Posted at 2017-02-09

参考

統計的機械学習システムMosesで遊ぶ

対話コーパスの準備

田中コーパスをダウンロードする

mkdir ~/workspace/smt/corpus
cd ~/workspace/smt/corpus
wget ftp://ftp.monash.edu.au/pub/nihongo/examples.utf.gz

ダウンロードしたgzファイルを解凍してtxtファイルに保存

gzip -dc examples.utf.gz > examples.txt

行頭にA:がある行は、日英対訳コーパスである。
B:行は表記ゆれなど、追加情報が記載されている。

tanaka_corpus.txt
A: ムーリエルは20歳になりました。     Muiriel is 20 now.#ID=1282_4707
B: は 二十歳(はたち){20歳} になる[01]{になりました}
A: すぐに戻ります。     I will be back soon.#ID=1284_4709
B: 直ぐに{すぐに} 戻る{戻ります}
...

このファイルから必要な部分を切り出す

gzip -dc examples.utf.gz | grep ^A: | cut -f1 | sed 's/^A: //' | mecab -Owakati >tanaka.ja
gzip -dc examples.utf.gz | grep ^A: | cut -f2 | sed 's/#.*$//' >tanaka.en
コマンド 説明
cut タブ区切りになっているのでフィールド(列)ごとに分割できる
mecab 日本語文を単語に分割
grep ^A: "A:"を含む行を検索し、その表の先頭を示す(^)
sed 's/^A: //' 行頭の"A:"を削除
sed 's/#.*$//' "#"とその後に続く文字を削除

言語モデルの学習

日本語側のファイルから言語モデルを学習する
言語モデル:ある単語の列を与えると、日本語としての流暢さによって得点をつけてくれる関数のようなもの
機械翻訳では言語モデルを利用することで翻訳候補の中から自然なものが選ばれるようにする

Mosesに同梱されているKenLMを用いて言語モデルを学習する

KenLMでの言語モデル学習を行う

~/workspace/mosesdecorder/bin/lmplz -o 5 -S 80% -T /tmp < tanaka.ja >tanaka.ja.arpa

翻訳モデルの学習

日英の対訳コーパスから、翻訳モデルを学習する
翻訳モデル:英語と日本語の単語列を与えると、対訳の適切さによって得点をつけてくれる関数のようなもの

cd ~/workspace/smt
~/workspace/mosesdecorder/scripts/training/train-model.perl \
    --root-dir . \
    --corpus corpus/tanaka \
    --f en \
    --e ja \
    --lm 0:5:$HOME/smt/corpus/tanaka.ja.arpa \
    --external-bin-dir ./mosesdecoder/tools
コマンド 説明
--corpus, --f, --e --corpusの値に--fと--eの拡張子を追加したものを対訳コーパスの各言語側のファイルとして読み込む --fが翻訳元、--eが翻訳先
--lm 言語モデルの指定
--external-bin-dir Moses以外のプログラムの実行ファイルが存在するパスを指定

最終的な結果はmodel/phrase-table.gz

英和翻訳を試す

model/moses.iniの設定ファイルを編集
利用する言語モデルの種類をSRILM → KenLMに修正

SRILM name=LM0 factor=0 path=/home/y-uti/smt/corpus/tanaka.ja.arpa order=5
→
KENLM name=LM0 factor=0 path=/home/y-uti/smt/corpus/tanaka.ja.arpa order=5

プログラムを実行
-fオプションに設定ファイルを指定する
言語モデル、翻訳モデルの指定などは設定ファイルに書かれている

~/workspace/mosesdecoder/bin/moses -f model/moses.ini

言語モデル、翻訳モデルが読み込まれた後、入力モードになる
英語を入力すると翻訳された日本語が出力される

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2