TensorFlow文本情感分析实现
TensorFlow文本情感分析實現(xiàn)
前面介紹了如何將卷積網(wǎng)絡應用于圖像。本文將把相似的想法應用于文本。
文本和圖像有什么共同之處?乍一看很少。但是,如果將句子或文檔表示為矩陣,則該矩陣與其中每個單元是像素的圖像矩陣沒有什么區(qū)別。
接下來的問題是,如何能夠將文本表示為矩陣?好吧,這很簡單:矩陣的每一行都是一個表示文本的向量。當然,現(xiàn)在需要定義一個基本單位。一個簡單方法是將基本單位表示為字符。另一種做法是將一個單詞看作基本單位,將相似的單詞聚合在一起,然后用表示符號表示每個聚合(有時稱為聚類或嵌入)。
注意,無論如何選擇基本單位,都需要完成一個從基本單位到整數(shù)值地址的一一映射,以便可以將文本視為矩陣。例如,有10行文字,每行都是一個100維的嵌入,那么將其表示為10×100的矩陣。在這個特別的文本圖像中,一個像素表示該句子x在位置y處有相應的嵌入。
也許會注意到,文本并不是一個真正的矩陣,而是一個矢量,因為位于相鄰行中的兩個單詞幾乎沒有什么關聯(lián)。實際上,位于相鄰列中的兩個單詞最有可能具有某種相關性,這是文本矩陣與圖像的主要差異。
現(xiàn)在可能想問:明白是想把文本當成一個向量,但是這樣做就失去了這個詞的位置信息,這個位置信息應該是很重要的,不是嗎?
事實證明,在很多真實的應用程序中,知道一個句子是否包含一個特定的基本單位(一個字符、一個單詞或一個聚合體)是非常準確的信息,即使不去記住其在句子中的確切位置。
本文將使用 TFLearn 創(chuàng)建一個基于 CNN 的情感分析深度學習網(wǎng)絡。正如前一節(jié)所討論的,這里的 CNN 是一維的。
這里將使用 IMDb 數(shù)據(jù)集,收集 45000 個高度受歡迎的電影評論樣本進行訓練,并用 5000 個樣本進行測試。TFLearn有從網(wǎng)絡自動下載數(shù)據(jù)集的庫,便于創(chuàng)建卷積網(wǎng)絡,所以可以直接編寫代碼。
文本情感分析實現(xiàn)過程
- 導入 TensorFlow、tflearn 以及構建網(wǎng)絡所需要的模塊。然后導入 IMDb 庫并執(zhí)行獨熱編碼和填充:
-
加載數(shù)據(jù)集,用 0 填充整個句子至句子的最大長度,然后在標簽上進行獨熱編碼,其中兩個數(shù)值分別對應 true 和 false 值。注意,參數(shù) n_words 是詞匯表中單詞的個數(shù)。表外的單詞均設為未知。此外,注意 trainX 和 trainY 是稀疏向量,因為每個評論可能僅包含整個單詞集的一個子集。
-
顯示幾個維度來檢查剛剛處理的數(shù)據(jù),并理解數(shù)據(jù)維度的含義:
-
為數(shù)據(jù)集中包含的文本構建一個嵌入。就目前而言,考慮這個步驟是一個黑盒子,它把這些詞匯映射聚類,以便類似的詞匯可能出現(xiàn)在同一個聚類中。注意,在之前的步驟中,詞匯是離散和稀疏的。通過嵌入操作,這里將創(chuàng)建一個將每個單詞嵌入連續(xù)密集向量空間的映射。使用這個向量空間表示將給出一個連續(xù)的、分布式的詞匯表示。如何構建嵌入,將在討論RNN時詳細講解:
-
創(chuàng)建合適的卷積網(wǎng)絡。這里有三個卷積層。由于正在處理文本,這里將使用一維卷積網(wǎng)絡,這些圖層將并行執(zhí)行。每一層需要一個 128 維的張量(即嵌入輸出),并應用多個具有有效填充的濾波器(分別為 3、4、5)、激活函數(shù) ReLU 和 L2 regularizer。然后將每個圖層的輸出通過合并操作連接起來。接下來添加最大池層,以 50% 的概率丟棄參數(shù)的 dropout 層。最后一層是使用 softmax 激活的全連接層:
-
學習階段使用 Adam 優(yōu)化器以及 categorical_crossentropy 作為損失函數(shù):
- 在訓練中,采用 batch_size=32,觀察在訓練和驗證集上達到的準確度。正如所看到的,在通過電影評論預測情感表達時能夠獲得 79% 的準確性:
解讀分析
論文“Convolutional Neural Networks for Sentence Classification”詳細闡述了用于情感分析的一維卷積網(wǎng)絡。注意,得益于濾波器窗口在連續(xù)單詞上的操作,文章提出的模型保留了一些位置信息。文中配圖給出了網(wǎng)絡中的關鍵點。在開始時,文本被表示為基于標準嵌入的向量,在一維密集空間中提供了緊湊的表示,然后用多個標準的一維卷積層處理這些矩陣。
注意,該模型使用了多個具有不同窗口大小的濾波器來獲取多個特征。之后,用一個最大池化操作來保留最重要的特征,即每個特征圖中具有最高值的特征。為防止過度擬合,文章提出在倒數(shù)第二層采用一個 dropout 和用權向量的 L2 范數(shù)進行約束。最后一層輸出情感為正面或者負面。
為了更好地理解模型,有幾個觀察結果展示如下:
? 濾波器通常在連續(xù)的空間上進行卷積。對于圖像來說,這個空間是指高度和寬度上連續(xù)的像素矩陣表示。對于文本來說,連續(xù)的空間不過是連續(xù)詞匯自然產生的連續(xù)維度。如果只使用獨熱編碼來表示單詞,那么空間是稀疏的,如果使用嵌入,則結果空間是密集的,因為相似的單詞被聚合。
? 圖像通常有三個顏色通道(RGB),而文本自然只有一個通道,因為不需要表示顏色。
論文“Convolutional Neural Networks for Sentence Classification”針對句子分類開展了一系列的實驗。除了對超參數(shù)的微調,具有一層卷積的簡單 CNN 在句子分類中表現(xiàn)出色。文章還表明采用一套靜態(tài)嵌入。(這將在討論 RNN 時討論),并在其上構建一個非常簡單的 CNN,可以顯著提升情感分析的性能:
圖 1 例句的兩通道模型結構示例圖
一個模型結構的示例的鏈接:https://arxiv.org/pdf/1408.5882.pdf
使用 CNN 進行文本分析是一個活躍的研究領域。建議看Text Understanding from Scratch,Xiang Zhang,Yann LeCun 。這篇文章證明可以使用 CNN 將深度學習應用到從字符級輸入一直到抽象文本概念的文本理解。作者將 CNN 應用到包括本體分類、情感分析和文本分類在內的各種大規(guī)模數(shù)據(jù)集中,并表明它們不需要人類語言中關于詞語、短語、句子或任何其他句法或語義結構的先驗知識就可以達到讓人驚艷的效果,模型適用于英文和中文。
總結
以上是生活随笔為你收集整理的TensorFlow文本情感分析实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TensorFlow创建DeepDrea
- 下一篇: PyTorch全连接ReLU网络