首先看一張圖,這是來自煉數成金的講師Ben關於深度學習框架tensorflow課程中的一張圖,textcnn(paper),一般理解了這張圖就基本理解了cnn文本分類的基本方法;
簡單總結一下:
首先我對這些矩陣數據從0-17做了標號,方便后續的說明;
其中0為輸入數據“I like this movie very much !”,nlp中首先會將要處理的一句話轉換為矩陣的表示,,開始矩陣的值是隨機初始化的,上圖中矩陣維度d=5,用5個0-1的浮點數組表示一個詞的向量;
編號1、2、3、4、5、6為3種尺寸(聯想分詞中的ngram為2,3,4)的卷積核,每個尺寸兩個(可以聯想到圖像的channel=2),其中上圖的卷積核寬度為5,(1、2),(3、4),(5、6)的維度兩兩相同;卷積核1從上向下與0相乘,首先是0的前四列(I like this movie)與1相乘,得到7的第一行(就一個值),然后0的第二列到第五列(like this movie very)與1相乘,得到7的第二行...依次類推,我們就得到了7、8、9、10、11、12的卷積結果
再經過max pooling,取7最大的值及8中最大的值組成13,取9、10中各自最大的值組成14,取11、12中各自最大的值組成15,最后將13、14、15拼接成16,整個卷積、池化這些特征提取的工作就完成了,最后在16和17之間加上一層全連接,17表示網絡的輸出為2,也就是二分類;到這里整個分類工程基本搭建好了。
代碼實現:
這里我們參考google brain的工程師在github上的cnn-text-classification-tf代碼
上面鏈接下載解壓之后可直接運行,代碼邏輯也較清晰;之后有時間會把訓練及測試數據改為中文
如果想要實現textcnn中文文本分類,請點擊這個text-cnn代碼鏈接,或者去github上查找你所想要的工程代碼。
上面的代碼我已驗證過,可以實現,效果還是很好的;同樣你也可以查找下目前較流行的bert文本分類的實現方法。
目錄:
- tensorflow簡介、目錄
- tensorflow中的圖(02-1)
- tensorflow變量的使用(02-2)
- tensorflow中的Fetch、Feed(02-3)
- tensorflow版helloworld---擬合線性函數的k和b(02-4)
- tensorflow非線性回歸(03-1)
- MNIST手寫數字分類simple版(03-2)
- 二次代價函數、交叉熵(cross-entropy)、對數似然代價函數(log-likelihood cost)(04-1)
- 多層網絡通過防止過擬合,增加模型的准確率(04-2)
- 修改優化器進一步提升准確率(04-3)
- 手寫數字識別-卷積神經網絡cnn(06-2)
- 循環神經網絡rnn與長短時記憶神經網絡簡述(07-2)
- 循環神經網絡lstm代碼實現(07-3)
- tensorflow模型保存和使用08
- 下載inception v3 google訓練好的模型並解壓08-3
- 使用inception v3做各種圖像分類識別08-4
- word2vec模型訓練簡單案例
- word2vec+textcnn文本分類簡述及代碼