搜尋
首頁科技週邊人工智慧如何使用機器學習來分析情感

如何使用機器學習來分析情感

Apr 11, 2023 pm 04:49 PM
機器學習分析情感

如何使用機器學習來分析情感

我們使用了不同的機器學習演算法進行情緒分析,然後將各個演算法的準確率結果進行比較,以確定哪一種演算法最適合這個問題。

情緒分析是自然語言處理(NLP)中的一個重要的內容。情感指的是我們對某一事件、物品、情況或事物所產生的感覺。情感分析是一個從文本中自動提取人類情感的研究領域。它在上世紀 90 年代初才慢慢開始發展。

本文將讓你明白如何將機器學習(ML)用於情緒分析,並比較不同機器學習演算法的結果。本文的目標不在於研究如何提高演算法效能。

如今,我們生活在一個快節奏的社會中,所有的商品都能在網路上購買到,每個人都可以在網路上發表自己的評論。而某些商品的負面網路評論可能會損害公司的聲譽,進而影響公司的銷售。因此對公司來說,透過商品評論來了解客戶真正想要什麼變得非常重要。但是這些評論數據太多了,無法一個個地手動查看所有的評論。這就是情緒分析誕生的緣由。

現在,就讓我們來看看如何用機器學習開發一個模型,來進行基本的情緒分析。

現在就開始吧!

取得資料

第一步是選擇一個資料集。你可以從任何公開的評論中進行選擇,例如推文或電影評論。資料集中至少要包含兩列:標籤和實際的文字段。

下圖顯示了我們選取的部分資料集。

Figure 1: Data sample

Figure 1: Data sample

接下來,我們匯入所需的函式庫:

import pandas as pd
import numpy as np
from nltk.stem.porter import PorterStemmer
import re
import string

正如你在上面程式碼看到,我們導入了 NumPy 和 Pandas# 函式庫來處理資料。至於其他庫,我們會在使用到它們時再說明。

資料集已準備就緒,並且已匯入所需的庫。接著,我們需要用 Pandas 庫將資料集讀入到我們的專案中去。我們使用以下的程式碼將資料集讀入 Pandas 資料幀DataFrame

sentiment_dataframe = pd.read_csv(“/content/drive/MyDrive/Data/sentiments - sentiments.tsv”,sep = ‘t’)

資料處理

現在我們的專案中已經導入好資料集了。然後,我們要對資料進行處理,以便演算法可以更好地理解資料集的特徵。我們首先為資料集中的列命名,透過下面的程式碼來完成:

sentiment_dataframe.columns = [“label”,”body_text”]

然後,我們將 label 列進行數值化:negative  的評論替換為1,positive# 的評論替換為0。下圖顯示了經過基本修改後的 sentiment_dataframe 的值。

Figure 2: Data frame with basic modifications

Figure 2: Data frame with basic modifications

準備好特徵值、目標值

#下一步是資料的預處理。這是非常重要的一步,因為機器學習演算法只能理解/處理數值形數據,而不能理解文本,所以此時要進行特徵抽取,將字串/文本轉換成數值化的數據。此外,還需要刪除冗餘和無用的數據,因為這些數據可能會污染我們的訓練模型。我們在這一步驟中去除了雜訊資料、缺失值資料和不一致的資料。

对于情感分析,我们在数据帧中添加特征文本的长度和标点符号计数。我们还要进行词干提取,即将所有相似词(如 “give”、“giving” 等)转换为单一形式。完成后,我们将数据集分为两部分:特征值 X 和 目标值 Y。

上述内容是使用以下代码完成的。下图显示了执行这些步骤后的数据帧。

Figure 3: Data frame after the division of the data set

Figure 3: Data frame after the division of the data set

def count_punct(text):
 count = sum([1 for char in text if char in string.punctuation])
 return round(count/(len(text) - text.count(“ “)),3)*100
 
tokenized_tweet = sentiment_dataframe[‘body_text’].apply(lambda x: x.split())
stemmer = PorterStemmer()
tokenized_tweet = tokenized_tweet.apply(lambda x: [stemmer.stem(i) for i in x])
for i in range(len(tokenized_tweet)):
 tokenized_tweet[i] = ‘ ‘.join(tokenized_tweet[i])
sentiment_dataframe[‘body_text’] = tokenized_tweet
sentiment_dataframe[‘body_len’] = sentiment_dataframe[‘body_text’].apply(lambda x:len(x) - x.count(“ “))
sentiment_dataframe[‘punct%’] = sentiment_dataframe[‘body_text’].apply(lambda x:count_punct(x))
X = sentiment_dataframe[‘body_text’]
y = sentiment_dataframe[‘label’]

特征工程:文本特征处理

我们接下来进行文本特征抽取,对文本特征进行数值化。为此,我们使用计数向量器CountVectorizer,它返回词频矩阵。

在此之后,计算数据帧 X 中的文本长度和标点符号计数等特征。X 的示例如下图所示。

Figure 4: Sample of final features

Figure 4: Sample of final features

使用的机器学习算法

现在数据已经可以训练了。下一步是确定使用哪些算法来训练模型。如前所述,我们将尝试多种机器学习算法,并确定最适合情感分析的算法。由于我们打算对文本进行二元分类,因此我们使用以下算法:

  • K-近邻算法(KNN)
  • 逻辑回归算法
  • 支持向量机(SVMs)
  • 随机梯度下降(SGD)
  • 朴素贝叶斯算法
  • 决策树算法
  • 随机森林算法

划分数据集

首先,将数据集划分为训练集和测试集。使用 ​​sklearn​​ 库,详见以下代码:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size = 0.20, random_state = 99)

我们使用 20% 的数据进行测试,80% 的数据用于训练。划分数据的意义在于对一组新数据(即测试集)评估我们训练的模型是否有效。

K-近邻算法

现在,让我们开始训练第一个模型。首先,我们使用 KNN 算法。先训练模型,然后再评估模型的准确率(具体的代码都可以使用 Python 的 ​​sklearn​​ 库来完成)。详见以下代码,KNN 训练模型的准确率大约为 50%。

from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)
model.score (X_test,y_test)
0.5056689342403629
逻辑回归算法

逻辑回归模型的代码十分类似——首先从库中导入函数,拟合模型,然后对模型进行评估。下面的代码使用逻辑回归算法,准确率大约为 66%。

from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit (X_train,y_train)
model.score (X_test,y_test)
0.6621315192743764
支持向量机算法

以下代码使用 SVM,准确率大约为 67%。

from sklearn import svm
model = svm.SVC(kernel=’linear’)
model.fit(X_train, y_train)
model.score(X_test,y_test)
0.6780045351473923
随机森林算法

以下的代码使用了随机森林算法,随机森林训练模型的准确率大约为 69%。

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X_train, y_train)
model.score(X_test,y_test)
0.6938775510204082
决策树算法

接下来,我们使用决策树算法,其准确率约为 61%。

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model = model.fit(X_train,y_train)
model.score(X_test,y_test)
0.6190476190476191
随机梯度下降算法

以下的代码使用随机梯度下降算法,其准确率大约为 49%。

from sklearn.linear_model import SGDClassifier
model = SGDClassifier()
model = model.fit(X_train,y_train)
model.score(X_test,y_test)
0.49206349206349204
朴素贝叶斯算法

以下的代码使用朴素贝叶斯算法,朴素贝叶斯训练模型的准确率大约为 60%。

from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(X_train, y_train)
model.score(X_test,y_test)
0.6009070294784581

情感分析的最佳算法

接下来,我们绘制所有算法的准确率图。如下图所示。

Figure 5: Accuracy performance of the different algorithms

Figure 5: Accuracy performance of the different algorithms

可以看到,对于情感分析这一问题,随机森林算法有最佳的准确率。由此,我们可以得出结论,随机森林算法是所有机器算法中最适合情感分析的算法。我们可以通过处理得到更好的特征、尝试其他矢量化技术、或者使用更好的数据集或更好的分类算法,来进一步提高准确率。

既然,随机森林算法是解决情感分析问题的最佳算法,我将向你展示一个预处理数据的样本。在下图中,你可以看到模型会做出正确的预测!试试这个来改进你的项目吧!

Figure 6: Sample predictions made

圖 6:所做的預測樣本

以上是如何使用機器學習來分析情感的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:51CTO.COM。如有侵權,請聯絡admin@php.cn刪除
閱讀AI索引2025:AI是您的朋友,敵人還是副駕駛?閱讀AI索引2025:AI是您的朋友,敵人還是副駕駛?Apr 11, 2025 pm 12:13 PM

斯坦福大學以人為本人工智能研究所發布的《2025年人工智能指數報告》對正在進行的人工智能革命進行了很好的概述。讓我們用四個簡單的概念來解讀它:認知(了解正在發生的事情)、欣賞(看到好處)、接納(面對挑戰)和責任(弄清我們的責任)。 認知:人工智能無處不在,並且發展迅速 我們需要敏銳地意識到人工智能發展和傳播的速度有多快。人工智能係統正在不斷改進,在數學和復雜思維測試中取得了優異的成績,而就在一年前,它們還在這些測試中慘敗。想像一下,人工智能解決複雜的編碼問題或研究生水平的科學問題——自2023年

開始使用Meta Llama 3.2 -Analytics Vidhya開始使用Meta Llama 3.2 -Analytics VidhyaApr 11, 2025 pm 12:04 PM

Meta的Llama 3.2:多模式和移動AI的飛躍 Meta最近公佈了Llama 3.2,這是AI的重大進步,具有強大的視覺功能和針對移動設備優化的輕量級文本模型。 以成功為基礎

AV字節:Meta' llama 3.2,Google的雙子座1.5等AV字節:Meta' llama 3.2,Google的雙子座1.5等Apr 11, 2025 pm 12:01 PM

本週的AI景觀:進步,道德考慮和監管辯論的旋風。 OpenAI,Google,Meta和Microsoft等主要參與者已經釋放了一系列更新,從開創性的新車型到LE的關鍵轉變

與機器交談的人類成本:聊天機器人真的可以在乎嗎?與機器交談的人類成本:聊天機器人真的可以在乎嗎?Apr 11, 2025 pm 12:00 PM

連接的舒適幻想:我們在與AI的關係中真的在蓬勃發展嗎? 這個問題挑戰了麻省理工學院媒體實驗室“用AI(AHA)”研討會的樂觀語氣。事件展示了加油

了解Python的Scipy圖書館了解Python的Scipy圖書館Apr 11, 2025 am 11:57 AM

介紹 想像一下,您是科學家或工程師解決複雜問題 - 微分方程,優化挑戰或傅立葉分析。 Python的易用性和圖形功能很有吸引力,但是這些任務需要強大的工具

3種運行Llama 3.2的方法-Analytics Vidhya3種運行Llama 3.2的方法-Analytics VidhyaApr 11, 2025 am 11:56 AM

Meta's Llama 3.2:多式聯運AI強力 Meta的最新多模式模型Llama 3.2代表了AI的重大進步,具有增強的語言理解力,提高的準確性和出色的文本生成能力。 它的能力t

使用dagster自動化數據質量檢查使用dagster自動化數據質量檢查Apr 11, 2025 am 11:44 AM

數據質量保證:與Dagster自動檢查和良好期望 保持高數據質量對於數據驅動的業務至關重要。 隨著數據量和源的增加,手動質量控制變得效率低下,容易出現錯誤。

大型機在人工智能時代有角色嗎?大型機在人工智能時代有角色嗎?Apr 11, 2025 am 11:42 AM

大型機:AI革命的無名英雄 雖然服務器在通用應用程序上表現出色並處理多個客戶端,但大型機是專為關鍵任務任務而建立的。 這些功能強大的系統經常在Heavil中找到

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)