1. 程式人生 > >用CNN對文字處理,句子分類(簡單理解卷積原理)

用CNN對文字處理,句子分類(簡單理解卷積原理)

首先需要理解N-gram

https://zhuanlan.zhihu.com/p/32829048對於在NLP中N-gram的理解,一元,二元,三元gram

大多數 NLP 任務的輸入不是影象畫素,而是以矩陣表示的句子或文件。矩陣的每一行對應一個標記,通常是一個單詞,但它也可以是一個字元。也就是說,每一行都是代表一個單詞的向量。通常這些向量是像 word2vec 或 GloVe 這樣的詞嵌入(低維表示),但是它們也可以是將單詞索引到詞彙表中的一個 one-hot 向量。對於使用 100 維嵌入的 10 個字的句子,我們將有一個 10×100 的矩陣作為我們的輸入。這就是是我們的“影象”。

在計算機視覺上,我們的過濾器在影象的區域性區域上滑動,但是在 NLP 中,我們通常使用滑過整行矩陣(單詞)的過濾器。因此,我們的濾波器的“寬度”通常與輸入矩陣的寬度相同。對於矩陣的寬度其實就是一個單詞轉化為的詞向量的長度,然後這個濾波器相當於一次遍歷多個詞向量,而且可以有不同的濾波器。高度或區域大小可能會有所不同,通常使用一次滑動 2-5 個字的視窗。綜合以上所述,一個用於 NLP 的卷積神經網路可能看起來像這樣

用於句子分類的卷積神經網路(CNN)體系結構圖。 這裡我們描述了三個過濾器的大小:2,3和4,每個大小都有2個過濾器。 每個過濾器對句子矩陣執行卷積並生成(可變長度)特徵對映。 然後在每個特徵圖上執行1-max池化,即記錄來自每個特徵圖的最大數。 因此,從六個特徵圖生成一元特徵向量,並且這六個特徵被連線以形成倒數第二層的特徵向量。 最後的softmax層接收這個特徵向量作為輸入,並用它來分類句子;這裡我們假設二進位制分類,因此描述了兩種可能的輸出狀態。 

CNN的一個重要論點是,它們很快。非常快。卷積是計算機圖形的核心部分,並在 GPUs 上的硬體級別上實現。與 n-grams 相比,CNNs 在表達方面也是有效的。有了大量的詞彙,計算超過 3-grams 的任何東西都可能很快變得昂貴。即使是 Google 也不提供超過 5-grams 的任何東西。卷積過濾器自動學習好的表徵,而不需要表示整個詞彙表。我認為,第一層中的許多學習過濾器捕獲與 n-gram 非常相似(但不限於)的特徵,但是以更緊湊的方式表示它們。