原創(chuàng):張春陽

應(yīng)用和數(shù)據(jù)集
- QA
- SQuAD
后續(xù)影響
- ELMo
- BERT
原始論文
BI-DIRECTIONAL ATTENTION FLOW FOR MACHINE COMPREHENSION.pdf
- 原文的主要閱讀難度在于,有大量的 block 組裝在一起
- 這些模塊又由很多復(fù)雜的符號(hào)組裝在一起
模型概覽
Type of MRC
- Open-domain vs Closed-domain
- Abstractive vs Extractive
- Ability to answer non-factoid queries
BiDAF is a closed-domain, extractive Q&A model that can only answer factoid questions.

模型整體結(jié)構(gòu)
-
Embedding Layers
BiDAF 有3個(gè) embedding layers,每一個(gè)都是用來把 Query 和 Context 字符串轉(zhuǎn)變成向量的
-
Attention and Modeling Layers
通過 Attention 和 Modeling Layer,把 Query 和 Context 的信息進(jìn)行合并,這部分的輸出為另一個(gè)帶有混合信息的向量表達(dá)。在原文中叫做 "Query-aware Context representation"
-
Output Layer
輸出層會(huì)把 "Query-aware Context representation" 轉(zhuǎn)化成一連串的概率,這些概率用來決定 Answer 的起始和結(jié)束位置。

Glossary
- Context : the accompanying text to the Query that contains an answer to that Query
- Query : the question to which the model is supposed to give an answer
- Answer : a substring of the Context that contains information that can answer Query. This substring is to be extracted out by the model
- T : 表示在 Context 中 words/tokens 的數(shù)量
- J : 表示在 Query 中 words/tokens 的數(shù)量
- d1 : the dimension from the word embedding step (GloVe)
- d2 : the dimension from the character embedding step
- d : the dimension of the matrices obtained by vertically concatenating word and character embeddings. d is equal to d1 + d2.
- H : the Context matrix outputted by the contextual embedding step. H has a dimension of 2dby-T
- U : the Query matrix outputted by the contextual embedding step. U has a dimension of 2dby-J
Embedding Layers
步驟1: Tokenization

T: 表示在 Context 中 words/tokens 的數(shù)量
J: 表示在 Query 中 words/tokens 的數(shù)量
把 tokenization 的結(jié)果轉(zhuǎn)換成向量的形式,在 BiDAF 中使用三個(gè)維度來表示這些信息。
- word level embedding
- character level embedding
- contextual level embedding
步驟2: Word Level Embedding

BiDAF 使用預(yù)訓(xùn)練的 GloVe 向量來獲取 Query 和 Context 的表達(dá)。
使用 GloVe 處理后的輸出為兩個(gè)矩陣,一個(gè)是 Context 的,一個(gè)是 Query 的。
這兩個(gè)矩陣的長(zhǎng)度分別為 T(Context) 和 J(Query),其中矩陣的維度為 ,這是一個(gè)預(yù)設(shè)的向量大小的值,可以是50/100/200/300。
步驟3: Character Level Embedding
我們使用 GloVe 處理后的矩陣并不夠,因?yàn)檫€有一些單詞是在 GloVe 中不存在的(OOV,在GloVe中,oov 的值為隨機(jī)的一些向量),我們要使用一些補(bǔ)救方法來處理這些值。
所以,這里我們引入了一個(gè) 1D 的卷積神經(jīng)網(wǎng)絡(luò)來尋找這些 token 的 character 級(jí)別的向量表示。

步驟4: Highway Network

我們從之前的步驟中,得到了兩個(gè)表示單詞的向量, GloVe 和 1D-CNN 的向量。接下來把兩個(gè)向量,在垂直方向上連接(concatenate)。這樣會(huì)產(chǎn)生兩個(gè)矩陣,分別表示 Contex 和 Query。它們的高度是 。同時(shí),它們的長(zhǎng)度和之前的相同,Contex 的是
,Query 是
。
如果我們把一個(gè)輸入的向量 放到單層的神經(jīng)網(wǎng)絡(luò)中,在生成
的過程中,會(huì)經(jīng)過以下的過程:

在我們的 highway network 中,只有一小部分的輸入會(huì)被執(zhí)行上面的步驟;剩下的部分會(huì)不經(jīng)過轉(zhuǎn)換直接穿過 highway network。這個(gè)比例被一個(gè)權(quán)重 管理著,那么
就是 transform gate。這個(gè)
被使用
函數(shù)計(jì)算,通常是一個(gè)0到1之間的值。


這個(gè)網(wǎng)絡(luò)的主要作用是,調(diào)整 word embedding 和 character embedding 的相對(duì)貢獻(xiàn)。
這里面的邏輯是,當(dāng)我們遇到一個(gè) OOV 的單詞 "misunderestimate",我們就可以提高這個(gè)單詞 1D-CNN 表示的權(quán)重,因?yàn)檫@里識(shí)別到 GloVe 是一個(gè)隨機(jī)的沒有意義的值。另一方面,如果我們有一個(gè)普遍的不模糊的單詞 "table",我們就可以給 GloVe 的表示更高的權(quán)重。
這一步的輸出也是兩個(gè)矩陣,一個(gè)是 Context 矩陣(),另一個(gè)是 Query 矩陣(
)。他們分別代表了 Query 和 Contex 的混合表示。
步驟5: Contextual Embedding
對(duì)于我們的任務(wù),上面的對(duì)于文本的表示還不足夠。這里主要的原因是,上面的這些表示并沒有考慮到上下文的含義,我們需要把上下文的含義也表示在 Embedding 中。
這里有一個(gè)例子可以解釋為什么要這么做,比如說有一對(duì)單詞 "tear"(眼淚) 和 "tear"(撕扯),他們都是相同的拼寫,卻有著截然不同的含義,如果不把上下文考慮進(jìn)去,我們很難去對(duì)這兩者作區(qū)分。
因此,我們需要一個(gè)能夠理解單詞上下文的結(jié)構(gòu)。BiDAF 使用一個(gè)雙向的 LSTM(bi-LSTM).

這一步的輸出是兩個(gè)矩陣,一個(gè) Context 矩陣,另一個(gè) Query 矩陣。 分別使用 (
) 和
(
)來表示(這里的
不同于之前從卷積中獲得的矩陣
, 這里只是一個(gè)巧合)。
以上這些就是在 BiDAF 中所有關(guān)于 embedding 的部分,接下來我們會(huì)使用 Attention 把 Context 和 Query 進(jìn)行融合。
Attention Mechanism

之前的輸出, 表示 Context,
表示 Query。我們所有的 Attention 的目的,都是為了融合 Contex 和 Query 的信息,去創(chuàng)建幾個(gè)矩陣用來表示 Context 同時(shí)也能表示 Query 的信息。
步驟6: Formation of Similarity Matrix
這一步主要是生成一個(gè) Similarity 矩陣 ,這個(gè)矩陣的大小為
。這個(gè)矩陣的生成過程就是使用之前的
和
來做他們之間的關(guān)系。在這個(gè)矩陣的第
行和第
列就表示了第
個(gè) Context 單詞和第
個(gè) Query 單詞的相似度。
以下為一個(gè)例子:
Context: “Singapore is a small country located in Southeast Asia.” (T = 9)
Query: “Where is Singapore situated?” (J = 4)
他們生成的 Similarity Matrix 為下圖。

我們可以從上面這個(gè)矩陣?yán)镉^察到以下這些:
- 這個(gè)矩陣有
大小的維度,
是 Contex 的長(zhǎng)度,
是 Query 的長(zhǎng)度;
- 在行為1列為3的表格中,呈亮黃色,表示一個(gè)相對(duì)較高的值。這表明,這個(gè)單元格表示的 Query 單詞和 Contex 單詞相關(guān)度較高。這里我們可以看到,這兩個(gè)單詞其實(shí)都是一個(gè)單詞 "Singapore";
- 再看行為2列為2的表格,這里表示 Context 單詞 "is" 和相同的 Query 單詞 "is"。然而他們之間的值并沒有像 "Singapore" 一樣高。這是因?yàn)檫@個(gè)信息也會(huì)把周圍的信息加進(jìn)去,這些上下文的信息對(duì)于 "is" 尤其的重要。
- 另一方面,我們可以看到兩個(gè)差距很大的單詞 "situated" 和 "located" 也相對(duì)的高。這要感謝我們前面的 word embeding 和 character embedding 層。
接下來我們來看看這個(gè) 矩陣是怎么生成的。我們使用了一個(gè)叫做
的符號(hào)來表示這個(gè)比較函數(shù),這個(gè)
的函數(shù)要比普通的點(diǎn)乘更復(fù)雜,下面是
的等式:

由于 使用乘積對(duì)比一個(gè)的行向量和相等大小的列向量,所以他們的結(jié)果為一個(gè)標(biāo)量。
以下為所有的矩陣操作。

Similarity Matrix 會(huì)分別用來作接下來的兩步,Context-to-Query(C2Q) Attention 和 Query-to-Context(Q2C) Attention。
步驟7: Context-to-Query(C2Q) Attention
C2Q 的目的是找到哪個(gè) Query 單詞和 Context 單詞是最相關(guān)的。

對(duì)于 Similarity Matrix 首先進(jìn)行 row-wise 的 ,得到上面的矩陣
。這個(gè)矩陣的 size 和
相同。
通過觀察上圖,可以總結(jié):
- 語義相似度和上表高度相關(guān)。比如說 Contex words [“Singapore”, “is”, “l(fā)ocated”],和它們最相關(guān)的 Query Context 是 [“Singapore”, “is”, “situated”]。
- Context 單詞能夠 "理解" 被請(qǐng)求的 Query 單詞。我們可以看到,Query 單詞 "Where" 和 [“a”, “small”, “country”, “in” ,“Southeast”, “Asia”] Contex 單詞最相關(guān),這些單詞都和地理位置相關(guān)。
然后,我們就可以在 中得到每一行都是一個(gè) attention 的分布
(
)。
表示每個(gè) Query 單詞和第 t 個(gè) Context 單詞的相關(guān)程度。
有了這個(gè) attention 的分布 后,我們就可以使用 Query 的矩陣
來計(jì)算帶有權(quán)重的和值了。這一步的結(jié)果就是 attention 的 output,我們叫做
(
)。

這個(gè) 就好像
一樣,表示了 Question 。不一樣的是,
包含了更多的信息,包括每個(gè) Query 單詞和 Context 單詞之間的相關(guān)性。
步驟8: Query-to-Context(Q2C) Attention
Q2C 的目的是找到哪個(gè) Context 單詞和 Query 單詞最相關(guān),之后用來著重的回答 Query。

Similarity matrix S
首先,我們先找到 矩陣中每一行中的最大的值,得到一個(gè)列向量。這個(gè)列向量我們起名叫做
。我們來看看,這個(gè)列向量所代表的的含義是什么?
我們把注意力放到矩陣的第四行,表示單詞 "small"。我們可以看到,這一行上,沒有任何一個(gè)明亮的顏色的表格,這表示在 Query 單詞中沒有一個(gè)單詞和這個(gè)單詞相關(guān)。當(dāng)我們?nèi)∵@行的最大值時(shí),這個(gè)最大值接近 0 。
與上面的對(duì)比,我們?cè)倏?“Singapore” 和 “l(fā)ocated”,這兩行里都至少有一個(gè)明亮的顏色,表示 Context 單詞和 Query 單詞相近。當(dāng)我們?nèi)∽畲笾禃r(shí),這兩行的值都相對(duì)較高。
下面是一個(gè) 的例子:

在 Q2C 中, 中的值表示我們的 attention value, 我們可以對(duì)
應(yīng)用
得到一個(gè) attention 的分布
,然后可以使用這個(gè)
和 Contex Matrix
計(jì)算一個(gè)權(quán)重加權(quán)的和,這個(gè)的輸出為
(
)。
Q2C 的最后一步是復(fù)制粘貼
次,并且把這些至合并成一個(gè)
大小的
。
是另一個(gè) Context 的表達(dá),這里融合了在 Context 單詞中和 Query 單詞相關(guān)性最高單詞的信息。

步驟9: “Megamerge”
在這一步,我們要把 Contextual Embedding、C2Q 和 Q2C 的結(jié)果進(jìn)行合并,得到一個(gè)大的矩陣 。
這里我們主要要用到的矩陣有:
-
: 原始的 Contextual Embedding Matrix
-
: Context matrix 聚合了每個(gè) Query 單詞和每個(gè) Context 單詞相關(guān)性信息
-
: Context matrix 聚合了 Context 單詞中和 Query 單詞相關(guān)性最高單詞的信息。
并且這三個(gè)矩陣都有相同的大小 。
但是很遺憾的是,我們并不能簡(jiǎn)單的對(duì)他們進(jìn)行堆疊來完成 的獲取。這里我們需要另一個(gè)函數(shù)
:

這里我們定義 是
的第 t 列向量,相當(dāng)于是第 t 個(gè) Context 單詞。
。最后
的大小為
。

這個(gè) 矩陣包含了
、
、
中的所有信息,所以可以理解為
中的每一個(gè)列向量都表示一個(gè) Context 單詞。
一個(gè)關(guān)于小黃人的故事

An example of G. The length of the matrix, T, equals the number of words in the Context (9 in this example). Its height is 8d; d is a number that we preset in the word embedding and character embedding steps.
讓我們把在 Context 中的所有單詞都想象成一排小黃人。

每一個(gè)小黃人都有一個(gè)大腦,但是這個(gè)大腦的容量只夠存儲(chǔ) 大小的列向量。

小黃人的大腦并不是一直都是這么滿的,實(shí)際上,在他們剛出生的時(shí)候,他們的大腦相當(dāng)?shù)目?。我們來看看,他們是怎么得到這些知識(shí)的。
首先他們會(huì)上兩節(jié)課,一節(jié) "Word Embedding" 和一節(jié) "Character Embedding"。在這些課程中,小黃人學(xué)會(huì)了他們自己的身份。Prof. GloVe 交給他們一些關(guān)于他們身份的基礎(chǔ)信息,"Character Embedding" 課堂是一節(jié)解剖課,他們了解了自己身體的結(jié)構(gòu)。
下面這張圖是 ”Singapore“ 小黃人在學(xué)會(huì)著兩節(jié)課后,大腦獲取到的信息。

接下來,小黃人被送去上 "Contextual Embedding" 課程。這節(jié)課是一節(jié)對(duì)話課,在課上小黃人必須要其他的小黃人通過一個(gè)叫做 bi-LSTM 的設(shè)備對(duì)話,在對(duì)話中他們會(huì)互相交流在前面課上學(xué)到的關(guān)于自己的信息。

在這里他們學(xué)會(huì)了更多,知道了他們的鄰居。

我們的小黃人快樂的學(xué)習(xí),直到他們突然遇到了男人闖入了他們的學(xué)校。這個(gè)男人的名字叫 Mr. Query,這個(gè)人是一個(gè)旅行家。

The inquisitive Mr. Query. He has an urgent question —”Where is Singapore situated” — and he knows some of our Minions hold relevant information for this question.
Mr. Query 為了寫一篇文章,非常急切的想要收集一些信息,他想知道"where is Singapore situated."。Mr. Query 知道一些小黃人把這些信息記在他們的大腦里。
我們的小黃人,非常的樂于助人,想要幫助我們的 Mr.Query。為了幫助他,他們需要選出來他們 team 中的成員去和 Mr. Query 見面,并且告訴他他要尋找的信息。那些知道 Mr. Query 問題答案的小黃人可以加入一個(gè)叫做 Answer 的組織。

現(xiàn)在,我們的小黃人有個(gè)任務(wù)去做 — 就是他們要找到,誰應(yīng)該加入這個(gè)叫做 Answer 的組織。他們應(yīng)該非常小心的做這件事情。如果他們遺漏了很多小黃人的話,Mr. Query 就不能獲得所有他想知道的信息了。這種情況,我們叫做 Low Recall,Mr. Query 非常討厭這樣。
另一方面,如果有太多不是必要的小黃人加入到這個(gè) Answer 組織的話,Mr. Query 就獲取了過多的信息。他把這種情況叫做 Low Precision,并且他也不喜歡這樣。
所以,小黃人怎么才能知道哪些應(yīng)該加入這個(gè) Answer 的團(tuán)隊(duì)呢?
答案就是,他們組織了很多的見面的環(huán)節(jié),管它叫做 "Attention"。在這些見面環(huán)節(jié),每個(gè)小黃人都會(huì)和 Mr. Query 單獨(dú)的見面,并且理解他的需求。也可以說是 "the Attention sessions allow the Minions to measure their importance to Mr. Query’s question."
下面是小黃人的 MRI 掃描圖片。

正如我們看到的,我們小黃人的大腦現(xiàn)在已經(jīng)相當(dāng)?shù)臐M了。有了這些知識(shí),他們可以開始選擇那些人加入 Answer 這個(gè)團(tuán)隊(duì)了嗎? 其實(shí)還不行,他們還缺少一個(gè)很重要的信息。每一個(gè)小黃人知道了他自己對(duì)于 Mr. Query 的重要性。但是,在做重要決定之前,他們還需要他們彼此對(duì)于 Mr. Query 的重要性。
也許你已經(jīng)猜到了,小黃人之間需要再進(jìn)行一些溝通。再次使用 bi-LSTM 裝置進(jìn)行溝通。

The Minions during the modeling step meeting. Here, they talk to each other through bi-LS? and share their relative importance to Mr. Query.
這一步就是下面一部分要說的 "Modeling Step"。
Modeling and Output Layers
步驟10: Modeling Layer
Modeling Layer 由兩層 bi-LSTM 組成。就像上面提到的,Model Layer 的輸入是 矩陣,第一個(gè) bi-LSTM 層把
轉(zhuǎn)換成一個(gè)
的矩陣,叫做
。
然后 會(huì)作為第二個(gè) bi-LSTM 的輸入,并且把它轉(zhuǎn)換成一個(gè)
的矩陣
。

和
是另一個(gè) Context Words 的表示,
、
和之前的 Context 表示不同的地方在于
和
嵌入了整個(gè) Context 段落和 Query 的信息。
這表示,此時(shí)我們的小黃人已經(jīng)有了所有需要去做誰該加入 Answer 團(tuán)隊(duì)的信息。

The “Singapore” guy now has all he needs to decide if he should join the Answer Gang.
步驟11: Output Layer
對(duì)于每一個(gè)在上下文中的單詞,我們已經(jīng)得到了兩個(gè)數(shù)值型向量編碼了單詞對(duì)于 Query 的相關(guān)性。我們要做的最后的事情,就是要把這些值轉(zhuǎn)化為兩個(gè)概率值,我們可以比較哪些是和我們 Query 相關(guān)的 Context。
在輸出層,首先對(duì) 、
和
在垂直方向上進(jìn)行 concat,組合成
和
。他們的大小都是
。
然后我們通過下面的公式,獲取 ,對(duì)于整個(gè) Context 起始位置索引的概率分布。

相似的,我們獲取 ,對(duì)于整個(gè) Context 結(jié)束位置索引的概率分布。


和
就能找到最佳的答案片段。最佳答案的片段就是簡(jiǎn)單的 Context 的一個(gè)子串,這個(gè)子串應(yīng)該是有最高的一個(gè) span score 值。 span score 值就等于
到
間概率的乘積。
Context: “Singapore is a small country located in Southeast Asia.” (T = 9)
Query: “Where is Singapore situated?” (J = 4)

p1 values for our example

p2 values indicate the probability of the words being the last word of the Answer span
我們答案的片段就是 "Asia"。
如果我們得到的是一段的區(qū)間,則我們需要每種情況的概率。
- Possible answer span: “Singapore” ; span score: 0.0000031
- Possible answer span: “Singapore is” ; span score: 0.00000006
- Possible answer span: “Singapore is a” ; span score: 0.0000000026
- Possible answer span: “Singapore is a small” ; span score: 0.0000316
