1. 程式人生 > >LSTM模型在問答系統中的應用

LSTM模型在問答系統中的應用

在問答系統的應用中,使用者輸入一個問題,系統需要根據問題去尋找最合適的答案。

1:採用句子相似度的方式。根據問題的字面相似度選擇相似度最高的問題對應的答案,但是採用這種字面相似度的方式並不能有效的捕獲使用者意圖的能力有限。

2:IBM早期應用在watson系統中的DeepQa演算法。該演算法通過人工抽取一系列的特徵,然後將這些特徵輸入一個迴歸模型。該演算法普適性較強,並且能有效的解決實際中的問題,但是準確率和召回率一般。

3:深度學習演算法。依然是IBM的watson研究人員在2015年發表了一篇用CNN演算法解決問答系統中答案選擇問題的paper。通過深度學習演算法不僅能夠避免了人工手動抽取大量的問題特徵的麻煩,並且取得了比DeepQa更好的效果。詳細的介紹可以點選

這裡,我們組的同學去年也針對該paper做了詳細的實驗,具體的描述可以在這裡找到。

大量的實驗證明,在大資料量的情況下,深度學習演算法和傳統的自然語言演算法相比可以獲得更優的結果。並且深度學習演算法無需手動抽取特徵,因此實現相對簡便。其中CNN演算法被大量的研究和使用,CNN演算法的優點在於實現簡單(卷積)、並且能夠捕獲資料位置(單字成詞情況下,一次視窗的卷積類似於一次切詞的操作)的特徵資訊。但是對於時序的資料,LSTM演算法比CNN演算法更加適合。LSTM演算法綜合考慮的問題時序上的特徵,通過3個門函式對資料的狀態特徵進行計算,這裡將針對LSTM在問答系統中的應用進行展開說明。

2016年watson系統研究人員發表了“LSTM-BASED DEEP LEARNING MODELS FOR NON-FACTOID ANSWER SELECTION”,該論文詳細的闡述了LSTM演算法在問答系統的中的應用,這裡將針對文中所描述的演算法進行實驗。


演算法流程圖

實驗步驟

1:本次實驗採用insuranceQA資料,你可以在這裡獲得。實驗之前首先對問題和答案按字切詞,然後採用word2vec對問題和答案進行預訓練(這裡採用按字切詞的方式避免的切詞的麻煩,並且同樣能獲得較高的準確率)。

2:由於本次實驗採用固定長度的LSTM,因此需要對問題和答案進行截斷(過長)或補充(過短)。

3:實驗建模Input。本次實驗採用問答對的形式進行建模(q,a+,a-),q代表問題,a+代表正向答案,a-代表負向答案。insuranceQA裡的訓練資料已經包含了問題和正向答案,因此需要對負向答案進行選擇,實驗時我們採用隨機的方式對負向答案進行選擇,組合成(q,a+,a-)的形式。

4:將問題和答案進行Embedding(batch_size, sequence_len, embedding_size)表示。

5:對問題和答案採用相同的LSTM模型計算特徵(sequence_len, batch_size, rnn_size)。

6:對時序的LSTM特徵進行選擇,這裡採用max-pooling。

7:採用問題和答案最終計算的特徵,計算目標函式(cosine_similary)。


目標函式

引數設定

1:、這裡優化函式採用論文中使用的SGD(採用adam優化函式時效果不如SGD)。

2、學習速率為0.1。

3:、訓練150輪,大概需要1天的時間,從訓練日誌觀察得到,100輪左右基本達到穩定。

4、margin這裡採用0.1,其它引數也試過0.05、0.2效果一般。

5、這裡訓練沒有采用dropout和l2約束,之前試過dropout和l2對實驗效果沒有提升,這裡就沒有采用了。

6、batch_size這裡採用100。

7、rnn_size為300(繼續調大沒有明顯的效果提升,而且導致訓練速度減慢)

8、目標函式採用cosine_similary,實驗時也試過歐幾里德距離,但是效果不佳。

實驗效果對比

:這裡分別實驗了單向的LSTM和雙向的LSTM演算法。單向的LSTM演算法只能捕獲當前詞之前詞的特徵,而雙向的LSTM演算法則能夠同時捕獲前後詞的特徵,實驗證明雙向的LSTM比單向的LSTM演算法效果更佳。

如果有任何問題歡迎傳送郵件到[email protected]

轉自:http://www.jianshu.com/p/ce0c53761299