天天看點

keras embedding層_TextCNN 模型完全解讀及 Keras 實作

keras embedding層_TextCNN 模型完全解讀及 Keras 實作

1、初識TextCNN

最近在做壽命預測問題的研究中,拿到的資料為一維的資料,傳統的資料預處理方法主要有PCA、LDA、LLE等,考慮到應用CNN進行特征的提取,進而提高預測的精度。但之前了解到的CNN多應用于圖像處理,其輸入資料為二維或者多元的資料,是以進一步了解學習應用于文本分類的TextCNN。下一篇文章會通過期刊論文來介紹幾篇CNN的具體應用執行個體,主要介紹模型的網絡結構。

TextCNN模型是Yoon Kim在2014年 《Convolutional Neural Networks for Sentence Classification》中提出的,利用卷積神經網絡(CNN)來對處理文本分類問題(NLP)。該算法利用多個不同大小的kernel來提取句子中的關鍵資訊,進而能更加高效的提取重要特征,實作較好的分類效果。

2、TextCNN結構

該模型的結構如下圖:(下圖引用于原文)

keras embedding層_TextCNN 模型完全解讀及 Keras 實作

TextCNN的詳細過程見下:(以一句話為例)

keras embedding層_TextCNN 模型完全解讀及 Keras 實作

(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

keras embedding層_TextCNN 模型完全解讀及 Keras 實作

推薦閱讀: 用 Python 進行系統聚類分析 用 Python 對資料進行相關性分析 用 Python 的兩種方法進行方差分析 如何在 matplotlib 中加注釋和内嵌圖 如何用一行代碼讓 gevent 爬蟲提速 100%

keras embedding層_TextCNN 模型完全解讀及 Keras 實作

▼點選成為社群會員   喜歡就點個在看吧

keras embedding層_TextCNN 模型完全解讀及 Keras 實作