利用雙向注意流進行機器理解
本文基于Bi-Directional Attention Flow For Machine Comprehension一文
1. 概述
Machine Comprehension也就是機器理解践惑, 簡記為MC界弧, 針對給定的一個上下文须鼎, 回答一個問題, 這需要我們對復(fù)雜的交互過程進行建模够坐, 近來萄唇, 注意力機制(Attention Mechanisms)成功對MC作出了擴展檩帐, 特別是使用注意力機制來關(guān)注上下文并且最后生成一個固定大小的向量。 在該篇文章中另萤, 介紹了BIDAF(雙向注意流)網(wǎng)絡(luò)湃密, 一個多階段層次化的過程, 可以將上下文表現(xiàn)于不同的粒度之上四敞, 使用雙向注意流來獲取一個問題-察覺(query-aware)的上下文的表示方法泛源, 而不是過早的對上下文進行概要
2. 介紹
近年來, MC和QA(問題回答)的關(guān)注程度逐漸增強忿危, 特別是NLP(自然語言處理)和計算機視覺达箍, 端到端訓(xùn)練的系統(tǒng)在對于文本和圖像的多種任務(wù)中表現(xiàn)出色, 其中一個重要的因素就是使用了注意力機制铺厨, 該種技術(shù)可以使得系統(tǒng)關(guān)注于一個目標區(qū)域于上下文段落中缎玫, 或者是一張圖片中(特別是視覺問答領(lǐng)域), 這里我們給出注意力機制的一些特性:
- 計算好的注意力權(quán)重通常被用來從上下文向量中抽取最為相關(guān)的信息解滓, 上下文向量是通過某種歸納映射得到的固定大小的向量赃磨。
- 文本領(lǐng)域中, 整個注意力機制是暫時性的洼裤, 動態(tài)化的邻辉, 當前時間步的注意力權(quán)值是之前時間步注意力的一個映射結(jié)果
- 整個機制通常是單向的
這篇文章中主要介紹了雙向注意流網(wǎng)絡(luò)(BIDAF network), 一種層次化的多階段的結(jié)構(gòu)腮鞍, 在不同粒度等級上對上下文進行建模恩沛, BIDAF主要包括對字符粒度等級(Character Level)和詞粒度水平(Word Level), 并且使用雙向注意流來獲取問題-察覺的上下文的表示方法缕减。
提出來的新的注意力機制對于之前熱門的注意力機制有以下幾點提升:
- 我們的注意力層并不用于將上下文映射到一個固定大小的向量, 反而是芒珠, 注意力在每一個時間步都會計算桥狡, 以及每一個時間步的伴隨向量(Attend Vector)連同著先前層的表示, 都被允許流向后來的模型層皱卓, 這樣的方法就減少了過早將上下文映射成固定大小的向量所帶來的誤差裹芝。
- 使用少內(nèi)存(Memory-less)的注意力機制, 即娜汁, 我們每一次迭代計算的時候嫂易, 每一個時間步的注意力僅是當前問題和上下文的一個函數(shù)得出的結(jié)果, 并不直接依賴于先前時間步的注意力掐禁, 我們猜想這種簡化可以減輕注意力層(attention layer)到模型層(model layer)的計算負載怜械, 使得注意力層關(guān)注于學(xué)習(xí)問題和上下文之間的注意力颅和, 這同時使得模型層可以從問題-察覺的上下文表達(實質(zhì)上是注意力層的輸出)中學(xué)習(xí)到某種復(fù)雜的交互邏輯。
- 使用雙向注意力機制缕允, 能夠產(chǎn)生更為完整的信息峡扩。
3. 關(guān)于模型
整個機器理解模型是一個層次化多階段的過程, 包括以下六個層次:
-
字符嵌入層(Character embedding layer)
其主要作用是將詞映射到一個固定大小的向量障本, 這里我們使用字符水平的卷積神經(jīng)網(wǎng)絡(luò)(Character level CNN)教届, 該網(wǎng)絡(luò)由Kim在2014年提出, 我們后續(xù)會對部分細節(jié)進行補充驾霜。 -
詞嵌入層(Word embedding layer)
這里是使用預(yù)先訓(xùn)練的詞嵌入模型案训, 將每一個詞映射到固定大小的向量。 -
上下文嵌入層(Contextual embedding layer)
主要作用是給每一個詞加一個上下文的線索(cue)粪糙, 前三層都是對問題和上下文進行應(yīng)用 -
注意流層(Attention flow layer)
這里是組合問題和上下文的向量强霎, 生成一個問題-察覺的特征向量集合。 -
模型層(Modeling layer)
本文是使用循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)來對上下文進行掃描 -
輸出層(Output layer)
該層提供對問題的回答
這里我們給出相應(yīng)的層次結(jié)構(gòu)圖
[圖片上傳失敗...(image-68105-1553264153682)]
我們來繼續(xù)討論其中每一層更多的細節(jié)
3.1 字符嵌入層
字符嵌入層的作用主要在于將一個詞映射到高維的向量空間之中猜旬,我們令 和
代表上下文的詞集合和問題的詞集合脆栋, 這兩者都是有序的, 利用Kim的字符水平的CNN方法洒擦, 我們可以獲得對應(yīng)的字符水平的嵌入向量椿争, 多個字符被嵌入成一個向量, 理解成CNN的一維輸入熟嫩, 大小和CNN輸入的大小一致秦踪, CNN的輸出被max-pool, 最終得到一個固定長度的向量掸茅。
我們有必要對Kim這個方法進行介紹
3.1.1 關(guān)于字符水平的CNN方法
我們首先給出Kim論文中的整套網(wǎng)絡(luò)結(jié)構(gòu)圖椅邓, Kim是使用這套結(jié)構(gòu)做文本分類的
[圖片上傳失敗...(image-678fe1-1553264153682)]
輸入一共有n個詞, 每一個詞都是k維的詞向量昧狮, 這里我們記, 其中
是向量的連接操作景馁, CNN的卷積操作就是利用一個過濾器
, 實際上就是利用一個h大小的窗口來進行移動逗鸣, 如上圖所示合住, 紅色窗口就是h=2的一個窗口, 從上到下對所有的詞進行掃描撒璧, 這里我們給出計算方法:
向量c對應(yīng)著上圖的第二部分的一個長條透葛, , 函數(shù)
是一個非線性函數(shù)卿樱, 類似于雙曲正切瀚函數(shù)tanh僚害。
接下去我們就可以根據(jù)多個窗口大小來構(gòu)造一系列的特征向量, 如上圖所示繁调, 接著就是經(jīng)過Max-over-time pooling萨蚕, 生成一個一維向量靶草, 向量的大小等于不同窗口的個數(shù)。
關(guān)于Max-over-time pooling
該方法是Collobert在2011年提出來的门岔, 原理十分簡單爱致, 就是取特征向量的最大值
目的就是獲取最大的特征值于特征向量之中
整個pooling的做法目的其實有一部分是為了將變長的輸入變成定長, 我規(guī)定有幾個窗口寒随, 最后就會得到幾維的向量糠悯。
最后將最大池化后的向量結(jié)構(gòu)全連接到一個層上, 加上dropout妻往, 然后softmax輸出互艾, 最后得到文本所屬不同類別的概率。
回到這篇文章中來讯泣, 我們使用kim的方法就可以將變長文本輸入纫普, 轉(zhuǎn)變?yōu)橐粋€定長的向量了!
3.2 詞嵌入層
詞嵌入層和字符嵌入層一樣好渠, 都是將詞映射到一個高維的特征向量的空間昨稼, 這里我們使用預(yù)先訓(xùn)練好的詞向量(采用GloVe), 來獲得定長的詞嵌入向量(和字符嵌入層的作用基本相同拳锚, 將變長的文本轉(zhuǎn)換成定長的向量)假栓,這里最為關(guān)鍵的點就是Pennington在2014年提出來的GloVe, 一種詞向量的表示方法霍掺。
3.2.1 關(guān)于GloVe
GloVe全稱為Global Vector For Word Representation匾荆, 該方法結(jié)合了全局矩陣分解方法(global matrix factorization)以及局部上下文窗口方法(local context window)的優(yōu)點, 我們來仔細說明一下該方法
首先我們需要定義一些符號:
-
詞到詞的協(xié)出現(xiàn)矩陣
其中對于每一個元素杆烁, 表示詞
在詞
的上下文中出現(xiàn)的次數(shù)
-
單個詞的元素
我們定義牙丽, 表示所有詞在詞
的上下文中出現(xiàn)的次數(shù)
-
概率
我們定義概率, 代表詞
出現(xiàn)在詞
的上下文的概率
舉一個例子吧兔魂, 我們現(xiàn)在對句子進行分詞烤芦, 得到了ice(冰)和steam(蒸汽)兩個詞, 然后我們計算一下概率析校, 比如在這兩個詞的上下文中构罗, 某個詞k = solid(固體)等出現(xiàn)的概率, 使用大量的數(shù)據(jù)來進行計算勺良, 我們得到
[圖片上傳失敗...(image-faa887-1553264153682)]
可以看出來, 如果的值遠大于1, 則趨于ice的上下文骄噪, 遠小于1則是更趨向于steam的上下文尚困, 可以看到gas更趨向于steam, 而solid更趨于在ice的上下文中出現(xiàn)链蕊。
通過這個方法事甜, 我們利用gas和solid比起利用water和fashion更加可以區(qū)分開ice和steam了谬泌, 進而我們可以構(gòu)造出一個更具有區(qū)別性的詞向量。
給出一個更加一般的模型:
其中是一個d維的詞向量逻谦, 而
是一個d維的分離上下文詞向量(separate context word vector)掌实, 等式的右端是通過語料庫進行抽取的, F可能依賴于某種未確定的參數(shù)邦马, 但是F這樣的概率值太多了贱鼻, 我們這里給出一種選擇方案:
- 我們希望F能夠表達P的概率比值于詞向量空間, 由于詞向量是線性結(jié)構(gòu)滋将, 故考慮向量的差邻悬, 記
- F可能使用復(fù)雜的函數(shù)作為參數(shù), 比如神經(jīng)網(wǎng)絡(luò)随闽, 這樣會使整個線性結(jié)構(gòu)變得復(fù)雜父丰, 我們作出以下修改
- 進一步修改
其中 - 令F是指數(shù)函數(shù), 得
- 加上偏置掘宪, 由于
實際和k無關(guān)蛾扇, 在偏置的吸收下, 得到
- 給出代價函數(shù)镀首, 使用加權(quán)最小二乘回歸模型解決
這里需要對作出部分限定
a.
b.是非遞減的函數(shù)
c. 對于較大的x栏赴, 應(yīng)該呈現(xiàn)較小的函數(shù)值
給出函數(shù)定義:
3.2.2 向量拼接輸入
通過兩個過程我們可以的得到蘑斧, 字符水平的嵌入以及詞水平的嵌入。利用Sirivastava在2015年的時候提出來的雙層高速網(wǎng)絡(luò)须眷, 得到d維度的向量竖瘾, 相當于得到兩個矩陣, 花颗, 我們之前得到T維和J維的詞序列的每一個詞都被轉(zhuǎn)換成d維的向量捕传。
3.3 上下文嵌入層
利用1997年Sepp Hochreiter 和 Jurgen Schmidhuber提出來的長短時記憶單元(LSTM)網(wǎng)絡(luò), 我們將LSTM雙向放置扩劝, 并將輸出連接起來庸论, 有兩個矩陣, 之所以是2d是因為LSTM是雙向的棒呛, 對應(yīng)位置是有兩個輸出的
3.4 注意流層
注意流層的作用在于在問題和上下文之間連接和熔斷聂示, 和先前其他的注意力機制不一樣, 并不是直接利用上下文和問題直接組成特征向量簇秒, 反而是鱼喉, 每一個時間步的注意力向量, 以及先前層的嵌入向量, 被允許流向模型層扛禽, 降低了過早組合成特征向量所造成的誤差锋边。
該層的輸出也就是關(guān)于上下文的問題-察覺向量表示, 以及先前層的上下文嵌入向量编曼。
在這一層豆巨, 引入共享的相似度矩陣S,S的大小是T乘以J掐场,其中往扔, 代表上下文的第t個詞和問題的第j個詞的相似度,
是一個可訓(xùn)練的函數(shù)刻肄, 計算出H的t列和U的j列之間的相似度瓤球。
定義, 其中w是一個6d維度的可訓(xùn)練的權(quán)值向量敏弃,
就是對應(yīng)元素乘積
我們通過兩個方向進行計算注意力向量以及伴隨向量:
3.4.1 從上下文到問題
上下文到問題的注意力卦羡, 對于每一個上下文詞特別相關(guān), 我們定義一個J維度的向量來表示麦到, 上下文的第t個詞對問題的注意力權(quán)值绿饵, 注意到
, 其中有
, 由此我們可以定義伴隨向量
很容易理解, 也就是拿對應(yīng)context的相似度向量(也就是S的第t行)做softmax操作瓶颠,
是一個2d乘T的矩陣
3.4.2 從問題到上下文
從問題到上下文的注意力拟赊, 也就是當上下文的詞和問題的某個詞相似度最高, 那么就有可能是問題回答的關(guān)鍵粹淋。
定義, 可得到2d大小的伴隨上下文向量
也利用上下文中最為關(guān)鍵的詞產(chǎn)生伴隨上下文向量吸祟, 進行T次運算可得到相應(yīng)的
3.4.3 上下文嵌入向量的生成
我們將上下文嵌入和注意力向量合并到了G之中, G的每一列就是對上下文的每一個詞的問題-察覺表達桃移, 給出G的計算方法:
其中就是第t列向量屋匕, 其中
可以是一個可訓(xùn)練的函數(shù), 可以是一個神經(jīng)網(wǎng)絡(luò)借杰, 這里給出定義:
這里是輸出為8d維度
3.5 模型層
模型層很簡單过吻, 就是一個簡單的雙向LSTM, 用于抽取特征蔗衡, 注意到LSTM的輸入輸出對應(yīng)關(guān)系可以是n對m纤虽, 也就是對于每一個單元的輸入是8d, 輸出可以選取前d個绞惦, 這里的輸出定義為d大小
由于是雙向的逼纸, 我們便可以得到一個2d乘T的一個矩陣, 直接輸入到輸出層進行答案的判斷济蝉。
3.6 輸出層
3.6.1 關(guān)于訓(xùn)練
對于QA問題而言杰刽, 我們需要一段文本之中找到可能的回答呻纹, 也即是去推測出來回答的開始和結(jié)束的位置。
對于開始位置的概率分布:
是一個10d維度的可訓(xùn)練的權(quán)值向量
我們將M傳到另一個LSTM之中獲得另一個矩陣专缠, 記, 同樣是2d乘T的矩陣
對于結(jié)束位置的概率分布:
最后定義誤差函數(shù):
其中和
是正確的開始和結(jié)束的索引
3.6.1 關(guān)于測試
測試的話只需要利用動態(tài)規(guī)劃在線性時間內(nèi)計算出概率最大的(k, l)對淑仆, 對應(yīng)概率也就是
4. 參考文獻
[1] Seo M, Kembhavi A, Farhadi A, et al. Bidirectional attention flow for machine comprehension[J]. arXiv preprint arXiv:1611.01603, 2016.
[2] Pennington, Jeffrey, Richard Socher, and Christopher Manning. "Glove: Global vectors for word representation." Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP). 2014.
[3] Kim, Yoon. "Convolutional neural networks for sentence classification." arXiv preprint arXiv:1408.5882 (2014).