霍 歡,鄒依婷,周澄睿,薛瑤環,黃君揚,金軒城
1(上海理工大學 光電信息與計算機工程學院,上海 200093) 2(復旦大學 上海市數據科學重點實驗室,上海 201203)
機器閱讀理解(Machine Reading Comprehension,MCR)是一項對閱讀理解中的問題、文章、答案三者間存在關系的建模任務,旨在根據問題給出的信息,從文章中抽取答案.填空型閱讀理解(Cloze-style Reading Comprehension)是根據文章信息推導問題,并且用文章中的某個詞匯作為回答問題的答案.因此,問題中的實體與文章中的實體間存在聯系,可以利用實體間的相關性和相似性解決閱讀理解任務.
目前很多工作都是基于神經網絡模型和標準的軟注意力機制(soft-attention mechanism)[1],如使用一個語法框架定義閱讀理解中的句子,并且單向查詢文章詞匯的權重(Attentive Reader[2]);或者從行和列兩個維度得到文章注意力矩陣和問題注意力矩陣(AoA Reader[3]);或者對給定的候選集進行打分、排序,選擇最優的答案[4].
這三種方式能解決大部分閱讀理解任務,但這三者是在單個詞匯上進行分析,用包含一個空白單詞的問題查找含有多個單詞的文章,其候選答案的空間復雜度至少為O(n),其中n為文章中包含的單詞個數.為此,文獻[5]利用問題中的事實性的實體查找現有的知識庫,進而給出問題答案.但結構化數據庫不能再根據上下文進行問題推理,從而不能解決非事實性的推理問題.
例如,對于給定的句子“a young man wearing a blue skirt”,若采用以詞為單位的編碼,即每個詞僅獲取其相對于前后兩個詞的信息,那么對句子的理解就僅停留在單個詞義上.例句為一個定語結構.但作為一個句子結構 “a young man ”為主語,“wearing”是謂語,“a blue skirt”為賓語.詞級編碼上面給出的方式則均不能分析出上述句子的結構信息.因此,本文針對典型的序列對序列(Sequence-to-Sequence,Seq2Seq[6])模型,著重解決句子中句式的解析問題,以兼顧詞義信息理解和結構理解.
本文提出一種基于神經網絡的句式注意力網絡SAN(Syntactical Attention Network).SAN模型旨在對文章中包含答案的句子結構和問題結構進行對齊(Alignment)[7-9],即通過它來建立兩個句子間詞和詞、短語和短語、詞和短語的語義關系.與在文章中直接查找問題詞匯的方式不同,SAN模型可以利用對齊操作解決語義問題.首先,SAN模型用問題向量矩陣對文章句子向量進行搜索,獲取與問題相關的文章句子,建立候選答案句子集合;其次,SAN模型用一個雙向神經網絡分析句子中的實體以及實體間的聯系,用詞串表示實體名詞,實體間的動詞則用聯系來表示,獲取主體、聯系和客體的三元組.最后,計算問題三元組和文章三元組的相似度,用softmax函數獲取答案向量,實現問題和候選答案句子中的實體名詞以及實體間聯系上的對齊操作,進而抽取出最終答案.句式分析與人類理解句子時分析句子語法相類似,但SAN網絡只標注候選答案句子的三元組結構,而不是對句子中所有詞匯都進行標注,所以SAN模型處理方法更靈活.
本文的貢獻主要有如下3點:
1)提出了一種神經網絡模型SAN,在語義相關的基礎上,利用句式結構對齊解決填空型閱讀理解任務.
2)SAN采用了一種問題注意機制進行句子篩選,獲取與問題相關的文章句子集合,縮減搜索空間.
3)利用句式注意力機制對句子結構進行三元組的模式設定,只對重點相關句子進行標注.利用三元組間的相似性,解決閱讀理解任務中候選文章句子與問題間存在的不對齊問題,從而能高效地匹配問題答案.實驗采用端對端(end-to-end)[10]的方式對模型進行訓練,用合成數據集驗證了SAN模型.同AOA相比,SAN模型的處理速度與答案的準確率均有提升.
Attentive Reader作為第一個用于仿真閱讀理解的神經網絡模型,用一個雙向的RNN 網絡單獨編碼文章與問題,并且用問題的表示匹配文章中的詞匯.Window-based Memory Networks(MemNN)是Project Gutenberg在工作[11]中提出的CBTest數據集的基準模型,使用記憶上下文嵌入的方式代替RNN編碼,并用上下文嵌入的內容匹配問題.這些模型都是學習用問題中單個詞的表示方式匹配文章中的詞匯,并獲取答案.類似地,序列對序列的神經網絡模型[12]、基于神經網絡的記憶網絡如神經圖靈機[13]和它的變種也是使用上下文嵌入的方式處理候選答案[14].
最近,已經有很多對比較復雜的閱讀理解進行推理的工作,比如Memory Network(DMN)[15],針對短文本閱讀理解,使用多次動態迭代的方法,根據問題表示的內容迭代用記憶網絡中關注到的文章信息獲取問題答案.針對長文本填空型閱讀理解,AS Reader[16]使用簡單的注意力模型直接從上下文中選擇答案,而不是通過計算文檔中單詞混合表示的相似度獲取最終答案.AoA Reader介紹了一種問題與文章間的雙向查找方式,并且對查找采用加權和不加權重的處理方法,匯總每個問題單詞的注意力,該模型在CNN數據集和CBTest NE/CN數據集上均獲得了一個較高的準確率.
為了解決閱讀理解任務,上面這些工作都在關注文章內容與問題詞匯間的匹配問題,并沒有對問題以及文章句子進行句式分析.本文介紹一種基于GRU的句式注意力網絡分析問題中的實體和實體關系,并用標記詞串的方式表示句子.此外,利用問題詞串對齊問題相關的文章句子中詞串的方式,匹配答案位置,提高模型輸出答案的準確性.
這部分將介紹閱讀理解任務中填空型閱讀理解的系統框架以及數據預處理部分的嵌入層、編碼層、以及數據分析部分的句子篩選層和句式注意力層.
機器閱讀理解中通常用三元組的形式描述將閱讀理解任務,其中Q表示問題,D表示文章,A表示問題答案.有時可以從文章中找到一個詞作為答案回答問題,這需要機器仔細閱讀文章的信息,有時進行適當的推理得到最終的答案.

圖1 SAN流程圖Fig.1 SAN flowchart
設一篇文章包含L個句子,并且每個句子Sl(l∈L)有Tl個單詞,Sl=[wl1,wl2,…,wlt],wlt表示句子Sl中的第t個單詞,t∈[1,T].所有文本信息用相同維度的詞向量表示,得到問題的表示為Q=[w1,w2,…,wn],文章的表示為D=[S1,S2,…,SL].圖1為SAN模型的數據處理流程圖.下面將簡單分析每層的作用.
在圖1中,詞嵌入層將輸入的詞匯x通過詞嵌入[17,18]的方式化為詞向量w,w=E(x).通過詞嵌入模型得到的詞向量中既包含了詞本身的語義,又蘊含了詞之間的關聯,同時具備低維、稠密、實值等優點,可以直接用于閱讀理解的后續分析.

(1)
(2)

主要作用是篩選出全文中與問題最相關的句子.給定一系列的表示,句子篩選模塊利用注意力分配權值選擇關鍵句,同時產生以問題和文章為前提的句子向量矩陣.
與句子篩選層的處理方法相似.為每個句子設定一個基準模式,句子中的詞分別對應模式中的Sub,RE,Obj.利用句式結構上的對齊與語義上的相關性的對齊,模型最后能匹配出一個準確的答案,并對答案進行輸出.
本文第四部分詳細分析了句子篩選層和句式注意力層的處理過程以及數學建模.
SAN模型是由詞嵌入層、編碼層、句子篩選層、句式注意力層以及輸出構成,如圖2所示.

圖2 SAN模型概覽Fig.2 Overview of the SAN

(3)
Vl=vReLu(Wlhl)
(4)
Pl(Sl|Q,D)=softmax(Vl)
(5)
如圖3所示.其中[;]表示問題與文章句子在行上面的級聯符號,矩陣Wl,向量v以及詞嵌入所使用的矩陣是網絡學習過程中獲得的參數.
計算每個句子Sl的注意力p(Sl|Q,D)后,需要分析與問題相關的句子信息.而對于填空型閱讀理解任務,機器需要分析問題實體與文章中的實體間存在的聯系.所以對于給定的句子,模型應該分析句子中的主體、客體以及兩者間的聯系.本文使用神經網絡用向量表示句子中的主體、客體、兩者的聯系.一種方法是使用語義解析[22]中的依賴樹[23],為句中的每個詞匯標注屬性,然后同問題中缺失部分的詞性對比,獲取問題答案.使用這種方式處理文本能提升答案的準確,但同時伴隨著低效率.另一種方式則是使用詞串來解析一個句子,再依據問題與文章句子詞串間存在的對齊關系,獲取問題答案,如圖4所示.

圖3 句子篩選細節圖Fig.3 Details of sentence-selection layer

圖4 句式注意力細節圖Fig.4 Details of syntactical attention layer

(6)
級聯后的向量hatt中包含有相對于全文以及全句的前向與后向四個信息.接下來需要計算三元組注意力權重值:
αt,Sub=softmax(βSubhatt)
(7)
αt,RE=softmax(βREhatt)
(8)
αt,Obj=softmax(βObjhatt)
(9)
用具有權重值得詞嵌入向量et求加權平均后抽取出句子中主體Sub、關系詞RE以及客體Obj,并且用向量表示.
(10)
(11)
(12)
其中βSub,βRE,βObj為訓練后得到的參數,et∈{et},et表示詞嵌入層輸出的詞向量.
句子通過句式注意力層后,模型已經對句子的每個單詞進行了標記.包含正確答案的詞串上也有標記.最后,模型用詞串與詞串間的相似性,也就是相同文本間的對齊,獲取最終答案詞串:
(13)
SAN主要使用soft-attention機制.訓練采用有監督的方式,特征X為閱讀理解的文章與問題,模型的輸出為最終的問題答案,目標是獲取準確的問題答案,即目標為數據集給出答案.這里定義最終輸出的答案為y*,并且用最大似然估計來最小化模型的最終損失:
L(θ)=logpθ(y*,S|Q,D)
(14)
其中θ是模型中所包含參數的縮寫.
實驗采用CBTest數據集.CBTest數據集采用兒童讀物中連續的20句話作為文章,第21句話作為問題等方式構建.根據答案的詞性可分為四個子集:命名實體(NE)、公共名詞(CN)、動詞、介詞.但是,由于后面兩種答案與文本并沒有十分緊密的關系,人們常常不需要讀文本就可以判斷出介詞填空等,所以,本實驗僅使用實體名的包含(NE)和常用名詞(CN)兩部分數據,每部分數據包含訓練集、驗證集和測試集三部分.表1為CBT NE/CN數據集詞匯信息的統計信息.MemNN網絡也是在該工作中一起提出來的.實驗中,SAN網絡與MemNN網絡在CBTest驗證集與測試集上進行準確率的對比.
模型參數:本文使用500維預訓練集詞向量表840B-GloVe[24]來表示輸入的問題、文章和答案.對OOV(Out-Of-Vocabulary)詞,使用[-0.05,0.05]區間內的隨機分布向量作為初始化詞向量.詞向量的長度固定為500維.小批量訓練(mini-batch training)[Q,D,A]對的大小為64.當一個batch內出現長度不一致時,選取最大長度值,并且為長度不夠的句子后面補上額外的標記NULL,它對應的長度是一個500維的0向量.訓練迭代數(training epochs)為30,當連續3次迭代在驗證集上的準確度沒有提升甚至出現降低后便提前停止訓練(early stopping).實驗保存在驗證集(dev)上準確度最高的那個模型參數,作為最優模型來對測試集進行預測.
表1 填空型閱讀理解數據集的字母個數統計:CBT NE/CN(單位:個)
Table 1 Number of letters in cloze-style reading comprehension datasets:CBT NE/CN

CBT NECBT CN訓練集測試集驗證集訓練集測試集驗證集Query1087192000250012076920002500Max candidates101010101010Average candidates101010101010Average tokens433412424470448461Total Tokens5306353185
超參數:實驗采用Kingma等人[25]提出的ADAM作為梯度下降優化器.其中,第一動量系數(first momentum coefficient)β_1和第二動量系數β_2分別設為0.9和0.999.初始學習率(initial learning rate)為0.001.為了加速梯度下降過程,實驗時為全局每1000訓練步長(training steps)設置了大小為0.95的衰減率(decay rate).同時,為了避免在CBTest數據集上測試的SAN模型發生過擬合(overfitting)的現象,本文引入dropout機制[26],在編碼層的輸入和輸出端、控制層的輸出端隨機關閉20%的神經元.此外,詞嵌入層的嵌入權值是隨機初始化并且服從區間[-0.05,0.05]上的均勻分布.中間隱藏層的權值是一個隨機初始化的正交矩陣.表2 模型每一層所含有的GRU單元個數.
表2 模型中GRU Cell使用的個數
Table 2 Number of GRU Cells used in the model

數據集詞嵌入層(個)其他隱含層(個)CBTest NECBTest CN256256128128
為了探究SAN模型的效果,本文的實驗是在Tensorflow框架[27]上實現的.實驗中使用的基準模型為AOA Reader(單模型).AOA Reader是由訊飛Cui等人提出,使用了兩個注意力機制挖掘文章與問題間的聯系.在結構上,與SAN模型的(句子篩選注意力與句式注意力)類似.表3給出了人工測試與現有單模型在CBTest NE/CN數據集上的準確度,從表3可以看出AOA reader單模型在CBTest NE/CN數據集上均比其他模型表現優秀.實驗在模型執行速度和準確率兩方面上比較SAN與AOA Reader.下面先簡要的介紹實驗步驟.
5.3.1 SAN模型效果驗證
使用參數設置中的數據,對去掉句子篩選、去掉句式注意力以及SAN模型進行訓練.三個模型的網絡參數均為模型學習最好的一組,即獲取準確率最高、代價最小的一組參數數值,并在驗證集和測試集上測試模型解決填空型機器閱讀理解任務的準確率.
表3 使用CBT NE/CN 驗證集與測試集實驗數據的準確率
Table 3 Accuracy of using CBT NE/CN verification sets and test sets experimental data

CBTest NECBTest CN驗證集測試集驗證集測試集Human(context+query)-81.6%-81.6%MemNN70.4%66.6%64.2%63.0%AS Reader73.8%68.6%68.8%63.4%CAS Reader[28]74.2%69.2%68.2%65.7%GA Reader[29]74.9%69.0%69.0%63.9%Iterative Attention[30]75.2%68.6%72.1%69.2%EpiReader[31]75.3%69.7%71.5%67.4%AoA Reader(單模型)77.8%72.0%72.2%69.4%去掉句子篩選的SAN模型78.1%75.7%73.2%72.9%去掉句式注意力的SAN模型66.4%64.1%65.9%62.1%SAN網絡79.2%76.3%74.7%72.8%
5.3.2 SAN模型速率驗證
對于一個定義好的模型,它應該具有編碼輸入的問題與文章對的能力,同樣需要設定很多目標促使模型能預測最終答案.AOA模型是一個以問題同文章間雙向查找的方式來建模,而且AOA同其他工作相比能給出一個更加準確的結Reader模型和SAN模型、去掉句子篩選的SAN模型與去掉果.為了凸顯SAN模型的優勢,實驗對調參后的AOA 句式注意力的SAN模型進行比較.在相同的環境(intel i7 7700k,TURBO GTX1080)下,獲取平均處理數據的數量.
5.3.3 實體對齊型驗證
為了獲取文章中與問題最相關的句子,并對相關句子進行句式分析,本實驗對SAN模型的句子篩選與句式注意力 兩塊進行單獨訓練,獲取問題與相關句間的相關度.用兩個句子的相關矩陣保留相關度,從而獲取實體間的對齊關系.
表3展示的是SAN同去掉句子篩選的SAN模型,或者去掉句式注意力的SAN模型,以及MemNN和AOA Reader(single model)模型輸出的準確率.其中,去掉句式注意力同SAN相比較可知,對輸出準確答案來說,抽取出的句子得句式結構與問題的句式結構對齊至關重要,因為兩者間的相似詞串和詞性能為答案的尋找提供很強烈的信號.去掉文章句子篩選結構,模型設置為:用標準的注意力機制計算文章與問題的詞間相似性度,該相似度即為每個詞獲得的權重值,并將其乘在句式注意力得到的權值上.其最終答案的準確率也有 3.7%與3.5%的提升.從表3可以看出,SAN 同其他兩個比較優秀的模型相比,答案的準確率更高,同最早使用CBT NE/CN數據集的MemNN相比,SAN提升了9.7%和10.5%.同AoA Reader相比準確率提升了4.3%和3.4%.以上實驗結果表明,SAN同其他使用該數據集的基準工作(AoA Reader(single model),MemNN)相比可以給出一個比較精準的答案,包括表現最好的AOA模型,在CBTest NE/CN上都有相對較高的提升.

圖5 調參后的SAN平均處理速度Fig.5 Post-reference SAN average processing speed
圖5是在測試集上,SAN模型在不同大小的批處理(mini-batch=1,8,32,64)上獲得的最終平均處理速度.

圖6 與AOA模型在測試集上的速度比值Fig.6 Ratio of speed to the AOA model on the test set
圖6是調參后最優模型以及除去句子篩選層,除去句式注意力層模型三種模型的處理速度與AOA模型處理速度之比.從圖6可以看出SAN模型處理閱讀理解任務,在速度上有明顯優勢.在批處理抽取為64的時候,模型處理速度仍舊為AoA Reader的快0.12倍.從SAN、去掉句式注意力的SAN模型以及去掉句子篩選的SAN模型三者的對比可以看出,相對于句式注意力,句子篩選對填空型閱讀理解速度的影響更大,所以減小機器的閱讀范圍能明顯提升機器的閱讀速度.

圖7 SAN對齊句子Fig.7 SAN on sentence alignment
圖7展示的是SAN中問題表示與文章句子注意力標記的熱力圖,其中顏色越深表示其相關程度越高.輸入的文章經過句子篩選層后獲得與問題相關的句子.在圖7中的橫軸為獲取的句子,縱軸為問題句.句式注意力會利用問題中已有的詞串對齊給定的文章句子詞串(如文章中的rose and placed,問題中的looked at的對齊),然后從描述包含答案的詞串中抽取最終答案.因此,使用句式表示問題信息會更加注重與其詞義相似的詞匯,這樣使得獲取的文章單詞的詞性與詞義更加接近答案的詞性與詞義,從而保證了答案的準確率.
從圖7可以看出,SAN能從輸入的文章句子集中準確的找出與問題語法相同,語義相近的句子.通過句子間的結構對齊匹配出最終答案.在解決對齊問題時,SAN模型中的句子篩選層與句式注意力層是相互獨立的網絡結構.表4給出了一個由SAN模型最終得到的<文章句子S,問題Q,答案A>對.值得注意的是,預測目標答案時,匹配的文章句子l與問題Q間存在句式相關性但不具備語義相關,導致SAN輸出一個錯誤答案“Snow-daughter”.所以用SAN模型解決填空型閱讀理解時,答案匹配是句子句式解析后對應塊間相似度匹配,句式相似度決定了最終答案的準確與否.所以,SAN模型不能動態權衡句式相關與語義相關間的重要性,從而導致回答的準確度不高.
表4 CBTest NE/CN測試集上的實驗例子
Table 4 Experimental example on the test set of CBTest NE/CN

問題Q:The XXXXX built himself a hut where he always kept up a huge fire,while his sister with very few clothes on stayed outside night and day.文章句子l:The Snow-daughter herself avoided him as much as she could,and always crept into a corner as far away from him as possible.目標答案:Fire-sonSAN預測答案A:Snow-daughter
本文提出了一種神經網絡模型SAN,在語義相關的基礎上,利用句式結構對齊解決填空型閱讀理解任務.SAN采用了一種問題注意機制進行句子篩選,獲取與問題相關的文章句子集合,縮減搜索空間.利用句式注意力機制對句子結構進行三元組的模式設定,并對句子進行標注.利用三元組間的相似性,解決閱讀理解任務中候選文章句子與問題間不對齊的問題,從而能高效地匹配問題答案.通過實驗分析可知,句子篩選的方式能提升模型處理閱讀理解任務的速度.句式注意力結構能細化分析句子信息,并且能聯系相同標簽下的詞串,抽取出問題的最終答案.在未來的工作中,將對模型進行優化,以便適用于更多閱讀理解場景.