天天看點

句子模組化經典論文A Convolutional Neural Network for Modelling Sentences學習筆記0. 問題的背景1. 引言2. 背景3. Convolutional Neural Networks with Dynamic k-Max Pooling模型的特點

這個文章是對N Kalchbrenner于2014年發表的《A Convolutional Neural Network for Modelling Sentences》論文的一些筆記。筆記基本按照文章的結構來的。

論文下載下傳位址 https://www.aclweb.org/anthology/P14-1062

0. 問題的背景

  1. 所謂句子模組化,即represent the semantic content of sentence. 但是如果從句子層面上對句子進行模組化卻又是比較困難的, 因為一個句子, 通常是獨一無二 (Problem: individual sentences are rarely observed or not observed at all.) , 是以,基于words或者n-grams這些比較經常出現的無素來對句子模組化是比較可取的。
  2. 詞表征學習 傳統的NLP, 把Words當成discrete symbols(localist representation.) 來對待,通過One-hot編碼這樣的表示, 可以表示出了詞的惟一性, 但不能維持詞與詞的聯系,如 Seattle motel 與 Seattle hotel是一個意思,但使用one-hot編碼的話, 卻不能展現它們之間的聯系。
  3. 當我們考慮什麼樣的詞經常出現在一起, 我們可以使用共現矩陣來表示,這樣的共現矩陣通常設定為對稱的, 即不對左右順序進行區分, 但這種簡單的共現矩陣卻存在着一些問題
  • increase in size with vocabulary
  • very high dimensional: require a lot of storage
  • subsequent classification models have sparse issues
  • Models are less robust
  1. 解決的方案: store “most” of the import information in a fixed, small number of dimensions: a dense vector usually around 25-1000 dimensions, 如可以使用SVD對這樣的共現矩陣進行矩陣分解,通過矩陣分解的方式可以緩解前面的問題,但SVD矩陣分解同樣有一些問題:
  • 但還是有各種各樣的問題, 如當次元很大時, 計算量太大
  • 不能處理新的單詞組合
  1. 那我們是否可以直接不使用共現矩陣的方式,直接學習出這樣的低維向量呢! 自然可以, Word2Vec方法就是這樣處理的, 使用分布式表示來表征詞已經成為了一種趨勢.
  2. 但如何word2vec的方式來做句子模組化呢,這個就是作者發表的論文所要解決的問題了.

1. 引言

  1. 使用神經句子模型的優勢
  • 可以通過預測的方式(如預測某個詞語或詞組)來獲得詞語的詞向量表示.
  • 并且通過有監督的學習,可以做 fine-tune, 以使得這些詞向量可以适應某些特殊的任務
  • 除此之外, 神經句子模型還可以學會造句(其内部強大的分類能力)
  1. 論文的特點: 一維的卷積操作; k-max池化方法; 動态的k取值以适應不同長度的句子; 使用多個卷積提取特征. 等等…

2. 背景

  1. 一維卷積
  • 一維卷積的操作如下圖如示:
    句子模組化經典論文A Convolutional Neural Network for Modelling Sentences學習筆記0. 問題的背景1. 引言2. 背景3. Convolutional Neural Networks with Dynamic k-Max Pooling模型的特點
  • 一維卷積有兩種形式: 窄卷積和寬卷積
    句子模組化經典論文A Convolutional Neural Network for Modelling Sentences學習筆記0. 問題的背景1. 引言2. 背景3. Convolutional Neural Networks with Dynamic k-Max Pooling模型的特點
  1. 窄卷積對邊界處理不好, 尤其是當卷積比較大時, 會造成上層的輸出過少. 而寬卷積可以很好的處理邊界問題,同時輸出不會減少.
  2. 假設我們的詞向量的次元為 d d d, 則将 d d d個卷積核組成一個卷積矩陣 m ∈ R d × m \mathbf{m} \in \mathbb{R}^{d\times m} m∈Rd×m, 其中 m m m為卷積核的大小, 而一個句子就可以描述成 s ∈ R d × s \mathbf{s} \in \mathbb{R}^{d\times s} s∈Rd×s. TDNN使用的是窄卷積,同時使用Max-Pooling的方式
  3. TDNN的優勢:
  • 對詞語的順序敏感,不依賴于詞語的具體位置
  • 并不需要外部的依賴(如不依賴解析樹)
  • 對所有的詞語一視同仁(當然,除了邊界詞語因為使用窄卷積的方式而忽略了部分資訊)
  1. TDNN的劣勢:
  • 特征的感受野依賴于 m m m取值的大小, 而當 m m m取值偏大時, 又會給邊界詞語帶來更多的資訊損失.
  • 使用max-pooling, 将無法區分1和多(whether a relevant feature in one of the rows occurs just one or multiple times)
  • 每一次窄卷積之後,輸出都會減少,這樣會導緻各種各樣的麻煩

3. Convolutional Neural Networks with Dynamic k-Max Pooling

  1. 下圖給出了作者提出的整體模型的示意圖
    句子模組化經典論文A Convolutional Neural Network for Modelling Sentences學習筆記0. 問題的背景1. 引言2. 背景3. Convolutional Neural Networks with Dynamic k-Max Pooling模型的特點
  2. 由于窄卷積會帶來各種各樣的不便, 是以舍去, 轉而使用寬卷積
  3. 由于Max-Pooling的缺陷, 是以使用 k k k-Max Pooling代替, 即在做Pooling的時候, 找出 k k k個最大的結果, 并且保持它原本的順序輸出. 使用 k k k-Pooling可以保持特征原有的順序, 同時也不會對特定的位置資訊敏感.
  4. 動态的 k k k值計算: 除了最後一層的 k k k值是由問題給出外, 其它各層的 k k k值是通過計算得到的。求 k k k值的問題, 可以了解為, 當你知道了句子的長度之後,你如何通過設定一個 k k k值, 才能使得最後一層的輸出恰好滿足結果. 如當有一個句子的長度為 s = 18 s=18 s=18時, 要求層數為3, 同時 k t o p = 3 k_{top}=3 ktop​=3時, 這時就應該設 k 1 = 12 , k 2 = 6 , k 3 = k t o p = 3 k_{1}=12, k_{2}=6, k_{3}=k_{top}=3 k1​=12,k2​=6,k3​=ktop​=3.
  5. 非線性的特征變換

    以輸入層為例, 詞向量的次元為 d d d, 那我們就需要 d d d個卷積核, 每個卷積核的大小為 m m m, 那麼, 在經過卷積核處理之後, 就需要進入"非線性"的激活函數了。文章在處理這個問題時, 使用了一個技巧, 它通過重組 m \mathbf{m} m和 s \mathbf{s} s, 使得原本要 d d d次單獨計算的過程, 可以合并成一次來完全運算, 使得可以并行處理, 提高速度(具體過程詳見論文)

  6. 在計算機視覺任務中,在同一層中,我們會使用多個卷積核來提取不同的特征, 同樣,在這裡,我們也可以在同一層裡,提取不同的特征。這樣我們就可以得到一個4維的張量 m j , k i m^{i}_{j,k} mj,ki​, 這裡之是以是4維是, 是因為 i i i表示層數, k k k表示該層的每 k k k個卷積核心, 而每個 m m m實際上都是一個二維的 m ∈ R d × m \mathbf{m} \in \mathbb{R}^{d\times m} m∈Rd×m, 是以構成4維的張量.
  7. Folding: 在前面的過程中,詞向量的每個次元都是完全獨立的(除了最後的那一層全連接配接層), 沒有互動的. 論文給出了一種折疊的方法, 它在卷積層之前, k k k-max池化層之前使用, 将相鄰的兩行簡單進行相加, 使得原本 d d d維的特征圖,減低為 d / 2 d/2 d/2維的特征圖.

模型的特點

  1. 保留了句子中詞序資訊和詞語之間的相對位置;
  2. 寬卷積的結果是傳統卷積的一個擴充,某種意義上,也是n-gram的一個擴充,更加考慮句子邊緣資訊;
  3. 模型不需要任何的先驗知識,例如句法依存樹等,并且模型考慮了句子中相隔較遠的詞語之間的語義資訊。

至此, 模型部分完畢, 實驗部分省略…(完)。