- 發表時間:2015
- 論文鏈接:https://arxiv.org/pdf/1512.05193.pdf
- 開源代碼:https://github.com/galsang/ABCNN (tensorflow) https://github.com/lsrock1/abcnn_pytorch (pytorch)
- 代碼語言:python
- 適用: Answer Slection(AS) paraphrase identification (PI) textual entailment (TE)
BCNN: Bi-CNN
介紹ABCNN之前,要先介紹BCNN,該網絡是基於孿生網絡,包括了兩個權重共享(weight-sharing)的CNN網絡,每個CNN網絡處理一個句子,最後的層處理句子對(sentence pair)任務. 其結構如下所示:
輸入層: 如上圖,假設有兩個句子,分別含有5個詞和7個詞(實際應用中要將所有句子通過補padding,補成一樣長度s,圖中爲了理解,按照不同長度展示),通過word embedding可以將每個詞表示爲一個維的向量,則輸入爲.
卷積層: 卷積核在時間維(長度s)的大小設爲w,則在進行卷積操作時,在輸入矩陣的左右各補(w-1)列,輸入矩陣變爲(batchsize, 1, , s+2(w-1)),然後卷積操作的卷積核大小設置爲(, w),濾波器數目爲, 激活函數採用tanh,卷積操作後feature map爲(batchsize, N, 1, s+w-1), 交換維度成(batchsize, 1, N, s+w-1).
均值池化層: 從上圖可以看出,池化層包括兩種, 和,對於輸出層,採用:對所有列求均值,feature map大小變爲(batchsize, N), 即每個句子用一個N維向量表示,再對兩個句子對應的N維向量經過某些操作來獲取句子對任務得分; :pooling層kernel大小爲(1, w),feature map變爲(batchsize, 1, N, s),該feature map用於送入下一卷積層.
輸出層: 根據具體任務進行選擇,如二分類任務,輸出層可以爲邏輯迴歸層.
ABCNN: Attention-Based CNN
ABCNN顧名思義就是在BCNN的基礎上添加註意力機制,本文提出三種注意力機制:ABCNN-1, ABCNN-2, ABCNN-3.
ABCNN-1: 採用注意力特徵矩陣來影響卷積, 是對卷積層的輸入feature map進行操作的,的第行表示卷積層輸入的左feature map的第個單元(長度爲5的有5個單元)與右feature map每個單元的注意力分佈,按Figure 3(a)舉例, 爲了便於理解,左右兩個句子長度按照5和7不同長度介紹,此時矩陣 , 的第1行第1列表示左句子第一個詞和右句子第一個詞的注意力分佈(匹配度), 第1行第2列表示左句子第一個詞和右句子第二個詞的注意力分佈(匹配度). 接下來看一下其數學表達式:
假設左右兩個feature map分別爲 和 , 則:
論文中表示兩個向量間的歐式距離, 基於此注意力特徵矩陣,生成兩個注意力feature map:
其中, ,他們是網絡要學習的參數,和表現爲Figure 3中的紅色矩陣,然後將和作爲兩個channel構成新的feature map送入卷積層.
ABCNN-2: 由上述介紹可以知道,ABCNN-1在卷積層的輸入上計算注意力權重,旨在改善卷積計算的feature map,接下來介紹的ABCNN-2是在卷積的輸出上計算注意力權重,旨在reweighting卷積層的輸出.
注意力矩陣中的行列意義和ABCNN-1相同, 表示左句子中第j個單元的注意力權重,表示右句子中第j個單元的注意力權重, (和BCNN中卷積層的輸出對應上了)爲卷積層輸出, 則新的feature map 的第列通過w-ap產生:
結合Figure 3(b)來理解一下這個公式,只看左側(右側同理),卷積輸出feature map 大小爲 ,, 看一下7 = 5+3-1(s+w-1),跟BCNN卷積層中的講解相對應,左側中間虛框的向量則爲, , 則新feature map矩陣的第一列是由卷積輸出feature map矩陣的前三列乘以對應前三個加權值的和, 可以看成是一個的滑動窗, 步長爲1, 第二列 ,以此類推得到新feature map矩陣,大小爲,當卷積層filters數目N與輸入feature map的H(每個詞的向量維度)相同時,卷積層輸入和輸出尺度相同,這就使得可以堆疊多個這樣的卷積-池化塊來提取特徵.
ABCNN-3: 該注意力機制是結合了ABCNN-1和ABCNN-2兩種.
實驗
設置
在三個任務上進行實驗驗證:AS PI TE
word Embedding通過word2vec初始化,維度爲300,訓練過程中word Embedding不變,其他參數隨機初始化, k-1個卷積-池化塊堆疊進行特徵提取,最後輸出採用邏輯迴歸層,邏輯迴歸層的輸入爲k個consine相似度得分,每個卷積層輸出的feature map進行all-ap,左右兩個all-ap輸出向量求cosine相似度, 一共有k-1個cosine相似度得分,第一層卷積的輸入也進行相同操作求cosine相似度,所以一共得到k個相似度得分,這k 個相似度得分堆疊成一個一維向量,送入全連接層(權重) .
結果
- AS任務
one-conv表示一個卷積-池化塊, two-conv表示兩個卷積-池化塊. - PI任務
- TE任務