文本分類TextCNN


參考來源:https://blog.csdn.net/u012762419/article/details/79561441

TextCNN結構

TextCNN的結構比較簡單,輸入數據首先通過一個embedding layer,得到輸入語句的embedding表示,然后通過一個convolution layer,提取語句的特征,最后通過一個fully connected layer得到最終的輸出,整個模型的結構如下圖:

embedding layer:即嵌入層,這一層的主要作用是將輸入的自然語言編碼成distributed representation,具體的實現方法可以用word2vec/fasttext/glove,這里不再贅述。可以使用預訓練好的詞向量,也可以直接在訓練textcnn的過程中訓練出一套詞向量,不過前者比或者快100倍不止。如果使用預訓練好的詞向量,又分為static方法和no-static方法,前者是指在訓練textcnn過程中不再調節詞向量的參數,后者在訓練過程中調節詞向量的參數,所以,后者的結果比前者要好。更為一般的做法是:不要在每一個batch中都調節emdbedding層,而是每個100個batch調節一次,這樣可以減少訓練的時間,又可以微調詞向量。

convolution layer:這一層主要是通過卷積,提取不同的n-gram特征。輸入的語句或者文本,通過embedding layer后,會轉變成一個二維矩陣,假設文本的長度為|T|,詞向量的大小為|d|,則該二維矩陣的大小為|T|x|d|,接下的卷積工作就是對這一個|T|x|d|的二維矩陣進行的。卷積核的大小一般設定為 nx|d|,
n是卷積核的長度,|d|是卷積核的寬度,這個寬度和詞向量的維度是相同的,也就是卷積只是沿着文本序列進行的,n可以有多種選擇,比如2、3、4、5等。對於一個|T|x|d|的文本,如果選擇卷積核kernel的大小為2x|d|,則卷積后得到的結果是|T-2+1|x1的一個向量。在TextCNN網絡中,需要同時使用多個不同類型的kernel,同時每個size的kernel又可以有多個。如果我們使用的kernel size大小為2、3、4、5x|d|,每個種類的size又有128個kernel,則卷積網絡一共有4x128個卷積核。

上圖是從google上找到的一個不太理想的卷積示意圖,我們看到紅色的橫框就是所謂的卷積核,紅色的豎框是卷積后的結果。從圖中看到卷積核的size=1、2、3, 圖中上下方向是文本的序列方向,卷積核只能沿着“上下”方向移動。卷積層本質上是一個n-gram特征提取器,不同的卷積核提取的特征不同,以文本分類為例,有的卷積核可能提取到娛樂類的n-gram,比如范冰冰、電影等n-gram;有的卷積核可能提取到經濟類的n-gram,比如去產能、調結構等。分類的時候,不同領域的文本包含的n-gram是不同的,激活對應的卷積核,就會被分到對應的類。
- max-pooling layer:最大池化層,對卷積后得到的若干個一維向量取最大值,然后拼接在一塊,作為本層的輸出值。如果卷積核的size=2,3,4,5,每個size有128個kernel,則經過卷積層后會得到4x128個一維的向量(注意這4x128個一維向量的大小不同,但是不妨礙取最大值),再經過max-pooling之后,會得到4x128個scalar值,拼接在一塊,得到最終的結構—512x1的向量。max-pooling層的意義在於對卷積提取的n-gram特征,提取激活程度最大的特征。


fully-connected layer:這一層沒有特別的地方,將max-pooling layer后再拼接一層,作為輸出結果。實際中為了提高網絡的學習能力,可以拼接多個全連接層。

在 word representation 處理上會有一些變種.


CNN-rand
設計好 embedding_size 這個 Hyperparameter 后, 對不同單詞的向量作隨機初始化, 后續BP的時候作調整.
static
拿 pre-trained vectors from word2vec, FastText or GloVe 直接用, 訓練過程中不再調整詞向量. 這也算是遷移學習的一種思想.
non-static
pre-trained vectors + fine tuning , 即拿word2vec訓練好的詞向量初始化, 訓練過程中再對它們微調.
multiple channel
類比於圖像中的RGB通道, 這里也可以用 static 與 non-static 搭兩個通道來搞.


一些結果表明,max-pooling 總是優於 average-pooling ,理想的 filter sizes 是重要的,但具體任務具體考量,而用不用正則化似乎在NLP任務中並沒有很大的不同。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM