錢小龍
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都610065)
機(jī)器閱讀理解目標(biāo)是使機(jī)器能像人一樣閱讀文本,根據(jù)對(duì)文本資料的理解回答問題。對(duì)于學(xué)術(shù)研究而言,它是自然語言處理中最具挑戰(zhàn)的也是最有趣的任務(wù)之一,是學(xué)術(shù)研究的最前沿;對(duì)于工業(yè)界,提高機(jī)器對(duì)語言的理解能力,對(duì)信息檢索、問答系統(tǒng)、機(jī)器翻譯等自然語言處理研究任務(wù)有積極作用,同時(shí)也能夠直接改善搜索引擎、智能助手等產(chǎn)品的用戶體驗(yàn)。
機(jī)器閱讀理解任務(wù)中,常用循環(huán)神經(jīng)網(wǎng)絡(luò)進(jìn)行序列建模,并取得很好的效果,特別是在單文檔答案抽取任務(wù)[1]中,很多模型超越了人類水平;多層卷積神經(jīng)網(wǎng)絡(luò)用于序列建模[2],極大地提高了模型的訓(xùn)練推理速度,在SQuAD 數(shù)據(jù)集上也表現(xiàn)極佳[3]。機(jī)器閱讀理解的最終目標(biāo)是在大量文本中找到問題答案,例如,在搜索引擎返回的結(jié)果里計(jì)算正確答案,單文檔的任務(wù)過于簡單。為解決此問題,多個(gè)基于Web 日志的機(jī)器理解數(shù)據(jù)集構(gòu)建產(chǎn)生[4-5],并設(shè)計(jì)新的文檔機(jī)器閱讀理解任務(wù)。該任務(wù)中,機(jī)器閱讀理解系統(tǒng)需要綜合所有文檔信息,抽取正確答案。此類任務(wù)主要面臨的問題是由不同文檔產(chǎn)生的備選答案中,可能有和正確答案表述不同或錯(cuò)誤的內(nèi)容,有研究[6]指出,這些非正確答案對(duì)于機(jī)器閱讀理解模型訓(xùn)練中是來說是難和正確答案區(qū)分的,最終導(dǎo)致錯(cuò)誤的答案輸出,所以,在多文檔機(jī)器閱讀理解任務(wù)上必須重新考慮如何進(jìn)行答案選擇和驗(yàn)證的問題。
在本文中,我們假設(shè)不同文檔中抽取的答案中,正確答案出現(xiàn)頻率應(yīng)該是最高,而錯(cuò)誤答案和其他所有備選答案都是不同的,采用多層膨脹卷積神經(jīng)網(wǎng)絡(luò),設(shè)計(jì)了一種序列到序列的輕量級(jí)模型,能夠自動(dòng)在備選答案進(jìn)行相印證后給出正確答案[7]。
模型整體架構(gòu)如圖1,主要由四大模塊組成。首先是編碼模塊,讓問題和文檔使用卷積和注意力機(jī)制進(jìn)行信息融合,產(chǎn)生包含問題信息、文檔信息和詞語位置信息的語義序列;第二部分是答案抽取模塊,采用一個(gè)簡化版的指針網(wǎng)絡(luò)的方法,用來預(yù)測每篇文檔中的答案邊界;第三部分是答案內(nèi)容模型,針對(duì)不同文檔給出的每一個(gè)候選答案,對(duì)內(nèi)容建模評(píng)估其是正確答案的可能性;最后是答案驗(yàn)證模塊,讓所有候選答案進(jìn)行信息交互驗(yàn)證,給出答案正確與否的可能性。模型最后給出的答案由三個(gè)模塊評(píng)分共同決定。

圖1 模型整體架構(gòu)
(1)數(shù)據(jù)編碼
模型直接加載預(yù)訓(xùn)練好的詞向量,將問題的詞向量序列的經(jīng)過卷積層進(jìn)行信息融合后,用注意力機(jī)制編碼成一個(gè)融合了問題語義的固定向量。將該固定向量一起拼接到文檔序列的每一個(gè)詞向量中;為了增加卷積網(wǎng)絡(luò)對(duì)于位置的敏感性,將序列中向量的位置信息也拼接進(jìn)文檔詞向量,最后將該向量序列輸入到多層卷積網(wǎng)絡(luò)進(jìn)行信息交互,輸出包含問題信息、文檔信息和詞語位置信息語義的向量序列。
位置向量:
位置向量的產(chǎn)生可以有兩種方案:一是直接當(dāng)作模型參數(shù)進(jìn)行訓(xùn)練得到,這種方式會(huì)增加模型參數(shù)和模型大小;二是用計(jì)算方式給定位置向量參與計(jì)算。其位置向量的計(jì)算方式如下:

其中,pos 是位置,i 指的是維度,dpos是向量大小。
實(shí)驗(yàn)結(jié)果表明[8],用計(jì)算方式給定位置向量和訓(xùn)練得到的位置向量效果幾乎相同,本文采用后者。
注意力機(jī)制:
傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)中,信息融合主要采用的池化方式。考慮語言序列中不同詞語對(duì)于序列的語義信息表達(dá)具有不同的貢獻(xiàn)度,模型對(duì)平均池化的方式進(jìn)行修正,采用一種注意力機(jī)制的方式進(jìn)行問題序列的語義融合。x 為最后問題的語義編碼向量。

卷積網(wǎng)絡(luò)設(shè)計(jì):
在卷積結(jié)構(gòu)中,經(jīng)驗(yàn)[9]表明,在自然語言處理中,使用門線性單元(Gated Linear Unit,GLU)作為激活函數(shù),效果最佳。因此模型采用帶門激活機(jī)制的卷積神經(jīng)網(wǎng)絡(luò)(Gated CNN,GCNN):

在閱讀理解模型進(jìn)行計(jì)算時(shí),需要極大地依賴原始文檔的信息,為了使信息盡可能地向后流動(dòng)模型在GLU 之上引入了殘差結(jié)構(gòu):

本文模型使用的上面等價(jià)的GCNN 結(jié)構(gòu),如圖2所示。

圖2
即:

化簡以后得到:

模型中卷積操作采用膨脹CNN 實(shí)現(xiàn)。膨脹CNN,又叫空洞CNN,它通過在卷積核中增加“空洞”,從而在不增加參數(shù)量的情況下讓捕捉更遠(yuǎn)的距離。普通CNN和膨脹CNN 計(jì)算方式如圖3 所示。

圖3
同樣三層卷積神經(jīng)網(wǎng)絡(luò),窗口大小為3。左側(cè)是普通CNN 在第三層時(shí)僅能融合7 個(gè)輸入的信息位,而右側(cè)能融合15 個(gè)輸入的信息位。模型采用該CNN 結(jié)構(gòu)堆疊,能夠較好地?cái)U(kuò)大CNN 的感受野,從而捕獲長文檔中詞序列之間的關(guān)系。
(2)答案抽取模塊
數(shù)據(jù)編碼模塊輸出了一個(gè)整合了問題和文檔信息的序列,模型采用類似于指針網(wǎng)絡(luò)的方式,直接對(duì)序列處理,得到候選答案的開始與結(jié)束的位置,如下:

使用pQA對(duì)整個(gè)問題和文檔信息作為編碼,使用模型能夠在文檔沒有答案時(shí),用pQA對(duì)候選答案邊界生成進(jìn)行調(diào)控。
對(duì)于損失函數(shù)可以寫作以下形式:

(3)答案內(nèi)容模型
為了從多個(gè)候選答案中得到正確答案,除了得到答案邊界信息,還對(duì)上面模型產(chǎn)生的候選答案的內(nèi)容進(jìn)行建模。模型計(jì)算文檔中單個(gè)詞在答案中的概率:

為了訓(xùn)練這個(gè)模型,我們可以將序列中答案詞和非答案詞標(biāo)注為1 和0,則損失函數(shù)可以定義為交叉熵形式如下:

根據(jù)得到的每個(gè)單詞概率,對(duì)文檔所有詞語的向量進(jìn)行加權(quán)求各得到該文檔中的答案編碼:

(4)答案驗(yàn)證模塊
答案抽取模塊中單獨(dú)考慮各個(gè)文檔中產(chǎn)生的答案,文檔間的交互信息考慮很少。產(chǎn)生正確答案需要讓答案能夠相互間進(jìn)行信息交互,選出出現(xiàn)最多的答案作正確答案。模型采用注意力機(jī)制,讓各文檔的答案編碼之間進(jìn)行計(jì)算,得到可視為收集了其他答案支持證據(jù)以后的答案編碼。計(jì)算方法如下:

將rAj和送入一個(gè)全連接層,并歸一化為概率,即得到候選答案為正確答案概率為

定義該模塊的損失函數(shù)如下:

總體損失函數(shù):
模型定義了三個(gè)模塊,作用分別計(jì)算答案邊界、預(yù)測詞語成為答案內(nèi)容的可能性和選擇最優(yōu)答案。為了能夠?qū)θ齻€(gè)模型一起進(jìn)行聯(lián)合訓(xùn)練,我們把模型的總損失函數(shù)定義如下:

在進(jìn)行答案預(yù)測時(shí),計(jì)算每個(gè)文檔答案邊界的得分:

對(duì)每個(gè)Ai中的詞計(jì)算內(nèi)容模型概率的均值,對(duì)Ai計(jì)算,最后答案得分:

輸出sc ore 最大的答案即為最后預(yù)測的正確答案。
本文采用大型開放中文機(jī)器閱讀理解數(shù)據(jù)集Du?Reader 作為計(jì)算數(shù)據(jù)。該數(shù)據(jù)集上,問題和文檔均來自于百度搜索和百度知道,答案由手動(dòng)生成,提供了多種問題類型和豐富注釋。該數(shù)據(jù)集包含了201574 個(gè)問題,每個(gè)問題保留了其中的top-5 的搜索結(jié)果,數(shù)據(jù)集中有超過67.28%的問題有多個(gè)答案,有56.38%的問題存在多個(gè)答案抽取區(qū)間,這些數(shù)據(jù)表明,如果模型可以合理地利用答案,可以為驗(yàn)證正確答案提供強(qiáng)力的證據(jù)。各種類型問題具體分布如表1。

表1 DuReader 問題類型分布
由于模型處理方式的不同,可能在不同的問題類型上,會(huì)有不同的表現(xiàn)。
本文使用數(shù)據(jù)集已經(jīng)分詞序列預(yù)先訓(xùn)練詞向量,詞向量圍度300,模型訓(xùn)練過程中作為固定向量載入。對(duì)問題的詞向量序列進(jìn)行了兩層卷積運(yùn)算,在問題文檔編碼信息融合中使用四層膨脹GCNN 堆疊。由于數(shù)據(jù)集中文檔經(jīng)常較大,參照數(shù)據(jù)集基線系統(tǒng)用啟發(fā)式的策略選擇代表文檔的段落提交給模型訓(xùn)練。超參數(shù)初始化β1,β2設(shè)置為0.5,使用訓(xùn)練模型使用Adam 算法,學(xué)習(xí)率0.0004,批量大小32,對(duì)所有訓(xùn)練參數(shù)進(jìn)行指數(shù)平滑,衰減率0.999。
數(shù)據(jù)集提供了兩個(gè)Match_LSTM 和BiDAF 兩個(gè)基線系統(tǒng),采用BLEU-4 和Rough-L 兩個(gè)指標(biāo)對(duì)模型進(jìn)行評(píng)價(jià)。

表2 模型實(shí)驗(yàn)結(jié)果
從表2 可以看出,本文的模型效果較其他經(jīng)典RNN 模型好,但相對(duì)人類得分還是有不少差距。
本文模型架構(gòu)的簡單,采用膨脹卷積做信息融合,訓(xùn)練計(jì)算時(shí)間是基線系統(tǒng)的1/5 左右。
答案內(nèi)容模型的引入,可以比較好地降低答案中停用詞級(jí)別的詞語權(quán)重,能夠使不同候選答案更好的區(qū)分度,特別是對(duì)數(shù)據(jù)集中的是非類型的問題效果較好。而對(duì)于實(shí)體和描述類的問題,驗(yàn)證模塊通過交互驗(yàn)證,能夠較好地區(qū)分答案的正確與否。
本文采用帶殘差機(jī)制的膨脹GCNN 作問題和文檔做信息融合,根據(jù)多文檔閱讀理解的任務(wù)和卷積模型特點(diǎn)試圖設(shè)計(jì)一個(gè)更快速的端到端模型,使用了一種比較簡便的答案邊界確定方法,采用答案內(nèi)容模型和答案驗(yàn)證模型對(duì)正確答案內(nèi)容進(jìn)行確認(rèn)。實(shí)驗(yàn)結(jié)果表明基于卷積神經(jīng)網(wǎng)絡(luò)絡(luò)的多文檔機(jī)器閱讀理解模型,能夠在更快的時(shí)間內(nèi)完成模型訓(xùn)練,并超過BiDAF 和LSTM 模型結(jié)果。由于引入的答案內(nèi)容模型和答案驗(yàn)證模型兩個(gè)模塊,需要在候選答案產(chǎn)生以后進(jìn)行計(jì)算,文檔信息整合也必須在問題的語義向量計(jì)算完成以后進(jìn)行,模式并行性有所降低。可以考慮調(diào)整模型結(jié)構(gòu),將所有計(jì)算并行起來,提高計(jì)算效率。