王 策, 萬福成, 于洪志, 馬 寧, 吳甜甜, 楊方韜
(西北民族大學 中國民族語言文字信息技術教育部重點實驗室, 蘭州 730030)
自動問答系統(tǒng)是自然語言處理領域的重要任務之一, 旨在讓用戶使用自然語言直接與問答系統(tǒng)交互, 無需考慮使用什么樣的關鍵詞組合表達自己的意圖; 問答系統(tǒng)能精確地返回問題答案, 用戶無需從大量復雜的相關文檔中自己尋找答案。傳統(tǒng)自動問答系統(tǒng)主要由3部分組成: 問句分析、 信息檢索和答案抽取[1]。多年來, 在候選答案句的抽取研究上, 國內(nèi)外取得了不錯的進展。隨著技術發(fā)展, 方法也在不斷更新。最早由Cui等[2]提出一種與之前使用的模式匹配方法不同的模糊關系匹配的方法, 其采用基于互信息和最大值期望的模糊關系匹配方法, 即基于統(tǒng)計模型的模糊關系匹配方法, 取得了當時最好的實驗效果。該方法沒有考慮到問句中關鍵詞(非停用詞)在候選答案句中存在的同義表達。
在傳統(tǒng)機器學習方法的使用上, Huang等[3]通過SVM(Support Vector Machine)模型對原始句子進行分類, 雖然其主要任務不是做候選答案句抽取, 但其處理思路與候選答案句抽取任務十分相似, 都是通過對給定句子進行人工標記, 進行有監(jiān)督學習, 最后學習到句子間語義關系。此外, Ding等[4]通過對CRF(Conditional Random Field)模型的研究, 提出了一種能獲取上下文語義信息特征關系的方法, 用以抽取問句與答案句之間的語義關系。Yao等[5]在CRF模型的基礎上對傳統(tǒng)分類任務進行了創(chuàng)新, 將候選答案句抽取任務轉換成序列標注任務??梢? CRF模型在答案句抽取上也取得了不錯的效果。
隨著深度學習方法興起, 國內(nèi)外學者將深度神經(jīng)網(wǎng)絡應用在自然語言處理領域, 各項性能得到了不錯的提升。Wang等[6]使用長短時記憶網(wǎng)絡進行問答系統(tǒng)的答案句抽取, 為了降低問答系統(tǒng)中句內(nèi)語法特征和一些其他因素對結果的影響, 他們采用了將單向LSTM(Long Short-Term Memory)擴展為雙向長短時記憶網(wǎng)絡的方法。Gong等[7]將端到端指針網(wǎng)絡應用于句子排序中, 該方法充分發(fā)揮了端到端網(wǎng)絡的特點, 只需對句子進行詞向量表示, 并輸入到端到端網(wǎng)絡中, 模型會通過指針網(wǎng)絡對句子集合的特征進行學習, 最后直接輸出句子排序。2016年, 在NLPCC組織的基于文檔的中文問答評測(DBQA: Document Based Question Answer)的比賽中, Fu等[8]將額外的文本特征加入到CNN(Convolutional Neural Networks)網(wǎng)絡中, 在效果上取得了小幅提升。但單獨使用CNN網(wǎng)絡的效果不是很好, 這說明傳統(tǒng)方法的應用在中文語料上有一定的作用。隨著注意力機制的提出, 熊雪[9]提出了引入注意力機制的答案選擇模型, 其層疊注意力機制增強模型捕捉句間語義邏輯關系, 通過詞匹配的方法增強模型對未登錄詞的匹配情況, 最終取得了不錯的效果。
從20世紀60年代開始, 國外學者就已開始對問答技術進行研究, 但大多以英文為主要研究對象, 中文問答系統(tǒng)相比英文起步較晚。開放域問答系統(tǒng)與限定領域問答系統(tǒng)相比的最大障礙在于知識庫的構建過程, 目前將非結構化或半結構化數(shù)據(jù)自動轉化為結構化知識庫的技術尚不成熟, 同時在大數(shù)據(jù)時代, 產(chǎn)生的數(shù)據(jù)量越來越龐大, 開放域問答系統(tǒng)的答案抽取工作變得更加困難。針對以上情況, 筆者將答案抽取過程分為兩個步驟進行: 1) 答案句抽取, 即從答案片段中抽取包含答案的句子; 2) 從答案句中抽取答案。抽取到的答案句是否包含答案將直接影響最終結果的準確率。在目前公開的自動問答系統(tǒng)語料庫中, 候選答案句數(shù)量一般在20句左右, 語句內(nèi)容信息也會更加復雜。筆者主要研究計算機自動識別答案句, 并在傳統(tǒng)方法的基礎上進行改善, 提高答案句抽取的準確率。為此, 提出一種將Bi-LSTM(Bi-directional Long Short-Term Memory)網(wǎng)絡與Max Pooling結合的方法進行答案句抽取。
筆者主要討論答案句的定位和抽取過程, 具體例子如表1所示。
表1 問題句與候選答案句對
由表1可見, 在8個候選答案句中, 只有第1句包含正確答案, 故將其定義為答案句。答案句抽取模型的核心原理是使用Bi-LSTM對問句和答案句進行特征提取, 然后使用CNN中的池化層對特征進行下采樣, 剔除冗余的特征信息。
對于問答系統(tǒng)中的答案抽取問題, 相對于傳統(tǒng)的問句語義和證據(jù)片段語義關系匹配的方法, 筆者將其看作為一種信息檢索和序列標注問題, 即將給定問題放入搜索引擎進行檢索, 抓取證據(jù)片段并對其斷句作為候選答案句, 通過答案句抽取模型標注出可能包含答案的句子。
答案句抽取模型主要包含3層: 詞向量層、 Bi-LSTM層和Max Pooling層。模型架構圖如圖1所示。
圖1 基于Bi-LSTM和Max Pooling的答案句抽取方法架構圖Fig.1 Architecture diagram of the answer sentence extraction method based on Bi-LSTM and Max Pooling
1.2.1 詞向量層
首先, 通過Word2Vec(Word to Vector)得到問句和候選答案句中每個詞對應的詞向量表示, 并輸入Bi-LSTM層。向量表示了問句和候選答案句中所有信息, 這對實驗結果影響重大。假設問句Q 包含n個詞,Q={x1,x2,…,xn},xi代表問句中第i個詞。如果問句中包含答案信息詞, 則把該詞加入答案詞向量。例如, 對于問題Q“科比曾經(jīng)效力哪只球隊?”, 對應答案A“洛杉磯湖人隊。”, 則用Q和A一起表示該問題。利用詞向量矩陣Ew獲得詞向量, 用d表示向量的維度,vw表示詞匯大小[10]。通過
ei=Ewvi
(1)
可將一個詞xi轉變?yōu)樵~向量。其中vi是向量vw的大小。筆者使用的詞向量由wiki百科數(shù)據(jù)訓練獲得。通過以上處理, 問句將以詞向量{e1,e2,…,en}的形式進入下一層網(wǎng)絡。
1.2.2 Bi-LSTM層
Bi-LSTM為雙向長短期記憶網(wǎng)絡, 由前向LSTM與后向LSTM組合而成, 兩者通常用于在自然語言處理任務中對上下文信息進行建模。
LSTM的全稱是長短期記憶網(wǎng)絡, 它是RNN(Recurrent Neural Network)的一種。由于其設計上的特點, LSTM非常適合用于建模時間序列數(shù)據(jù), 如文本數(shù)據(jù)。但利用LSTM網(wǎng)絡建模句子仍存在問題: 無法編碼從后到前的信息。例如, “我餓得不行了”, 這里的“不”是對“餓”程度的描述。而Bi-LSTM是通過將正向LSTM和反向LSTM結合, 所以在效果上得到了提升。
1.2.2.1 LSTM
LSTM采用相加的方法將詞向量組合成句子的向量表示, 即將所有詞的向量表示進行加和, 或取平均, 但是該方法沒有考慮到詞語在句子中前后順序關系。LSTM通過訓練過程可學到記憶哪些信息和遺忘哪些信息, 使用LSTM模型可更好捕捉到較長距離的依賴關系。
圖2 總體框架Fig.2 Overall framework
圖3中實線部分為計算遺忘門, 選擇要遺忘的信息過程如下。
輸入: 前一時刻的隱藏層狀態(tài)ht-1, 當前時刻的輸入詞Xt。
輸出: 遺忘門的值
ft=σ(Wf[ht-1,Xt]+Bf)
(2)
圖4中實線部分為計算記憶門, 選擇要記憶的信息過程如下。
輸入: 前一時刻的隱藏層狀態(tài)ht-1, 當前時刻的輸入詞Xt。
輸出: 記憶門的值it, 臨時細胞狀態(tài)
it=σ(Wi[ht-1,Xt]+bi)
(3)
(4)
圖3 計算遺忘門 圖4 計算記憶門和臨時細胞狀態(tài) Fig.3 Calculating forgetting gates Fig.4 Calculating memory gates and temporary cell states
圖5中實線部分為計算當前時刻細胞狀態(tài)過程, 具體如下。
輸出: 當前時刻細胞狀態(tài)
(5)
圖6中實線部分為計算輸出門和當前時刻隱藏層狀態(tài)的過程, 具體如下。
輸入: 前一時刻的隱藏層狀態(tài)ht-1, 當前時刻的輸入詞Xt和細胞狀態(tài)Ct。
輸出: 輸出門的值Ot, 隱藏層狀態(tài)ht:
Ot=σ(Wo[ht-1,Xt]+bo)
(6)
ht=Ottanh(Ct)
(7)
最終, 可得一系列與句子長度相同的隱藏層狀態(tài){h0,h1,…,hn-1}。
1.2.2.2 Bi-LSTM
(8)
最后的輸出是向前向后融合的結果。例如, 對“我愛足球”這句話進行編碼, 模型如圖7所示。
圖7 Bi-LSTM編碼句子的網(wǎng)絡結構Fig.7 Network structure of Bi-LSTM encoded sentences
對于前向LSTMf, 按順序輸入“我”, “愛”, “足球”得3個向量{hf0,hf1,hf2}。對于后向LSTMb, 按順序輸入“足球”, “愛”, “我”得3個向量{hb0,hb1,hb2}。最后將前向和后向的隱向量進行拼接得{[hf0,hb2],[hf1,hb1],[hf2,hb0]}, 即{h0,h1,h2}。
1.2.3 Max Pooling
Max Pooling對于無論出現(xiàn)在什么位置的主要特征, 都可保持特征位置信息且具有旋轉不變性, 因為無論主要特征出現(xiàn)在哪個位置, 都可把它提出。在NLP(Natural Language Processing)中, 特征位置信息至關重要, 比如主語一般位于句首, 賓語位于句尾等, 這些特征的位置信息對分類任務十分重要。
圖8 Filter與神經(jīng)元個數(shù)相對應Fig.8 Filter corresponding to the number of neurons
Max Pooling在卷積網(wǎng)絡中主要用于減少網(wǎng)絡參數(shù), 降低網(wǎng)絡復雜度, 減少運算量。在Max Pooling操作后, 2D或1D的數(shù)組通常被轉換為單一數(shù)值, 以便之后使用在卷積層或全連接隱藏層中, 還能減少單個濾波器的參數(shù)數(shù)量或隱藏層神經(jīng)元的數(shù)量。
對于NLP任務, Max Pooling能將變長輸入處理為一個定長輸入。因為CNN最終會連接到全連接層, 且需要預先確定神經(jīng)元個數(shù), 如果輸入的長度不確定, 則難以設計其網(wǎng)絡結構。綜上所述, CNN模型的輸入長度是不確定的, 并且每個Filter通過Max Pooling 操作只取1個值, 則有多少個Filter, Max Pooling層就有對應多少個神經(jīng)元, 這樣就可固定特征向量神經(jīng)元個數(shù)(見圖8), 這個優(yōu)點也是非常重要的。
近年來, 國內(nèi)外專家學者在答案抽取這方面做了很多研究, 但是其中絕大多數(shù)都是在英文TREC(Text Retrieval Conference)語料的基礎上做的研究和評測, 在中文語料上的研究很少。該實驗使用的訓練語料是使用搜索引擎將答案片段從百度百科中下載到本地數(shù)據(jù)庫, 經(jīng)清洗標注等處理后得到。訓練語料共計18萬多行, 測試語料1萬多行。
由于語料庫的準確性直接影響到實驗結果, 筆者的語料標注采用人工標注方法, 使用將問句中的主干部分動詞和名詞與候選答案句內(nèi)容進行匹配的方法。此方法對于事實類問句, 準確率基本接近100%。例如, 對于問句“孟加拉虎主要分布在哪里?”, 提取句子主干成分“孟加拉虎”和“主要分布”, 將這兩部分在候選答案句中進行匹配, 標注同時包含這兩部分的句子為答案句, 從百度百科爬取的候選答案句與問句相關性很強且格式相對規(guī)范, 有時僅需匹配一個主要成分即可。對部分需要簡單推理類問句, 需要做些簡單語義理解和近義詞轉換, 如問句“謙卑這個詞語來自哪里?”, 即轉換為“謙卑的詞源是什么?”, 這樣就很容易匹配到答案句且能保證準確率。
實驗的訓練數(shù)據(jù)格式規(guī)范, 使用〈問句, 候選答案句, 標簽〉格式, 即每行為一個問句、 一個候選答案句、 一個標簽, 分別用制表符分隔, 標簽為0或1, 即是答案句標注為1, 不是為0, 同一問句一般有20句候選答案句, 候選答案句之間的排列是亂序的。具體語料格式如圖9所示。
圖9 語料格式Fig.9 Corpus format
實驗中數(shù)據(jù)的格式如圖9所示。訓練集共有163 388對問句-答案句對, 測試集共有10 000對, 每個問句對應20多個候選答案句, 因此, 相當于訓練集中的問題有8 000多個, 測試集中的問題有500多個。
在通常情況下, 一般使用準確率、 召回率和F值評估模型的性能, 利用無序文檔集合進行計算, 但是筆者針對答案句抽取模型, 使用平均倒數(shù)MRR(Mean Reciprocal Rank,MMRR)和平均準確率MAP(Mean Average Precision,MMAP)作為評價指標, 最常用的指標為MRR。在筆者的實驗語料中, 大部分問句只有一個答案句與之對應, 極少部分有多個答案句或沒有答案句, 所以在筆者實驗結果中, MRR都會比MAP略高一些。
MRR和MAP的具體計算方式如下
(9)
(10)
(11)
其中Q為測試集中所有問題的數(shù)目, ranki表示在生成的預測答案集合中第1個標準答案的位置,AAveP表示平均準確率;m為標準答案的數(shù)量;n為預測答案數(shù)量;k為候選答案句在模型返回的n個預測答案中排名。
MRR即第1個結果匹配, 分數(shù)為1, 第2個匹配分數(shù)為0.5,…, 第n個匹配分數(shù)為1/n, 如果沒有匹配的句子分數(shù)為0, 最終的分數(shù)為所有得分之和。這是國際上通用的對搜索類和問答類系統(tǒng)進行評價的指標。
MAP是每對〈問句, 答案句〉檢索后的準確率的平均值。MAP反映系統(tǒng)在全部候選答案句上的性能指標。在該模型中, 抽取到的答案句與問句越相關(值越高, 即包含答案), MAP的值越高。若問答系統(tǒng)沒有抽取到答案句, MAP則為0。
實驗使用雙向長短期記憶遞歸神經(jīng)網(wǎng)絡(Bi-LSTM)提取句子間的特征屬性, 將Bi-LSTM的隱藏層輸出做Max Pooling操作, 得到Rmax。Rmax在輸入到tanh激活函數(shù)出中輸出最后判斷結果
M=tanh(Rmax)
(12)
圖10 基于Bi-LSTM的特征提取模型Fig.10 Feature extraction model based on Bi-LSTM
實驗中各個參數(shù)設置如下: dropout設置為1, 詞向量的維度設置為50, 學習率設置為0.3, 學習率下降速度設置為0.1, 學習速度下降次數(shù)設置為4, 每次學習速度指數(shù)下降前執(zhí)行的完整epoch次數(shù)設置為100, LSTM cell中隱藏層神經(jīng)元的個數(shù)設置為100, 句子中的最大詞匯數(shù)目設置為100。
用Dropout防止網(wǎng)絡在訓練過程中出現(xiàn)過擬合的現(xiàn)象, 該實驗中未發(fā)生過擬合現(xiàn)象, 故將dropout設置為1。若降低dropout值會使結果變差; epoch是訓練的批次數(shù), epoch也需設定在合理的范圍內(nèi), epoch越大訓練效果不一定越好, epoch過大, 也會發(fā)生過擬合的現(xiàn)象; 學習率、 學習率下降速度和學習下降次數(shù)3組數(shù)值相互影響, 3個值大小和epoch取值大小有直接關系, 筆者給出的數(shù)據(jù)是通過多次實驗取得的最佳結果; 詞向量的維度大小根據(jù)文獻[11]和平時實驗經(jīng)驗得到, 一般情況取值為50, 在該實驗中詞向量維度大小對實驗結果影響不大。
通過運行各個模型得實驗結果如表2所示。
表2 各個模型在實驗中的最優(yōu)結果
將LSTM模型的實驗結果作為參考, 在該語料中, 其MAP和MRR指數(shù)分別達到了0.339 5和0.339 4。
LSTM模型的優(yōu)點是能在存取輸入和輸出序列的過程中, 映射上下文相關信息。但標準的LSTM在遇到較長句子時, 對下文文字的利用和對上文前部文字的記憶能力下降, 使隱藏層的輸入對于網(wǎng)絡輸出的影響隨著網(wǎng)絡層數(shù)的增長而降低。
CNN最初應用于圖像領域, 目前在NLP領域的應用取得了不錯的效果, 卷積核在句子中進行卷積, 每次只對兩個詞進行組合, 從中選出最有可能的一組, 即進行Max Pooling操作, 使用不同的濾波器得到不同的結果, 最終進行加權組合得到一個新的詞。CNN這種卷積操作和池化操作同時使用的模型, 使句子空間特征消失, 這對于文本即不再考慮句子的語序關系, 而是將句子中的關鍵詞提取出, 再通過訓練好的網(wǎng)絡進行新的排序, 組合成一個新的句子, 這會使句子的向量表征與原本的句子語義有所沖突。
針對這兩種模型的優(yōu)缺點, 分別取他們在文本處理中效果好的部分并加以修改, 最終建立了Bi-LSTM和Max pooling結合的模型。使用Bi-LSTM進行特征提取, 該方法既能改善單向LSTM網(wǎng)絡對較長句子中開始部分文字的記憶能力, 又能避免卷積操作不能充分利用句子間時序關系提取語句特征關系的問題。保留了卷積神經(jīng)網(wǎng)絡中的Max Pooling層以降低提取的句子維度, 同時可以保留主要特征。在相對于基線LSTM方法和CNN方法, 筆者答案句抽取模型取得良好效果, MAR和MRR指數(shù)達到了0.747 5和0.749 7。
李超等[12]通過在長短時記憶神經(jīng)網(wǎng)絡中借助依存句法樹分析句法結構特征, 構造深度學習網(wǎng)絡進行答案抽取, MRR取得了0.71; 俞霖霖[13]通過將CNN與SVM進行融合, 將CNN模型自動學習到的特征加入到SVM中, 答案抽取結果得到了很好的效果, MAP和MRR指數(shù)達到了0.786和0.789。這兩種方法都是將人工提取句子的語言學特征加入到神經(jīng)網(wǎng)絡中學習, 其中文獻[12]選用NLPCC 2015 發(fā)布的QA 評測問題集, 候選答案句實驗數(shù)據(jù)爬取于百度知道, 文獻[13]使用從百度百科中爬取到數(shù)據(jù)構建, 與本實驗的語料庫來源相同, 故存在可比性。筆者實驗結果和文獻[12]的實驗結果對比可知雙向循環(huán)網(wǎng)絡在時序問題中有更好的效果; 和文獻[13]的實驗結果對比可知, 在神經(jīng)網(wǎng)絡中加入人工提取的語句特征會有更好的效果。
筆者將問答系統(tǒng)中答案抽取任務分解為兩個步驟進行: 第1步從證據(jù)片段中進行答案句抽取; 第2步從抽取到的答案句中抽取最終答案。使用Bi-LSTM和Max Pooling結合的方法構建答案句抽取模型, 提取問句與候選答案句之間的特征關系, 訓練其抽取與標注的結果。實驗結果證明, 在Bi-LSTM中加入CNN中的Max Pooling方法能有效提升答案句抽取的準確率。
筆者主要的創(chuàng)新點主要分為3點: 1) 將答案抽取任務分解為兩步進行處理; 2) 對比傳統(tǒng)的方法使用了深度神經(jīng)網(wǎng)絡結果建模處理候選答案句抽取任務; 3) 使用Bi-LSTM網(wǎng)絡代替CNN中的卷積操作提取句子特征, 與Max Pooling融合構建了新的模型。
筆者方法對事實類問題有著較好的效果, 通過對比其他研究人員的實驗發(fā)現(xiàn), 雖然將語言學知識或人工提取的特征加入到神經(jīng)網(wǎng)絡訓練中, 可使效果更好一些, 但會耗費人力和時間, 而筆者方法在此方面更具優(yōu)勢。