我有兩個人之間有各種對話的數據。每個句子都有某種類型的分類。我正在嘗試使用NLP網絡對會話的每個句子進行分類。我嘗試了一個卷積網絡並獲得了不錯的結果(不是破天荒的)。我認爲,既然這是一種來回的對話,而LSTM網絡可能會產生更好的結果,因爲之前所說的可能會對接下來的內容產生很大的影響。如何構建用於分類的LSTM神經網絡
如果我按照上面的結構,我認爲我做了許多一對多。我的數據看起來像。
X_train = [[sentence 1],
[sentence 2],
[sentence 3]]
Y_train = [[0],
[1],
[0]]
數據已經使用word2vec進行處理。然後,我設計我的網絡如下。
model = Sequential()
model.add(Embedding(len(vocabulary),embedding_dim,
input_length=X_train.shape[1]))
model.add(LSTM(88))
model.add(Dense(1,activation='sigmoid'))
model.compile(optimizer='rmsprop',loss='binary_crossentropy',
metrics['accuracy'])
model.fit(X_train,Y_train,verbose=2,nb_epoch=3,batch_size=15)
我假設這個設置將一次饋送一批語句。但是,如果在model.fit中,洗牌並不等於錯誤接收洗牌批次,那麼爲什麼在這種情況下LSTM網絡甚至有用?從課題研究,實現了許多一對多結構中的一個需要改變LSTM層太
model.add(LSTM(88,return_sequence=True))
和輸出層將需要......
model.add(TimeDistributed(Dense(1,activation='sigmoid')))
當切換到這個結構我得到了輸入大小的錯誤。我不確定如何重新格式化數據以滿足此要求,以及如何編輯嵌入圖層以接收新的數據格式。
任何輸入將不勝感激。或者,如果您對更好的方法有任何建議,我很樂意聽到他們的聲音!
那麼你是說LSTM層每次只能喂一個字嗎?因此,即使句子正在洗牌,句子中的每個單詞都會分別傳遞給LSTM以瞭解整個句子之間的總體情況? – DJK
如果我沒有正確說出我的問題,我很抱歉。由於數據是一個對話,所以在前面的句子中所說的話對下面的句子有重要意義。所以我試圖設置網絡來學習對話流程並對每個句子進行分類。這就是爲什麼我試圖使用return_sequence,因此網絡將保存關於前一句的信息,同時對當前句子進行分類。 – DJK
LSTM被喂入一系列矢量。在你的情況下,它是一個單詞嵌入序列。它將爲您的案例中的每個句子返回一個長度爲88的向量,然後將其減少到1輸出密集層。所以它一次只關心一個句子。這就是你目前所做的。那是你想要做的嗎? –