模型結構與原理
1. 基於CNN的句子建模網絡
這篇論文主要針對的是句子匹配(Sentence Matching)的問題,可是基礎問題仍然是句子建模。首先,文中提出了一種基於CNN的句子建模網絡,以下圖:函數
圖中灰色的部分表示對於長度較短的句子,其後面不足的部分填充的全是0值(Zero Padding)。能夠看出,模型解決不一樣長度句子輸入的方法是規定一個最大的可輸入句子長度,而後長度不夠的部分進行0值的填充;圖中的卷積計算和傳統的CNN卷積計算無異,而池化則是使用Max-Pooling。url
- 卷積結構的分析
下圖示意性地說明了卷積結構的做用,做者認爲卷積的做用是從句子中提取出局部的語義組合信息,而多張Feature Map
則是從多種角度進行提取,也就是保證提取的語義組合的多樣性;而池化的做用是對多種語義組合進行選擇,過濾掉一些置信度低的組合(可能這樣的組合語義上並沒有意義)。spa
2. 基於CNN的句子匹配模型.net
下面是基於以前的句子模型,創建的兩種用於兩個句子的匹配模型。code
2.1 結構I排序
模型結構以下圖:ip
簡單來講,首先分別單獨地對兩個句子進行建模(使用上文中的句子模型),從而獲得兩個相同且固定長度的向量,向量表示句子通過建模後抽象得來的特徵信息;而後,將這兩個向量做爲一個多層感知機(MLP)的輸入,最後計算匹配的分數。get
這個模型比較簡單,可是有一個較大的缺點:兩個句子在建模過程當中是徹底獨立的,沒有任何交互行爲,一直到最後生成抽象的向量表示後纔有交互行爲(一塊兒做爲下一個模型的輸入),這樣作使得句子在抽象建模的過程當中會喪失不少語義細節,同時過早地失去了句子間語義交互計算的機會。所以,推出了第二種模型結構。數學
2.2 結構II
模型結構以下圖:
圖中能夠看出,這種結構提早了兩個句子間的交互行爲。
- 第一層卷積層
首先從Sentence x中任取一個向量xa,再從Sentence y中將每個向量和xa進行卷積操做
同理以上操做,將兩個句子中全部的向量兩兩組合,構成2D向量,構成Layer-2。下面給出數學形式化表述:
- 第一層卷積層後的Max-Pooling層
從而獲得Layer-2,而後進行2×2的Max-pooling:
- 後續的卷積層
後續的卷積層均是傳統的二維卷積操做,形式化表述以下:
- 二維卷積結果後的Pooling層
與第一層卷積層後的簡單Max-Pooling方式不一樣,後續的卷積層的Pooling是一種動態Pooling方法,這種方法來源於參考文獻[1]。
- 結構II的性質
- 保留了詞序信息;
- 更具通常性,實際上結構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的優點仍是較大的。