1

NMTのように、シーケンスエンコーダデコーダモデルのシーケンスを使用してチャットボットを構築しています。与えられたデータから、訓練の際にデコーダの出力をエンコーダのセル状態とともにデコーダの入力に供給することを理解することができます。私は実際にリアルタイムでチャットボットを展開しているときに、その時間が予測しなければならない出力であるため、デコーダに何を入力すればよいのかを理解できません。誰かが私を助けてくれますか?ChatbotsのSeq2Seqモデル

+0

私はまた、https://github.com/tensorflow/nmtに従っています。私は同じ問題が解決策を見つけることができますか? – jignasha

答えて

0

正確な回答は、あなたがNeural Machine Translation model(NMT)から取得するビルディングブロックと、自分で置き換えるビルディングブロックによって異なります。 NMTと同じようにグラフ構造を仮定します。

もしそうなら、推論の時に、ゼロベクトルだけをデコーダに送ることができます。


内部詳細:NMTは、デコーダ内の次の入力を決定するために、Helperと呼ばれるエンティティを使用して(tf.contrib.seq2seq.Helperマニュアルを参照)。ザが次電池に供給されるnext_inputsHelper.next_inputs()の正確戻り値である:それはステップを実行する際に特に

tf.contrib.seq2seq.BasicDecoderはヘルパーのみに依存しています。

  • tf.contrib.seq2seq.TrainingHelper(通常は真実を粉砕する)次デコーダ入力を返して、例えばHelperインタフェースの異なる実装が存在します。このヘルパーは、the tutorialに示されているようにトレーニングに使用されます。
  • tf.contrib.seq2seq.GreedyEmbeddingHelperは、入力を破棄し、前の出力からargmaxサンプリングされたトークンを返します。 NMTは、sampling_temperatureハイパーパラメータが0であるとき、推論でこのヘルパーを使用する。
  • tf.contrib.seq2seq.SampleEmbeddingHelper同じことをするが、categorical(a.k.a.一般化ベルヌーイ)分布に従ってトークンをサンプリングする。 sampling_temperature > 0の場合、NMTはこのヘルパーを推論に使用します。
  • ...

コードがBaseModel._build_decoder方法です。 GreedyEmbeddingHelperSampleEmbeddingHelperの両方は、デコーダ入力が何であるかに関わらないことに注意してください。だから、実際には何でも食べることができますが、ゼロテンソルは標準的な選択です。

関連する問題