---- seq2seq人気理解エンコーダおよびデコーダ(TensorFlowが実装)

1. seq2seqは何ですか

多くのアプリケーションAUTO言語処理自然言語、入出力START⻓配列が不明であってもよいです。機械翻訳では、例えば、英語のテキストが不確実な配列である⻓1つのハッシュSTART入力することができ、出力は、例えばフランスの⼀不確か⻓現在シーケンスファイルのセグメントであってもよいです。

英語は、STARTを失う: "彼ら" は、 "見て" "されています"、 ""

フレンチ出力: "ILS"、 "regardent"、 ""

デコーダ(エンコーダ・デコーダ)またはseq2seqモデル-入力および出力変数START⻓配列である場合、我々は、コーダを使用することができます。シーケンスモデルへのシーケンスは、seq2seqモデルと呼ばれます。これらの二つのモデルは、ニューラルオープンネットワークを使用して2つのサイクルに、本質的に、エンコーダとデコーダと呼ばれます。⽣使用されるように、エンコーダの出力シーケンスへ復号器を使用して入力開始配列を解析します。二つのリカレントニューラルネットワークは、一緒に訓練を受けています。

上記文記載された方法のサブメニュー⼀の文生成方法サブメニューデコーダを翻訳 - 説明エンコーダを使用図。トレーニングデータセットでは、我々はまだ表サブメニューの順に表示のための各文の終了後に特殊な記号「<EOS>」(シーケンスの終了)を添付することができます。エンコーダ英語の文章のサブメニューの単語、句読点や特殊文字「<EOS>」の順に各時間ステップの入力を開始します。入力文サブメニューSTARTの特性又は符号化情報として、最終時間ステップに隠さ図操作のエンコーダの使用。各デコーダ時間ステップの出力符号化情報入力操作を使用するサブメニューは、文章入力および隠れ状態STARTなどの時間ステップを開始します。我々は右の様々な時間に換算ためのデコーダ出力フランス語の単語、句読点や特殊文字「<EOS>」にステップすることができるように願っています。「⼀テーブルへの第一歩利用STARTのデコーダ入力時刻がシーケンスの先頭の特殊記号を表示しています 「(シーケンスの始まり)。

2.エンコーダ

エンコーダの使用所与への入力シーケンスを開始⻓⼀背景変数c、変数背景をコードSTART入力シーケンス情報を⻓不定⼀することです。頻繁に使用される環状エンコーダニューラルオープンネットワークです。

私たちは1ズーム時系列データサンプルの少量を考えてみましょう。入力シーケンスは、X1、...、XT、例えばxiはSTART文サブメニューにI番目の単語を失うことが想定されるSTART。時間ステップtにおいて、リカレントニューラルオープンネットワークがXT入力特徴ベクトルを起動して隠れ状態の時間ステップXTの\(H_ {T-1} \) 変換HTは、現在の時間ステップで隠されています。我々は、変換サイクル隠された層のニューラルネットワークのオープンを表現できる関数fを使用します:

\ [h_t = F(X_T、H_ {T-1})\]

次に、背景変数を変換する各時間ステップの隠れ状態によってカスタム関数Qのエンコーダ。

\ [C = Q(H_1、...、h_T)\]

例えば、選択されたQH 1 、...、 H T)= H T、背景入力変数は、配列隠された最終時間ステップSTARTあるH T

上記エンコーダは、ニューラル⼀オープンネットワークは、隠された各時間ステップだけ時間ステップ及びSTARTサブメニュー前の入力シーケンスに依存一方向サイクルです。また、双方向のサイクル神経オープンネットワーク構築のエンコーダを使用することができます。この場合、エンコーダ毎に隠されたステップは、前の時間ステップおよびサブメニューシーケンスの後(現在の時間ステップの入力開始を含む)の両方に依存し、シーケンス全体の情報を符号化します。

3.デコーダ

ただ、全体の入力開始X1を符号化するエンコーダ出力の背景変数C配列、...、XTの情報を記載されています。トレーニングシーケンス所与の出力サンプルY1、Y2、...、YT 「 各時間ステップtに対して」、デコーダYT「の出力条件(入力またはエンコーダである異なる時間ステップtのシンボルシーケンスを開始)以前の出力シーケンスに基づいて確率\(Y_1、...、Y_ { T ^ {「} - 1} \) と背景変数C、すなわち:

\ [P(Y_ {T ^ { '}} | Y_1、...、Y_ {T ^ {'} - 1}、C)\]

この目的のために、我々はデコーダとして他の時間ニューラルオープンネットワークのためのサイクルを使用することができます。時間ステップtの出力シーケンス「デコーダタイムステップの出力⼀ \(Y_ {T ^ {」 } - 1} \) と入力変数のC STARTとして背景、それらを非表示にし、次の上位の時間ステップへステータス\(S_ {T ^ { ' } - 1} \) STを隠された現在の時間ステップに変換されます'。したがって、我々はそれがデコーダ機能gが隠れ層を表明変換使用することができます。

\ [S_ {T ^ { '}} = G(Y_ {T ^ {'} - 1}、C、S_ {T ^ { '} - 1})\]

デコーダの隠された状態で、我々は、出力層と自己定義を使用して計算算術ソフトマックスを行うことができる\(P(Y_ {T ^ { '}} | Y_1、...、Y_ {T ^ {'} - 1}、C)\) 例えば、現在の時間ステップデコーダ隠れ状態STに基づいて「は、前の時間ステップの出力に\(S_ {T ^ {」 } - 1} \) と背景変数cは現在の時刻を算出しますステップ出力YT「確率分布。

4.トレーナー

最もズーム尤推定によると、我々は条件付き確率の最大は、に基づいてシーケンスを開始失う出力配列であることができます。

\ [P(Y_1、...、Y_ {T ^ { '} - 1} | X_1、...、X_T)= \ prod_ {T ^ {'} = 1} ^ {T ^ { '}} P (Y_ {T ^ { '}} | Y_1、...、Y_ {T ^ {'} - 1}、X_1、...、X_T)\]

\ [= \ prod_ {T ^ { '} = 1} ^ {T ^ {'}} P(Y_ {T ^ { '}} | Y_1、...、Y_ {T ^ {'} - 1}、 C)\]

そして、出力シーケンスの結果として損失:

\ [ - のlogP(Y_1、...、Y_ {T ^ { '} - 1} | X_1、...、X_T)= - \ sum_ {T ^ {'} = 1} ^ {T ^ { '} }のlogP(Y_ {T ^ { '}} | Y_1、...、Y_ {T ^ {'} - 1}、C)\]

損失関数が最小化されるように、モデルのトレーニングでは、すべての出力シーケンスの平均値は、一般的に失われます。上記の図で説明したモデル予測では、現在の時間ステップの出力開始と次のより高い出力に時間ステップをデコーダする必要があります。これとは対照的に、トレーニング中に、我々はまた、現在の時間ステップ入力開始時のデコーダとして次に高いタグに時間ステップのシーケンス(実出力シーケンストレーニングセット)をタグ付けすることができます。これは、義務教育(教師強制)と呼ばれています。

5. seq2seq予測モデル

上記は、訓練入力と出力が変数STARTエンコーダ⻓配列である方法を説明します - デコーダを。不確実な⻓のシーケンスを予測するデコーダ - このセクションでは、エンコーダを使用する方法について説明します。

トレーニングデータセットの準備のために、私たちはしばしば後端シーケンスとサンプルの出力シーケンスを開始⼀特殊記号「<EOS>」まだ入力順に表示するための表を伴っています。私たちの次の議論は数学記号を使用して⼀祭を一緒にすべてオンになります。議論を容易にするために、復号器出力シーケンスは、1つのハッシュファイルが存在すると仮定する。Y | |出力Y(「<EOS>」特殊記号が含まれている)、小さなにズームされて辞書ファイルは、「出力シーケンスの⻓がTで最大です。すべての可能な出力⼀コンセンサス配列\(O(| Y | ^ {T ^ {「}})\) 種。これらのすべての特殊記号の出力シーケンス「<EOS>」シーケンスのための画面がサブメニューを破棄されます。

5.1欲張り探索

欲張り探索(欲張り探索)。任意の⼀時間ステップt」の出力シーケンスのために、私たちから| Yは|条件付き確率が最大の単語である単語を検索しました:

\ [Y_ {T ^ { '}} = argmax_ {_ {} YのY \} P(Y | Y_1、...、Y_ {T ^ {'} - 1}、C)\]

出力として。検索⼀「<EOS>」記号、または列の出力が達したら⻓出力が完了すると、「Tの⻓最大です。我々は、デコーダの説明で述べたように、配列STARTに基づいて、出力シーケンスへの条件付き確率⽣入力\(\ prod_ {T ^ { '} = 1} ^ {T ^ {'}} P(Y_ {T ^ {[ }} | Y_1、...、T ^ {Y_ {「} - } 1、C)\)私たちは、出力シーケンスの条件付き確率は、最適な出力シーケンス最大と呼ばれています。主な問題は、最適な出力順序を保証することはできません貪欲検索です。

⾯ビュー⼀ケースサブメニューの下で。出力辞書⾥「A」「B」「C有する⾯と仮定 」 及び「<EOS>」4つのワード。図中の各時間ステップで。
4個の数字「C」と「<EOS>」条件付き確率4つのワード「A」「B」として⽣表すタイムステップ。各時間ステップで、貪欲な検索を選択する条件付き確率が最大の単語です。よって、出力列"A" "B" "Cで⽣10.9図 " "<EOS>"。条件付き確率の出力シーケンスは、0.5×0.4×0.4×0.6 = 0.048。

次に、サブメニューが再生表示され、以下の例を見て。単語「C」の条件付き確率をズーム選択された時間ステップ2セカンドショットで上の図と異なります
時間ステップ3は、出力シーケンスサブメニュー上図「A」「Bによって時間ステップ1及び2に基づいているのでA」「C」、図中の次の時間ステップ3個々の単語に「図中の次なる」⽣条件付き確率アフター変更。私たちは、条件付き確率は、単語「B」の最大のある選択します。時間ステップ4に基づいて、この時点で最初の3つの時間ステップのサブメニュー出力シーケンスは、「A」「C」「Bである 」、 および「A」「B」「C上の画像は、 」 異なっています。したがって、上図の異なる図面に各時間ステップ4⽣単語の条件付き確率。我々は、このときの出力は、シーケンス「A」「C」「B見出さ 「<EOS>」」 0.5×0.3×0.6×0.6 =の条件付き確率である 0.054、 以下欲張り探索を得られた出力配列の約条件付き確率。したがって、出力は、欲張り探索シーケンス「A」「B」「Cを得た 。<EOS>」「」 最適な出力シーケンスを示すものではありません。

5.2徹底的な検索

目的は、最適な出力先の時系列を取得することであるならば、我々は徹底的な検索(徹底的な検索)を検討することができますすべての可能な出力シーケンスを網羅し、条件付き確率は、最大出力シーケンスです。

網羅的探索最適な出力シーケンスが得られるが、それは計算的に高価であることができるが、\(O(| Y | ^ {T ^ {「}})\) 容易に大声です。たとえば、とき| Y | =
時間「= 10は、我々は評価します10,000 T \(= 10000 ^ 10 ^ {10} {40} \)シーケンス:これは慣れることはほとんど不可能です。欲張り探索のゲージながら
オペレータオーバーヘッド\(| Y | O(T ^ {^ {「}})\) 計算オーバーヘッドは、通常、全数探索よりも著しく小さいです。例えば、| Y | = 10000のときT「= 10、私は
単純に評価することができ、\(10000 * 10 = 10 ^ 5 \)のシーケンスを。

5.3ビームサーチ

ビーム探索(ビームサーチ)が⼀検索を改善するための貪欲アルゴリズムです。これは⼀ビーム幅(ビームサイズ)超パラメータを有しています。我々はkに設定します。時間ステップ1において、条件付き確率の時間ステップkを選択する最大現在の単語、Kからなる各ワード従って特に候補出力シーケンスです。後kから時間ステップのk個の候補の出力順序に基づいて、各時間ステップで|条件付き確率は、k個の可能な出力シーケンスを選択する最大である、候補出力シーケンスとして時間ステップ| Y. 最後に、私たちは「<EOS>」シーケンスは特殊記号が含まれ、それらが最終候補出力シーケンスを与えるための画面の後に廃棄されたすべての特殊記号「<EOS>」サブメニューの順に各時間ステップの出力シーケンスの候補をスクリーニングコレクション。

2のビーム幅は、出力シーケンス⻓3の最大です。候補出力配列A、C、AB、CE、ABDとCED。私たちは、これらの6つの配列に基づいて候補出力シーケンスの最終セットに来ます。候補出力シーケンスの最終セットでは、我々は、出力シーケンスとして、次の順序で最も先進的な割合を取ります:

\ [\ FRAC {1} {L ^ {\アルファ}}のlogP(Y_1、...、Y_L)= \ FRAC {1} {L ^ {\アルファ}} \ sum_ {T ^ { '} = 1} ^ {T ^ { '}}のlogP(Y_ {T ^ {'}} | Y_1、...、Y_ {T ^ { '} - 1}、C)\]

其中 L 为最终候选序列⻓度,α ⼀般可选为0.75。分⺟上的 Lα 是为了惩罚较⻓序列在以上分数中较多的对数相加项。分析可知,束搜索的计算开销为 \(O(k|y|^{T^{′}})\)。这介于贪婪搜索和穷举搜索的计算开销之间。此外,贪婪搜索可看作是束宽为 1 的束搜索。束搜索通过灵活的束宽 k 来权衡计算开销和搜索质量。

6. Bleu得分

评价机器翻译结果通常使⽤BLEU(Bilingual Evaluation Understudy)(双语评估替补)。对于模型预测序列中任意的⼦序列,BLEU考察这个⼦序列是否出现在标签序列中。

具体来说,设词数为 n 的⼦序列的精度为 pn。它是预测序列与标签序列匹配词数为 n 的⼦序列的数量与预测序列中词数为 n 的⼦序列的数量之⽐。举个例⼦,假设标签序列为A、B、C、D、E、F,预测序列为A、B、B、C、D,那么:

\[P1= \frac{预测序列中的 1 元词组在标签序列是否存在的个数}{预测序列 1 元词组的个数之和}\]

预测序列一元词组:A/B/C/D,都在标签序列里存在,所以P1=4/5,以此类推,p2 = 3/4, p3 = 1/3, p4 = 0。设 \(len_{label}和len_{pred}\) 分别为标签序列和预测序列的词数,那么,BLEU的定义为:

\[exp(min(0,1-\frac{len_{label}}{len_{pred}}))\prod_{n=1}^{k}p_n^{\frac{1}{2^n}}\]

其中 k 是我们希望匹配的⼦序列的最⼤词数。可以看到当预测序列和标签序列完全⼀致时,
BLEU为1。

因为匹配较⻓⼦序列⽐匹配较短⼦序列更难,BLEU对匹配较⻓⼦序列的精度赋予了更⼤权重。例如,当 pn 固定在0.5时,随着n的增⼤,\(0.5^{\frac{1}{2}}\approx0.7,0.5^{\frac{1}{4}}\approx0.84,0.5^{\frac{1}{8}}\approx0.92,0.5^{\frac{1}{16}}\approx0.96\)。另外,模型预测较短序列往往会得到较⾼pn 值。因此,上式中连乘项前⾯的系数是为了惩罚较短的输出而设的。举个例⼦,当k = 2时,假设标签序列为A、B、C、D、E、F,而预测序列为A、 B。虽然p1 = p2 = 1,但惩罚系数exp(1-6/2) ≈ 0.14,因此BLEU也接近0.14。

7. 代码实现

TensorFlow seq2seq的基本实现

机器学习通俗易懂系列文章

3.png

8. 参考文献

动手学深度学习


作者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

欢迎大家加入讨论!共同完善此项目!群号:【541954936】NLP面试学习群

おすすめ

転載: www.cnblogs.com/mantch/p/11433829.html