如何使用機器學習來分析情感
我們使用了不同的機器學習算法進行情感分析,然后將各個算法的準確率結果進行比較,以確定哪一種算法最適合這個問題。
情感分析是自然語言處理(NLP)中的一個重要的內容。情感指的是我們對某一事件、物品、情況或事物產生的感覺。情感分析是一個從文本中自動提取人類情感的研究領域。它在上世紀 90 年代初才慢慢地開始發展起來。
本文將讓你明白如何將機器學習(ML)用于情感分析,并比較不同機器學習算法的結果。本文的目標不在于研究如何提高算法性能。
如今,我們生活在一個快節奏的社會中,所有的商品都能在網上購買到,每個人都可以在網上發表自己的評論。而一些商品的負面網絡評論可能會損害公司的聲譽,從而影響公司的銷售額。因此對公司來說,通過商品評論來了解客戶真正想要什么變得非常重要。但是這些評論數據太多了,無法一個個地手動查看所有的評論。這就是情緒分析誕生的緣由。
現在,就讓我們看看如何用機器學習開發一個模型,來進行基本的情緒分析吧。
現在就開始吧!
獲取數據
第一步是選擇一個數據集。你可以從任何公開的評論中進行選擇,例如推文或電影評論。數據集中至少要包含兩列:標簽和實際的文本段。
下圖顯示了我們選取的部分數據集。
Figure 1: Data sample
接下來,我們導入所需的庫:
正如你在上面代碼看到,我們導入了 ??NumPy?
? 和 ??Pandas?
? 庫來處理數據。至于其他庫,我們會在使用到它們時再說明。
數據集已準備就緒,并且已導入所需的庫。接著,我們需要用 ??Pandas?
? 庫將數據集讀入到我們的項目中去。我們使用以下的代碼將數據集讀入 Pandas 數據幀DataFrame
數據處理
現在我們的項目中已經導入好數據集了。然后,我們要對數據進行處理,以便算法可以更好地理解數據集的特征。我們首先為數據集中的列命名,通過下面的代碼來完成:
然后,我們對 ??label?
? 列進行數值化:??negative?
? 的評論替換為 1,??positive?
? 的評論替換為 0。下圖顯示了經過基本修改后的 ??sentiment_dataframe?
? 的值。
Figure 2: Data frame with basic modifications
準備好特征值、目標值
下一步是數據的預處理。這是非常重要的一步,因為機器學習算法只能理解/處理數值形數據,而不能理解文本,所以此時要進行特征抽取,將字符串/文本轉換成數值化的數據。此外,還需要刪除冗余和無用的數據,因為這些數據可能會污染我們的訓練模型。我們在這一步中去除了噪聲數據、缺失值數據和不一致的數據。
對于情感分析,我們在數據幀中添加特征文本的長度和標點符號計數。我們還要進行詞干提取,即將所有相似詞(如 “give”、“giving” 等)轉換為單一形式。完成后,我們將數據集分為兩部分:特征值 X 和 目標值 Y。
上述內容是使用以下代碼完成的。下圖顯示了執行這些步驟后的數據幀。
Figure 3: Data frame after the division of the data set
特征工程:文本特征處理
我們接下來進行文本特征抽取,對文本特征進行數值化。為此,我們使用計數向量器CountVectorizer,它返回詞頻矩陣。
在此之后,計算數據幀 X 中的文本長度和標點符號計數等特征。X 的示例如下圖所示。
Figure 4: Sample of final features
使用的機器學習算法
現在數據已經可以訓練了。下一步是確定使用哪些算法來訓練模型。如前所述,我們將嘗試多種機器學習算法,并確定最適合情感分析的算法。由于我們打算對文本進行二元分類,因此我們使用以下算法:
- K-近鄰算法(KNN)
- 邏輯回歸算法
- 支持向量機(SVMs)
- 隨機梯度下降(SGD)
- 樸素貝葉斯算法
- 決策樹算法
- 隨機森林算法
劃分數據集
首先,將數據集劃分為訓練集和測試集。使用 ??sklearn?
? 庫,詳見以下代碼:
我們使用 20% 的數據進行測試,80% 的數據用于訓練。劃分數據的意義在于對一組新數據(即測試集)評估我們訓練的模型是否有效。
K-近鄰算法
現在,讓我們開始訓練第一個模型。首先,我們使用 KNN 算法。先訓練模型,然后再評估模型的準確率(具體的代碼都可以使用 Python 的 ??sklearn?
? 庫來完成)。詳見以下代碼,KNN 訓練模型的準確率大約為 50%。
邏輯回歸算法
邏輯回歸模型的代碼十分類似——首先從庫中導入函數,擬合模型,然后對模型進行評估。下面的代碼使用邏輯回歸算法,準確率大約為 66%。
支持向量機算法
以下代碼使用 SVM,準確率大約為 67%。
隨機森林算法
以下的代碼使用了隨機森林算法,隨機森林訓練模型的準確率大約為 69%。
決策樹算法
接下來,我們使用決策樹算法,其準確率約為 61%。
隨機梯度下降算法
以下的代碼使用隨機梯度下降算法,其準確率大約為 49%。
樸素貝葉斯算法
以下的代碼使用樸素貝葉斯算法,樸素貝葉斯訓練模型的準確率大約為 60%。
情感分析的最佳算法
接下來,我們繪制所有算法的準確率圖。如下圖所示。
Figure 5: Accuracy performance of the different algorithms
可以看到,對于情感分析這一問題,隨機森林算法有最佳的準確率。由此,我們可以得出結論,隨機森林算法是所有機器算法中最適合情感分析的算法。我們可以通過處理得到更好的特征、嘗試其他矢量化技術、或者使用更好的數據集或更好的分類算法,來進一步提高準確率。
既然,隨機森林算法是解決情感分析問題的最佳算法,我將向你展示一個預處理數據的樣本。在下圖中,你可以看到模型會做出正確的預測!試試這個來改進你的項目吧!
Figure 6: Sample predictions made