2016-12-20 36 views
0

我正在使用tensorflow seq2seq.rnn_decoder標題自動生成項目。如何提高張量流中的單詞精度?

我的訓練集是一套很大的標題,每個標題都是相互獨立的,並且不相關。

我曾嘗試兩個數據格式進行訓練:

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] 

然後我做了測試的一小部分,其擁有10000個冠軍,但結果讓我感到困惑。

F1是做一個很好的預測在一個字,就像這樣:

iphone predict 6 
samsung predict galaxy 
case predict cover 

F2是使一個長句子的良好預測,如果輸入的是從句子的第一個字開始,預測多次幾乎等於原來的句子。

但是,如果起始詞來自句子的中間(或近端),則F2的預測非常糟糕,就像隨機結果一樣。

這種情況與隱藏狀態有關嗎?

在訓練階段,我重置隱藏狀態爲0時,一個新的時代開始,因此,所有批次的時代將使用相同的隱藏狀態,我懷疑這是不是一個好的做法,因爲每一個句子實際上是獨立的,它是否可以在訓練中分享相同的隱藏狀態?

在推斷階段,初始化隱藏狀態爲0,&在輸入單詞時更新。 (當清除輸入時復位爲0)

所以我的問題是爲什麼F2的預測是壞的,當開始詞是從句子的中間(或近端)?在我的項目中更新隱藏狀態的正確方法是什麼?

回答

0

我不確定我是否正確理解了您的設置,但我認爲您所看到的情況與隱藏狀態的處理有關。

讓我們先看看你在F2中看到什麼。既然你每次重置你的隱藏狀態,網絡在整個標題的開頭只看到一個0狀態,對吧?所以,在訓練期間,除了開始序列時,它可能永遠不會有0狀態。當你嘗試從中間解碼時,你從0狀態開始,在訓練過程中從未見過這樣的位置,所以失敗。

在F1中,您也重置了狀態,但由於您不是填充,所以0-狀態在訓練期間更加隨機地出現 - 有時在開始時,有時在標題中間。網絡學會應對這一點。

+0

我同意你的看法,但從句子中間預測是最常見的要求,而且每個標題都是獨立的也很重要。 我該如何改進這個模型? 謝謝。 –