これは、神経機械翻訳(NMT)にトランスモデルのTensorflow 2.x実装(注意が必要です)です。

トランスは、RNNと比較してコンテキストを表現するより柔軟な方法を持っています。
トランスは、シーケンスモデリングの深いニューラルネットワークアーキテクチャであり、テキストコンテキストに基づいてシーケンスでトークンの可能性を推定するタスクです。再発性ニューラルネットワークは、コンテキストトークンの歴史全体の埋め込みを単一のベクトルに崩壊させますが、コンテキストがどれだけ遠くに及ぶ場合でも、トランスは個々のトークンの埋め込みベクトルにアクセスできます。これにより、長距離依存関係のモデル化に適しています。これは、BERTやGPT-2などのテキスト表現学習方法の最近のブレークスルーの鍵となります。
変圧器の中核は、自己攻撃メカニズムであり、目標は、互いに「注意を払う」ことにより、各トークンの文脈に基づいた表現を順番に計算することです。すべての位置iの初期ベクトル表現e[i]を考えると、最初に線形投影を適用してベクターq[i] 、 k[i] 、 v[i]を取得します。ここで、 k sとvは、 q[i]によって照会されて、q [i]が照会するためにq [ iによって照会されます。クエリの結果は、 q[i]とk (通常はDOT-Products)の間の類似性スコアであり、 e[i]の新しい表現としてvの加重平均を計算するためにウェイトとして使用されます。 q 、 k 、およびvは同じシーケンスから派生していることに注意してください。つまり、シーケンスは効果的にそれ自体を照会しています(したがって、自己関節という名前)。

自己関節メカニズム。




トランスネットワークアーキテクチャ。
この実装は、Tensorflow 2.xおよびPython3に基づいています。さらに、NLTKは、評価のためにBLEUスコアを計算する必要があります。
このリポジトリを実行してクローンできます
git clone [email protected]:chao-ji/tf-transformer.git次に、実行してサブモジュールをクローンして更新します
cd tf-transformer
git submodule update --init --recursiveトレーニングコーパスは、ソース言語のテキストファイルのリストの形式で、ターゲット言語のテキストファイルのリストとペアになっている必要があります。
source_file_1.txt target_file_1.txt
source_file_2.txt target_file_2.txt
...
source_file_n.txt target_file_n.txt
まず、RAWテキストファイルを実行してtrecordファイルに変換する必要があります
python commons/create_tfrecord_machine_translation.py
--source_filenames=source_file_1.txt,source_file_2.txt,...,source_file_2.txt
--target_filenames=target_file_1.txt,target_file_2.txt,...,target_file_2.txt
--output_dir=/path/to/tfrecord/directory
--vocab_name=vocab注:このプロセスには、トレーニングコーパスからのサブワードトークンの語彙を「学習」します。これは、 vocab.subtokens and vocab.alphabetのファイルに保存されます。語彙は、後に生のテキスト文字列をサブワードトークンIDにエンコードするか、生のテキスト文字列にデコードするために使用されます。
詳細な使用情報については、実行してください
python commons/create_tfrecord_machine_translation.py --helpサンプルデータについては、data_sources.txtを参照してください
モデルをトレーニングするには、実行します
python run_trainer.py
--data_dir=/path/to/tfrecord/directory
--vocab_path=/path/to/vocab/files
--model_dir=/path/to/directory/storing/checkpoints data_dirはtfrecordファイルを保存するディレクトリであり、 vocab_path vocabularyファイルのベースネームへの道ですvocab.subtokens and vocab.alphabet model_dirすなわち、 vocabへのパス)を実行することで生成されたcreate_tfrecord_machine_translation.py (すなわち)。前のチェックポイント)。
詳細な使用情報については、実行してください
python run_trainer.py --help評価には、ソースシーケンスをターゲットシーケンスに変換し、予測されたターゲットシーケンスとグラウンドトゥルースターゲットシーケンスの間のBLEUスコアを計算することが含まれます。
事前に処理されたモデルを評価するには、実行します
python run_evaluator.py
--source_text_filename=/path/to/source/text/file
--target_text_filename=/path/to/target/text/file
--vocab_path=/path/to/vocab/files
--model_dir=/path/to/directory/storing/checkpoints source_text_filenameおよびtarget_text_filename 、それぞれソースとターゲットシーケンスを保持しているテキストファイルへのパスです。
コマンドライン引数target_text_filenameはオプションです。除外された場合、評価者は推論モードで実行されます。この場合、翻訳のみが出力ファイルに書き込まれます。
より詳細な使用情報については、実行してください
python run_evaluator.py --help注意メカニズムは、さまざまなトークンに注意がどのように分布するかを理解するために視覚化できるトークン間の類似性を計算することに注意してください。 python run_evaluator.py実行すると、注意重量マトリックスが保存され、次のエントリのdictを保存するdictをattention_xxxx.npyします。
src : [batch_size, src_seq_len]のnumpy配列。各行は、1( EOS_ID )で終了し、ゼロでパッドで終わるトークンIDのシーケンスです。tgt : [batch_size, tgt_seq_len]のnumpy配列。各行は、1( EOS_ID )で終了し、ゼロでパッドで終わるトークンIDのシーケンスです。src_src_attention :形状のnumpy配列[batch_size, num_heads, src_seq_len, src_seq_len]tgt_src_attention :形状のnumpy配列[batch_size, num_heads, tgt_seq_len, src_seq_len]tgt_tgt_attention :形状のnumpy配列[batch_size, num_heads, tgt_seq_len, tgt_seq_len]注意の重みは、実行することで表示できます。
python run_visualizer.py
--attention_file=/path/to/attention_xxxx.npy
--head=attention_head
--index=seq_index
--vocab_path=/path/to/vocab/filesここで、 head [0, num_heads - 1]の整数であり、 index [0, batch_size - 1]の整数です。
以下に示すのは、英語の3つの文(ソース言語)とドイツ語での翻訳(ターゲット言語)です。
ソースランゲージの入力文
1. It is in this spirit that a majority of American governments have passed new laws since 2009 making the registration or voting process more difficult.
2. Google's free service instantly translates words, phrases, and web pages between English and over 100 other languages.
3. What you said is completely absurd.
ターゲット言語で翻訳された文
1. In diesem Sinne haben die meisten amerikanischen Regierungen seit 2009 neue Gesetze verabschiedet, die die Registrierung oder das Abstimmungsverfahren schwieriger machen.
2. Der kostenlose Service von Google übersetzt Wörter, Phrasen und Webseiten zwischen Englisch und über 100 anderen Sprachen.
3. Was Sie gesagt haben, ist völlig absurd.
トランスモデルは、3種類の注意を計算します。

ソースからソースへの注意の重み。
more_およびdifficult_からmaking_への注意の重量に注意してください - それらは「...より難しい」というフレーズを完成させようとするときに「監視中」になります。

ターゲットからソースへの注意の重み。
übersetz (ターゲット)からtranslat (ソース)、およびWebseiten (ターゲット)からweb (ソース)などへの注意の重量に注意してください。これは、おそらくドイツ語と英語の同義性によるものです。

ターゲットからターゲットの注意の重量。
Was 、 gesagt 、 haben_ Wasデコーダーがこれらの潜水艦を吐き出すので、節Sie_範囲を「あなたが言ったことを意味する」 Was Sie gesagt haben節の範囲を「認識」する必要があります。