1、初識TextCNN
最近在做壽命預測問題的研究中,拿到的資料為一維的資料,傳統的資料預處理方法主要有PCA、LDA、LLE等,考慮到應用CNN進行特征的提取,進而提高預測的精度。但之前了解到的CNN多應用于圖像處理,其輸入資料為二維或者多元的資料,是以進一步了解學習應用于文本分類的TextCNN。下一篇文章會通過期刊論文來介紹幾篇CNN的具體應用執行個體,主要介紹模型的網絡結構。
TextCNN模型是Yoon Kim在2014年 《Convolutional Neural Networks for Sentence Classification》中提出的,利用卷積神經網絡(CNN)來對處理文本分類問題(NLP)。該算法利用多個不同大小的kernel來提取句子中的關鍵資訊,進而能更加高效的提取重要特征,實作較好的分類效果。
2、TextCNN結構
該模型的結構如下圖:(下圖引用于原文)
TextCNN的詳細過程見下:(以一句話為例)
(1)輸入:自然語言輸入為一句話,例如:
wait for the video and don't rent it.
(2)資料預處理:首先将一句話拆分為多個詞,例如将該句話分為9個詞語,分别為:
wait
,
for
,
the
,
video
,
and
,
do
,
n't rent
,
it
,接着将詞語轉換為數字,代表該詞在詞典中的詞索引。
(3)嵌入層:通過word2vec或者GLOV 等embedding 方式将每個詞成映射到一個低維空間中,本質上是特征提取器,在指定次元中編碼語義特征。例如用長度為6的一維向量來表示每個詞語(即詞向量的次元為6),wait可以表示為[1,0,0,0,0,0,0],以此類推,這句話就可以用9*6的二維向量表示。
(4)卷積層:與圖像處理的卷積核不同的是,經過詞向量表達的文本為一維資料,是以在TextCNN卷積用的是一維卷積。TextCNN卷積核的寬度和詞向量的次元一緻,高度可以自行設定。以将卷積核的大小設定為[2,3]為例,由于設定了2個卷積核,是以将會得到兩個向量,得到的向量大小分别為T1:81和T2:71,向量大小計算過程分别為(9-2-1)=8,(9-3-1)=7,即(詞的長度-卷積核大小-1)。
(5)池化層:通過不同高度的卷積核卷積之後,輸出的向量次元不同,采用1-Max-pooling将每個特征向量池化成一個值,即抽取每個特征向量的最大值表示該特征。池化完成後還需要将每個值拼接起來,得到池化層最終的特征向量,是以該句話的池化結果就為2*1。
(6)平坦層和全連接配接層:與CNN模型一樣,先對輸出池化層輸出進行平坦化,再輸入全連接配接層。為了防止過拟合,在輸出層之前加上dropout防止過拟合,輸出結果就為預測的文本種類。
3、模型實作
(1)資料預處理:TextCNN進行文本分類,原始資料為語句和對應的标簽,資料預處理的流程為先将各句子進行分詞,接着将每個詞轉換為正整數用來代表詞的編号,最後利用多删少補的原則将每句話設定為等長的詞語,得到測試集和訓練集的資料。
import pandas
(2)網絡結構的搭建:TextCNN網絡結構主要有嵌入層-卷積層-池化層-dropout-全連接配接層,将網絡的基礎操作(損失函數、模型訓練、準确率的定義)和網絡結構的搭建結合到一個函數中,該部分代碼參考:
https://github.com/Asia-Lee
# 建構TextCNN模型
(3)主函數:檢視測試精度
if __name__ ==
4、模型總結
- TextCNN處理NLP,輸入為一整句話,是以卷積核的寬度與詞向量的次元一緻,這樣用卷積核進行卷積時,不僅考慮了詞義而且考慮了詞序及其上下文。
- TextCNN的結構優化有兩個方向,一個是詞向量的構造,另一個是網絡參數和超參數調優。
- TextCNN和CNN的最大不同在于輸入資料的次元,圖像是二維資料, 圖像的卷積核是從左到右, 從上到下進行滑動來進行特征抽取;自然語言是一維資料, 雖然經過word-embedding 生成了二維向量,但是對詞向量做從左到右滑動來進行卷積沒有意義。
參考文獻:
《Convolutional Neural Networks for Sentence Classification》:
https://arxiv.org/abs/1408.5882
Keras中文文檔:
https://keras.io/zh/layers/embeddings/
代碼參考:
https://github.com/Asia-Lee
作者:xianyang94,zhihu.com/people/xianyang94
推薦閱讀: 用 Python 進行系統聚類分析 用 Python 對資料進行相關性分析 用 Python 的兩種方法進行方差分析 如何在 matplotlib 中加注釋和内嵌圖 如何用一行代碼讓 gevent 爬蟲提速 100%
▼點選成為社群會員 喜歡就點個在看吧