GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

jadore801120

attention-is-all-you-need-pytorch – TransformerモデルのPyTorchによる実装で、「注意はあなたが必要とするすべ..

投稿日:

TransformerモデルのPyTorchによる実装で、「注意はあなたが必要とするすべてです」。

あなたが必要とするのは注目すべき点です:Pytorchの実装

これは、アシュシュヴァスワニ、ノアムシャゼラー、ニキパーマル、ヤコブ・ユーズコレット、リオン・ジョーンズ、エイダン・N・ゴメス、ルーカス・カイザー、イリア・ポロスキン、arxiv、2017)のトランスフォーマーモデルのPyTorch実装です。

新しいシーケンスからシーケンスへのフレームワークは、畳み込み演算または反復構造の代わりに自己アテンションメカニズムを利用し、 WMT 2014の英語からドイツ語への翻訳作業で最先端のパフォーマンスを達成します (2017/06/12)

公式のTensorflowの実装は、 tensorflow / tensor2tensorにあります。

自己アタッチメントメカニズムの詳細については、「 構造化された自己中心的なセンテンスの埋め込み 」を参照してください。

このプロジェクトは、訓練されたモデルによるトレーニングと翻訳をサポートします。

このプロジェクトはまだ進行中です。

何か提案や誤りがある場合は、私に知らせて問題を起こしてください。 🙂

要件

  • Python 3.4以上
  • Pytorch 0.4.1+
  • tqdm
  • 貧弱

使用法

いくつかの便利なツール:

以下の例では、Mosesトークナイザ( http://www.statmt.org/moses/ )を使用して、データと評価のためのMoses BLEUスクリプトを準備しています。

wget https://raw.githubusercontent.com/moses-smt/mosesdecoder/master/scripts/tokenizer/tokenizer.perl
wget https://raw.githubusercontent.com/moses-smt/mosesdecoder/master/scripts/share/nonbreaking_prefixes/nonbreaking_prefix.de
wget https://raw.githubusercontent.com/moses-smt/mosesdecoder/master/scripts/share/nonbreaking_prefixes/nonbreaking_prefix.en
sed -i "s/$RealBin\/..\/share\/nonbreaking_prefixes//" tokenizer.perl
wget https://raw.githubusercontent.com/moses-smt/mosesdecoder/master/scripts/generic/multi-bleu.perl

WMT’16マルチモーダル翻訳:Multi30k(de-en)

WMT’16マルチモーダル翻訳タスク( http://www.statmt.org/wmt16/multimodal-task.html )のトレーニング例

0)データをダウンロードします。

mkdir -p data/multi30k
wget http://www.quest.dcs.shef.ac.uk/wmt16_files_mmt/training.tar.gz &&  tar -xf training.tar.gz -C data/multi30k && rm training.tar.gz
wget http://www.quest.dcs.shef.ac.uk/wmt16_files_mmt/validation.tar.gz && tar -xf validation.tar.gz -C data/multi30k && rm validation.tar.gz
wget http://www.quest.dcs.shef.ac.uk/wmt16_files_mmt/mmt16_task1_test.tar.gz && tar -xf mmt16_task1_test.tar.gz -C data/multi30k && rm mmt16_task1_test.tar.gz

1)データを前処理します。

for l in en de; do for f in data/multi30k/*.$l; do if [[ "$f" != *"test"* ]]; then sed -i "$ d" $f; fi;  done; done
for l in en de; do for f in data/multi30k/*.$l; do perl tokenizer.perl -a -no-escape -l $l -q  < $f > $f.atok; done; done
python preprocess.py -train_src data/multi30k/train.en.atok -train_tgt data/multi30k/train.de.atok -valid_src data/multi30k/val.en.atok -valid_tgt data/multi30k/val.de.atok -save_data data/multi30k.atok.low.pt

2)モデルをトレーニングする

python train.py -data data/multi30k.atok.low.pt -save_model trained -save_mode best -proj_share_weight 

ソースとターゲット言語が共通の語彙を共有する場合は、 -embs_share_weightフラグを使用して、モデルがソース/ターゲットワードの埋め込みを共有できるようにします。

3)モデルをテストする

python translate.py -model trained.chkpt -vocab data/multi30k.atok.low.pt -src data/multi30k/test.en.atok

パフォーマンス

トレーニング

  • パラメータ設定:

    • batch_size = 64
    • d_inner_hid = 1024
    • d_k = 64
    • d_v = 64
    • d_model = 512
    • d_word_vec = 512
    • ドロップアウト= 0.1
    • embs_share_weight = False
    • n_head = 8
    • n_layers = 6
    • n_warmup_steps = 4000
    • proj_share_weight = True
  • エポック単位の経過時間(NVIDIA Titan X版):

    • トレーニングセット:1.38分
    • 検証セット:0.016分

テスト

  • 近日公開。

TODO

  • ラベルスムージング
  • 生成されたテキストの評価。
  • 注意重みプロット。

了承

  • プロジェクトの構造、一部のスクリプト、およびデータセットの前処理ステップは、 OpenNMT / OpenNMT-pyから大きく借りています。
  • @srush、@iamalbert、@ZiJianZhaoの提案に感謝します。







-jadore801120
-, , , , ,

執筆者: