参考
対話コーパスの準備
田中コーパスをダウンロードする
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
言語モデル、翻訳モデルが読み込まれた後、入力モードになる
英語を入力すると翻訳された日本語が出力される