邵 曦 陳 明
(南京郵電大學通信與信息工程學院 江蘇 南京 210003)
隨著人工智能技術的快速發展,其實際應用場景也變得越來越廣泛,在人們生活中的各個方面都有所體現。信息爆炸的今天,人們對于搜索引擎簡單地返回一個相關網頁感到不滿,而問答系統能夠與用戶一對一進行交互,精確理解用戶意圖,從而能夠高效快速地完成用戶的需求[1-2]。最初對于問答系統的研究受限于語料數據的限制,并沒有取得很好的效果。但隨著互聯網的發展,微博、Twitter等聊天工具的興起,為問答系統模型訓練提供了大量的文本數據。1966年,Weizenbaum[3]開發了最早的智能問答機器人ELIZA;2004年,Knill等[4]研發了問答機器人Sofia。這些早期的智能問答大都是基于檢索技術和機器學習算法來實現的。常用的機器學習算法包括潛在狄利克雷分配模型(Latent Dirichlet Allocation,LDA)、支持向量機(Support Vector Machine,SVM)等,并利用貝葉斯法和K近鄰等方法進行分類,以此構建問答之間的對應關系[5]。此類算法對于數據提出了很高的要求,必須有充足的數據才能保證匹配的準確性,且對于不同場景算法的泛化性較低,使用性能較差。
隨著深度學習技術的快速發展,其在圖像處理、語音交互等領域取得了優異的成績[6]。近年來,深度學習在自然語言處理領域也大放異彩[7]。2012年,Mikolov等[8]發現了一種基于循環神經網絡(Recurrent Neural Network,RNN)包含上下文信息的語言模型,將RNN應用到上下文信息的獲取中去。Schuster等[9]提出了Bi-RNN模型,可以利用句子的未來信息進行預測。因此,深度學習模型對于問答系統的研究具有十分重要的作用。鑒于深度學習技術在自然語言處理方向上具有不錯的效果,本文提出了一種基于Bi-LSTM和注意力模型的問答系統。通過生成句向量以獲取句子上下文之間的語義信息和匹配關系,結合注意力模型,找到主題信息,從而生成最佳的回答。
目前,對于問答系統的研究主要分為兩個方向:基于統計特征的機器學習方法和基于深度學習的方法。隨著深度學習技術的發展和各種深度神經網絡模型的提出,基于深度學習的方法成為了當前的研究熱點。Kim[10]提出一種基于卷積神經網絡(Convolution Neural Network,CNN)的分類模型,利用訓練好的詞向量模型進行文本分類。Shi等[11]提出了基于長短時記憶網絡(Long Short-Term Memory,LSTM)的映射分類模型。為了提高回答的準確率以及效率,Sutskever等[12]提出了序列到序列(Sequence to Sequence,Seq2Seq)框架,通過輸入端編碼形成中間語義,再解碼出相應的回答。Feng等[13]提出了基于共享卷積神經網絡用于進行訓練問答模型,通過該模型進行語義相似度計算,并且在英文數據集上取得了優異的成績。注意力模型的提出使得自然語言處理領域又有了一個新的研究方向,該模型通過模擬人腦的機制,對語句中的信息進行加權處理,從而對語句主題信息進行重點關注。Yin等[14]提出了一種基于注意力模型的多層卷積神經網絡模型,實現了對文本語義的建模,并且在問答匹配和語義識別上都取得了很好的效果。目前,關于注意力模型大致可以分為兩類:Soft Attention和Hard Attention。Soft Attention是在求注意力概率分布的時候,對輸入句子中每個單詞都給出權重,其為概率分布;而Hard Attention在進行權重分配時,只會對句中某個或某幾個單詞進行分配,把目標句子單詞和這個單詞進行對齊,句中其他單詞硬性地認為對齊概率為0。本文提出的注意力模型是基于Soft Attention機制實現的。
圖1為本文提出的結合Bi-LSTM和注意力模型的問答系統框圖。在本系統中,輸入問句會首先經過句向量(doc2vec)層生成相應的句向量,然后將生成的向量作為Bi-LSTM的網絡輸入,最后將網絡模型的輸出通過Attention機制形成最后的輸出結果。

圖1 基于Bi-LSTM和注意力模型問答系統
在詞向量(word2vec)技術占據主流時,Le等[15]在word2vec的基礎上進行拓展,提出了句向量(doc2vec)技術。在word2vec技術中,主要分為Continuous Bag Of-Words(CBOW)模型和Skip-gram模型。本文主要討論CBOW模型,其模型結構如圖2所示。該模型分為輸出層和輸入層,相比傳統的語言模型,由于其去掉了隱藏層,所以運算速度得到大幅提升。CBOW模型使用一段文本的中間詞作為目標詞,即利用該中間詞的上下詞來預測該詞,通過利用上下文各詞的詞向量的平均值來替代之前模型各個拼接的詞向量,可以提高模型預測的準確性。

圖2 CBOW模型結構圖
與word2vec相對應,doc2vec也存在兩種模型:DM(Distributed Memory)模型和DBOW(Distributed Bag of Words)模型,本文采用的是DM模型。DM模型框架如圖3所示。

圖3 DM模型
DM模型增加了一個Paragraph ID,在訓練過程中,Paragraph ID會先映射成一個向量,且與詞向量的維數相同,但二者屬于不同的向量空間。在之后的計算中,paragraph vector和word vector累加起來,輸入softmax層,從而輸出預測結果。以“the cat sat”為例,通過DM模型可以預測出下一個詞為“on”。在一個句子的訓練過程中,paragraph ID始終保持不變,共享同一個paragraph vector,相當于每次在預測單詞概率時,都利用了整個句子的語義。在進行預測時,給每一個句子分配一個paragraph ID,詞向量和輸出層softmax參數保持訓練得到的不變,通過隨機梯度下降法訓練預測語句。本文利用句向量代替詞向量進行預測,從而可以充分利用語句的語序信息,準確理解語句意圖,并將其輸入下一層的網絡。
Bi-LSTM是由LSTM演化而來,LSTM的提出是為了解決循環神經網絡在面對長序列時產生的梯度消失問題[16]。LSTM網絡模型由各個記憶單元組成,通過輸入門、遺忘門和輸出門來控制記憶單元的存儲內容,通過門的控制可以在新的狀態下不斷疊加輸入序列,從而對前面的信息具有記憶功能。LSTM的網絡結構如圖4所示。

圖4 LSTM網絡結構
x={x1,x2,…,xt}表示輸入序列,h={h1,h2,…,ht}表示記憶單元的輸出,Ct表示記憶單元的記憶內容。網絡具體計算方式如下:
ft=σ(wf·[ht-1,xt]+bf)
(1)
it=σ(wi·[ht-1,xt]+bi)
(2)
(3)
(4)
ot=σ(wo·[ht-1,xt]+bo)
(5)
ht=ot*tanh(Ct)
(6)
式中:w表示權重矩陣;b表示偏置向量;σ表示sigmoid函數。上一單元的輸出和當前輸入信息經過遺忘門后,網絡決定需要拋棄哪種信息,然后通過輸入門進行信息更新,將Ct-1更新為Ct,最后通過輸出門確定需要輸出的值ot。
由于單向LSTM網絡在進行訓練時只考慮到句子的時序信息而忽略了上下文之間的關系,因此在進行多句對話時,往往不能取得很好的效果。Bi-LSTM網絡是由前向LSTM和后向LSTM組成,可以充分利用序列的上下文信息。本文提出用Bi-LSTM對問句進行訓練,融合前向LSTM和后向LSTM的結果進行輸出,從而可以提高模型回答的準確率。
注意力模型是由Bahdanau等[17]提出,該模型借鑒了人腦的思維模式,即人的注意力一定是集中在目光看到的事物上,隨著目光的轉移,注意力也在轉移。在自然語言處理領域中,注意力模型往往是附著在Encoder-Decoder(即Seq2Seq)框架下使用。該框架是處理由一個句子生成另一個句子的通用處理模型,對于輸入問句X經過Encoder模塊編碼形成中間內容向量C,Decoder模塊根據中間內容向量C和之前已經生成的歷史信息解碼出該時刻的單詞。在該框架中,解碼生成目標單詞時,采用的都是同一個內容向量C,因此無法獲取關鍵信息,例如以下對話:
Q:南京有什么好玩的地方?
A:南京是江蘇省會,著名的六朝古都,是一座文化名城,有新街口、總統府和夫子廟等旅游景點。
當根據這個問題去生成答案時,“新街口”“總統府”“夫子廟”等回答與問題語義更加貼切,所以在模型中應當突出這些關鍵詞語的作用。采用將注意力模型應用到Encoder-Decoder框架中,可以有效地為不同詞語分配不同的權重,達到獲取對話主題信息的目的。融合注意力模型的Encoder-Decoder框架如圖5所示。

圖5 融合注意力模型的Encoder-Decoder框架
圖5中的Encoder-Decoder框架融合了注意力模型,在解碼時條件概率可以寫為:
p(y1,y2,…,yi-1,X)=g(yi-1,si,ci)
(7)
式中:si可以是一個非線性的多層神經網絡,表示解碼器在i時刻的隱藏狀態,其計算公式如下:
si=f(si-1,yi-1,ci)
(8)
式中:f(·)表示某種非線性函數。可以看出,目標輸出與相對應的內容向量ci有關,相比于傳統的Encoder-Decoder框架只有一個內容向量C,圖5模型具有更好的獲取主題信息的能力。ci由編碼時的隱藏向量序列加權得到:
(9)
(10)
式中:eij=a(si-1,hj);L表示輸入源語句單詞的個數;αij表示在輸入第i個單詞時源輸入語句第j個單詞的注意力分配系數,αij的值越高,表明在生成第i個輸出時受第j個輸入的影響越大;hj表示源輸入語句第j個單詞的語義編碼。將第i-1時刻的隱藏狀態si-1和hj通過前饋神經網絡a計算得到一個數值,然后使用softmax得到i時刻輸出在L個輸入隱藏狀態中的分配系數。
本文研究的問答系統就是采用融合了注意力模型的Encoder-Decoder框架,對問句進行編碼并解碼生成出相應的回答,具有回答準確、多樣等特點。
本文的實驗都是在TensorFlow框架下進行的。TensorFlow是一個經典的深度學習框架,具有一個很強大的庫以支持大規模的數值計算,并在后端使用C++加快其計算速度,擁有豐富的高級機器學習應用程序接口(API)可以使其更容易地配置、訓練模型。
本文實驗數據來源于百度客服推廣的對話錄音,利用科大訊飛的語音轉文字工具,將對話錄音轉換成文本形式。將對話文本整理成兩個txt文檔,分別是問句文檔question.txt和答句文檔answer.txt。整個問答文檔包括大約80 000條對話數據,其中60 000條作為訓練數據集,20 000條作為測試數據集。采用jieba分詞器進行文檔的中文分詞,然后進行去標點處理等操作,為句向量的生成做準備。
利用TensorFlow框架對該神經網絡模型迭代訓練,直至網絡收斂并保存模型,模型參數如表1所示。

表1 模型的相關參數
在對話問答系統領域,主要采用計算系統生成的回答與參考回答之間的余弦相似度,以此來對問答系統的性能進行評價。
本文的問答系統采用上述方法進行性能評價。通過使用句向量模型分別計算生成回答與參考回答的句向量,然后計算二者之間的余弦相似度確定生成回答的準確性。為了更好地驗證本文所提出的方法,另外設置了兩組對照實驗,分別是:未融合注意力模型的Seq2Seq問答模型和基于檢索技術的問答模型。不同模型的回答準確率如表2所示。

表2 各個模型實驗結果對比
可以看出,本文提出的基于Bi-LSTM和注意力模型的問答系統在回答的準確率上較傳統的兩種模型都有較大的提升,其準確率可達到80.76%。對于檢索模型,其只能依靠訓練過的語料庫來進行回答,不能對訓練語料庫中未出現的問句做出有效的回答,但對于訓練語料庫中出現過的問題,可以給出準確的回答;而Seq2Seq模型雖然能夠解決檢索模型的一些缺陷,但是在解決長對話問題和理解用戶語義方面仍然存在不足,往往不能做出準確的回答。本文提出的模型充分利用了Bi-LSTM對上下文信息的獲取能力以及注意力模型對主題信息的獲取能力,從而提高了問答系統的準確率。圖6為本文提出的模型的問答效果。

圖6 對話效果演示
可以看出,本文設計的問答系統在面對提問時,能夠理解問題的語義并結合上下文對話信息,做出較為準確的回答。例如:在面對“太高了”這個簡短的問句時,系統能夠聯系到上文的價格信息,最后生成相應的回答。
本文提出一種結合Bi-LSTM和注意力模型的問答系統,采用了Encoder-Decoder框架實現系統的問答,并進行了模型訓練和測試。設置對照實驗,通過回答的準確率對系統的性能進行評估。實驗表明,本文系統在問答結果上能夠達到較高的準確率,可以較為流暢地回答問題,解決了傳統問答系統回答僵硬、理解能力不足等缺陷。在今后的研究工作中,將著重研究句法分析、數據預處理等,以降低中文問答語料庫不足對模型訓練帶來的影響。同時,嘗試利用不同的神經網絡模型構建系統,觀察是否能夠更好地提高系統回答準確率,以及如何將注意力模型應用到整個問句上也是未來研究的方向。