TensorFlow實現文本情感分析詳解

前面咱們介紹瞭如何將卷積網絡應用於圖像。本節將把類似的想法應用於文本。

文本和圖像有什麼共同之處?乍一看不多。可是,若是將句子或文檔表示爲矩陣,則該矩陣與其中每一個單元是像素的圖像矩陣沒有什麼區別。

接下來的問題是,如何可以將文本表示爲矩陣?好吧,這很簡單:矩陣的每一行都是一個表示文本的向量。固然,如今須要定義一個基本單位。一個簡單方法是將基本單位表示爲字符。另外一種作法是將一個單詞看做基本單位,將類似的單詞聚合在一塊兒,而後用表示符號表示每一個聚合(有時稱爲聚類或嵌入)。

請注意,不管如何選擇基本單位,都須要完成一個從基本單位到整數值地址的一一映射,以即可以將文本視爲矩陣。例如,有10行文字,每行都是一個100維的嵌入,那麼將其表示爲10×100的矩陣。在這個特別的文本圖像中,一個像素表示該句子x在位置y處有相應的嵌入。

你也許會注意到,文本並非一個真正的矩陣,而是一個矢量,由於位於相鄰行中的兩個單詞幾乎沒有什麼關聯。實際上,位於相鄰列中的兩個單詞最有可能具備某種相關性,這是文本矩陣與圖像的主要差別。

如今你可能想問:我明白你是想把文本當成一個向量,可是這樣作就失去了這個詞的位置信息,這個位置信息應該是很重要的,不是嗎?

其實,事實證實,在不少真實的應用程序中,知道一個句子是否包含一個特定的基本單位(一個字符、一個單詞或一個聚合體)是很是準確的信息,即便不去記住其在句子中的確切位置。

本節將使用 TFLearn 建立一個基於 CNN 的情感分析深度學習網絡。正如前一節所討論的,這裏的 CNN 是一維的。

這裏將使用 IMDb 數據集,收集 45000 個高度受歡迎的電影評論樣本進行訓練,並用 5000 個樣本進行測試。TFLearn有從網絡自動下載數據集的庫,便於建立卷積網絡,因此能夠直接編寫代碼。

文本情感分析實現過程

  1. 導入 TensorFlow、tflearn 以及構建網絡所須要的模塊。而後導入 IMDb 庫並執行獨熱編碼和填充:


     
  2. 加載數據集,用 0 填充整個句子至句子的最大長度,而後在標籤上進行獨熱編碼,其中兩個數值分別對應 true 和 false 值。請注意,參數 n_words 是詞彙表中單詞的個數。表外的單詞均設爲未知。此外,請注意 trainX 和 trainY 是稀疏向量,由於每一個評論可能僅包含整個單詞集的一個子集。


     
  3. 顯示幾個維度來檢查剛剛處理的數據,並理解數據維度的含義:


     
  4. 爲數據集中包含的文本構建一個嵌入。就目前而言,考慮這個步驟是一個黑盒子,它把這些詞彙映射聚類,以便相似的詞彙可能出如今同一個聚類中。請注意,在以前的步驟中,詞彙是離散和稀疏的。經過嵌入操做,這裏將建立一個將每一個單詞嵌入連續密集向量空間的映射。使用這個向量空間表示將給出一個連續的、分佈式的詞彙表示。如何構建嵌入,將在討論RNN時詳細講解:


     
  5. 建立合適的卷積網絡。這裏有三個卷積層。因爲正在處理文本,這裏將使用一維卷積網絡,這些圖層將並行執行。每一層須要一個 128 維的張量(即嵌入輸出),並應用多個具備有效填充的濾波器(分別爲 三、四、5)、激活函數 ReLU 和 L2 regularizer。而後將每一個圖層的輸出經過合併操做鏈接起來。接下來添加最大池層,以 50% 的機率丟棄參數的 dropout 層。最後一層是使用 softmax 激活的全鏈接層:


     
  6. 學習階段使用 Adam 優化器以及 categorical_crossentropy 做爲損失函數:


     
  7. 在訓練中,採用 batch_size=32,觀察在訓練和驗證集上達到的準確度。正如你所看到的,在經過電影評論預測情感表達時可以得到 79% 的準確性:

解讀分析

論文「 Convolutional Neural Networks for Sentence Classification」詳細闡述了用於情感分析的一維卷積網絡。請注意,得益於濾波器窗口在連續單詞上的操做,文章提出的模型保留了一些位置信息。文中配圖給出了網絡中的關鍵點。在開始時,文本被表示爲基於標準嵌入的向量,在一維密集空間中提供了緊湊的表示,而後用多個標準的一維卷積層處理這些矩陣。

請注意,該模型使用了多個具備不一樣窗口大小的濾波器來獲取多個特徵。以後,用一個最大池化操做來保留最重要的特徵,即每一個特徵圖中具備最高值的特徵。爲防止過分擬合,文章提出在倒數第二層採用一個 dropout 和用權向量的 L2 範數進行約束。最後一層輸出情感爲正面或者負面。

爲了更好地理解模型,有幾個觀察結果展現以下:
  • 濾波器一般在連續的空間上進行卷積。對於圖像來講,這個空間是指高度和寬度上連續的像素矩陣表示。對於文原本說,連續的空間不過是連續詞彙天然產生的連續維度。若是隻使用獨熱編碼來表示單詞,那麼空間是稀疏的,若是使用嵌入,則結果空間是密集的,由於類似的單詞被聚合。
  • 圖像一般有三個顏色通道(RGB),而文本天然只有一個通道,由於不須要表示顏色。

論文「Convolutional Neural Networks for Sentence Classification」針對句子分類開展了一系列的實驗。除了對超參數的微調,具備一層卷積的簡單 CNN 在句子分類中表現出色。文章還代表採用一套靜態嵌入。(這將在討論 RNN 時討論),並在其上構建一個很是簡單的 CNN,能夠顯著提高情感分析的性能:


圖 1 例句的兩通道模型結構示例圖

一個模型結構的示例的連接:https://arxiv.org/pdf/1408.5882.pdfhtml

使用 CNN 進行文本分析是一個活躍的研究領域。我建議看 Text Understanding from Scratch,Xiang Zhang,Yann LeCun 。這篇文章證實可使用 CNN 將深度學習應用到從字符級輸入一直到抽象文本概念的文本理解。做者將 CNN 應用到包括本體分類、情感分析和文本分類在內的各類大規模數據集中,並代表它們不須要人類語言中關於詞語、短語、句子或任何其餘句法或語義結構的先驗知識就能夠達到讓人驚豔的效果,模型適用於英文和中文。
相關文章
相關標籤/搜索