NLP教程(7) – 問答系統

ShowMeAI研究中心


問答系統
本系列為斯坦福CS224n《自然語言處理與深度學習(Natural Language Processing with Deep Learning)》的全套學習筆記,對應的課程視頻可以在 這裡 查看。

NLP中的問答系統
ShowMeAI為CS224n課程的全部課件,做了中文翻譯和注釋,並製作成了 GIF動圖!點擊 第10講-NLP中的問答系統 查看的課件注釋與帶學解讀。更多資料獲取方式見文末。


引言

CS224n是頂級院校斯坦福出品的深度學習與自然語言處理方向專業課程,核心內容覆蓋RNN、LSTM、CNN、transformer、bert、問答、摘要、文本生成、語言模型、閱讀理解等前沿內容。

本篇筆記對應斯坦福CS224n自然語言處理專項課程的知識板塊:問答系統。主要針對NLP中的問答系統場景,介紹了一些模型和思路。

筆記核心詞

  • question answering
  • Dynamic Memory Networks \ 動態記憶網絡
  • QA
  • 問答
  • 對話
  • MemNN
  • DCN
  • VQA

1.圖文問答系統與動態記憶網絡( DMN )

QA 系統的概念是直接從文檔、對話、在線搜索等中提取信息(有時是段落,或是單詞的範圍),以滿足用戶的信息需求。 QA 系統不需要用戶通讀整個文檔,而是傾向於給出一個簡短的答案。

現在, QA 系統可以很容易地與其他 NLP 系統(如聊天機械人)結合起來,有些 QA 系統甚至超越了文本文檔的搜索,可以從一組圖片中提取信息。

有很多類型的問題,其中最簡單的是 Factoid Question Answering 事實類問題回答。它包含的問題看起來像

  • The symbol for mercuric oxide is?(氧化汞的符號是什麼?)
  • Which NFL team represented the AFC at Super Bowl 50?(哪支NFL球隊代表AFC參加超級碗50賽?)

當然還有其他類型的問題,如數學問題(\(2+3=?\))、邏輯問題,這些問題需要廣泛的推理(而且沒有背景信息)。然而,我們可以說在人們的日常生活中,尋求信息的事實類問題回答是最常見的問題。

事實上,大多數 NLP 問題都可以看作是一個問答問題,其範式很簡單:

  • 我們發出一個查詢,然後機器提供一個響應。通過閱讀文檔或一組指令,智能系統應該能夠回答各種各樣的問題。
  • 我們可以要求句子的 POS 標籤,我們可以要求系統用不同的語言來響應。

因此,很自然地,我們想設計一個可以用於一般 QA 的模型。

為了實現這一目標,我們面臨兩大障礙。

  • ① 許多NLP任務使用不同的架構,如TreeLSTM (Tai et al., 2015)用於情緒分析,Memory Network (Weston et al., 2015) 用於回答問題,以及雙向LSTM-CRF (Huang et al., 2015) 用於詞性標註。
  • ② 全面的多任務學習往往非常困難,遷移學習仍然是當前人工智能領域(計算機視覺、強化學習等)神經網絡架構的主要障礙。

我們可以使用NLP的共享體系結構來解決第一個問題:動態內存網絡( DMN ),這是一種為一般 QA 任務設計的體系結構。 QA 很難,部分原因是閱讀一段很長的文字很難。即使對於人類,我們也不能在你的工作記憶中存儲一個很長的文檔。

動態內存網絡圖示

1.1 輸入模塊

將 DMN 分為多個模塊。首先我們來看輸入模塊。輸入模塊以單詞序列 \(T_I\) 作為輸入,輸出事實表示序列 \(T_C\)。如果輸出是一個單詞列表,我們有 \(T_C = T_I\)。如果輸出是一個句子列表,我們有 \(T_C\) 作為句子的數量, \(T_I\) 作為句子中的單詞數量。我們使用一個簡單的 GRU 來讀取其中的句子,即隱藏狀態 \(h_{t}=\operatorname{GRU}\left(x_{t}, h_{t-1}\right)\),其中 \(x_{t}=L\left[w_{t}\right]\)\(L\) 為嵌入矩陣,\(w_t\)\(t\) 時刻的單詞,我們使用 Bi- GRU 進一步改進,如下圖所示。

動態內存網絡圖示

(本部分DMN網絡頻繁使用到GRU結構,具體的GRU細節講解可以查看ShowMeAI的對吳恩達老師課程的總結文章深度學習教程 | 序列模型與RNN網絡,也可以查看本系列的前序文章NLP教程(5) – 語言模型、RNN、GRU與LSTM

1.2 問題讀取模塊

我們也使用標準的 GRU 來讀取問題(使用嵌入矩陣 \(L : q_{t}=\operatorname{GRU}\left(L\left[w_{t}^{Q}\right], q_{t-1}\right)\)),但是問題模塊的輸出是問題的編碼表示。

1.3 情景記憶模塊

動態記憶網絡的一個顯著特徵是情景記憶模塊,它在輸入序列上運行多次,每次關注輸入的不同事實子集。它使用 Bi- GRU 實現這一點, Bi- GRU 接收輸入模塊傳入的句子級別表示的輸入,並生成情景記憶表示。

我們將情景記憶表徵表示為 \(m^i\),情景表徵(由注意機制輸出)表示為 \(e^i\)。情景記憶表示使用 \(m^0 = q\) 初始化,然後繼續使用 \(\mathrm{GRU} : m^{i}=\mathrm{GRU}\left(e^{i}, m^{i-1}\right)\)。使用來自輸入模塊的隱藏狀態輸出更新情景表徵,如下所示,其中 \(g\) 是注意機制。

\[\begin{aligned}
h_{t}^{i} &=g_{t}^{i} \operatorname{GRU}\left(c_{t}, h_{t-1}^{i}\right)+\left(1-g_{t}^{i}\right) h_{t-1}^{i} \\
e_{i} &=h_{T_{\mathrm{C}}}^{i}
\end{aligned}
\]

注意向量 \(g\) 的計算方法有很多,但是在原始的 DMN 論文(Kumar et al. 2016)中,我們發現以下公式是最有效的

\[g_{t}^{i} =G\left(c_{t}, m^{i-1}, q\right)
\]

\[G(c, m, q) =\sigma \left(W^{(2)} tanh \left(W^{(1)} z(c, m, q)+b^{(1)}\right)+b^{(2)}\right)
\]

\[z(c, m, q) =\left[c, m, q, c \circ q, c \circ m,|c-q|,|c-m|, c^{T} W^{(b)} q_{,} c^{T} W^{(b)} m\right]
\]

這樣,如果句子與問題或記憶有關,這個模塊中的門就會被激活。在第 \(i\) 遍中,如果總結不足以回答問題,我們可以在第 \(i +1\) 遍中重複輸入序列。

例如,考慮這樣一個問題 Where is the football? 以及輸入序列 John kicked the footballJohn was in the field。在這個例子中,John和football可以在一個pass中連接,然後John和field可以在第二個pass中連接,這樣網絡就可以根據這兩個信息進行傳遞推斷。

1.4 回答模塊

回答模塊是一個簡單的 GRU 解碼器,它接收問題模塊、情景記憶模塊的輸出,並輸出一個單詞(或者通常是一個計算結果)。其工作原理如下:

\[\begin{aligned}
y_{t} &=\operatorname{softmax}\left(W^{(a)} a_{t}\right) \\
a_{t} &=\operatorname{GRU}\left(\left[y_{t-1}, q\right], a_{t-1}\right)
\end{aligned}
\]

1.5 實驗

通過實驗可以看出, DMN 在 babl 問答任務中的表現優於 MemNN,在情緒分析和詞性標註方面也優於其他體系結構。情景記憶需要多少個情景?答案是,任務越難,通過的次數就越多。多次傳遞還可以讓網絡真正理解句子,只關注最後一項任務的相關部分,而不是只對單詞嵌入的信息做出反應。

關鍵思想是模塊化系統,你可以通過更改輸入模塊來允許不同類型的輸入。例如,如果我們用一個基於卷積神經網絡的模塊替換輸入模塊,那麼這個架構就可以處理一個稱為可視化問題回答(VQA)的任務。它也能夠在這項任務中勝過其他模型。

1.6 總結

自2015年以來,尋找能夠解決所有問題的通用體系結構的熱情略有減退,但在一個領域進行訓練並推廣到其他領域的願望有所增強。要理解更高級的問答模塊,讀者可以參考動態注意力網絡(DCN)。

2.參考資料

ShowMeAI系列教程推薦

NLP系列教程文章

斯坦福 CS224n 課程帶學詳解

ShowMeAI用知識加速每一次技術成長