2017年9月16日土曜日

OpenNMTで英日翻訳できるようにする

OpenNMTをインストールして機械翻訳(英日)を使えるようにする

環境

  • Python 3.5.4
  • Linux

手順

$ git clone https://github.com/OpenNMT/OpenNMT-py.git
$ pip3 install -r requirements.txt

実行しようとすると、torchがないと怒られる…
$ python translate.py -model demo-model_epochX_PPL.pt -src data/src-test.txt -output pred.txt -replace_unk -verbose
Traceback (most recent call last):
  File "translate.py", line 7, in <module>
    import torch

ImportError: No module named torch

torchのインストール

pyTorchを見てみる
  • http://pytorch.org
pytthon 3.6.*のときとかは、cp36とかに勝手に変更すると入る
$ sudo pip3 install http://download.pytorch.org/whl/cu80/torch-0.2.0.post3-cp35-cp35m-manylinux1_x86_64.whl 
$ sudo pip3 install torchvision

プログラムの実行

以下のコマンドで実行できるが、これは英独の翻訳
$ python3 preprocess.py -train_src data/src-train.txt -train_tgt data/tgt-train.txt -valid_src data/src-val.txt -valid_tgt data/tgt-val.txt -save_data data/demo

英日にしたいので、新しくディレクトリを作成し、その下に英語と日本語のパラレルコーパスを置いた。
行数は英独のものと同様にしたが、データ量としては少ないことに留意する。
*-train.txtが10000行、*-val.txtが3000行。
日本語のコーパスはmecabを用いて、単語をspace区切りに加工している。

モデルの学習

以下のコマンドでデフォルト設定で動く
python3 train.py -data data/demo -save_model demo-model

学習するのに時間がかかるので、nohupで動かすのが良い
$ nohup python3 -u train.py -data data/demo -save_model demo-model > log.txt &

翻訳の実行

モデルのファイルは1番最後に出力されているのを指定した。
src-test.txtは自分で作っても良いかも
$ python3 translate.py -model demo-model_acc_26.58_ppl_194.39_e13.pt -src data/src-test.txt -output pred.txt -replace_unk -verbose

ex. )
SENT 1: please, don't forget me.
PRED 1: 「 それ は どう し た ん です か ? 」
PRED SCORE: -16.1014

ひどさしかない。
gitにも小さいデータでやると恐ろしい結果になると書いてあるので、次は大きいコーパスで試してみる。

なんか見てる人が結構いるっぽいので続きの記事
こちらは大きいコーパスで試してみた