1. 程式人生 > >《Convolutional Neural Network Architectures for Matching Natural Language Sentences》

《Convolutional Neural Network Architectures for Matching Natural Language Sentences》

cnn min 自定義 分析 map atom 優勢 code 解決

模型結構與原理

1. 基於CNN的句子建模

這篇論文主要針對的是句子匹配(Sentence Matching)的問題,但是基礎問題仍然是句子建模。首先,文中提出了一種基於CNN的句子建模網絡,如下圖:

技術分享圖片

圖中灰色的部分表示對於長度較短的句子,其後面不足的部分填充的全是0值(Zero Padding)。可以看出,模型解決不同長度句子輸入的方法是規定一個最大的可輸入句子長度,然後長度不夠的部分進行0值的填充;圖中的卷積計算和傳統的CNN卷積計算無異,而池化則是使用Max-Pooling。

  • 卷積結構的分析

下圖示意性地說明了卷積結構的作用,作者認為卷積的作用是從句子中提取出局部的語義組合信息,而多張Feature Map

則是從多種角度進行提取,也就是保證提取的語義組合的多樣性;而池化的作用是對多種語義組合進行選擇,過濾掉一些置信度低的組合(可能這樣的組合語義上並無意義)。

技術分享圖片

2. 基於CNN的句子匹配模型

下面是基於之前的句子模型,建立的兩種用於兩個句子的匹配模型。

2.1 結構I

模型結構如下圖:

技術分享圖片

簡單來說,首先分別單獨地對兩個句子進行建模(使用上文中的句子模型),從而得到兩個相同且固定長度的向量,向量表示句子經過建模後抽象得來的特征信息;然後,將這兩個向量作為一個多層感知機(MLP)的輸入,最後計算匹配的分數。

這個模型比較簡單,但是有一個較大的缺點:兩個句子在建模過程中是完全獨立的,沒有任何交互行為,一直到最後生成抽象的向量表示後才有交互行為(一起作為下一個模型的輸入),這樣做使得句子在抽象建模的過程中會喪失很多語義細節,同時過早地失去了句子間語義交互計算的機會。因此,推出了第二種模型結構。

2.2 結構II

模型結構如下圖:

技術分享圖片

圖中可以看出,這種結構提前了兩個句子間的交互行為。

  • 第一層卷積層

第一層中,首先取一個固定的卷積窗口k1k1,然後遍歷 SxSx 和 SySy 中所有組合的二維矩陣進行卷積,每一個二維矩陣輸出一個值(文中把這個稱作為一維卷積,因為實際上是把組合中所有詞語的vector排成一行進行的卷積計算),構成Layer-2。下面給出數學形式化表述:

技術分享圖片

  • 第一層卷積層後的Max-Pooling層

從而得到Layer-2,然後進行2×2的Max-pooling:

技術分享圖片

  • 後續的卷積層

後續的卷積層均是傳統的二維卷積操作,形式化表述如下:

技術分享圖片

  • 二維卷積結果後的Pooling層

與第一層卷積層後的簡單Max-Pooling方式不同,後續的卷積層的Pooling是一種動態Pooling方法,這種方法來源於參考文獻[1]。

  • 結構II的性質
  1. 保留了詞序信息;
  2. 更具一般性,實際上結構I是結構II的一種特殊情況(取消指定的權值參數);

實驗部分

1. 模型訓練及參數

  • 使用基於排序的自定義損失函數(Ranking-based Loss)
  • BP反向傳播+隨機梯度下降;
  • mini-batch為100-200,並行化;
  • 為了防止過擬合,對於中型和大型數據集,會提前停止模型訓練;而對於小型數據集,還會使用Dropout策略;
  • Word2Vector:50維;英文語料為Wikipedia(~1B words),中文語料為微博數據(~300M words);
  • 使用ReLu函數作為激活函數;
  • 卷積窗口為3-word window;
  • 使用Fine tuning;

2. 實驗結果

一共做了三個實驗,分別是(1)句子自動填充任務,(2)推文與評論的匹配,以及(3)同義句識別;結果如下面的圖示:

技術分享圖片

技術分享圖片

技術分享圖片

其實結構I和結構II的結果相差不大,結構II稍好一些;而相比於其他的模型而言,結構I和結構II的優勢還是較大的。

《Convolutional Neural Network Architectures for Matching Natural Language Sentences》