楊志明,時迎成,王 泳,潘昊杰,毛金濤
(1. 中國科學院 軟件研究所,北京 100190;2. 中國科學院大學,北京 100049;3. 深思考人工智能機器人科技(北京)有限公司,北京 100085)
由于2017年人工智能熱潮的爆發,使得其在各個領域得到了極大的發展。機器閱讀理解作為自然語言理解的一個子領域,讓機器具備自然語言的閱讀理解與問答能力,一直是研究者和業界關注的對象,也是目前智能語音交互和人機對話的核心難題。那么什么是機器閱讀理解?機器閱讀理解(machine reading comprehension)是指讓機器像人類一樣通過閱讀自然語言文本,然后經過推理總結,從而能夠精準地回答與閱讀內容相關的問題,這種就像是讓計算機來做我們的四六級英語閱讀理解題,不僅要理解文章大意還要學會對文章內容進行推理總結,簡單的說就是能讀懂,會思考。
當前國內外研究學者進行了一些卓有成效的研究,提出了一些具有啟發性的方法與技術。總的來講,我們可以將機器閱讀方法分為兩類: 分別為抽取式和生成式。抽取式通過給定問題以及相關的文章進行訓練,讓機器具備閱讀的能力,并對提出的新問題,在相關文章中抽取出相應的答案。另一種是生成式,從理論上來說不受知識的局限,對于問題自動生成答案,但是生成式有時產生的答案答非所問,句式不通,不能很好地體現出人類的思維邏輯以及自然表述的特點。
在本文中,提出了一種基于BiDAF模型的RBiDAF機器閱讀理解模型。該模型是一種抽取式的機器閱讀理解模型,在BiDAF模型四層網絡框架的基礎上添加了ParaRanking層,針對ParaRanking,本文提出了多特征融合的ParaRanking算法,此外本文還在答案預測層,提出了基于先驗知識的多答案交叉驗證算法,進而對答案進行綜合預測。
本文在第1節中詳細描述了機器閱讀理解和相關工作;第2節中介紹了機器閱讀理解方法,包括: 數據探索、數據預處理及本文提出的RBiDAF模型的詳細設計;在第3節中介紹了在DuReader數據集上的實驗,并對實驗結果進行分析;最后一部分進行總結和展望。
機器閱讀理解屬于自然語言理解的一個子領域,也是一直以來科學家重點研究的課題。現在,通過百度搜索引擎搜索問題,會返回相關的網頁,用戶需要通過點擊到網頁中進行瀏覽,查找自己需要的答案。如果搜索引擎能夠針對用戶的問題,準確地為用戶返回他們需要的標準答案,這會極大地節省用戶寶貴的時間,并帶給用戶良好的用戶體驗。
為了促進閱讀理解技術的發展,中國中文信息學會、中國計算機學會和百度公司聯手舉辦“2018機器閱讀理解技術競賽”[注]http: //mrc2018.cipsc.org.cn/cipsc。競賽提供了面向真實應用場景的大規模中文閱讀理解數據集,旨在為研究者提供學術交流平臺,進一步提升閱讀理解的研究水平,推動語言理解和人工智能領域技術和應用的發展。
自斯坦福機器閱讀理解數據集SQuAD問世以來,經過谷歌、微軟、百度、科大訊飛、騰訊、斯坦福大學等在內的眾多研究機構的不懈努力,形成了“詞向量化-語義編碼-語義交互-答案預測”這樣一套四層機器閱讀理解模型體系。該體系的主要思想是: 首先將自然文本表示為可計算的向量,其次融合問題向量與支撐文檔向量來學習到語義交互信息,最后根據交互信息預測答案的位置或逐一輸出最大概率的字詞來生成答案。
詞向量化層(Word-Embedder)的作用是使用詞向量技術將分詞后的自然文本轉化為稠密、連續且可計算的低維向量。
文本編碼層(Encoder)的作用是進行語義加工,向量化層輸出的結果是一串獨立的詞向量序列,而編碼層根據這些詞向量捕捉詞與詞的前后語義關系,并把這種語義關系融入詞向量中,生成一串互相關聯的文本編碼序列。
語義交互層(Interaction-Layer)是整個模型體系中最重要的一環。在進入這一層之前,問題與給定支撐文檔在大多數情況下是分別獨立進行向量轉化與語義編碼的。當然,在有些模型中,問題詞向量序列也會被提前融合到文檔向量中去。當前大部分研究工作集中在語義交互層的設計上,在這一層,將最終得到混合兩者語義的交互向量。此外,交互向量也時常與未交互前的問題編碼向量直接拼接,以強調問題語義的重要性。
答案預測層(Answer-Layer)負責根據語義交互向量產出最終的答案。目前,答案預測模型主要是生成模型與邊界模型。答案預測層將答案均視作一串詞序列,生成模型逐個預測該序列中每個詞應使用給定文檔中哪個詞進行填充,每次預測均基于之前預測完成的結果。邊界模型則相當于一個簡化的生成模型,其預先假定問題都可以使用給定文檔中的一個連續短語或句子進行回答,因此只需預測答案的起點與終點詞的位置即可。目前,邊界模型的預測效率與結果均好于生成模型。
多層LSTM匹配模型[1]是首個應用于SQuAD數據的端到端機器閱讀理解模型,并成功超越原有使用人工特征進行答案抽取的基線模型。該模型的特點是: (1)在文本編碼層使用單向LSTM進行語義建模; (2)在語義交互層對支撐文檔中的每個詞計算該詞在問題編碼向量上的注意力分配向量,將這一注意力分配向量與問題編碼向量點乘獲得文檔詞-問題交互向量,并再拼接上文檔詞編碼向量,最后用一個新的單向LSTM網絡對拼接后的向量進行二次語義編碼; (3)用反向LSTM重復(1)、(2)操作,并將正反向二次語義編碼向量拼接。
雙向注意力模型[2]可以視作對多層LSTM匹配模型的改進。其主要變化在于: (1)詞向量化層增加了對字的向量化; (2)在語義交互層補充了問題中每個詞在文檔編碼向量上的注意力分配向量,以提升文檔詞-問題交互向量的語義交互程度; (3)改用雙向LSTM網絡二次語義編碼。與單向LSTM相比,雙向LSTM可以同時提取到每個詞相關的上下文信息。
R-Net[3]是對多層LSTM匹配模型的改進。這一模型最大的特點是采用了雙語義交互層的設計。在一級語義交互層,R-Net仿照多層LSTM實現將問題信息融入到每個文檔詞中去;而在二級語義交互層,R-Net則使用相同辦法將已經獲得的文檔詞-問題語義編碼向量再度與問題編碼向量二次融合,進一步加強語義匹配。
QANet[4]則是一種在雙向注意力模型基礎上為追求效率而設計的模型。該模型非常創新地在文本編碼層使用卷積網絡與多頭自注意力機制實現語義編碼,由于卷積網絡可以捕捉局部特征、自注意力機制能夠捕捉全局特征,因此完全可以用它們替代傳統的LSTM網絡。此外,由于卷積網絡的建模效率顯著高于LSTM網絡,該模型得以在更大規模的數據集上進行深度學習——泛化能力得到了進一步提升。這一模型可以在SQuAD數據集上達到訓練速度提高3~13倍,推理速度提高4~9倍,且與先前基于LSTM網絡媲美的精度。
V-net[5]是一種新的多文檔校驗的深度神經網絡建模方法,該模型通過注意力機制使不同候選文檔抽取的答案能夠互相印證,從而預測出更好的答案。
本次機器閱讀理解任務是根據支撐文檔和給定問題,從候選文檔中抽取或者推理出給定問題對應的答案,數據集共包含40萬問題,其中包括27萬訓練集,1萬開發集和2萬測試集。依據Wei He等人的工作[6]可知,數據集中給出的答案不是完全從文章中摘取或生成的。但通過觀察,本文認為選取某一詞序列作為回答,再加上簡單的自定義規則修改,就可以產生比較靠近標準答案的最終回答。
此外,百度數據集與其他數據集很大的區別在于,每篇文章中包含了很多個段落,而斯坦福數據集的支撐文檔直接是一個最相關段落,微軟數據集MS MARCO則是若干篇只有一個段落的文章。因此,在百度機器閱讀理解任務中,需要在主流四層體系的基礎上,增加一個段落定位層。在Wei He等人的工作[6]中提到,使用recall指標增加的段落定位層,并使用recall指標進行段落選擇,可以使模型的效果提升至少10%。所以本文首先對數據進行統計分析,分析結果如圖1~6所示。

圖1 訓練集、驗證集、測試集數據分布

圖2 問題類型分布

圖3 答案數量分布

圖4 篇章數量和段落數量分布

圖5 答案在篇章段落中位置的分布

圖6 答案邊界范圍分布
DuReader數據來自百度知道和百度搜索,數據中含有大量的網頁標簽等字符級的噪聲數據以及句子級的噪聲數據,如表1所示。

表1 原始數據
為了數據方便清洗,本文選擇直接對元素(raw)數據進行清洗,由于元素(raw)數據是沒有標簽的原始數據,所以清洗完成后還需要生成含有標簽的訓練數據和驗證數據。此外本文對生成算法進行了改進,使生成算法在時間效率上提升了兩個數量級。改進的基本原則是首先將可以重復使用的值提到循環外層計算,避免重復計算,如答案的長度、段落的長度以及counter計算等,其次是根據預判對一些不用計算的循環選擇跳過,從而可以減少大量的底層計算,經過對DuReader數據集的清洗,得到表2的數據,可以看出經過清洗后的數據,質量有了很大的提升。

表2 清洗后的數據
本文提出的基于BiDAF模型的RBiDAF模型,主要是在BiDAF模型的基礎上添加了ParaRanking層,在該層提出了ParaRanking算法,從而對候選段落進行排序(ParaRanking)操作,進而篩選出含答案概率更高的候選段落。此外在答案預測層,提出了基于先驗知識的多答案交叉驗證(MACVerify)算法,從而對答案進行綜合預測。圖7是RBiDAF模型的總體架構。
下面將主要介紹RBiDAF模型Ranking層的ParaRanking算法以及答案預測層基于先驗知識的多答案交叉驗證算法。

圖7 RBiDAF模型總體框架
從圖4得知,每一個問題對應多個段落,尤其是在Search數據集中,問題和段落的比接近1∶57,所以應該盡量檢索出含有答案的段落,從而減小候選段落集的數據規模。在這里本文提出了多特征融合的ParaRanking算法,圖8是ParaRanking算法的大體架構,主要包括段落過濾、段落重組、語義匹配、最大覆蓋度、特征加權以及多文檔投票。
3.1.1 段落過濾
本文利用特征工程根據問題類型對不相關段落進行過濾,例如,實體類型的問題中,問題中的關鍵詞是“聯系方式”“熱線”,那么本文利用正則表達式將不含電話號碼的段落進行過濾,最終本文設計了23條規則對段落進行初步過濾。
3.1.2 段落重組
DuReader數據集中的段落長度極度不平衡,有些段落的長度很短,這種情況會造成段落的上下文信息缺失,不利于模型的Match操作。而且本文通過觀察訓練集中答案的分布,發現有些答案是跨段落的,尤其是描述類的問題,所以如果僅僅以某一個原始段落作為預測的輸入,那么將無法解決答案跨段落的問題,因此本文將原始的段落進行重組,重組后長度控制在長度splice_L之內。

圖8 ParaRanking算法框架
3.1.3 語義匹配
問題(question)與段落(paragraph)間的匹配不僅要考慮問題和段落之間的顯式關系,還要考慮兩者之間的隱式關系,即兩者之間的語義關系。例如,question: 北京2017年的商業住房的均價是多少?paragraph: 據我所知是四萬元一平。上例question和paragraph之間的最大覆蓋度雖然為0,但是兩者之間具有極大的語義相關性,并且“四萬元一平”極有可能是答案。所以為了克服字詞匹配上的弊端,本文選擇利用深度神經網絡計算question和paragraph之間的語義相關性。
由于ARC-II[7]保留了詞序信息,更具一般性,所以本文采用ARC-II[7]文本匹配模型對question以及paragraph之間的語義相關度進行計算,在第一層中,首先把卷積窗口設定為k1,然后對句子Squestion和句子Sparagraph中所有組合的二維矩陣進行卷積,每一個二維矩陣輸出一個值(文中把這個稱作一維卷積,因為實際上是把組合中所有詞語的vector排成一行進行的卷積計算),構成Layer-2,然后進行2×2的Max-Pooling。后續的卷積層均是傳統的二維卷積操作,與第一層卷積層后的簡單Max-Pooling方式不同,后續的卷積層的Pooling是一種動態Pooling方法。輸出固定維度的向量,接著輸入MLP層,最終得到文本相似度分數ps。
3.1.4 最大覆蓋度
本文沿用了基線模型的最大覆蓋度算法,DuReader的基線模型采用問題和段落的最大詞級別的覆蓋度算法對段落進行排序,然后對每一個篇章挑選top-1作為模型的輸入,本文將問題與段落的最大覆蓋度作為ParaRanking的一個重要特征值定義為pc,其中不同于基線模型中最大覆蓋度算法的是,這里分別選擇了詞和字兩個粒度進行最大覆蓋度計算,兩者相加作為最終pc的值。
3.1.5 特征加權
首先通過分析DuReader的訓練集可知,在描述類問題的答案中存在大量列表類型的答案,所以本文針對描述類問題識別出段落中的列表信息,并根據這一特征對段落的ParaRanking值進行加權,定義權值為β。
經過語義匹配、最大覆蓋度計算以及特征加權可以得到問題和段落i的最終匹配得分,如式(1)所示。
scorei=β·(ps+pc)
(1)
3.1.6 多文檔投票
本文兩次用到多文檔投票,一次在ParaRanking操作中,一次在答案預測中,前后兩次所用到的方法有些不同。使用多文檔投票是基于某一問題的正確答案在多個段落中會多次出現這一假設。首先定義候選段落集合為Dp,對于段落i∈Dp,那么每一個段落的投票得分如式(2)所示。
(2)
所以最終得分段落i的最終得分為式(3)。
scorei=scorei·f(v-scorei)
(3)
其中,f函數是指數平滑函數,最終經過ParaRanking算法,每一個段落i∈Dp會生成一個得分scorei,隨后根據scorei選擇輸入模型的段落集合Df,并且|Df|?|Dp|。
BiDAF模型中使用Boundary Model[8]進行答案預測,該模型只需預測每一個詞作為答案開始和結束位置的概率,從而大大減小了搜索空間。對于集合Df中的每一個段落,利用Boundary Model為段落i預測邊界得分s_scorei,如式(4)所示。
s_scorei=p(ws|hi)p(we|ws,hi)
(4)
對于集合Df的每一個輸入i,經過BiDAF模型的預測都會輸出一個s_scorei,其對應的答案為ansi。本文使用基于先驗知識的MACVerify算法來確定最終的答案,相比較于利用多個候選文檔進行交叉驗證投票驗證: 首先,本文所用的方法在基本上不損失精度的前提下,預測的時間效率會大幅提升;其次,該算法利用段落位置這一先驗知識,對預測準確率提升起到了重要的影響。具體如式(5)~式(7)所示。
其中,函數g是指數平滑函數,函數h是對數平滑函數,函數l是指數平滑函數,indexi是候選段落所在的位置信息這一先驗知識,正如圖5所示,含有答案的段落出自第1個篇章的概率為42.30%,而出自第5個篇章的概率僅為6.63%,所以本文將其作為先驗知識用于答案預測中。
為了驗證RBiDAF模型在篇章理解上的有效性,本文在DuReader數據集上設計實驗,實驗驗證RBiDAF模型在DuReader數據集上取得了比較理想的結果,本節主要對實驗平臺進行介紹,并對實驗結果進行分析。
本文實驗環境及硬件條件如表3所示。

表3 實驗環境與硬件條件
本文實驗使用Rouge-L[9]以及BLEU[10]作為模型的評測指標,先用訓練集(TrainSet)k折交叉驗證(調節學習率、詞向量維度、ParaRanking的參數、dropout系數、splice_L等參數)進行參數選擇。
4.2.1 語義匹配算法的有效性
為了定位出五篇段落中的最相關段落,本文分別實驗了ARC-I、ARC-II、MatchPyramid[11]以及DUET四個文本語義匹配模型。實驗數據由DuReader數據集生成,生成方式為: 取數據集中的question和most_related_para作為正樣本,question和其他的段落為負樣本,正負樣本比例為1∶4,實驗結果如表4所示。

表4 文本匹配模型實驗分析

續表
其中ndcg@3代表了前3個檢索結果排序的準確性,ndcg@5代表前5個檢索結果排序的準確性,map全稱mean average precision,表示平均正確率。
從表4中可以看出,在DuReader數據集中,相比較于ARC-I模型、MatchPyramid模型以及DUET模型,ARC-II模型的文本匹配效果最好,因此本文選擇ARC-II模型進行問題與段落的語義計算。
4.2.2 ParaRanking算法的有效性
本節以及4.2.3節實驗的參數列表以及百度提供的Baseline模型(BiDAF模型)參數設置見表5。

表5 實驗參數列表
表5中第三列是百度提供的Baseline模型(BiDAF模型)的參數設置,第二列是RBiDAF模型的實驗參數設置。我們嘗試了多種參數設置。其中學習率(learning_rate)分別嘗試了0.01,0.001,0.003,0.005。優化器(optim)嘗試了adam、SGD、RMSprop、Adagrad以及Adadelta。LSTM的單元數(hidden_size)嘗試了100,150,200。epochs我們嘗試了1~10。dropout嘗試了0.2,0.5,1。最大篇章數量嘗試了5~10,每個篇章的最大長度嘗試了400,450,500,550,600,650,答案的最大長度嘗試了150,200,250,300,350,其中這些參數均是通過算法在模型不斷迭代過程中進行自動嘗試,并通過實驗結果返回最優的參數組合。表5中的參數設置是我們在實驗中取得最優結果的參數設置。
為了準確定位段落,本節主要驗證ParaRanking算法各個部分對模型效果的影響,分別是段落過濾、語義匹配、段落重組、最大覆蓋度、特征加權以及段落之間的多文檔投票,評測指標是Rouge-L和BLEU,實驗結果如表6所示。

表6 ParaRanking算法實驗結果分析
從表6看出,段落重組對模型準確率的提高最為明顯,并且ParaRanking算法中加入段落交叉驗證,會明顯提升模型的Rouge-L指標。此外,基于字和詞的最大覆蓋度算法優于基于詞的最大覆蓋度算法。最終在利用了ParaRanking算法后,本文所提模型的Rouge-L指標達到53.81,BLEU指標達到43.45。
4.2.3 RBiDAF模型實驗分析
本節主要驗證RBiDAF模型所重點建模的ParaRanking算法和基于先驗知識的MACVerify算法對模型總體效果的影響,實驗效果如表7所示。

表7 RBiDAF模型實驗結果分析
從實驗結果可以看出,ParaRanking操作對模型效果的提升是最大的,所以對于多文檔場景下的篇章理解,首先需要縮小候選文檔的范圍。其次在答案預測層利用基于先驗知識的MACVerify算法,可以有效地提升模型的準確率,尤其是可以有效提高BLEU指標。
本節將進行實例分析,根據真實的實例來分析RBiDAF模型所帶來的效果以及目前還存在的不足,通過實例分析會為我們后續的研究提供些許指導建議。實例分析結果見表8和表9。

表8 正例分析

表9 負例分析
通過表8的正例分析可以看出,有一些問題的答案存在于一篇文章的多個段落中,由于BiDAF模型只能選取獨立的段落進行輸入,所以只能抽取出一個段落中的答案,而這個答案是不完整的,而我們的RBiDAF模型的利用ParaRanking算法對段落進行了重組,所以能夠抽取出更為完整以及標準的答案。
通過負例分析可以看出,Reference Answer不僅僅是把答案從段落中抽取出來,還對答案進行總結,而本文所提RBiDAF模型僅僅是將答案從段落中抽取出來,答案中還含有大量的噪音數據,這是目前RBiDAF模型所存在的不足,即模型缺乏推理和總結能力,也是后續我們的工作重點。
本文提出了一種基于BiDAF模型的RBiDAF機器閱讀理解模型。首先對DuReader數據集進行分析并對數據進行清洗,從而提取出有利于模型訓練的特征;然后本文對RBiDAF機器閱讀理解模型進行相關設計和實現,該模型的創新點在于在BiDAF模型四層網絡框架的基礎上添加了ParaRanking層,在該層,本文提出了基于多特征融合的ParaRanking算法。此外本文還在答案預測層,提出了基于先驗知識的MACVerify算法,利用該算法對答案進行綜合預測。最后經過實驗和分析,RBiDAF模型能夠產生有效的答案。在未來的工作中,首先將嘗試實驗多種詞嵌入方法,很多學者證實選擇合適的詞嵌入方法對該任務會產生很大的影響;其次嘗試采用機器翻譯模型與對抗式生成模型(GAN)增強訓練語料;最后在文本交互層融合雙向注意力(Bi-Attention)與多輪匹配機制(Multi-Matching),從而可以在多文檔場景下取得更好的效果。