1. 程式人生 > 實用技巧 >斯坦福CS224n NLP課程【十六】——用於回答問題的動態神經網路

斯坦福CS224n NLP課程【十六】——用於回答問題的動態神經網路

是否將所有NLP任務都可視作QA?

舉例:

在old-school NLP系統中,必須手工整理一個“知識庫”;然後在這個知識庫上做規則推斷。這節課介紹的DMN完全不同於這種方法,它能夠直接從問答語料中學習所有必要的知識表達。

DMN還可以在問答中做情感分析、詞性標註和機器翻譯。所以構建一個joint model用於通用QA成為終極目標。

但是實現這個目標,有兩個障礙

1.沒有任何已有研究探討如何讓單個模型學習各種不同的任務。每種任務都有獨特的特點,適合不同的神經網路去實現

2.Fully joint multitask learning(同一個decoder/classifier,不僅僅共享詞向量,而應該共享全部引數)非常困難。有些不成功的研究發現,只能在低層(詞向量)共享引數、如果任務之間沒有直接關聯則會顧此失彼。

DMN今天介紹的DMN僅僅解決了第一個問題。雖然有些超引數還是得因任務而異,但總算是個通用的架構了。

回答難題:假設有個閱讀理解題目

你無法記住全文,但看了問題之後,只要帶著問題掃幾眼原文,你就能找出答案。這種現象啟發了DMN。

首先對整個框架有所瞭解:

左邊輸入input的每個句子每個單詞的詞向量,送入input module的GRU中。同樣對於Question Module,也是一個GRU,兩個GRU可以共享權值。

Question Module計算出一個Question Vectorq,根據q應用attention機制,回顧input的不同時刻。根據attention強度的不同,忽略了一些input,而注意到另一些input。這些input進入Episodic Memory Module,注意到問題是關於足球位置的,那麼所有與足球及位置的input被送入該模組。該模組每個隱藏狀態輸入Answer module,softmax得到答案序列。

有人問DMN能否學會新型別的問題,答案是否定的。Episodic Memory Module中有兩條線,分別代表帶著問題q第一次閱讀input的記憶,以及帶著問題q第二次閱讀的記憶。

講各個模組的細節:

The Modules: input

輸入模組接受T_I個輸入單詞,輸出T_C個“事實”的表示。如果輸出是一系列詞語,那麼有T_C=T_I;如果輸出是一系列句子,那麼約定T_C表示句子的數量,T_I表示句子中單詞的數量。我們使用簡單的GRU讀入句子,得到隱藏狀態h_t=GRU(x_t,h_t−1),其中x_t=L[w_t],L是embedding matrix,w_t是時刻t的詞語。

事實上,還可以將這個Uni-GRU升級為Bi-GRU:每個fact被表示為雙向隱藏狀態的拼接。

The Modules :Question

同樣用一個標準的GRU讀入問題,同樣的embedding matrixL,得到最後一個隱藏狀態qt=GRU(L[w(^Q)_t],q_t−1)。

The Modules: Episodic Memory

其中,episodic memory representation 初始化為m_0=q,並通過 GRU處理:m_i=GRU(e_i,mi−1)。而 episode representation 使用input module的隱藏狀態輸出更新:

其中g是 attention mechanism,有多種計算方式。在最初的DMN paper (Kumar et al. 2016)中,驗證了下列公式是最好的:

這裡最重要的是z的計算,通過句子向量、問題向量、上一個記憶向量之間原始形式與element-wise乘積(相似性)的按行拼接,得到一個超長的列向量。然後非線性啟用傳播一層,softmax得到g,表示每次閱讀對每個時刻(句子)的關注程度。

Richard說最初他們還嘗試過q^T*W_s,後來發現並沒有什麼幫助。他的忠告是,如果模型中有多餘的部分,那就去掉。

這裡兩條線代表兩個GRU,閱讀兩遍。這也是個超引數。Richard說最開始多個pass的Memory也通過GRU合併,後來發現只留兩個pass直接視作兩層神經網路也能解決問題,能簡單就不要複雜。

The Modules :Answer

answermodule就是一個簡單的GRU decoder,接受上次輸出的單詞(應該是one-hot向量),以及episodic memory,輸出一個單詞:

相關工作

有很多已有工作做了類似研究:

與DMN聯絡密切的是後面兩篇論文,都有Memory Component。

與MemNets比較:

相同點:

都有input, scoring, attention and response模組

不同點:

Mem Nets主要使用詞袋,然後有一些embedding去encode位置

Mem Nets迭代執行attention和response

這些不同點都是由於Mem Nets是個非sequence模型造成的。而DMN是個血統純正的neural sequence model,天然適合序列標註等任務,比Mem Nets應用範圍更廣。

DMN的sequence能力來自GRU,雖然一開始用的是LSTM,後來發現GRU也能達到相同的效果,而且引數更少。

結果:

QA:

這是一個自動生成的QA語料庫,裡面都是一些簡單的問答。部分NLP學者很厭惡機器生成的語料,但如果連機器生成的語料都無法解決,何談解決真實的複雜問題。

情感分析:

依然拿到最高分數。此時問題永遠是相同的,其向量是固定的。遺憾的是,對於不同的任務,超引數依然必須不同才能拿到最佳結果。

Episodes數量

其中task 3是三段論,理論只需要3個pass,但模型依然需要5個。考慮到這是個end to end訓練,沒有監督訊號指示那些fact是重要的,所以這個表現還挺好。情感分析的N/A是因為,計算複雜度實在太高了。分數已經在降低,所以乾脆沒跑。

情感分析的例子:

顏色越深代表模型的attention越強烈。如果只跑一個pass,則模型無法得到整個句子的全文,所以將過多的注意力放到無關緊要的貶義詞上。

另一些類似的例子:

詞性標註:

雖然0.06%的提升不算什麼,但考慮到這是一個通用的模型,感覺是非常棒的。

VQA 視覺問題回答:

任何任務都可視作QA任務,所以這個模型也適用於VQA,只需將處理文字的輸入模組替換為處理影象的輸入模組:

輸入模組:

由於卷積特徵並不是序列的,所以輸入模組的輸出特徵只是所有時刻隱藏狀態向量的拼接。

結果很不錯然後就拿到了最高分:

attention視覺化:

越亮代表越注意,可以發現模型的確在注意問題相關的部分:

在一些較難的問題上也能較為滿意地回答:

比如模型認為女孩穿的是短褲,但問女孩的短裙是什麼顏色,它也能知道是白色。這說明模型很健壯。雖然一些問題回答得不好,但Richard認為只是資料量不夠的原因

總結:

大部分NLP任務都可視作QA

DMN可以解決多種QA任務

還有可以在問題上也做attention的Dynamic Co-attention Networks