1. 程式人生 > >揭開知識庫問答KB-QA的面紗6·深度學習中篇

揭開知識庫問答KB-QA的面紗6·深度學習中篇

我們將自然語言和謂語序列分別作為輸入,分別經過兩個不同的卷積神經網路得到一個300維的分散式表達,利用表達向量之間的相似度距離(如cosine距離)計算自然語言和謂語序列的語義相似度得分。由於我們上期我們已對卷積神經網路做過介紹,因此這裡我們對它不再贅述。需要注意的是,這裡的輸入採用的是字母三元組(letter-trigram)的方式,這是一個非常有趣的方式,類似於character-CNN。每個單詞都將它拆分成幾個 字母三元組,作為CNN的輸入。比如單詞who可以拆為#-w-h,w-h-o,h-o-#。每個單詞通過前後新增符號#來區分單詞界限(並且單詞最短只含一個字母,新增兩個#可以保證能形成至少一個字母三元組)

採用字母三元組的好處在於:1.減小輸入維度,這樣輸入維度可以穩定在字母集大小+1(#號)的三次方,即27^3,而不是字典大小(同時可以處理一些字典中不存在的詞和一些低頻詞,如縮寫詞等等)。2.相同語義的詞語可能因為詞根等緣故,字首或者字尾會比較相似,這樣能更好的提取單詞語義的特徵。3.對於現實生活中的使用者,有時候可能會發生單詞拼寫錯誤,但錯誤拼寫不會對這種輸入方式造成太大影響。

增加約束和聚合函式

我們通過增加約束和聚合函式的方式擴充套件查詢圖,縮小答案的範圍,以增加準確率,如下圖

如何去增加約束和聚合函式呢?作者採用了基於一些簡單規則的方式,比如當實體連結檢測到句子中出現其他實體,那麼我們可以增加一個約束。又比如句子中出現了first等時序敏感詞,我們可以增加聚合節點。具體來說,根據以下規則確定是否要為CVT節點新增約束節點或者聚合節點


1.約束實體出現在問句中

2.約束謂詞表示事件的結束時間,但沒有值(這表示它是當前事件)

3.問題中出現約束實體名稱的一些單詞

4.謂語是people.marriage.type_of_union(這說明關係是否是家庭伴侶關係、婚姻關係還是民事關係)

5.問句中包含單詞 first 或者 oldest,並且謂語是from形式的謂語(表明事件的起始時間)

6.問句中包含單詞 last, latestnewest ,並且謂語是to形式的謂語(表明事件的結束時間)

而對於答案節點,如果包含以下之一的謂語,我們會新增一個約束節點

people.person.gender / common.topic.notable types / common.topic.notable_for


獎勵函式的特徵定義

我們用對數線性模型訓練獎勵函式,因此我們要確定輸入向量,和資訊抽取以及傳統語義解析方法一樣,我們手工定義一個特徵向量來表徵整個查詢圖的資訊,將它作為對數線性模型的輸入。我們先來對特徵有個主觀上的感受,例如問題“Who first voiced Meg on Family Guy?

” 對應的查詢圖,它的特徵如下圖所示:

具體來說,我們從 主題詞連結核心推導鏈增加約束聚合三個方面定義特徵。

a.主題詞連結特徵:實體連結得分(EntityLinkingScore),由實體連結系統給出。

EntityLinkingScore(FamilyGuy,"Family Guy")=0.9

b.核心推導鏈特徵

1.PatChain:將問句中的主題詞替換為實體符號,和謂語序列同時輸入兩個不同的CNN,根據CNN輸出的表達求語義相似度作為特徵。

如: PatChain("Who first voiced Meg on <e>", cast-actor) =0.7

2.QuesEP:將謂語序列和主題詞的規範名稱(canonical name)連線(concatenate)起來作為輸入,和問題求語義相似度。

如: QuesEP(q,“family guy cast-actor”) = 0.6

3.ClueWeb:用ClueWeb來訓練一個更加in-domain的模型。如果一句話包含兩個實體和謂語,那麼就把這句話和謂語作為一組 資料對 輸入模型進行訓練。注意:ClueWeb的輸入和PatChain是一樣的,但是其模型是用不同資料訓練的。

從這定義的三個特徵可以看出,這其實是一個ensemble模型,將三種模型的輸出結果進行了一個log-linear組合。

c.約束聚合特徵:

對於CVT節點有以下特徵:

1.約束實體是否出現在問句中 如ConstraintEntityInQ("Meg Griffin",q)=1

2.是否是當前發生的事件

3.是否是當前發生的事件,且問句中包含關鍵詞“currently”,“current”, “now”, “present” 和“presently”

4.約束實體單詞出現在問句中的百分比 如ConstraintEntityWord("Meg Griffin",q)=0.5

5.約束謂語的型別是people.marriage.type_of_union

6.問題中是否包含“first” 或 “oldest” ,謂語是from形式謂語,並且CVT節點按該from性質排序是第一

7.問題中是否包含“last”, “latest” 或 “newest” ,謂語是to形式謂語,並且CVT節點按該to性質排序是最後

對於答案節點有以下特徵:

1.性別一致性(男性):約束謂語是gender,並且問句中出現了以下男性關鍵詞中的一個{“dad”, “father”,“brother”, “grandfather”, “grandson”, “son”,“husband”}

2.性別一致性(女性):約束謂語是gender,並且問句中出現了以下女性關鍵詞中的一個{“mom”, “mother”,“sister”, “grandmother”, “granddaughter”,“daughter”, “wife”}

3.當約束謂語是 notable_typesnotable_for 時,約束實體單詞出現在問題中的百分比

d.總體特徵

查詢圖對應的答案數量NumAns和查詢圖的節點數NumNodes

模型學習

在資訊抽取中,我們的模型是在進行二分類(根據特徵向量判定候選答案是否是正確答案),而在本文中,我們對模型不進行二分類,而是根據查詢圖對應的實體和真實答案的F1-score進行排名。基於lambda-rank演算法對一個一層的神經網路進行訓練。這樣做的好處是,有些查詢圖雖然查詢得到的答案和真實答案不完全相同,但根據它的相同程度(F1-score)也可以說它比完全錯誤的查詢圖要好。

論文實驗與總結

在訓練資料上,通過實體連結系統確定候選實體,候選實體到正確答案的知識庫路徑(長度限制為2)作為核心推導鏈的正樣本,錯誤查詢圖中的路徑作為負樣本。根據訓練資料,作者生成了17,277個F1-score不為0的查詢圖(正樣本)和1.7M完全錯誤的查詢圖(負樣本)對卷積神經網路進行訓練。

對於獎勵函式的訓練,為每個問題生成了4000個樣例(包含所有正確的查詢圖和隨機選擇的負樣本)以F1-score作為排名標準來訓練排名器(ranker)。


該方法與當時的所有baseline進行了比較,效果如下