如何在NLP領域應用卷積神經網絡CNN

技術交流QQ群:1027579432,歡迎你的加入!

1.CNN使用原理

  • (1) 相對于圖片像素,在NLP任務中,將句子和文章作為一個矩陣來輸入給CNN網絡,矩陣中的每一行代表一個標記token,通常是一個詞語,但是,也可以是一個字符。也就是說,矩陣中的每行是一個向量,這個向量代表一個詞語。通常這個向量是詞嵌入向量(低維表示),比如word2vec、glove,但是有時候單個詞語也可以使用one-hot編碼來表示該單詞在詞匯表中的索引。對于一個由10個單詞組成的句子,使用一個100維的詞嵌入向量來表示每個單詞,那么這個句子可以表示為10*100為的矩陣,這個矩陣就可以作為CNN網絡的輸入,也就類似于圖像領域的“圖片”。
  • (2) 在計算機視覺領域,卷積核是滑過整個圖片。但是,在NLP領域我們通常使用卷積核滑過矩陣的整行,相當于滑過句子中的詞語。換句話說是,卷積核的寬度通常與(1)中輸入的矩陣寬度相同。但是,卷積核的高度通常是變化的,通常每次滑過的單詞寬度是windows words 是2~5,將所有卷積核提取的結果合并在一起,NLP中的一個卷積神經網絡工作原理如下圖所示:


    CNN_NLP.png

2.NLP中的CNN不同之處

  • (1) 我們對計算機視覺的直覺如何?位置不變性和局部組合性對圖像有直觀的意義,但對于NLP則不那么重要。你可能會關注在一個句子中出現(xiàn)同一個詞語。彼此接近的像素可能在語義上相關(對同一圖像的一部分而言),但對于詞語而言并非總是如此。在許多語言中,短語的一部分可以用幾個其他單詞分開,詞語外觀上也不明顯。很明顯,在某些方面單詞的構成,例如修飾名詞的形容詞,但這究竟是如何工作的,更高級別的表示實際上“含義”并不像計算機視覺那樣明顯。
  • (2) 考慮到上述描述的問題,CNN似乎無法在NLP任務中使用。幸運的是,上述存在的問題并不能意味著CNN在NLP任務中無法應用。正如名言" All models are wrong, but some are useful"所說,從事實角度出發(fā),CNN在NLP任務上的應用反而很好。簡單的Bag of Words模型顯然過于簡單化,但多年來一直是常用方法,并取得了相當不錯的結果。
  • (3)對于CNN網絡,一直認為它都是一個很快的網絡。卷積操作是計算機圖像方向的核心操作,在GPU硬件上的實現(xiàn)。與n-grams語言模型對比,從詞語的表示形式上來說,CNN更加有效。當一個詞匯表中有很多單詞時,計算超過tri-grams時將會浪費很多的計算成本。即使是Google公司也不會提供超過5-grams的語言模型。卷積核可以自動學習到詞語好的表示形式,不需要表示出整個詞匯表。卷積核的數(shù)量超過5個是完全合理的,我認為卷積核在第一層捕捉到的特征與n-grams語言模型捕捉到的特征是相似的,但是前者以一種更緊湊的方式表現(xiàn)出來的。

3.CNN中的超參數(shù)

在解釋CNN如何應用在NLP任務中之前,先讓我們看看搭建CNN時需要做出的一些選擇,希望這有助于您更好地了解該領域的文獻。

  • (1) Narrow vs. Wide convolution
    • a. 當我解釋上面的卷積操作時,我忽略了使用卷積核過程中的一些細節(jié)。應用一個3*3的卷積核在矩陣的中間部分時,得到的結果會很好,但是矩陣的邊緣部分該如何處理?如何將卷積核應用在一個沒有左上角元素的矩陣的第一個元素上?答案是使用padding操作,所有在矩陣邊緣的元素都可以在邊緣元素的外部用0填充。通過這個操作,你可以將卷積核應用在輸入矩陣的任意位置上,獲得一個更大且相同大小的輸出。增加zero-padding操作也被稱為是wide convolution,沒有用0元素填充的操作稱為narrow convolution.下圖中n_filter=5,n_in=7,n_padding=4


      narrow convolution.png

      wide convolution.png
    • b.當你有一個與輸入矩陣尺寸相關且很大的卷積核時,通過上圖,你可以看出wide convolution是有用的,甚至是必要的操作。如上圖所示,narrow convolution生成的輸出尺寸是(7-5)+1=3,wide convolution生成的輸出尺寸是(7-2*4-5)+1=11。更加普遍的情況是,計算公式如下圖所示:


      輸出尺寸的計算公式.png
  • (2) Stride Size
    • a.卷積神經網絡中的另一個超參數(shù)是stride size,這個參數(shù)定義了卷積核每次在輸入矩陣中的移動步長大小。上面的所有例子中stride size=1,重復的應用這個步長來移動卷積核。步長越大,卷積核的移動次數(shù)越少,輸出的尺寸越小。下面的圖來自CS231課程


      stride size is 1.png

      stride size is 2.png
    • b.通常在文獻中stride size=1,當stride size太大時,我們可以構建出一個類似于循環(huán)神經網絡結構的模型。
  • (3) Pooling Layers
    • a.CNN中的一個關鍵方面是池化層,這層通常在卷積層之后應用。通常對卷積核得到的輸出應用一個max操作實現(xiàn)池化功能。你不需要對整個矩陣進行池化操作,你可以將矩陣分隔成幾個窗口,對每個窗口進行池化操作。例如,下圖中max操作時,窗口的大小是2*2(在NLP領域中,我們通常在卷積層的輸出矩陣上應用池化操作,每個卷積核池化后得到一個實數(shù)),具體如下圖所示:


      max pooling.png
    • b.為什么要進行池化操作?主要有以下幾個原因:池化層的一個特點是提供一個固定大小的輸出矩陣,這個輸出矩陣通常被用作分類。比如,你有1000個卷積核,你將池化操作應用在卷積層輸出的矩陣后,不論卷積核的大小、輸入矩陣的大小,你都會得到一個1000維的池化后的輸出矩陣。這允許你可以使用可變大小的句子長度和可變大小的過卷積核,但最終獲得相同的輸出維度來提供給分類器。
    • c.池化操作還可以減少輸出矩陣的維度,但是同時也保持了最顯著的特征。你可以將每個卷積核理解成檢測特定功能的特征提取器。例如,檢測句子是否包含“not amazing”等這樣的否定詞語。如果此詞語出現(xiàn)在句子中的某處時,則將卷積核應用于該區(qū)域,結果將產生較大的值,但在其他區(qū)域中產生較小的值。通過執(zhí)行最大池化操作,能夠將這個詞語是否出現(xiàn)在句子中的信息保留下來,但是也丟失有關詞語出現(xiàn)在句子何處的信息。但后者的這個信息不太重要,它類似于bag of n-grams模型。你正在丟失關于這個詞語在一個句子中全局位置信息,但同時卷積核正在捕捉這個詞語在這個句子中的局部位置信息,比如"not amazing"與"amazing not"顯然是不同的。
    • d.在圖像識別領域,池化操作提供了圖片移動和旋轉的基本不變特性。當你對某個區(qū)域執(zhí)行池化操作,即使你將圖像移動/旋轉幾個像素,輸出也將保持大致相同,因為最大池化操作無論如何都會選擇相同的值。
  • (4) Channels
    最后,我們必須理解通道這個概念,通道是對輸入數(shù)據的不同視角理解。例如,在圖像識別領域,通常有RGB(紅、綠、藍)3個通道,你可以貫穿整個通道來執(zhí)行卷積操作,使用相同或不同的權重。在NLP中,你可以想象有不同的通道,如:你可以分別為不同的詞嵌入(word2vec/glove)使用一個獨立的通道,或者你也可以為不同語言中相同含義的句子設置一個通道。

4.Convolutional Neural Networks applied to NLP

下面讓我們看一下CNN在自然語言處理中的使用,我嘗試總結CNN在這個領域上一些研究成果。研究結果總是我會想起許多有趣的應用程序(請在評論中告訴我),但我希望至少涵蓋一些更受歡迎的結果。

  • (1)CNN在NLP中的最適合的應用似乎是分類任務,比如情感分析、垃圾郵件識別、觀點分類等。卷積和池化操作丟失關于單詞的局部位置信息,因此序列標注(如位置標注、實體提取)任務上應用一個純CNN網絡是有一點困難的。文獻[1]在一個多分類數(shù)據集上評價一個CNN網絡結構的效果,主要包括情感分析和主題分類任務。CNN網絡結構在整個數(shù)據集上獲得非常好的效果。令人意外的是文章中使用的網絡非常簡單,但是功能強大。輸入層是一個句子,這個句子是由word2vec詞嵌入表示的詞向量表示。卷積層使用了多個卷積核,卷積層之后使用一個最大池化層,最后是一個softmax分類器。文章中使用靜態(tài)和動態(tài)兩種不同的詞嵌入的通道,動態(tài)的通道在訓練過程中能自動調整詞嵌入。文獻[2]使用更加復雜的網絡結構,文獻[3]中增加一個額外的一層來執(zhí)行"語義聚類"任務。


    Convolution Neural Networks for Sentence Classification.png

5.論文復現(xiàn)結果

1.png

2.png

3.png

4.png

5.png

6.png

6.參考文獻及博客

參考文獻1
參考文獻2
參考文獻3
本文翻譯原文鏈接
參考博客

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容