2016-12-20 8 views
0

私はtensorflow seq2seq.rnn_decoderでタイトルを自動生成するプロジェクトに取り組んでいます。テンソルフローの単語rnnの精度を改善するにはどうすればよいですか?

私のトレーニングセットは大きなセットのタイトルであり、各タイトルは互いに独立しており、関連性はありません。

私はトレーニングのための2つのデータ・フォーマットを試してみた:

F1. Use the fixed seq length in batch, and replace ‘\n’ to ‘<eos>’, and ‘<eos>’ index is 1, which training batch is like: [2,3,4,5,8,9,1,2,3,4], [88,99,11,90,1,5,6,7,8,10] 
F2. Use Variable seq length in batch, and add PAD 0 to keep the fixed length, which training batch is like: [2,3,4,5,8,9,0,0,0,0], [2,3,4,88,99,90,11,0,0,0] 

その後、私は万本のタイトルを持っている小さなセットでテストを行うが、結果は私が混乱します。

iphone predict 6 
samsung predict galaxy 
case predict cover 

F2が入力文の最初の単語から開始された場合、長い文章で良い予測を行うで、何度予測:

F1は、このように、単一の単語で良い予測を行うです元の文とほとんど同じです。

しかし、開始単語が文の中央(または近端)からのものである場合、F2の予測はランダムな結果と非常によく似ています。

この状態は非表示状態に関連していますか?

トレーニングフェーズでは、新しいエポックが開始されると非表示状態が0にリセットされます。エポック内のすべてのバッチは同じ非表示状態を使用するため、実際にはすべての文章が実際に独立した、それは訓練で同じ隠れた状態を共有することができますか?

推論フェーズでは、初期隠れ状態は0であり、ワードを供給するときには&が更新されます。 (クリア入力時に0にリセット)

私の質問は、文章の中間(または近端)から単語を開始するときにF2の予測が悪いのはなぜですか?私のプロジェクトで隠れた状態を更新する正しい方法は何ですか?

答えて

0

私はあなたの設定を100%正確に理解しているかどうかはわかりませんが、起こっていることが予想され、隠れた状態の処理と関係していると思います。

最初にF2で表示される内容を見てみましょう。毎回隠れた状態をリセットするので、ネットワークはタイトル全体の先頭に0状態しか表示されません。したがって、トレーニング中は、シーケンスを開始するときを除いて、おそらく0状態になることはありません。真ん中からデコードしようとすると、トレーニング中にこのように見たことのない位置で0状態から開始するので、失敗します。

F1でも、パディングしていないので、0状態はトレーニング中にランダムに表示されます。最初は時々、時にはタイトルの中央に表示されます。そして、ネットワークはこれに対処することを学びます。

+0

私はあなたに同意しますが、文の途中から予測するのが最も一般的な要件であり、各タイトルは独立していることも重要です。 このモデルを改善するにはどうすればよいですか? ありがとうございます。 –

関連する問題