NLP教程(7) - 問答系統

ShowMeAI發表於2022-05-11

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用知識加速每一次技術成長

相關文章