Help us understand the problem. What is going on with this article?

Mosesの使い方

More than 3 years have passed since last update.

参考

統計的機械学習システム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

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

youichiro
https://github.com/youichiro
https://youichiro.work
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした