揭開知識庫問答KB-QA的面紗9·動態模型篇

內容速覽

  • 神經網路模塊
  • 模型結構預測
  • 實驗與總結

我們知道,很多的NLP問題,諸如情感分析、概括、信息抽取等問題都事先規定好了我們具體的任務。而QA類型的問題和大部分問題有一個不同點,即當我們不知道具體的問句時,我們任務的目標是不確定的。因為問句的類型不同(詢問地點、原因、人名、時間等),我們對應的任務(回答問題的方式方法)也有所差異。

既然對於不同類型的問句,我們回答的方式方法有所差異,那麼我們能不能根據不同的問句而使用不同的模型呢?更進一步,我們是否可以預先設計一些神經網路模塊,針對不同的問句,選擇不同的模塊進行組合,形成一個新的神經網路模型來回答該問題呢?

今天,我們將介紹一種全新的方法,根據問題的特點來動態組合神經網路模塊以構造出一個適合回答該問題的模型(用不同的模型來回答不同類型的問句)。該方法也可看做是語義解析方法的一種擴展。

我們以UC Berkely 16年發表的這篇Learning to Compose Neural Networks for Question Answering文章為例,進行介紹。

該方法思路如下:

1.定義不同的神經網路模塊

2.對問句進行解析

3.針對問句對神經網路模塊進行組合

4.使用組合模型回答問題

nttntntntt

我們先看下面這個圖,對該方法來一個直觀的感受:

首先我們定義了一些模塊,如上圖(a)所示,這些模塊都由不同的神經網路組成。不同模塊具有不同數量的輸入和輸出(圖a黑點表示輸入和輸出)以及參數(模塊空白部分表示參數)。

接著我們對問句進行解析並以此確定模型的結構(Network layout),即使用哪些模塊組合出模型,如圖b(方括弧里的內容表示模塊的參數)。

得到組合模型後,將外部知識(知識庫或圖片)作為模型的輸入(圖d),得出答案(圖c)。

值得一提的是,該方法不僅可以用於文本的QA,還可以用於圖像的QA(即VQA)。

接下來,我們來看看作者具體定義了哪些模塊。

神經網路模塊

作者針對文本問答和圖像問答兩個任務,統一設計了不同的模塊,該方法可以同時應用在這兩個任務上。模塊共有6種,注意這裡模塊的輸入為外部知識W(即知識庫 for KB-QA 或 圖片 for VQA)或其他模塊的輸出,各模塊的詳細信息如下 :

1. Lookup查詢模塊,根據參數i(i即查詢對象)查找到該對象在外部知識中的位置,輸出為注意力attention。

對於KB-QA,Lookup模塊可以在外部知識(即知識庫)中找到相應的實體。

2. Find查找模塊,根據參數i(i即查找對象)對外部知識生成相應的注意力attention矩陣,該模塊是一個MLP(多層感知機),輸入外部知識矩陣W,輸出對於W的注意力矩陣。

對於VQA,以圖像作為外部知識,假設對於圖片我們的問題為where is a bird?我們則可以使用模塊find[bird],輸出注意力矩陣,該矩陣將注意力放在圖像中和鳥相關的像素上。對於不同的參數i,我們的模塊將使用不同的參數變數,如下表中的v^i,其餘網路參數如下表中的a,B,C,d則共享,即模塊find[bird]和find[cat]是兩個不同的模型,但共用了部分參數。

對於KB-QA,find模塊可以找到和概念i相關的實體,如find[city],返回輸入中所有滿足類型為city的實體。

3. Relate相關模塊,以attention和外部知識W為輸入,根據參數i,生成新的attention,該模塊和find模塊類似,不同點在於它先將attention應用到外部知識W上,再根據參數生成新的attention。該模塊可以根據問題對attention進行變換。

對於VQA,假設我們的問題為鳥的上方有什麼,那麼我們就可以調用relate[above],以find[bird]的attention作為輸入,則返回當前attention位置上方的區域,作為新的attention。

而對於KB-QA,我們可以用relate模塊找到和輸入具有關係i相關的實體,如我們想尋找在紐約有哪些實體,則可以調用lookup[new york] 接上relate[in],先在知識庫查找到實體紐約,再尋找和紐約具有in關係的實體。

該三個模塊的詳細介紹如下表所示:

接下來我們再介紹另外三個模塊:

4. And模塊,該模塊可以有多個輸入,輸出為輸入attention的交集,即對一系列輸入的attention求交(對所有的attention矩陣進行elementwise的相乘)。

對於VQA,假設我們想找白色的貓,則可調用find[white]和find[cat]尋找白色和貓的區域attention,再將兩個attention輸入給and模塊,得到交集。

對於KB-QA,我們可以篩選出滿足多個條件的實體,如我們的問題為 喬治亞有哪些城市,那麼我們可以先調用lookup[georgia],得到喬治亞實體,再調用relate[in],找到和georgia具有關係in相關的實體,我們再單獨調用模塊find[city]找到所有類型為城市的實體,最後將find[city]和lookup[georgia]->relate[in] 輸入到add模塊求交集,就可以找到在喬治亞中的城市,整個流程如下圖所示:

5. Describe模塊,將輸入的attention應用到外部知識中,再得出標籤。

Describe模塊主要用於VQA中,用於描述attention區域中的物體,比如discribe[color],返回該attention區域的顏色。也可以用於KB-QA中描述某個屬性,下圖展示了關於VQA的三個例子:

(上圖第一行為外部知識【圖片】, 第二行是 圖片的attention, 第三行是問句,第四行是該問句所對應的模塊組合的拓撲結構)

6. Exists模塊,該模塊和describe模塊類似,用於回答yes or no類的問題。

Add、Describe、Exists模塊的詳細介紹如下表

有了以上6種模塊 Lookup、Find、Relate、And、DescirbeExisits,我們就可以根據不同的問題組合出我們想要的模型,再將外部知識(知識庫或圖片)輸入到動態生成的模型中得到答案。

這裡再給出兩個KB-QA對應的動態模型的例子:

可以看出,模塊的針對性設計,讓每個模塊有了更加具體的目標,而針對不同問題動態構造出組合模型則更加具有針對性可解釋性

接下來,我們再看看如何通過問題去預測模型的結構(layout),得到組合模型。

模型結構預測

模塊結構預測主要分為三個階段:

1.對問題進行解讀:通過Stanford Dependency Parser先得到問題的依存關係樹,保留依存關係樹上所有和疑問詞及系動詞相連的名詞、動詞和介詞短語

2.確定候選組合模型:對於刪減後的依存關係樹,為每個名詞和動詞分配find模塊,專有名詞分配lookup模塊,介詞短語分配relate模塊。對於這些模塊所構成的集合,選取任意子集,對兩兩模塊通過And模塊進行合併組合,形成樹結構,並在頂部插入describe模塊exists模塊作為根節點(即最終的輸出節點)。通過該方式,我們可以得到一系列候選模型。

3.選擇模型:對於這些候選模型,我們構造兩個特徵向量,通過一個MLP(多層感知機)對候選模型進行打分。【打分模型】的輸入是兩個特徵向量(問題特徵和模型特徵): 問題特徵向量是將問題輸入到LSTM,把LSTM最後一個時刻的隱層向量作為問題特徵向量,模型特徵向量包含了一系列的指示器(indicator),指示模型中每個類型模塊的數量,打分函數如下:

其中z_i為第i種組合模型,x為問題,h_q(x)為LSTM的輸出,f(z_i)為模型的特徵向量,其餘為參數。

通過softmax對各模型的得分進行計算,得到【選擇各個模型的概率分布】:

其中theta_l為【打分模型】MLP中的所有參數。

對於每一個模型,通過執行該模型可以得到關於最終答案標籤的概率分布,記作

其中y為輸出的標籤,w為外部知識(圖片或知識庫),theta_e為整個【組合模型】的參數。

由於候選的組合模型數量很多,在訓練的時候,我們的數據只有(外部知識、問題、答案)三元組,沒有【打分模型】直接的target標籤,無法進行直接的監督訓練。我們只能通過執行每個候選模型,通過它的輸出和答案標籤比對,才能確定如何選擇候選模型。那麼問題在於執行每個候選模型的代價比較大(組合模型可以看作是一個深度神經網路模型),訓練時難以承受該計算量。而選擇每個候選模型(即執行【打分模型】MLP,是一個淺層的神經網路模型)的代價卻相對較小。

因此,作者提出了使用增強學習的方法來訓練【打分模型】,將【打分模型】計算出來的【選擇各個模型的概率分布】看作是增強學習中選擇動作的策略(Policy),選擇模型看作是動作(Action),由於我們的目標是要選擇輸出的答案盡量準確的模型,因此將選擇的模型執行後得到的輸出概率log值看作是獎賞(Reward)。這樣我們就可以通過增強學習中的policy-gradient方法進行優化了。

具體步驟為:對【各個模型的概率分布】對進行採樣,採樣出一個模型z,執行模型z,得到輸出概率分布,通過policy-gradient構造以下損失函數進行優化:

(對於增強學習不了解並且感興趣的朋友可以關注知乎專欄智能單元,專欄作者對增強學習的基礎知識進行了很清晰的介紹,這裡我不再贅述)

通過policy-gradient的方法我們就高效的完成了【打分模型】的訓練,在訓練時,打分模型和組合模型一起訓練,這樣各個模塊的參數也一起進行訓練。

至此,我們就介紹完了我們的【問題解析】、【候選模型構造方式】和【打分模型】,通過以上方法,我們就可以根據問題得到我們的組合模型,進而通過輸入外部知識得出答案。

實驗與總結

作者用該方法同時在VQA和QA兩個領域進行了測試,都取得了不錯的效果。

在QA問題上,作者並沒有採用KB-QA的benchmark數據集,而是採用了一個數據量相對較小的數據集GeoQA,該數據集的問題大多和地理位置相關。通過find模塊學習實體的類別特徵,通過relate模塊學習關係特徵,通過and模塊連接各個模塊,最後用exists或describe模塊輸出答案。該方法相比一般的邏輯回歸和感知機方法有較大的提升。

可以看出,這個方法具有一定程度的缺陷,如選擇模型過程中會引入額外的錯誤(選擇到了不是最優的模型、對問題的解析有誤),由於定義模塊是人為定義的,不一定適合所有的數據,需要引入一定的先驗知識。

總的來說,雖然該方法在VQA和KB-QA上沒有取得state-of-the-art的表現,但是其方法卻有非常高的創新性,具有很強的解釋性可擴展性,一定程度上打破了深度學習的黑盒(打破黑盒是以後AI研究的一個重點方向),我相信該方法具有很大的潛力和研究價值,很多領域的任務都可以借鑒。

推薦閱讀:

如何評價SyntaxNet?
「關鍵詞」提取都有哪些方案?
《Deep Recurrent Generative Decoder for Abstractive Text Summarization》閱讀筆記
揭開知識庫問答KB-QA的面紗6·深度學習中篇

TAG:深度学习DeepLearning | 自然语言处理 | 问答系统 |