本發(fā)明涉及自動(dòng)問(wèn)答技術(shù)領(lǐng)域,具體涉及一種計(jì)算問(wèn)題句子和答案句子相似度的方法。
背景技術(shù):
自動(dòng)問(wèn)答系統(tǒng)是一種輸入自然語(yǔ)言問(wèn)句后能夠直接返回精確答案的系統(tǒng)。根據(jù)自動(dòng)問(wèn)答系統(tǒng)背后的數(shù)據(jù)源的類型可以將其分為兩類,分別是基于知識(shí)圖譜的自動(dòng)問(wèn)答系統(tǒng)和基于非結(jié)構(gòu)化文檔的自動(dòng)問(wèn)答系統(tǒng)?;诜墙Y(jié)構(gòu)化文檔的自動(dòng)問(wèn)答系統(tǒng)的數(shù)據(jù)源是大量非結(jié)構(gòu)化的文本文檔,其檢索答案的過(guò)程主要包括以下幾個(gè)步驟:
(1)根據(jù)關(guān)鍵詞匹配算法,檢索出與問(wèn)題相關(guān)的段落。
(2)將第一步檢索出的段落切分成句子,形成答案句子候選集。
(3)計(jì)算問(wèn)題和候選答案句子相似度并排序。
(4)選擇最相似度最高的答案句子進(jìn)行答案抽取,返回給用戶。
其中的第三步,計(jì)算問(wèn)題和答案句子相似度是非常重要的一步。傳統(tǒng)的計(jì)算句子相似度的算法主要包括三種:
(1)基于詞的算法。該方法不對(duì)語(yǔ)句進(jìn)行語(yǔ)法結(jié)構(gòu)分析,只利用句子的表層信息,即組成句子的詞的詞頻、詞性等信息。該方法不能考慮句子的整體結(jié)構(gòu)和語(yǔ)義相似性。
(2)基于句法的算法。該方法對(duì)語(yǔ)句進(jìn)行句法分析,找出依存關(guān)系,并在依存關(guān)系分析結(jié)果的基礎(chǔ)上進(jìn)行相似度計(jì)算。該方法能衡量句子的句法結(jié)構(gòu)相似性,但是不能衡量句子的語(yǔ)義相似性。
(3)基于深度神經(jīng)網(wǎng)絡(luò)的算法。該方法將語(yǔ)句中每個(gè)詞的詞向量輸入到卷積神經(jīng)網(wǎng)絡(luò)或循環(huán)神經(jīng)網(wǎng)絡(luò)中,輸出為一個(gè)句子的向量表達(dá)。該方法能夠衡量句子的語(yǔ)義相似性,但是詞和句法的相似性并不能得到充分表達(dá)。
傳統(tǒng)的計(jì)算句子相似度的方法各有優(yōu)缺點(diǎn),都不能全面的衡量?jī)蓚€(gè)句子之間的相似性。
技術(shù)實(shí)現(xiàn)要素:
為了克服傳統(tǒng)的計(jì)算句子相似度算法的不足,本發(fā)明提供了一種基于多級(jí)特征的問(wèn)題和答案句子相似度計(jì)算算法,該算法能夠全面衡量?jī)蓚€(gè)句子之間的相似性。
該算法公式定義如下:
其中,q是給定的一個(gè)問(wèn)題句子,s是給定的一個(gè)候選答案句子。定義衡量?jī)蓚€(gè)句子相似度的函數(shù)為r(q,s),r(q,s)是一個(gè)線性函數(shù),是多個(gè)相似度得分函數(shù)的集成。這里的hk(s,q)代表第k個(gè)相關(guān)性函數(shù)。
本發(fā)明設(shè)計(jì)了五種特征來(lái)衡量?jī)蓚€(gè)句子之間的相關(guān)性,這些特征包含了不同的級(jí)別,分別是單詞特征、短語(yǔ)特征、句子語(yǔ)義特征、句子結(jié)構(gòu)特征、答案類型特征。
1.單詞特征
單詞級(jí)別的特征是從單詞出發(fā),計(jì)算兩個(gè)句子在單詞方面相似度。本發(fā)明使用了四種單詞級(jí)別的特征,分別如下:
(1)共同的單詞數(shù)特征,每個(gè)單詞共現(xiàn)次數(shù)都要乘以idf權(quán)重。定義為hwm(q,s)。
(2)單詞翻譯特征,直接使用成熟的翻譯模型giza++,以及問(wèn)題和相關(guān)問(wèn)題的語(yǔ)料庫(kù)來(lái)得到問(wèn)題句子和答案句子之間的翻譯概率,以此作為兩個(gè)句子之間的相關(guān)性得分。定義為hwt(q,s)。
(3)詞向量平均特征,將每個(gè)句子中的單詞對(duì)應(yīng)的詞向量相加求平均作為該句子的句子向量,然后求答案句子向量和問(wèn)題句子向量之間的余弦距離。定義為hwv(q,s)。
(4)詞向量轉(zhuǎn)移距離(wmd)特征,采用wmd計(jì)算相似度的方法(該方法可參考:kusnermj,suny,kolkinni,etal.fromwordembeddingstodocumentdistances),將兩個(gè)句子去除停止詞,然后計(jì)算詞向量轉(zhuǎn)移的最小距離作為兩個(gè)句子之間的相關(guān)性。定義為hwmd(q,s)。
2.短語(yǔ)特征
假設(shè)抽取的短語(yǔ)列表為pp={<si,ti,p(ti|si),p(si,ti)>},其中si是答案句子中的一個(gè)短語(yǔ),ti是問(wèn)題句子中的一個(gè)短語(yǔ),p(ti|si)和p(si,ti)分別代表從si翻譯成ti和從ti翻譯成si的概率。
接著,定義基于短語(yǔ)的相似性得分函數(shù)如下:
其中,q,s分別是問(wèn)題和答案句子,
(1)如果
(2)否則如果有
(3)否則,
簡(jiǎn)單可以描述為,當(dāng)答案句子中的短語(yǔ)直接出現(xiàn)在問(wèn)題句子中時(shí),該短語(yǔ)的得分就是1,如果該短語(yǔ)與問(wèn)題句子中的某些短語(yǔ)出現(xiàn)在短語(yǔ)表中,意味著兩個(gè)短語(yǔ)是同義的短語(yǔ)或者相關(guān)短語(yǔ)時(shí),該短語(yǔ)得分就是短語(yǔ)表中短語(yǔ)互相翻譯概率的乘積,是一個(gè)0,1之間的值。如果該短語(yǔ)不滿足以上兩種情況,那么該短語(yǔ)的得分就是0。計(jì)算答案句子中一到n元語(yǔ)法包含的所有短語(yǔ)與問(wèn)題句子的相關(guān)性得分,最后對(duì)n求平均。
3.句子語(yǔ)義特征
該特征使用最新的基于深度學(xué)習(xí)的計(jì)算兩個(gè)句子相似度的模型來(lái)獲得語(yǔ)義相似度得分(可參考wans,lany,guoj,etal.adeeparchitectureforsemanticmatchingwithmultiplepositionalsentencerepresentations)。將該特征定義為hsem(s,q),該模型首先將問(wèn)題句子和答案句子分別用bi-lstm(bidirectionallongshorttermmemory)計(jì)算兩個(gè)句子每個(gè)位置的向量表達(dá),兩個(gè)句子的不同位置進(jìn)行交互形成新的矩陣和張量,然后接k-max采樣層和多層感知機(jī)進(jìn)行降維。最后輸出兩個(gè)句子的相似度。bi-lstm是將句子序列正向輸入一次lstm,然后再反向輸入一次lstm。這樣每個(gè)時(shí)刻都有兩個(gè)向量表達(dá),分別是前向的
其中,u,v分別代表兩個(gè)向量,wi,i∈[1,…,c]是張量的一個(gè)切片。wuv和b是線性變換的參數(shù)。f是非線性函數(shù)。經(jīng)過(guò)張量函數(shù)變換后的結(jié)果是一個(gè)向量。
接來(lái)下利用k-max采樣從交互張量的每一個(gè)切片中選擇出k個(gè)最大的值,然后將所有切片的值拼接成一個(gè)向量。最后需要用多層感知機(jī)將高維的向量降到一維的標(biāo)量,這個(gè)標(biāo)量經(jīng)過(guò)線性變換后就是兩個(gè)句子的相似度得分。公式如下:
r=f(wrq+br)
s=wsr+bs
其中,wr和ws是參數(shù)矩陣,br和bs是相應(yīng)的偏置向量。
最后,我們需要設(shè)計(jì)損失函數(shù)。本文的任務(wù)是排序,因此直接使用合頁(yè)損失函數(shù)(hingeloss)。給定一個(gè)三元組
其中,
4.句子結(jié)構(gòu)特征
本發(fā)明使用了兩種句子結(jié)構(gòu)特征:
(1)依存樹(shù)根匹配
定義為hrm(s,q),這是一個(gè)取值為0,1,2的特征。如果問(wèn)題句子和答案句子對(duì)應(yīng)的依存關(guān)系擁有相同的根,則hrm(s,q)=2,否則如果答案句子包含問(wèn)題句子的根或者問(wèn)題句子包含答案句子的根,則hrm(s,q)=1。如果上面兩種情況都不存在則,hrm(s,q)=0。
(2)依存關(guān)系匹配。
定義為hdm(s,q)。首先找到兩個(gè)句子中共同的詞,這里稱為一對(duì)錨點(diǎn)。在兩個(gè)句子中可能會(huì)出現(xiàn)多對(duì)錨點(diǎn)。然后分別計(jì)算出兩個(gè)句子的依存關(guān)系。統(tǒng)計(jì)兩個(gè)依存樹(shù)從根出發(fā)到錨點(diǎn)的相同依存關(guān)系的數(shù)目,即得到hdm(s,q)。兩個(gè)句子依存樹(shù)的根并不一定相同,因此這里的相同的依存關(guān)系指的是關(guān)系,而忽略詞匯的差異。
5.答案類型特征
首先對(duì)問(wèn)題進(jìn)行分析,根據(jù)問(wèn)題的疑問(wèn)詞來(lái)判斷問(wèn)題類型。同時(shí)根據(jù)事先定義好的分類目錄表來(lái)找到所需的答案類型。本發(fā)明定義了答案類型匹配特征ham(s,q)。算法步驟如下:
(1)首先,分析問(wèn)題,推理出所需答案類型。
(2)對(duì)答案句子進(jìn)行命名實(shí)體識(shí)別和詞性標(biāo)注。
(3)判斷答案句子中命名實(shí)體是否包含問(wèn)題所需答案類型,如果包含則,ham(s,q)=1,如果不包含,ham(s,q)=0。對(duì)于有比較明確的答案類型,比如“money,number,person”等,可以根據(jù)命名實(shí)體識(shí)別來(lái)識(shí)別,對(duì)于“nnp”詞性的答案,可以根據(jù)詞性標(biāo)注進(jìn)行識(shí)別。最后,對(duì)于命名實(shí)體識(shí)別和詞性標(biāo)注都無(wú)法確定的答案類型,比如“reason”或者“manner”等默認(rèn)ham(s,q)=1。
將上述五種級(jí)別中所有特征的相似度得分進(jìn)行加權(quán)求和得到總體的相似度得分;即得到兩個(gè)句子之間的相似度。
綜上,本方法的主要優(yōu)點(diǎn)在于,該方法使用多級(jí)特征全面衡量?jī)蓚€(gè)句子之間的相似性,克服了傳統(tǒng)方法中計(jì)算句子相似度時(shí)過(guò)于片面的缺點(diǎn)。
附圖說(shuō)明
圖1是本發(fā)明計(jì)算句子相似度的整體架構(gòu)圖;
圖2是本發(fā)明所述句子語(yǔ)義特征模型示意圖;
圖3是本發(fā)明所述句子結(jié)構(gòu)特征依存關(guān)系示意圖。
具體實(shí)施方式
下面將結(jié)合附圖和實(shí)例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。
如圖1所示,本發(fā)明提出的衡量問(wèn)題和答案句子相似度的方法共包括五種特征函數(shù),每種特征函數(shù)分別用來(lái)衡量?jī)蓚€(gè)句子之間不同角度的相似性。其中,單詞級(jí)別的特征是從單詞出發(fā),計(jì)算兩個(gè)句子在單詞方面相似程度。短語(yǔ)級(jí)別的特征能夠處理局部上下文依賴問(wèn)題,能夠很好的匹配到習(xí)語(yǔ)和常用詞的搭配。句子語(yǔ)義特征能夠衡量?jī)蓚€(gè)句子在含義方面的相似性。句子結(jié)構(gòu)特征能夠衡量?jī)蓚€(gè)句子在語(yǔ)法和句法方面的相似性。答案類型特征能夠衡量答案句子中是否包含問(wèn)題所需答案類型。最后,通過(guò)線性函數(shù)將這五種特征函數(shù)進(jìn)行加權(quán)求和,形成基于多級(jí)特征的問(wèn)題和答案句子相似度算法。該算法能夠全方面衡量問(wèn)題句子和答案句子之間的相似性。
關(guān)于數(shù)據(jù)集
本發(fā)明用于衡量英語(yǔ)問(wèn)題和答案句子之間的相似度,選用squad數(shù)據(jù)集對(duì)模型進(jìn)行訓(xùn)練。squad數(shù)據(jù)集包含了536篇維基百科中的文章,共23215個(gè)段落,每個(gè)段落都人工提問(wèn)不超過(guò)5個(gè)問(wèn)題??偣驳膯?wèn)題數(shù)超過(guò)十萬(wàn)。原數(shù)據(jù)集只公開(kāi)了訓(xùn)練集和驗(yàn)證集。為了完成模型的評(píng)價(jià),本文將原有的訓(xùn)練集和驗(yàn)證集進(jìn)行合并,重新按照8:1:1的比例劃分訓(xùn)練集,驗(yàn)證集和測(cè)試集。劃分過(guò)程中每個(gè)段落和這個(gè)段落的所有問(wèn)題是一個(gè)基本的劃分單元。
將段落切分成句子,將每個(gè)段落切分成答案句子候選集,這樣每個(gè)問(wèn)題只需要對(duì)所屬段落中的句子進(jìn)行排序來(lái)找到答案句子,候選集規(guī)模比較小。雖然數(shù)據(jù)集中并沒(méi)有給出問(wèn)題所對(duì)應(yīng)的答案句子。但是給出了每個(gè)問(wèn)題答案的起始位置,我們根據(jù)答案的起始位置可以設(shè)計(jì)算法定位該問(wèn)題所對(duì)應(yīng)的句子。本發(fā)明直接使用corenlp對(duì)段落進(jìn)行句子的切分。
使用corenlp對(duì)段落中的句子以及該段落的問(wèn)題進(jìn)行分詞、詞性標(biāo)注、命名實(shí)體識(shí)別、句法分析樹(shù)和依存關(guān)系分析。本文使用java語(yǔ)言調(diào)用公開(kāi)的corenlp工具包。
本實(shí)例從單詞特征、短語(yǔ)特征、句子語(yǔ)義特征、句子結(jié)構(gòu)特征、答案類型特征共五級(jí)特征來(lái)衡量?jī)蓚€(gè)句子之間的相關(guān)性,分別是:
1.單詞特征實(shí)施方式
首先對(duì)于單詞特征函數(shù)hwt(q,s),本發(fā)明使用giza++來(lái)訓(xùn)練一個(gè)有11.6m個(gè)問(wèn)題和相關(guān)問(wèn)題的平行語(yǔ)料庫(kù),該語(yǔ)料庫(kù)是從wikianswers網(wǎng)站上爬取的。對(duì)于hwv(q,s)函數(shù),本發(fā)明直接使用word2vec模型訓(xùn)練維基百科語(yǔ)料庫(kù)。
2.短語(yǔ)特征實(shí)施方式
對(duì)于短語(yǔ)特征函數(shù)hpp(s,q),本發(fā)明直接使用moses來(lái)訓(xùn)練squad數(shù)據(jù)集。squad數(shù)據(jù)集先經(jīng)過(guò)預(yù)處理步驟,然后將訓(xùn)練集中的每個(gè)問(wèn)題和對(duì)應(yīng)的答案句子放在一起形成一個(gè)問(wèn)題到答案的平行語(yǔ)料庫(kù),共有81345對(duì)句子。然后輸入到moses中訓(xùn)練得到短語(yǔ)表。
3.句子語(yǔ)義特征實(shí)施方式
如圖2所示,問(wèn)題句子和答案句子輸入到bi-lstm中,得到每個(gè)時(shí)刻的向量表達(dá)。然后將兩個(gè)句子的各個(gè)時(shí)刻的向量進(jìn)行交互,形成交互張量。接來(lái)下利用k-max采樣從每一個(gè)切片中選擇出k個(gè)最大的值,然后將所有切片的值拼接成一個(gè)向量。最后需要用多層感知機(jī)將高維的向量降到一維的標(biāo)量,這個(gè)標(biāo)量經(jīng)過(guò)線性變換后就是兩個(gè)句子的相似度得分。
對(duì)于句子語(yǔ)義特征函數(shù)hs(s,q),本發(fā)明首先構(gòu)建正負(fù)樣本的集合。對(duì)于一個(gè)問(wèn)題,其對(duì)應(yīng)的正確句子為正樣本,對(duì)應(yīng)段落中的其他句子作為負(fù)樣本。訓(xùn)練集中每個(gè)問(wèn)題有一個(gè)正樣本,同時(shí)隨機(jī)采樣兩個(gè)負(fù)樣本。這樣每個(gè)問(wèn)題對(duì)應(yīng)了三個(gè)訓(xùn)練樣本,共244035個(gè)樣本。驗(yàn)證集和測(cè)試集采取同樣的方式,分別有30144和30864個(gè)樣本。我們使用基于theano的keras實(shí)現(xiàn)雙向的lstm模型。訓(xùn)練過(guò)程中批的大小為128,優(yōu)化器選擇adagrad。模型訓(xùn)練的終止條件是驗(yàn)證集上的錯(cuò)誤率不再下降。
4.句子結(jié)構(gòu)特征實(shí)施方式
圖3是問(wèn)題句子和答案句子的依存關(guān)系示意圖。圖中的箭頭代表依存關(guān)系,箭頭的發(fā)出單詞是支配詞,箭頭的接受端是被支配詞。在實(shí)際的問(wèn)答當(dāng)中,問(wèn)題句子和答案句子的依存關(guān)系往往存在相似性,比如對(duì)于問(wèn)題句子“wherewasobamaborn?”和答案句子“obamawasborninhonolulu.”??梢钥闯鰞删湓挼囊来骊P(guān)系基本一樣。“where”和“honolulu”剛好對(duì)應(yīng),都是“born”的修飾詞。
首先找到兩個(gè)句子中共同的詞,這里稱為一對(duì)錨點(diǎn)。在兩個(gè)句子中可能會(huì)出現(xiàn)多對(duì)錨點(diǎn)。然后分別計(jì)算出兩個(gè)句子的依存關(guān)系。統(tǒng)計(jì)兩個(gè)依存樹(shù)從根出發(fā)到錨點(diǎn)的相同依存關(guān)系的數(shù)目。兩個(gè)句子依存樹(shù)的根并不一定相同,因此這里的相同的依存關(guān)系指的是關(guān)系,而忽略詞匯的差異。以圖3中的問(wèn)題和答案句子為例,兩個(gè)句子的擁有相同的根,因此hrm(s,q)=2,兩個(gè)句子除根外有兩個(gè)共同單詞,而且根到這兩對(duì)錨點(diǎn)的依存關(guān)系相同,因此hdm(s,q)=2。
5.答案類型特征實(shí)施方式
數(shù)據(jù)集預(yù)處理之后,每個(gè)句子都進(jìn)行了命名實(shí)體識(shí)別,問(wèn)題句子在問(wèn)題處理模塊中也有相應(yīng)的答案類型。根據(jù)簡(jiǎn)單的匹配就可以計(jì)算出來(lái)。
以上是所有特征函數(shù)的實(shí)現(xiàn)細(xì)節(jié),在所有特征函數(shù)訓(xùn)練和計(jì)算完成后,我們需要把這些特征函數(shù)進(jìn)行線性加權(quán)融合。線性模型的參數(shù)為每個(gè)特征函數(shù)的權(quán)重值。線性模型的目標(biāo)函數(shù)公式為:
其中sx代表問(wèn)題句子,