OpenNMT-pyをGoogle Colaboratoryで使ってみる

機械翻訳に関する知識拡大と、いつかの独自モデル構築を目指して、
まずはOpenNMT-pyに挑戦しました。

普通のパソコンでやるとそもそもPyTorchのインストールが面倒だし、
GPUがないとかなり時間がかかってしまうし、と大変なことづくし。

そこでGoogle Colaboratory(Colab)を使って動かしてみることにしました。

Qiitaにも記事がありましたが、OpenNMT-pyのアップデートでフォルダ構成が変わっていたこともあり、
覚書として手順を残しておこうと思います。


Colabの起動~初期設定

まずはColabのNotebookを新規作成します。

最初にランタイム設定を GPU に変更することを忘れずに。

OpenNMT-pyのリポジトリの説明をColabの環境に読み替えながら進めていきます。

%%bash
git clone https://github.com/OpenNMT/OpenNMT-py.git
cd OpenNMT-py
pip install -e .

これでOpenNMT-pyの環境がColabのインスタンスにインストールされました。

次にサンプルの英-独コーパスのダウンロードです。

%%bash
cd /content/OpenNMT-py/
wget https://s3.amazonaws.com/opennmt-trainingdata/toy-ende.tar.gz
tar xf toy-ende.tar.gz

これで学習を始めるための準備が整いました。

設定ファイルの記述

このままReadmeの記述に沿って進めていきたいところですが、
Colabでローカルにファイルを作ろうとするとやや面倒です。

Googleドライブをマウントすればいい話かもしれませんが、
今回はColabだけで完結できるようにしてみました。

%%bash
cat << EOF > /content/OpenNMT-py/toy_en_de.yaml
## Where the samples will be written
save_data: /content/OpenNMT-py/toy-ende/run/example
## Where the vocab(s) will be written
src_vocab: /content/OpenNMT-py/toy-ende/run/example.vocab.src
tgt_vocab: /content/OpenNMT-py/toy-ende/run/example.vocab.tgt
# Prevent overwriting existing files in the folder
overwrite: False

# Corpus opts:
data:
    corpus_1:
        path_src: /content/OpenNMT-py/toy-ende/src-train.txt
        path_tgt: /content/OpenNMT-py/toy-ende/tgt-train.txt
    valid:
        path_src: /content/OpenNMT-py/toy-ende/src-val.txt
        path_tgt: /content/OpenNMT-py/toy-ende/tgt-val.txt
EOF

注意点としては ファイルパスはすべて「/content」からの記述に変更する ことが挙げられます。

これで vocabファイルを作成する準備ができたので、さっそくコマンドを動かしてみましょう。

%%bash
cd /content/OpenNMT-py/
onmt_build_vocab -config /content/OpenNMT-py/toy_en_de.yaml -n_sample 10000

ここでも toy_en_de.yaml までのファイルパスは /contentから書く必要がありました。

続いて、設定ファイルに学習用の内容を追記していきます。

%%bash
cat << EOF >> /content/OpenNMT-py/toy_en_de.yaml
# Vocabulary files that were just created
src_vocab: /content/OpenNMT-py/toy-ende/run/example.vocab.src
tgt_vocab: /content/OpenNMT-py/toy-ende/run/example.vocab.tgt

# Train on a single GPU
world_size: 1
gpu_ranks: [0]

# Where to save the checkpoints
save_model: /content/OpenNMT-py/toy-ende/run/model
save_checkpoint_steps: 500
train_steps: 1000
valid_steps: 500
EOF

Readmeの説明にも ”add the following to the YAML configuration file:” とあるので、追記モードにしています。

catの後ろのリダイレクト記号(>)が一つ増えていることに要注意。

ここまで行けばあとは学習を実行するだけです。

%%bash
cd /content/OpenNMT-py/
onmt_train -config /content/OpenNMT-py/toy_en_de.yaml

待つこと数分で学習が完了しました!(1000ステップですが……)

結果ファイルのダウンロード

最後に、インスタンスがリセットされる前に学習結果とvocabファイルをダウンロードしておきます。

!ls /content/OpenNMT-py/toy-ende/run
from google.colab import files
path = "/content/OpenNMT-py/toy-ende/run/"

files.download(path + "example.vocab.src")
files.download(path + "example.vocab.tgt")
files.download(path + "model_step_1000.pt")
files.download(path + "model_step_500.pt")

無事にモデルのダウンロードができました。

これだけの学習で、モデルは250MB近くにもなるんですね……

次回は日本語でも試してみたいと思います。

CATOVIS LS

MS Office Wordと接続。軽量型でWYSIWYGを実現