劉 杰 白尚旺 陸望東 黨偉超 潘理虎,3
1(太原科技大學計算機科學與技術學院 山西 太原 030024)
2(太原政通云科技有限公司 山西 太原 030000)
3(中國科學院地理科學與資源研究所 北京 100101)
自動問答系統(tǒng)的一般處理流程是對用戶提出的問題查詢FAQ (Frequently Asked Questions)問題庫并返回最為相似問題的答案。早期的自動問答系統(tǒng)主要依靠專家系統(tǒng),如文獻[1]提到的LUNAR和文獻[2]提到的STUDENT專家系統(tǒng),但是專家系統(tǒng)往往有局限性,其數(shù)據(jù)結(jié)構(gòu)通常是結(jié)構(gòu)化數(shù)據(jù),問句之間相似度匹配往往是句中詞語的機械式匹配。張子憲等[3]從句子的關鍵詞相似度、關鍵詞距離以及相同關鍵詞在問題庫所占比例等方面進行了相似度計算分析,并提出一種基于句子規(guī)則的問句相似度計算方法。該方法雖然提高了句子相似度匹配精度,但是忽略了句子結(jié)構(gòu)層面的分析。文獻[4]提出了一種基于改進后的TF-IDF的句子相似度計算方法,通過同義詞典統(tǒng)計關鍵詞詞頻信息,然后計算向量之間余弦相似度。雖然該方法慮到了關鍵詞的物理特征,但忽略了詞語在問句環(huán)境中的依存關系以及語義關系。
近年來,隨著大數(shù)據(jù)時代到來和云計算能力不斷地提高,深度學習得到了非??焖俚陌l(fā)展,其具有很好的特征學習能力,尤其是在圖像和語音領域,這也激勵著大批學者將其具有應用自然語言處理的研究中[5-7]。2013年,Google公開獲取詞向量工具Word2vec[8-9],立即引起了學術界和工業(yè)界的關注,其獲取詞向量方法與One-hot[10]方法相比能夠更好地表達詞與詞之間的相似特征。2014年,Kim[11]提出了基于卷積神經(jīng)網(wǎng)絡的文本分類方法——Text-CNN,該方法相比RNN[12]能夠取得更高的分類準確率,雖然對某些特殊復雜句式的分析比RNN差一些,但是Text-CNN的分類效率總體更高。
基于以上分析和自動問答系統(tǒng)存在的問題,本文提出一種基于Word2vec和句法規(guī)則的自動問答系統(tǒng)問句相似度計算方法?;赪ord2vec模型訓練的詞向量能夠更好地分析詞與詞之間語義關系,將向量空間相似度轉(zhuǎn)換成語義相似度?;诰浞ㄒ?guī)則的問句相似度計算方法能夠更好地分析問句中特殊句型關系、詞性關系以及依存關系。
圖1所示為本文方法主要的處理流程。首先將用戶提出的問題與FAQ庫中的問題進行基于Word2vec和句法規(guī)則的問句相似度計算分析,判斷其是否超過閾值。若超過閾值則將FAQ中超過閾值且相似度最高的問題的答案作為用戶提出問題的答案返回給用戶,否則系統(tǒng)記錄該問題并通知管理員在FAQ庫中添加該問題和相應的答案。
圖1 自動問答系統(tǒng)流程
在問句相似度計算過程中詞是計算的基本單位,而詞向量是詞的特征在空間結(jié)構(gòu)中的映射也是詞的數(shù)字特征形式,所以詞向量構(gòu)建是問句相似度計算的重要環(huán)節(jié)。文獻[8-9]提到訓練Word2vec有兩種非常重要的模型:跳字模型和連續(xù)詞袋模型。
1.1.1跳字模型
跳字模型(skip-gram)是依據(jù)中心詞來生成中心詞周圍的詞。該模型以圖2為例,假設存在文本序列“學校”“老師”“愛”“每一個”“學生”,設置其生成背景的窗口為2,在 skip-gram中,給定中心詞“愛”,生成2個詞的范圍內(nèi)的背景詞“學?!薄袄蠋煛薄懊恳粋€”“同學”的條件概率為:
P(“學?!?“老師”,“每一個”,“學生”|“愛”)
(1)
如果生成概率是相互獨立的,則式(1)可以改寫為:
P(“學?!眧“愛”)·P(“老師”|“愛”)·P(“每一個”|“愛”)·P(“同學”|“愛”)
(2)
圖2 跳字模型
假設存在一個索引集合為{0,1,…,n}的詞典和一個中心詞wc和背景詞wo,且wc對應One-hot詞向量為vc,wo對應One-hot詞向量為uo,那么,在skip-gram中,給定中心詞wc生成背景詞wo的概率為:
(3)
式中:i、o、c表示為詞典中索引的位置。
假設,存在一個長度為T的文本序列,那么,給定任一中心詞w(t)生成w(t+j)背景詞的概率為:
(4)
式中:t為時間步;m為生成背景詞的窗口大小。
由式(4)可以得到最小化損失函數(shù):
(5)
在訓練過程中,采用隨機梯度下降隨機取一個子序列來訓練更新模型參數(shù),把式(3)代入式(5)通過微分可得到中心詞向量vc的梯度:
(6)
訓練結(jié)束后得到Word2vec詞向量。
1.1.2連續(xù)詞袋型(CBOW)
與跳字模型相比,連續(xù)詞袋模型在生成結(jié)構(gòu)上略有不同,該模型是給定周圍背景詞去生成中心詞。以圖3為例,假設存在文本序列“學?!薄袄蠋煛薄皭邸薄懊恳粋€”“學生”,在CBOW中,給定“學?!薄袄蠋煛薄懊恳粋€”“學生”作為背景詞,生成中心詞“愛”的條件概率為:
P(“愛”|“學?!?“老師”,“每一個”,“學生”)
(7)
圖3 連續(xù)詞袋模型
假設存在一個索引集合為{0,1,…,n}的詞典和一個中心詞wc、一個背景詞集合{wo1,wo2…,wo2m},且wc對應One-hot詞向量為uc,{wo1,wo2…,wo2m}對應的背景One-hot詞向量集合為{vo1,vo2…,vo2m},那么,在CBOW中,給定背景詞集合{wo1,wo2…,wo2m}生成中心詞wc的概率為:
(8)
那么式(8)改寫為:
(9)
假設存在一個長度為T的文本序列,那么給定背景詞w(t-m),…,w(t-1),w(t+1),…,w(t+m),生成中心詞w(t)的概率為:
(10)
式中:t為時間步;m為生成背景詞的窗口大小。
由式(10)可以得到最小化損失函數(shù):
(11)
在訓練過程中,同樣采用隨機梯度下降隨機取一個子序列來訓練更新模型參數(shù),把式(9)代入式(11)通過微分可得到任一背景詞向量vok(k=1,2,…,2m)的梯度:
(12)
訓練結(jié)束后得到Word2vec詞向量。
本文提出的句法規(guī)則主要分為問句分類規(guī)則、問句特殊句型規(guī)則、問句動名詞規(guī)則、問句依存關系規(guī)則。
1.2.1基于問句分類規(guī)則的相似度分析
通過大量分析問句語料庫發(fā)現(xiàn),相似度較高的兩個問題可以分為一類,因此在計算兩個問句是否相似時候,可以把類的特征作為一個考量因素。如表1所示,第一組中的問句都屬于“詩詞”一類,第二組都屬于“地理”分類。文獻[4]方法沒有把問句分類作為相似度計算的一個特征因素,其計算結(jié)果很低。
當問句分類結(jié)果作為一個相似度計算因素時,構(gòu)造的問句分類模型必須要有較高的分類準確率。
表1 問句相似度分析一
卷積神經(jīng)網(wǎng)絡(Convolutional Neural Networks, CNN)最先被應用在圖像識別方面,并且取得了長足的進步。其識別圖像過程是通過模仿人類視覺層感知圖像的過程。首先通過眼睛攝取圖像的像素;然后大腦皮層細胞找到圖像的形狀邊緣和形狀方向并且抽象地確定該圖像的形狀;最后,進一步地抽象判定。
文獻[11]提出文本數(shù)據(jù)也可以看作是一維圖像,將文本映射成一維圖像可以利用卷積神經(jīng)網(wǎng)絡提取詞與詞之間的特征 ,其網(wǎng)絡結(jié)構(gòu)為“單層卷積+池化”的簡易 CNN 模型——Text-CNN,如圖4所示。
圖4 Text-CNN網(wǎng)絡結(jié)構(gòu)
Text-CNN與CNN模型結(jié)構(gòu)略有不同的是 Text-CNN網(wǎng)絡模型結(jié)構(gòu)首先定義了一維卷積核,其作用是對輸入的特征進行卷積運算,卷積核的寬度不同則捕捉的詞與詞之間的相關性也可能不同,卷積運算之后再執(zhí)行最大池化處理并將池化的輸出值作為向量連接,最后通過全連接層將每個類別進行輸出。圖4中,輸入層由5×5的詞向量組成,詞向量的維度是5,總共5個詞向量,卷積層有3種尺寸不相同的卷積核,分別是2×5、3×5、4×5, 每種尺寸有兩個卷積核。卷積核分別于上一層輸入層進行卷積運算,其卷積后的結(jié)果再使用激活函數(shù)進行激活。每個卷積操作都會得到一個相應的特征圖,池化層采用最大池化操作過濾出每個特征圖最大值然后進行鏈接,輸出層運用Softmax對卷積層連接好的向量進行分類。
1.2.2基于特殊句型的相似度分析
在帶有否定詞的問句句型中,否定詞的影響可以忽略。如表2所示,在問句環(huán)境中兩個問句描述的是一個意思,在計算問句相似度時可以去除問句中的否定詞“不”,其相似度不變。
表2 問句相似度分析二
1.2.3基于問句中動詞和名詞的相似度分析
分析發(fā)現(xiàn)相似度較高的問句中,其相似度主要取決于句中名詞與名詞以及動詞與動詞之間的相似性。如表3所示,如果能提高第一組名詞“計算機”與“電腦”,“屏幕”與“顯示器”及動詞“打”和“閃”之間的語義理解,那么其計算的相似度結(jié)果會更高。而基于Word2vec訓練的詞向量恰好解決了詞語之間語義相似度計算的問題。
表3 問句相似度分析三
1.2.4基于問句依存關系相似度分析
一個詞在問句的不同位置表達出來的意思可能完全不一樣,如表4所示,問句1、2和問句3、4的包含和對比依存關系完全不一樣,文獻[4]并沒有分析問句的依存關系,相似度計算的結(jié)果都較高。
表4 問句相似度分析四
基于第1節(jié)的分析,本文提出一種基于Word2vec和句法規(guī)則的自動問答系統(tǒng)問句相似度計算方法,問句示例如下:
“杭州屬于哪個???”
J1
“杭州歸于哪里?”
J2
其相似度計算式為:
SimJ(J1,J2)=a·SameCateSim(J1,J2)
β·cos(sim(J1n,J2n))+r·cos(sim(J1v,J2v))+
(13)
(1)SimJ(J1,J2)表示為問句J1和問句J2相似度值,值越接越近1表示問句J1和問句J2越相似,值越接近0表示問句J1和問句J2越不相似。
(2)sim(A,B)表示為詞向量A和詞向量B的余弦相似度,即:
(14)
為了方便比較,本文把余弦相似度都統(tǒng)一歸一化到[0,1]區(qū)間內(nèi),歸一化后的余弦相似度為:
cos(sim(A,B))=0.5+0.5×sim(A,B)
(15)
(3) (J1,J2)表示J1和J2是否同類,如果是同類,SameCateSim=1;否則SameCateSim=0。
(16)
(4) 用LTP[13]對問句中的動詞(v)和名詞(n)進行詞性標注,J1n表示為問句J1中的所有名詞Word2vec詞向量累加和,J2n同理;J1v表示為問句J1中得所有動詞Word2vec詞向量累加和,J2v同理。
表5 句法依存關系表
例如,問句J1與問句J2的相同依存關系為“SBV”“HED”“VOB”“RAD”,那么集合C={“SBV”,“HED”,“VOB”,“RAD”},C的大小為4,k=4。假設,問句J1中的“SBV”的Word2vec詞向量為y1,“HED”的Word2vec詞向量為y2,…,“RAD” 的Word2vec詞向量為y4。 問句J2中的“SBV”的Word2vec詞向量為x1,“HED”的Word2vec詞向量為x2,…,“RAD”的Word2vec詞向量為x4,那么:
(16)
(5)a、β、r、z為相似度權(quán)重因子,a+β+r+z=1,經(jīng)過200個問句相似度計算測試,將a、β、r、z分別設置為0.2、0.2、0.2、0.4。
為了更加詳細說明本文方法計算問句相似度的過程,將問句J1和問句J2計算過程進行分析,如表6所示。由于詞向量維數(shù)為400維,超出表格部分由省略號代替。
表6 計算過程分析
本次實驗運行環(huán)境為Ubuntu 16.04,CPU為Intel i7 9700,編譯環(huán)境為Anconda 3,Python 3,選用jieba分詞器分詞,選用Tensorflow 1.0 訓練Text-CNN問句分類模型,選用Gensim訓練中文維基 Word2vec詞向量。
實驗具體流程如下:(1) 數(shù)據(jù)預處理;(2) 訓練構(gòu)造Word2vec詞向量模型;(3) 訓練構(gòu)造Text-CNN問句分類模型;(4) 用式(13)計算兩個問句相似度;(5) 計算自動問答系統(tǒng)準率(P)和召回率(R)以及F值;(6) 對比實驗結(jié)果進行分析。
訓練Text-CNN問句分類模型,設置詞向量embedding_dim為128,過濾器filter_sizes大小分別為3、4、5,每層網(wǎng)絡卷積核num_filters個數(shù)為128, DropOut概率為0.5,正則懲罰項為0.2,batch_size為64,epochs為100。訓練數(shù)據(jù)采用搜狗公開問句數(shù)據(jù)集進行訓練,人工把問句數(shù)據(jù)集分為“人物”“地理”“醫(yī)療”“歷史”“動物”“詩詞”“歌曲”“科學” 八種類型,共2 000個問句,其中1 500句作為訓練集,500句作為驗證集。
訓練Word2vec詞向量模型,設置詞向量維數(shù)size為400,使用CBOW模型訓練,訓練Window大小為5,每批單詞數(shù)量batch_words為1 000。訓練數(shù)據(jù)采用中文維基百科數(shù)據(jù),大約91萬條,并將其xml格式的繁體數(shù)據(jù)轉(zhuǎn)換成txt格式簡體數(shù)據(jù)集,然后用jieba分詞處理。
使用準確率(P)、召回率(R)和F-measure(F)對自動問答系統(tǒng)實驗結(jié)果進行分析,計算如下:
(17)
(18)
(19)
3.3.1Text-CNN問句分類結(jié)果
在模型訓練迭代到12 000步時,驗證集分類準確率達到91%,在12 000到16 000步時準確率趨于平穩(wěn),驗證了Text-CNN問句分類的可行性,如圖5所示。
圖5 Text-CNN模型問句分類準確率
3.3.2問句相似度結(jié)果分析
選取5組不同類型的問句作為問句相似度分析,其結(jié)果如表7所示。
表7 問句相似度實驗結(jié)果
可以看出,相比文獻[4]方法,本文方法在計算問句之間相似度有著顯著提高。
1) 本文方法將問句分類特征作為相似度計算的一個因素,將問句共性特征轉(zhuǎn)換為問句相似的特征。表7中第一組問句都屬于“詩詞”一類,文獻[4]并沒有考慮問句分類的特征,所以相似度非常低。
2) 文獻[4]并沒有對問句中否定詞的特殊性進行分析,而本文方法消除了問句中無用否定詞。如表7 中 “太原不屬于山西嗎?”從問句角度的理解,去掉其中的否定詞“不”并不改變其問句的意思。顯然,文獻[4]將其視為一個詞處理,反而相似度不會很高,本文方法從問句的特殊句型角度出發(fā)提升了問句相似度計算結(jié)果。
3) 本文基于Word2vec模型訓練的詞向量更加精確地反映出了詞語之間的語義關系,從語言含義角度提升了計算的精確度。如表7第4組問句中,在 “電腦”和“計算機”以及“屏幕”和“顯示器”之間語義的理解,本文方法更為準確。
4) 本文方法加入了問句依存關系的分析,一個詞在問句的不同位置可能表達出來的意思不一樣,如表7第5組中,“質(zhì)子包括原子嗎?”與“原子包括質(zhì)子嗎?”包含的依存關系完全不一樣,相似度也不會很高,而文獻[4]沒有分析問句的依存關系。
3.3.3自動問答系統(tǒng)實驗結(jié)果分析
在自動問答系統(tǒng)測試過程中,隨機從搜狗公開問答數(shù)據(jù)集中抽取200個數(shù)據(jù)進行測試,系統(tǒng)閾值設置為0.50,加入文獻[4]方法對比分析,結(jié)果如表8所示。
表8 不同方法的對比實驗結(jié)果
可以看出,相比文獻[4]方法,本文提出的方法在準確率、召回率以及F值三項對比中有明顯的提升,召回率有顯著提升的原因主要是本文方法在問句理解的廣度上更為深刻。
本文提出的基于Word2vec和句法規(guī)則的自動問答系統(tǒng)問句相似度計算方法,更加準確地分析了問句的分類關系、特殊句型關系、依存關系以及語義關系,有效地提高了為自動問答系統(tǒng)返回答案的準確率。但是該方法對問句中一些專業(yè)詞語的深層語義辨析上存在著一定的缺陷,下一步工作將對專業(yè)詞匯的深層語義辨析做研究。