Text-CNN 文本分類


轉自:http://www.cnblogs.com/mdumpling/p/8044673.html

 

1.簡介

TextCNN 是利用卷積神經網絡對文本進行分類的算法,由 Yoon Kim 在 “Convolutional Neural Networks for Sentence Classification” 一文 (見參考[1]) 中提出. 是2014年的算法.

網絡結構 
圖1-1 參考[1] 中的論文配圖

 
圖1-2 網絡盜圖

合理性: 
深度學習模型在計算機視覺與語音識別方面取得了卓越的成就. 在 NLP 也是可以的. 
卷積具有局部特征提取的功能, 所以可用 CNN 來提取句子中類似 n-gram 的關鍵信息.

2.參數與超參數

  • sequence_length 
    Q: 對於CNN, 輸入與輸出都是固定的,可每個句子長短不一, 怎么處理? 
    A: 需要做定長處理, 比如定為n, 超過的截斷, 不足的補0. 注意補充的0對后面的結果沒有影響,因為后面的max-pooling只會輸出最大值,補零的項會被過濾掉.
  • num_classes 
    多分類, 分為幾類.
  • vocabulary_size 
    語料庫的詞典大小, 記為|D|.
  • embedding_size 
    將詞向量的維度, 由原始的 |D| 降維到 embedding_size.
  • filter_size_arr 
    多個不同size的filter.

3.Embedding Layer

通過一個隱藏層, 將 one-hot 編碼的詞 投影 到一個低維空間中. 
本質上是特征提取器,在指定維度中編碼語義特征. 這樣, 語義相近的詞, 它們的歐氏距離或余弦距離也比較近.

4.Convolution Layer

為不同尺寸的 filter 都建立一個卷積層. 所以會有多個 feature map. 
圖像是像素點組成的二維數據, 有時還會有RGB三個通道, 所以它們的卷積核至少是二維的. 
從某種程度上講, word is to text as pixel is to image, 所以這個卷積核的 size 與 stride 會有些不一樣.

  • x
    xiRk , 一個長度為n的句子中, 第 i 個詞語的詞向量, 維度為k.
  • xi:
    xi:j=xixi+1...x
    表示在長度為n的句子中, 第 [i,j] 個詞語的詞向量的拼接.

  • 卷積核所圍窗口中單詞的個數, 卷積核的尺寸其實就是 hk .

  • wRhk , 卷積核的權重矩陣.
  • c
    ci=f(wxi:i+h1+b) , 卷積核在單詞i位置上的輸出. bRK , 是 bias. f 是雙曲正切之類的激活函數.
  • c=[c1,c2,...,cnh+1
    filter在句中單詞上進行所有可能的滑動, 得到的 feature map .

5.Max-Pooling Layer

max-pooling只會輸出最大值, 對輸入中的補0 做過濾.

6.SoftMax 分類 Layer

最后接一層全連接的 softmax 層,輸出每個類別的概率。

7.小的變種

在 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任務中並沒有很大的不同。

8. Text CNN 的tf實現

參見[4], [6]. 挺詳細的。

 
圖 8-1 Text CNN 網絡中的卷積與池化 結構

需要注意的細節有。 
tf.nn.embedding_lookup() creates the actual embedding operation. The result of the embedding operation is a 3-dimensional tensor of shape [None, sequence_length, embedding_size].

TensorFlow’s convolutional conv2d operation expects a 4-dimensional tensor with dimensions corresponding to batch, width, height and channel. The result of our embedding doesn’t contain the channel dimension, so we add it manually, leaving us with a layer of shape [None, sequence_length, embedding_size, 1].

9. 與 LeNet 作比較

# LeNet5 conv1_weights = tf.get_variable( "weight", [CONV1_SIZE, CONV1_SIZE, NUM_CHANNELS, CONV1_DEEP], initializer=tf.truncated_normal_initializer(stddev=0.1)) tf.nn.conv2d( input_tensor, conv1_weights, strides=[1, 1, 1, 1], padding='SAME') tf.nn.max_pool( relu1, ksize = [1,POOL1_SIZE,POOL1_SIZE,1], strides=[1,POOL1_SIZE,POOL1_SIZE,1], padding="SAME")



#TextCNN conv1_weights = tf.get_variable( "weight", [FILTER_SIZE, EMBEDDING_SIZE, 1, NUM_FILTERS], initializer=tf.truncated_normal_initializer(stddev=0.1)) tf.nn.conv2d( self.embedded_chars_expanded, conv1_weights, strides=[1, 1, 1, 1], padding="VALID") tf.nn.max_pool( h, ksize=[1, SEQUENCE_LENGTH - FILTER_SIZE + 1, 1, 1], strides=[1, 1, 1, 1], padding='VALID')

先來比較卷積 
Lenet是正方形的, 且每一層都只用了同一種尺寸的卷積核. 
Text中, filter是矩形, 長度有好幾種, 一般取 (2,3,4), 而寬度是定長的, 同word的embedding_size 相同. 每種尺寸都配有 NUM_FILTERS 個數目, 類比於Lenet中的output_depth. 所以得到的featuremap是長條狀, 寬度為1. 
因為是卷積, 所以stride每個維度都是1.

再說池化層. 
 Lenet的kernel是正方形, 一般也是2*2等, 所以會把卷積后的featurmap尺寸縮小一半. 
TextCNN依舊是長方形, 將整個featuremap映射到一個點上. 一步到位, 只有一個池化層.

全連接層 
都是多分類, 這一步的處理比較類似. 將池化后的矩陣 reshape為二維, 用 tf.nn.sparse_softmax_cross_entropy_with_logits() 計算損失.

10. TextCNN 論文中的網絡結構

windows size 分別取 (3,4,5), 每個尺寸都會有100個filter.

3.1 Hyperparameters and Training For all datasets we use: rectified linear units, filter windows (h) of 3, 4, 5 with 100 feature maps each, dropout rate (p) of 0.5, l2 constraint (s) of 3, and mini-batch size of 50. These values were chosen via a grid search on the SST-2 dev set.

 


免責聲明!

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



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