4

我正在研究句子標籤問題。我已經做了我自己的嵌入和填充和我投入的樣子:Keras中的序列標籤

X_i = [[0,1,1,0,2,3...], [0,1,1,0,2,3...], ..., [0,0,0,0,0...], [0,0,0,0,0...], ....] 

每個單詞句子我想預測四班的一個,所以我期望的輸出應該是這樣的:

Y_i = [[1,0,0,0], [0,0,1,0], [0,1,0,0], ...] 

我的簡單的網絡架構是:

model = Sequential() 

model.add(LSTM(input_shape = (emb,),input_dim=emb, output_dim=hidden, return_sequences=True)) 
model.add(TimeDistributedDense(output_dim=4)) 
model.add(Activation('softmax')) 
    model.compile(loss='binary_crossentropy', optimizer='adam') 

model.fit(X_train, Y_train, batch_size=32, nb_epoch=3, validation_data=(X_test, Y_test), verbose=1, show_accuracy=True) 

它顯示了約95%,而訓練,但是當我試圖用預測新句子訓練模型的結果是非常糟糕的。看起來模型剛剛爲第一個單詞學習了一些類,並且每次都顯示它。我認爲問題可能是:

  1. 由我自己填充(零向量在句尾),它可以使學習變得更糟嗎?

  2. 我應該嘗試學習不同長度的句子,沒有填充(如果是的話,你能幫助我如何火車這類在Keras模型的?)

  3. 學習錯誤的目標,但我想均值平方誤差,二叉交叉熵等,它不會改變。

  4. TimeDistributedDensesoftmax的東西,我認爲,我已經知道它是如何工作的,但仍然不是100%確定。

我很高興看到有關此問題的任何提示或幫助,謝謝!

+0

你嘗試過在你的lstms輟學?還有,你有沒有試過lstm批量歸一化 – Julius

+0

因爲你有很高的訓練集學習率,你可以做高失分做正規化 – Julius

+0

,然後也許嘗試多層lstm – Julius

回答

1

我個人認爲你誤解了「序列標籤」的含義。

你的意思是:

  1. X是句子的列表,每個元素X[i]是任意長度的字序?
  2. Y[i]X[i]的類別,而Y[i]的一個熱表單是一個[0, 1, 0, 0]類似的數組?

如果是,那麼它不是一個序列標籤問題,這是一個分類問題。

不要使用TimeDistributedDense,如果它是一個多類分類問題,即len(Y[i]) > 2,然後使用「categorical_crossentropy」,而不是「binary_crossentropy

+0

我可以知道你爲什麼不是序列標籤問題嗎?我有同樣的挑戰,輸入是單詞的順序,我需要每個單詞的標籤。這不是一個序列標籤問題嗎? –