1

TL; DR:雙向RNN是否對簡單文本分類有幫助,並且是填充邪惡?(雙向)用於簡單文本分類的RNN

在我最近的工作中,我爲同樣的任務創建了LSTM模型和BLSTM模型,即文本分類。 LSTM模型做得很好,但我決定給BLSTM一個鏡頭,看它是否會進一步提高精度。最後,我發現BLSTM的收斂速度要慢得多,令人驚訝的是,它過度配置,即使我以50%的概率申請輟學率。

在實施過程中,我爲LSTM和BLSTM都使用了展開的RNN,期待更快的培訓。爲了滿足要求,我手動將輸入文本填充到固定長度。

比方說,我們有一句話「我早上睡覺,錯過了對尼布甲尼撒的採訪」,然後在轉換爲一系列預先訓練的詞嵌入指數時,最後填充0。所以我們得到類似於[21,43,25,64,43,25,6,234,23,0,0,29,0,0,0,...,0]的東西。請注意,「th」(應該是「the」)是一個拼寫錯誤,名稱「Nebuchadnezzar」太稀有了,因此它們都不在詞彙表中,因此我們用0代替它,零字矢量。

這裏是我的感言:

  1. 有些人喜歡飼養胼到手套箱或Word2Vec模型之前,改變生詞變成像一個特殊的詞「< UNK>」。這是否意味着我們必須首先建立詞彙表,並在訓練之前將一些低頻詞(根據分鐘數設置)更改爲「< unk>」?訓練RNN時,將未知單詞變爲0還是僅刪除它們會更好?

  2. 就我而言,輸入到LSTM或BLSTM網絡中的尾隨0將混淆輸出。儘管沒有來自外部的新信息,但是細胞狀態仍會在隨後的每個時間步驟更新,因此最終細胞的輸出將受到長尾隨0嚴重影響。而且我相信,BLSTM會受到更多的影響,因爲它也處理來自逆序的文本,就像[0,0,0,...,0,321,231],特別是如果我們設置初始值忘記門到1.0來培養記憶。我看到很多人使用填充,但如果文本填充很長並且在BLSTM的情況下不會導致災難?

關於這些問題的任何想法? :-o

回答

0

根據經驗,對UNKNOWNPADDING有不同的嵌入是有幫助的。由於您在進行文本分類,因此如果文本分類不太多,我認爲刪除它們不會太有害,但我對文本分類不夠熟悉。

至於填充你的序列,你有沒有嘗試填充你的序列不同?例如,爲正向LSTM填充序列的開始,併爲後向LSTM填充序列的結尾。由於你用零填充,所以激活不會很強(如果有的話),你的LSTM現在將以你的序列結束,而不是可能覆蓋你的LSTM內存的零。

當然,這些只是我頭頂的建議(我沒有足夠的評論聲望),所以我沒有答案。你必須自己嘗試一下,看看它是否有幫助。我希望它。

乾杯。

1

我同意大多與上述法布里斯的回答,而是提出一些看法:

  1. 你永遠不應該使用相同的令牌UNK和PAD。大多數深度學習庫都是通過PAD進行掩碼,因爲它不提供任何信息。另一方面,UNK向你的模型提供了信息(這裏有一個詞,我們只是不知道它是什麼,它可能是一個特殊的詞),所以你不應該掩蓋這一點。是的,這意味着在一個單獨的預處理步驟中,您應該通過您的培訓/測試數據,建立一個詞彙表,比如說前10,000個最常用的詞彙,並將其他所有內容切換到UNK。

  2. 如1所述,大多數庫只是掩蓋(即忽略)填充字符,所以這不是問題。但正如你所說,你沒有必要去填補句子。例如,您可以在訓練時按照長度對它們進行分組,或者一次一個地將句子輸入到模型中。