閱讀147 返回首頁    go 阿裏雲 go 技術社區[雲棲]


揭開知識庫問答KB-QA的麵紗5·深度學習上篇


image


自 2015 年開始,深度學習用於 KB-QA 的方法取得了很好的效果,並逐漸成為了 KB-QA 的主流方法。也湧現出了一批使用深度學習提升傳統的語義解析、信息抽取和向量建模方法的優秀論文。本期,我們先以深度學習提升向量建模方法為例,作為深度學習篇的上篇,為大家進一步揭開知識庫問答的麵紗。

我們在揭開知識庫問答KB-QA的麵紗4·向量建模篇介紹了 KB-QA 中介紹了傳統方法之一的向量建模(Vector Modeling)方法,該方法具有操作性強,不需要任何手工的特征等優點。

今天,我們將介紹一篇利用深度學習對該向量建模方法進行提升的論文,來自北京大學和 Microsoft 研究院的 Question Answering over Freebase with Multi-Column Convolutional Neural Networks(文章發表於 2015 年的 ACL 會議)。

該文章使用了卷積神經網絡的一種變體(作者稱為 multi-column)從三個方麵(答案路徑 Answer Path,答案上下文信息 Answer Context,答案的類型 Answer Type)對問題和答案的分布式表達進行學習,使得該分布式表達相比之前的向量建模方法能夠包含更多有效的特征。該方法在 WebQuestion 數據集上測試,取得了 40.8 的 F1-score。

1. 向量建模方法的再思考

在上期的向量建模方法中,我們談到該方法本身存在一些缺陷。

首先是對於問題的向量化。對問題的向量化,傳統向量建模方法采用了類似詞袋模型的方式,相當於它並未考慮問題的語言順序(比如 “謝霆鋒的爸爸是誰?” “謝霆鋒是誰的爸爸?” 這兩個問題用該方法得到的表達是一樣的,然而這兩個問題的意思顯然是不同的)。

對於這個缺陷,我們可以使用深度學習的模型對問題進行向量化,比如使用循環神經網絡(Recurrent Nerual Networks, RNNs)、卷積神經網絡(Counvoulutional Nerual Networks, CNNs )等模型提取問題特征,這樣的方式考慮了語言的順序,並且提取特征的能力也更加強大。

第二個缺陷是,在對答案進行向量化的時候,直接將答案的路徑(問題主題詞到答案實體的路徑)和上下文信息(答案實體周圍的知識庫子圖)一起作為答案特征,通過 multi-hot 的方式對答案進行向量化。事實上,這樣的形式不利於模型區分答案的特征(僅僅根據答案的 multi-hot 向量是不好區分哪些是答案的類型,哪些來自答案的上下文,哪些來自問題主題詞到答案實體的路徑)。

因此我們可以將問題的特征表示拆解開,用三個向量分別表示答案的三個特征,即答案路徑(Answer Path),答案上下文信息(Answer Context),答案類型(Answer Type),對於每一個答案特征向量,都用一個卷積網絡去對問題進行特征提取,將提取出的分布式表達和該答案對應特征向量的分布式表達進行點乘,這樣我們就可以得到一個包含三部分的得分函數:


image

其中 q 代表問題,a 代表答案,image代表問題經過卷積神經網絡輸出的分布式表達, image表示答案在對應特征下的分布式表達。

有了得分函數,我們就可以像向量建模方法一樣,通過定義 margin-based ranking 損失函數對模型參數進行訓練。

接下來,我們再看一下和是怎麼計算得到的。

2. Multi-Column 卷積神經網絡

對於問題的特征提取,作者使用 Multi-Column 卷積神經網絡,其結構實質上是共享 word-embedding 層的三個 text-CNNs,text-CNNs 模型在文本分類問題上取得了很好的效果。(這兩個概念是 Deep Learning for NLP 中的重要概念,我在這裏隻作簡單介紹,不再展開深入討論,想深入了解的朋友可以查看相應的論文)。

詞向量(Word-embedding):對於問題序列!image對於其中的每一個單詞 image它對應的 one-hot 形式image ,我們可以通過 word-embedding 矩陣image轉化為一個 d 維的分布式向量(這裏的 word-embedding 矩陣是通過 word2vec 等 pre-train 方式初始化的),即 image

卷積操作(Convolution):對於一個含 n 個單詞的問題 q,我們可以得到一個 n*d 的矩陣。如果我們把該矩陣想象成是一個圖片,那麼我們就可以像對圖片一樣進行卷積操作了。與圖片卷積操作的不同之處在於,每一個卷積核的大小(即卷積窗口)是 m*d,表示每次對 m 個單詞的 embedding 進行卷積操作。

池化操作(Pooling):對於每一個卷積核的輸出(假設卷積核大小為 m,在 n*d 的矩陣上進行卷積,那麼輸出是一個 n-m+1 維的向量),通過對該向量進行 max-pooling 操作(即取最大值)可以得到一個標量,該標量將作為問題最終表達image的某一維度(可以理解成一個卷積核負責對整個問題提取一個一維的特征)。因此通過控製卷積核的數目我們可以控製最終輸出的維度,即個卷積核可以輸出一個 k 維的最終表達(注意這裏卷積核大小可以不同,一般設置為 2,3,4)。

上述流程可以用下麵這個圖片來表達,注意,對於不同長度的問題,會通過補零(padding)操作將所有問題的長度限定到固定長度。


image

這樣,我們通過三個 text-CNNs,在共享 word-embedding 的情況下,就可以得到 imageimage(事實上,在這篇文章中所使用的卷積操作,對於每一個 column 隻采用了一個卷積核,一個卷積核對一個卷積窗口的卷積結果並非一個值而是一個向量,max-pooling 作用在每一個卷積窗口的卷積結果上,具體方式可以參看後麵的圖。個人認為這樣的卷積方式減少了參數,顯得特征提取更加粗粒度,效果很可能不如 text-CNNs)。

接下來,我們用三個向量來分別表示答案的三種特征。

答案路徑(Answer Path):從問題中的主題詞到答案在知識庫中形成一條路徑,我們記錄該路徑上的每一個實體關係,可以通過 multi-hot 的形式image來進行表示,答案路徑的分布式表達image可以表示為image,這裏由於路徑的長度不確定,所以使用一範來做一個歸一化 normalization。

答案上下文信息(Answer Context):我們將答案實體對應 1 跳(hop)範圍內的實體關係和實體作為答案實體的上下文信息。通過同樣的方式我們可以得到答案上下文信息的分布式表達image

答案類型(Answer Type):在信息抽取中我們提到,答案的類型是一個很重要的特征。類型是一種特殊的實體關係,比如時間 2009-12-17 的類型是 datetime,James Cameron 的類型是 people.person 和 film.producer。 在實際操作中,可以在freebase裏通過實體關係common.topic.notable.types 來查詢實體對應的所有類型。通過同樣的方式,我們可以得到相應的分布式表達 image。注意,如果候選答案是一個值,那麼就用該值的類型(string/float/datetime)作為答案類型,比如答案是 2009-12-17,那麼類型就是 string。

至此,我們得到了包含個三部分的得分函數:


image

整個流程如下圖所示:


image


圖中方塊帶紅色斜線的為主題詞,紅色箭頭表示路徑,綠色橢圓表示答案類型,藍色虛線橢圓表示上下文信息範圍。

對於問題“when did Avatar release in UK”和它的答案 2009-12-17,我們通過 multi-column 卷積神經網絡提取三種問題的分布式表達,再通過答案的路徑、上下文信息和類型得到答案相應的三種分布式表達,通過分別點乘再求和的方式得到最終的答案-問題對得分。

我們可以通過我在揭開知識庫問答KB-QA的麵紗4·向量建模篇介紹了 KB-QA 提到的同樣的方式構造損失函數和多任務學習來訓練模型參數。

3. 實驗分析與總結

模型的參數這裏不再贅述。值得一提的是這篇文章采用的關於候選答案的尋找方式。和向量建模方法類似,也是尋找問題中主題詞 n 跳範圍內(一般取兩跳)的實體作為候選答案集合。然而對於有些問題,其候選答案集合很大,因此我們采取一種啟發式方法,如果同一路徑候選答案數超過 200,則隨機選擇 200 個作為候選。如果某個候選答案得分最高,那麼我們把它所在的答案路徑中的所有其他節點(不在 200 個候選集合的節點)也計算得分,選出得分最高的作為最終答案。

實驗依舊是在 benchmark——WebQuestion 上進行,取得了 40.8 的 F1-score,這個性能擊敗了幾乎當時所有的傳統方法。並且我個人認為如果引入現在的一些深度學習技巧(諸如 batch normalization、Adam 等)並且加大模型的參數數量,改進 word-embedding 預訓練等,效果還有上升的空間。我相信該方法如果麵對更大規模的數據集會比傳統方法取得更好的效果。

由於這篇文章考慮了答案的三個因素(路徑、上下文、類型),為了探究哪個因素對最終效果影響最大。作者通過測試 在得分函數中去除某一因素、隻使用 single column、不進行多任務訓練、隻使用 1 hop 範圍作為候選答案(該順序對應下表的順序)等情況下的模型性能,來對模型進行分析。

那麼你猜猜對於答案的路徑、上下文、類型這三個因素,去除哪個因素之後對性能影響最大呢?實驗結果如下表:


image

其中 w/o 表示 without,可以看出答案的路徑對效果影響最大(問題主題詞到答案實體的路徑其實相當於問題到答案的推理過程),其次是答案的類型,影響最小的是答案的上下文信息(仔細想想,其實答案實體的上下文信息很多對尋找該問題的答案沒有幫助,比如詢問奧巴馬的出生地,那麼奧巴馬的其他很多信息如社會關係、職位等等對答案沒有幫助,相當於噪音)。

分布式表達,雖然沒有傳統的信息抽取和語義解析那麼具有解釋性,但是,我們卻可以通過衡量分布式表達的餘弦(Cosine)距離和通過得分函數來觀察到一些可解釋性。為此,作者還進行了兩個實驗。

首先,我們想知道對於一個問題,我們的模型最關注這個問題的哪個單詞,即顯著性單詞檢測(Salient words detection) 。我們可以進行這樣的實驗,要檢測問題中的某一個單詞的顯著性,我們可以將該單詞替換為某些停頓詞(如 to is a 等),計算替換了單詞之後的表達 ,再計算該表達和原始表達的歐式距離(可以多替換幾種停頓詞取平均距離)作為顯著性得分,這裏給出了一些例子:


image

我們可以看出來,問題詞(wh-)、問題詞相關的名詞和動詞都對找出最終答案有重要影響。

我們也可以通過問題 表達之間的 cosine 距離來尋找相似的問題,如下表:

image

我們通過計算問題(字體加粗)的表達,通過 cosine 距離尋找最近的問題表達所對應的問題,可以看出這些問題在語義上還是很相似的。如相同語義“who found/own/start *”和“who be the owner of *”的距離很接近。

最後,作者也列舉了一些錯誤分析(通過對錯誤情況進行分析,對我們提出改進的方法很有幫助),錯誤主要有以下三種情況:

候選答案生成:有些問題的主題詞是難以正確提取出來的,比如縮寫詞和表達不全,如問題“where did jfk and his wife live” ,很難將 jfk 這個縮寫詞對應到 John F. Kennedy 這個人名上,這樣會導致我們無法得到正確的候選答案集合。要解決這種情況,可能需要對問題進行一些預處理。

問題歧義:對於數據集中有些有歧義的問題,難以獲得和正確答案相應的關係,如問題“who is aidan quinn”,答案是演員,我們很難通過該問題 who is 推斷出和職業相關。這種情況該怎麼辦呢?

時序敏感(Time-Aware)問題:對於問題中帶有 first / second 這種與時間順序相關的詞語,如“who is johnny cash’s first wife” ,答案可能給出的是 second wife 的名字(模型隻關注到了 wife 而忽略了 first 的含義,並沒有進行額外的推理)。對於這種情況,可能需要定義專門(ad-hoc)的操作,注意的是,這一點是該類方法相比語義解析方法的一個缺點。

那麼,下一期,我們就將介紹深度學習對語義解析方法的提升,我們將以 Micorsoft ACL 2015 年的 Outstanding paper 為例,為大家帶來揭開知識庫問答 KB-QA 的麵紗 6·深度學習中篇,進一步揭開 KB-QA 的麵紗。

原文發布時間為:2017-09-04
本文作者:劉大一恒
本文來自雲棲社區合作夥伴“PaperWeekly”,了解相關信息可以關注“PaperWeekly”微信公眾號

最後更新:2017-09-04 22:03:52

  上一篇:go  國際頂會 SIGCOMM,我們來了!
  下一篇:go  政府安全資訊精選 2017年第六期 車聯網和移動安全可能成為未來監管重點