付 燕,辛 茹
(西安科技大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,陜西 西安 710054)
問答技術(shù)是為了讓用戶通過自然語言就可以與計算機進行交互的技術(shù)。但是由于目前問題和潛在正確答案之間的匹配度并不高,給智能問答帶來了挑戰(zhàn)[1]。
梁敬東等[2]提出了一種通過word2vec和LSTM來計算句子相似度實現(xiàn)的FAQ問答系統(tǒng),模型相較于傳統(tǒng)的算法較大提高了答案匹配的準確率;榮光輝等[3]提出的基于深度學(xué)習(xí)的方法解決了傳統(tǒng)人工構(gòu)造特征中特征不足以及準確率低下的問題;陳靜[4]以句子的詞向量矩陣作為模型的輸入,以問答匹配的置信度作為模型的輸出,提高了問答系統(tǒng)的準確率。類似的基于深度學(xué)習(xí)的智能問答算法可參考文獻[5-8]等。
以上方法主要利用關(guān)鍵詞對文檔進行定位,得到的結(jié)果與用戶想要的答案有一定差距。基于此提出了一種基于word2vec的考慮文檔關(guān)鍵詞之間關(guān)系的混合神經(jīng)網(wǎng)絡(luò)的智能問答算法。
LSTM網(wǎng)絡(luò)解決了長時依賴問題[9]。LSTM在抽取特征之后,針對不同時序產(chǎn)生的特征狀態(tài),通過max-pooling或者avg-pooling獲得最終的特征。無論是max-pooling或者avg-pooling只是對不同的特征做出最后的選擇,因此提出的LSTM_CNN算法采用一些其它的技巧對特征進行選擇。該算法即是對這里的特征選擇進行改進,采用CNN算法的結(jié)構(gòu)對所有的時序特征做出最后的選擇,即LSTM_CNN算法。算法框架如圖1所示。
圖1 LSTM_CNN算法流程
為了選擇合適的分詞工具作為本文數(shù)據(jù)預(yù)處理操作中的分詞處理,在同一實驗環(huán)境下,測試了現(xiàn)有常用的3種分詞方法(THULAC、LTP、JieBa)的性能。實驗環(huán)境為Intel Core i5 2.8 GHz。評測結(jié)果見表1。
表1 SIGHAN Bakeoff 2005 MSR,560 KB
以上是對標準測試集的實驗結(jié)果,同時也對各方法從速度上進行了實驗,結(jié)果見表2。
表2 數(shù)據(jù)集:CNKI_journal.txt(51 MB)
評測結(jié)果顯示,在速度與正確性上,結(jié)巴分詞(JieBa)均具有較好的性能,故采用結(jié)巴分詞(JieBa)的Python版本進行分詞操作。
本文選取的語料庫為搜狗新聞?wù)Z料庫,其中的語料來自搜狐新聞2012年6月-7月期間,國內(nèi)、國際、體育、社會和娛樂等18個頻道的新聞數(shù)據(jù)。
具體處理流程如圖2所示。
圖2 詞向量計算流程
本次實驗以答案對的形式存儲數(shù)據(jù) (q,a+,a-),q表示問題,a+表示正向答案,a-表示負向答案。實驗所用的訓(xùn)練數(shù)據(jù)已經(jīng)包含了問題和正向答案,因此需要對負向答案進行選擇,實驗時采用隨機的方式對負向答案進行選擇,組合成 (q,a+,a-) 的形式。
對所得到的問題、答案對的形式,利用word2vec將一個句子轉(zhuǎn)換成固定長度的向量表示,從而便于進行數(shù)學(xué)處理。Word2vec矩陣給每個詞分配一個固定長度的向量表示,這個長度可以自行設(shè)定,比如300,實際上會遠遠小于字典長度(比如10 000)。而且兩個向量之間的夾角值可以作為它們之間關(guān)系的一個衡量。通過簡單的余弦函數(shù),計算兩個單詞之間的相關(guān)性,如式(1)所示
(1)
LSTM_CNN算法選擇共享的LSTM模型來計算問題和答案的語義特征。LSTM對輸入的問題答案信息的詞向量進行特征選擇,可以對距離相對較遠的詞與詞之間的聯(lián)系選取出更好的特征。
CNN[10]最大的優(yōu)勢在特征提取方面。當使用LSTM模型計算的到問題和答案的特征后,再通過共享的CNN做進一步的特征選取,這種方法得到的實驗結(jié)果性能更優(yōu)。
采用問題和答案最終獲取的特征,計算目標函數(shù)(cosine_similary),如圖3所示。其中,P是1-MaxPooling; T是tanh層。目標函數(shù)計算如式(2)所示
L=max{0,M-cosine(q,a+)+cosine(q,a-)}
(2)
M是需要設(shè)定的參數(shù)margin,q、a+、a-分別是問題、正向答案、負向答案對應(yīng)的語義表示向量。
本章算法的實驗環(huán)境見表3,算法在不同的環(huán)境下計算時會產(chǎn)生一些差異。
圖3 計算目標函數(shù)
表3 實驗環(huán)境
實驗所使用的數(shù)據(jù)集來自第六屆“泰迪杯”官方給出的全部訓(xùn)練數(shù)據(jù)train_data_complete.json(170.6 MB),測試數(shù)據(jù)test_data_sample.json(552 KB)。其中訓(xùn)練數(shù)據(jù)的格式為:問題-答案-標簽。標簽為1表示是問題的正確答案,標簽為0是無關(guān)內(nèi)容。測試數(shù)據(jù)的格式為:問題-答案,未標注標簽。數(shù)據(jù)樣例見表4。
表4 數(shù)據(jù)集示例
數(shù)據(jù)預(yù)處理需要對原始問答數(shù)據(jù)進行分詞處理,數(shù)據(jù)集分詞后的結(jié)果一部分如圖4所示。測試集與訓(xùn)練集的區(qū)別為測試集的標簽?zāi)J全是0。對原始數(shù)據(jù)進行分詞處理后,再構(gòu)建相應(yīng)的詞向量,構(gòu)建的詞向量結(jié)果如圖5所示。
圖4 數(shù)據(jù)集分詞結(jié)果
圖5 詞向量結(jié)果
本模型使用結(jié)巴分詞處理后的訓(xùn)練集、測試集數(shù)據(jù)以及詞向量進行實驗,數(shù)據(jù)集樣例見表4。
實驗中訓(xùn)練設(shè)置的參數(shù)如下:學(xué)習(xí)率=0.05,每1000輪驗證一次,濾波器的尺寸=[1,2,3,5],濾波器的數(shù)目=500。經(jīng)過多次實驗發(fā)現(xiàn),訓(xùn)練迭代輪數(shù)為3000次即可達到預(yù)期的目標,所以本次訓(xùn)練迭代輪數(shù)為3000輪。經(jīng)過3000輪的迭代訓(xùn)練后,模型準確度已達到90%以上。已達到預(yù)期的訓(xùn)練目標。模型準確度隨著迭代訓(xùn)練輪數(shù)變化的趨勢如圖6所示。
圖6 模型準確度變化趨勢
在模型的訓(xùn)練的過程中,為了對模型進行校驗,在每經(jīng)過1000輪訓(xùn)練迭代后,就會用測試集對模型進行校驗,并利用當前的模型求解問題與候選答案的關(guān)聯(lián)度,其值越接近1,則說明候選答案與問題的關(guān)聯(lián)度越高,也能說明候選答案是問題正確答案的可能性越大。訓(xùn)練結(jié)束后,關(guān)聯(lián)度集部分結(jié)果如圖7所示。通過分析關(guān)聯(lián)度集中的數(shù)據(jù),本文設(shè)置0.83為正確答案與錯誤答案的界限,關(guān)聯(lián)度低于0.83為錯誤答案,高于0.83為正確答案。根據(jù)此閾值,對測試集中的候選答案的標簽進行標注。
圖7 測試集關(guān)聯(lián)度集部分結(jié)果
為了驗證提出算法的有效性,將該算法分別與CNN和LSTM算法同等實驗條件下進行了對比。實驗結(jié)果見表5。
表5 不同算法的實驗對比結(jié)果
由表5中數(shù)據(jù)可以看出,CNN與LSTM都是比較好的深度學(xué)習(xí)方法,對于自然語義處理尤其是LSTM獨特的特點,通過循環(huán)重復(fù)利用網(wǎng)絡(luò)模塊,以便于更好處理語義之間的聯(lián)系;CNN可以直接通過詞向量作為神經(jīng)網(wǎng)絡(luò)的輸入從而提取詞語直接的特征值,不必人工提取特征,從而使得對大型數(shù)據(jù)的語義處理效率更高,通過將二者結(jié)合,實驗結(jié)果驗證了該算法的有效性。
本文對LSTM及CNN等方法進行了深入的分析與研究,并詳細闡述了本文的考慮文檔關(guān)鍵詞之間關(guān)系的LSTM_CNN模型。但隨著現(xiàn)實應(yīng)用需求的不斷變化,對智能問答算法的執(zhí)行效率和答案的準確度也越來越高。因此未來還可從以下兩點對智能問答模型進行深入研究:①在線文本的處理;②模型性能的進一步優(yōu)化。未來可通過對模型算法的進一步優(yōu)化,給出準確率更高的答案,從而進一步提高模型的性能。