《A Convolutional Neural Network for Modelling Sentences 》閱讀筆記
本文介紹了一種用DCNN對句子語義建模,模型採用動態的K——max pooling(取出得分top k的特徵值),處理不同長度的句子,不依賴於解析樹並且適用於任何語言。模型的目的是為了表示句子的語義用來之後的分類或生成。
單個句子很難被學習到,模型通過從句子中經常出現的單詞或短句的特徵提取出句子的特徵。
上圖就是一個動態CNN處理輸入句子的過程,卷積filters的寬度是2和3,通過動態pooling,可以在高層獲取句子中相離較遠詞語間的聯繫。
DCNN模型
1 寬卷積
寬卷積的輸出使feature map 的寬度更寬
2 K-max pooling
給定一個K值和一個序列P,選擇序列P中得分最大的前k個特徵值組成的子序列,並且保留原來序列的次序。
好處在於提取了句子中不止一個的重要信息,保留了它們的相對位置。並且由於最後的卷積層只需提取K個值,所以允許不同長度的輸入,只要大於K。
3 動態K—max pooling
K和k分別是輸入句子長度和網路深度兩個參數的函數
l是當前卷積層的層數,L是網路中總共卷積層的層數,Ktop為最頂層對應的K值,是固定值,s是句子的長度。例如網路中有3個卷積層,Ktop=3,s=18,第一層卷積層下面的pooling參數K1=12,K2=6,K3=3。
它的意義在於,從不同長度的句子中提取出相應數量的語義特徵信息,以保證後續的卷積層的統一性。比如,在情感預測中,首要特徵所對應的單詞提取出K1個,次要特徵提取出k2個單詞。
4 非線性特徵函數
Pooling層與下一個卷積層之間,是通過與一些權值參數相乘後,加上某個偏置參數而來,與傳統的CNN是一樣的。
5 多個feature map
與傳統CNN一樣,會提取出多個featured map以保證提取特徵的多樣性。
6 摺疊操作
之前的寬卷積是在輸入矩陣d×s中的每一行內進行計算操作,其中d是word vector的維數,s是輸入句子的詞語數量。而Folding操作則是考慮相鄰的兩行之間的某種聯繫,方式也很簡單,就是將兩行的vector相加;該操作沒有增加參數數量,但是提前(在最後的全連接層之前)考慮了特徵矩陣中行與行之間的某種關聯
傳統CNN和加入folding後的詞的表示。增強了表示能力:
模型的特點
1 保留了句子中詞序信息和詞語之間的相對位置;
2 寬卷積的結果是傳統卷積的一個擴展,某種意義上,也是n-gram的一個擴展,更加考慮句子邊緣信息;
3 模型不需要任何的先驗知識,例如句法依存樹等,並且模型考慮了句子中相隔較遠的詞語之間的語義信息。
實驗部分
1 模型訓練及參數
輸出層是一個類別概率分布(即softmax),與倒數第二層全連接;
代價函數為交叉熵,訓練目標是最小化代價函數;
L2正則化;
優化方法:mini-batch + gradient-based (使用Adagrad update rule, Duchi et al., 2011)
2 實驗結果
在三個數據集上進行了實驗,分別是(1)電影評論數據集上的情感識別,(2)TREC問題分類,以及(3)Twitter數據集上的情感識別。結果如下圖
結論
可以看出,DCNN的性能非常好,幾乎不遜色於傳統的模型;而且,DCNN的好處在於更全面地捕捉詞的信息,更有效地表示整個句子。
推薦閱讀:
※[Practical ML] Factorization Machine
※python 機器學習不會很慢嗎?
TAG:机器学习 |