シーケンス間パート1モデル

すべての人に良い一日を!



そして、改訂されたデータサイエンティストコース用に新しいストリームが再びオープンしました。別の優れた教師 、更新に基づいたわずかに洗練されたプログラムです。 さて、いつものように、興味深い公開レッスンと興味深い資料のコレクション。 今日は、Tensor Flowからseq2seqモデルの分析を開始します。



行こう



RNNチュートリアルで既に説明したように(この記事を読む前にこれをよく理解することをお勧めします)、言語をモデル化するためにリカレントニューラルネットワークを教えることができます。 そして、興味深い質問が生じます。意味のある回答を生成するために特定のデータでネットワークをトレーニングすることは可能ですか? たとえば、英語からフランス語に翻訳するニューラルネットワークを教えることができますか? できることがわかりました。



このガイドでは、このようなエンドツーエンドシステムを作成およびトレーニングする方法を示します。 Tensor FlowコアリポジトリTensorFlowモデルリポジトリをGitHubからコピーします 。 次に、翻訳プログラムを開始して開始できます。



cd models/tutorials/rnn/translate python translate.py --data_dir [your_data_directory]
      
      









彼女はWMT'15 Webサイトから英語からフランス語への翻訳用のデータをダウンロードし、トレーニングとトレーニングの準備をします。 これには、ハードドライブに約20GBが必要であり、ダウンロードと準備にかなりの時間がかかるため、すぐにプロセスを開始して、このチュートリアルを読み続けることができます。



マニュアルは次のファイルにアクセスします。



ファイル 何が入っているの?
テンソルフロー/テンソルフロー/ python / ops / seq2seq.py シーケンス間モデルを作成するためのライブラリ
モデル/チュートリアル/ rnn /翻訳/ seq2seq_model.py シーケンス間ニューラル翻訳モデル
モデル/チュートリアル/ rnn / translate / data_utils.py 翻訳データを準備するためのヘルパー関数
モデル/チュートリアル/ rnn / translate / translate.py 翻訳モデルをトレーニングして実行するバイナリ


シーケンス間の基本



Cho et al。、2014pdf提示する基本的なシーケンス間モデルは、2つのリカレントニューラルネットワーク(RNN)で構成されています。入力データを処理するエンコーダー(エンコーダー)と、データを生成するデコーダー(デコーダー)出力。 基本的なアーキテクチャは次のとおりです。







上の図の各長方形は、RNN内のセル、通常はGRUセル(制御された繰り返しブロック)、またはLSTMセル(長期短期メモリ)を表します(詳細については、 RNNチュートリアルをご覧ください)。 エンコーダーとデコーダーは、共通の重みを持つか、より頻繁に異なるパラメーターのセットを使用できます。 多層セルは、 Sutskever et al。、2014pdf )の翻訳など、シーケンス間モデルで使用されています。



上記の基本モデルでは、各入力は固定サイズの状態ベクトルにエンコードされる必要があります。これは、これがデコーダーに送信される唯一のものであるためです。 デコーダが入力データにより直接アクセスできるようにするために、 Bahdanau et al。、2014pdf )に注意メカニズムが導入されました 。 アテンションメカニズムの詳細は説明しません(このため、ここでの作業に慣れることができます)。 デコーダーが各デコードステップで入力データを調べることができると言うだけで十分です。 LSTMセルとデコーダーのアテンションメカニズムを備えた多層シーケンスツーシーケンスネットワークは次のとおりです。







TensorFlowライブラリseq2seq



上記からわかるように、異なるシーケンス間モデルがあります。 それらはすべて異なるRNNセルを使用できますが、それらはすべてエンコーダー入力データとデコーダー入力データを受け入れます。 これは、TensorFlow seq2seqライブラリインターフェイスの基本です(tensorflow / tensorflow / python / ops / seq2seq.py)。 この基本的なRNN、コーデック、シーケンス間モデルは次のように機能します。



 outputs, states = basic_rnn_seq2seq(encoder_inputs, decoder_inputs, cell)
      
      





上記の呼び出しでは、 encoder_inputs



は、上の図の文字A、B、Cに対応するエンコーダー入力データを表すテンソルのリストです。 同様に、 decoder_inputs



はデコーダー入力データを表すテンソルです。 最初の写真のGO、W、X、Y、Z。



cell



引数は、モデルで使用されるセルを決定するtf.contrib.rnn.RNNCell



クラスのインスタンスです。 GRUCell



LSTMCell



などの既存のセルを使用するか、 GRUCell



セルを作成できます。 さらに、 tf.contrib.rnn



は、多層セルを作成し、セルの入出力に例外を追加したり、その他の変換を行うためのシェルを提供します。 例については、 RNNチュートリアルご覧ください。



basic_rnn_seq2seq



の呼び出しは、 basic_rnn_seq2seq



states



2つの引数を返します。 これらは両方とも、 decoder_inputs



と同じ長さのテンソルのリストを表します。 outputs



は、各タイムステップのデコーダー出力データに対応します。最初の画像では、W、X、Y、Z、EOSです。 返されるstates



は、各タイムステップでのデコーダーの内部状態を表します。



シーケンス間モデルを使用する多くのアプリケーションでは、時間tでのデコーダー出力は時間t + 1でデコーダーへの入力に送信されます。 テスト中、シーケンスのデコード中に、新しいシーケンスが作成されます。 一方、トレーニング中は、デコーダーが以前に誤っていた場合でも、各タイムステップで正しい入力データをデコーダーに送信するのが一般的です。 seq2seq.py



関数は、 feed_previous



引数で両方のモードをサポートします。 たとえば、ネストされたRNNモデルの次の使用を検討してください。



 outputs, states = embedding_rnn_seq2seq( encoder_inputs, decoder_inputs, cell, num_encoder_symbols, num_decoder_symbols, embedding_size, output_projection=None, feed_previous=False)
      
      





embedding_rnn_seq2seq



モデルでは、すべての入力データ( encoder_inputs



decoder_inputs



両方)は離散値を反映する整数テンソルです。 それらは密な表現に埋め込まれます(添付方法の詳細については、 ベクトル表現ガイドを参照してください)が、これらの添付ファイルを作成するには、個別の文字の最大数を指定する必要があります:エンコーダー側のnum_decoder_symbols



とデコーダー側のnum_decoder_symbols







上記の呼び出しでは、 feed_previous



をFalseに設定します。 これは、デコーダーが提供されている形式でdecoder_inputs



テンソルを使用することを意味します。 feed_previous



をTrueに設定すると、デコーダーは最初のdecoder_inputs



要素のみを使用します。 リストの他のすべてのテンソルは無視され、代わりにデコーダー出力の以前の値が使用されます。 これは、翻訳モデルの翻訳をデコードするために使用されますが、トレーニング中に使用して、モデルのエラーに対する安定性を向上させることもできます。 およそBengio et al。、2015pdf )のように。



上記で使用される別の重要な引数はoutput_projection



です。 明確化しないと、埋め込みモデルの結論は、生成された各シンボルの対数を表すため、num_decoder_symbolsごとのトレーニングサンプルの数のテンソルになります。 大きなnum_decoder_symbols



などの大きな出力ディクショナリを含むモデルをトレーニングする場合、これらの大きなテンソルの保存は実用的ではなくなります。 代わりに、 output_projection



を使用して大きなテンソルに後で投影される小さなテンソルを返すことをおoutput_projection



ます。 これにより、 ジャンらによって説明されているように、サンプリングされたソフトマックス損失でseq2seqモデルを使用できます al。、2014pdf )。



basic_rnn_seq2seq



およびembedding_rnn_seq2seq



加えて、 basic_rnn_seq2seq



にはさらにいくつかのシーケンス間モデルがseq2seq.py



ます。 それらに注意してください。 それらはすべて同様のインターフェースを備えているため、詳細については掘り下げません。 以下の翻訳モデルでは、 embedding_attention_seq2seq



を使用します。



継続する。



All Articles