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 維的張量(即嵌入輸出),並應用多個具有有效填充的濾波器(分別為 3、4、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.pdf

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM