自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用機(jī)器學(xué)習(xí)來分析情感

人工智能 機(jī)器學(xué)習(xí)
本文將幫助你理解 情感分析 的概念,并且學(xué)習(xí)如何使用機(jī)器學(xué)習(xí)進(jìn)行情感分析。

我們使用了不同的機(jī)器學(xué)習(xí)算法進(jìn)行情感分析,然后將各個(gè)算法的準(zhǔn)確率結(jié)果進(jìn)行比較,以確定哪一種算法最適合這個(gè)問題。

情感分析是自然語言處理(NLP)中的一個(gè)重要的內(nèi)容。情感指的是我們對(duì)某一事件、物品、情況或事物產(chǎn)生的感覺。情感分析是一個(gè)從文本中自動(dòng)提取人類情感的研究領(lǐng)域。它在上世紀(jì) 90 年代初才慢慢地開始發(fā)展起來。

本文將讓你明白如何將機(jī)器學(xué)習(xí)(ML)用于情感分析,并比較不同機(jī)器學(xué)習(xí)算法的結(jié)果。本文的目標(biāo)不在于研究如何提高算法性能。

如今,我們生活在一個(gè)快節(jié)奏的社會(huì)中,所有的商品都能在網(wǎng)上購買到,每個(gè)人都可以在網(wǎng)上發(fā)表自己的評(píng)論。而一些商品的負(fù)面網(wǎng)絡(luò)評(píng)論可能會(huì)損害公司的聲譽(yù),從而影響公司的銷售額。因此對(duì)公司來說,通過商品評(píng)論來了解客戶真正想要什么變得非常重要。但是這些評(píng)論數(shù)據(jù)太多了,無法一個(gè)個(gè)地手動(dòng)查看所有的評(píng)論。這就是情緒分析誕生的緣由。

現(xiàn)在,就讓我們看看如何用機(jī)器學(xué)習(xí)開發(fā)一個(gè)模型,來進(jìn)行基本的情緒分析吧。

現(xiàn)在就開始吧!

獲取數(shù)據(jù)

第一步是選擇一個(gè)數(shù)據(jù)集。你可以從任何公開的評(píng)論中進(jìn)行選擇,例如推文或電影評(píng)論。數(shù)據(jù)集中至少要包含兩列:標(biāo)簽和實(shí)際的文本段。

下圖顯示了我們選取的部分?jǐn)?shù)據(jù)集。

Figure 1: Data sample

Figure 1: Data sample

接下來,我們導(dǎo)入所需的庫:

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

正如你在上面代碼看到,我們導(dǎo)入了 ??NumPy?? 和 ??Pandas?? 庫來處理數(shù)據(jù)。至于其他庫,我們會(huì)在使用到它們時(shí)再說明。

數(shù)據(jù)集已準(zhǔn)備就緒,并且已導(dǎo)入所需的庫。接著,我們需要用 ??Pandas?? 庫將數(shù)據(jù)集讀入到我們的項(xiàng)目中去。我們使用以下的代碼將數(shù)據(jù)集讀入 Pandas 數(shù)據(jù)幀DataFrame

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

數(shù)據(jù)處理

現(xiàn)在我們的項(xiàng)目中已經(jīng)導(dǎo)入好數(shù)據(jù)集了。然后,我們要對(duì)數(shù)據(jù)進(jìn)行處理,以便算法可以更好地理解數(shù)據(jù)集的特征。我們首先為數(shù)據(jù)集中的列命名,通過下面的代碼來完成:

sentiment_dataframe.columns = [“l(fā)abel”,”body_text”]

然后,我們對(duì) ??label?? 列進(jìn)行數(shù)值化:??negative?? 的評(píng)論替換為 1,??positive?? 的評(píng)論替換為 0。下圖顯示了經(jīng)過基本修改后的 ??sentiment_dataframe?? 的值。

Figure 2: Data frame with basic modifications

Figure 2: Data frame with basic modifications

準(zhǔn)備好特征值、目標(biāo)值

下一步是數(shù)據(jù)的預(yù)處理。這是非常重要的一步,因?yàn)闄C(jī)器學(xué)習(xí)算法只能理解/處理數(shù)值形數(shù)據(jù),而不能理解文本,所以此時(shí)要進(jìn)行特征抽取,將字符串/文本轉(zhuǎn)換成數(shù)值化的數(shù)據(jù)。此外,還需要?jiǎng)h除冗余和無用的數(shù)據(jù),因?yàn)檫@些數(shù)據(jù)可能會(huì)污染我們的訓(xùn)練模型。我們?cè)谶@一步中去除了噪聲數(shù)據(jù)、缺失值數(shù)據(jù)和不一致的數(shù)據(jù)。

對(duì)于情感分析,我們?cè)跀?shù)據(jù)幀中添加特征文本的長度和標(biāo)點(diǎn)符號(hào)計(jì)數(shù)。我們還要進(jìn)行詞干提取,即將所有相似詞(如 “give”、“giving” 等)轉(zhuǎn)換為單一形式。完成后,我們將數(shù)據(jù)集分為兩部分:特征值 X 和 目標(biāo)值 Y。

上述內(nèi)容是使用以下代碼完成的。下圖顯示了執(zhí)行這些步驟后的數(shù)據(jù)幀。

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’]

特征工程:文本特征處理

我們接下來進(jìn)行文本特征抽取,對(duì)文本特征進(jìn)行數(shù)值化。為此,我們使用計(jì)數(shù)向量器CountVectorizer,它返回詞頻矩陣。

在此之后,計(jì)算數(shù)據(jù)幀 X 中的文本長度和標(biāo)點(diǎn)符號(hào)計(jì)數(shù)等特征。X 的示例如下圖所示。

Figure 4: Sample of final features

Figure 4: Sample of final features

使用的機(jī)器學(xué)習(xí)算法

現(xiàn)在數(shù)據(jù)已經(jīng)可以訓(xùn)練了。下一步是確定使用哪些算法來訓(xùn)練模型。如前所述,我們將嘗試多種機(jī)器學(xué)習(xí)算法,并確定最適合情感分析的算法。由于我們打算對(duì)文本進(jìn)行二元分類,因此我們使用以下算法:

  • K-近鄰算法(KNN)
  • 邏輯回歸算法
  • 支持向量機(jī)(SVMs)
  • 隨機(jī)梯度下降(SGD)
  • 樸素貝葉斯算法
  • 決策樹算法
  • 隨機(jī)森林算法

劃分?jǐn)?shù)據(jù)集

首先,將數(shù)據(jù)集劃分為訓(xùn)練集和測試集。使用 ??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% 的數(shù)據(jù)進(jìn)行測試,80% 的數(shù)據(jù)用于訓(xùn)練。劃分?jǐn)?shù)據(jù)的意義在于對(duì)一組新數(shù)據(jù)(即測試集)評(píng)估我們訓(xùn)練的模型是否有效。

K-近鄰算法

現(xiàn)在,讓我們開始訓(xùn)練第一個(gè)模型。首先,我們使用 KNN 算法。先訓(xùn)練模型,然后再評(píng)估模型的準(zhǔn)確率(具體的代碼都可以使用 Python 的 ??sklearn?? 庫來完成)。詳見以下代碼,KNN 訓(xùn)練模型的準(zhǔn)確率大約為 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
邏輯回歸算法

邏輯回歸模型的代碼十分類似——首先從庫中導(dǎo)入函數(shù),擬合模型,然后對(duì)模型進(jìn)行評(píng)估。下面的代碼使用邏輯回歸算法,準(zhǔn)確率大約為 66%。

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

以下代碼使用 SVM,準(zhǔn)確率大約為 67%。

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

以下的代碼使用了隨機(jī)森林算法,隨機(jī)森林訓(xùn)練模型的準(zhǔn)確率大約為 69%。

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

接下來,我們使用決策樹算法,其準(zhǔn)確率約為 61%。

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

以下的代碼使用隨機(jī)梯度下降算法,其準(zhǔn)確率大約為 49%。

from sklearn.linear_model import SGDClassifier
model = SGDClassifier()
model = model.fit(X_train,y_train)
model.score(X_test,y_test)
0.49206349206349204
樸素貝葉斯算法

以下的代碼使用樸素貝葉斯算法,樸素貝葉斯訓(xùn)練模型的準(zhǔn)確率大約為 60%。

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

情感分析的最佳算法

接下來,我們繪制所有算法的準(zhǔn)確率圖。如下圖所示。

Figure 5: Accuracy performance of the different algorithms

Figure 5: Accuracy performance of the different algorithms

可以看到,對(duì)于情感分析這一問題,隨機(jī)森林算法有最佳的準(zhǔn)確率。由此,我們可以得出結(jié)論,隨機(jī)森林算法是所有機(jī)器算法中最適合情感分析的算法。我們可以通過處理得到更好的特征、嘗試其他矢量化技術(shù)、或者使用更好的數(shù)據(jù)集或更好的分類算法,來進(jìn)一步提高準(zhǔn)確率。

既然,隨機(jī)森林算法是解決情感分析問題的最佳算法,我將向你展示一個(gè)預(yù)處理數(shù)據(jù)的樣本。在下圖中,你可以看到模型會(huì)做出正確的預(yù)測!試試這個(gè)來改進(jìn)你的項(xiàng)目吧!

Figure 6: Sample predictions made

Figure 6: Sample predictions made

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2018-01-04 13:07:43

Python機(jī)器學(xué)習(xí)情感分析

2025-01-06 08:35:42

SVM機(jī)器學(xué)習(xí)人工智能

2020-10-25 08:59:00

機(jī)器學(xué)習(xí)情緒ML

2016-12-07 14:45:25

KNIME情感分析數(shù)據(jù)分析

2018-06-14 14:05:48

機(jī)器學(xué)習(xí)大數(shù)據(jù)卡通上色

2019-11-20 08:00:00

Ocado機(jī)器學(xué)習(xí)

2018-06-10 08:35:30

2017-03-21 10:55:22

大數(shù)據(jù)

2020-07-24 10:52:45

人工智能

2020-12-25 15:24:24

人工智能

2021-12-26 22:57:57

Java開發(fā)深度學(xué)習(xí)

2022-05-03 09:59:43

網(wǎng)絡(luò)釣魚數(shù)據(jù)集機(jī)器學(xué)習(xí)

2018-11-15 09:00:00

機(jī)器學(xué)習(xí)人工智能數(shù)據(jù)中心

2017-07-07 14:41:13

機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)JavaScript

2021-11-02 09:40:50

TensorFlow機(jī)器學(xué)習(xí)人工智能

2017-08-25 14:29:43

機(jī)器學(xué)習(xí)Java

2016-12-07 14:56:51

KNIME數(shù)據(jù)分析

2019-12-17 16:14:24

機(jī)器學(xué)習(xí)設(shè)計(jì)算法

2017-09-01 18:17:40

2017-05-04 08:48:36

達(dá)觀數(shù)據(jù)分析架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)