基於機器學習的微博情感分析

2021-02-20 berber周的小屋

一、數據獲取

數據來源於github,文末會附數據來源連結。數據包含微博評論約12萬條,其中正向評論、負向評論各約6萬條。數據有label、review兩個欄位,其中label欄位用於表示評論是否是正向評論,當取值為1時表示正向評論,取值為0時表示負向評論;review欄位用於表示微博評論內容。

二、數據導入與探索

全文運用python作為數據處理、預測的工具。首先利用pandas庫導入數據並觀察一下前五行數據來看一下數據的大致情況:

import pandas as pddata=pd.read_csv(r'C:\Users\zhousiying\Desktop\weibo_senti_100k\weibo_senti_100k\weibo_senti_100k.csv')data.head()

所得到的結果如下:

然後看一下數據是否存在空值:

所得結果如下:

label     0review    0dtype: int64

結果表示數據集中不存在空值,因此不需要對空值進行處理。

最後驗證一下正向、負向評論的佔比:

import matplotlib.pyplot as pltfig = plt.figure()data.groupby('label').review.count().plot.bar(ylim=0)plt.show()

所得結果如下:

由上述結果知,可驗證正向評論和負向評論數量基本相等,各大約為60000條。

三、數據預處理

首先用jieba庫對評論進行分詞處理,以便下一步對文本進行向量化表示:

import jiebadata['review'] = data['review'].map(lambda x: ' '.join(jieba.cut(x)))

然後用sklearn中的TfidfVectorizer函數對文本進行向量化處理:

from sklearn.feature_extraction.text import TfidfVectorizerdef stopwords_list():    with open(r'C:\Users\zhousiying\Desktop\stopword\hit_stopwords.txt',encoding='utf-8') as f:        lines = f.readlines()        result = [i.strip('\n') for i in lines]    return resultstopwords = stopwords_list()X=TfidfVectorizer(token_pattern=r'(?u)\b\w+\b', max_features=100, ngram_range=(1,2), stop_words=stopwords).fit_transform(data['review']).toarray()

在TfidfVectorizer函數的參數裡邊,token_pattern函數默認的取值是(?u)\b\w\w+\b,但是這樣會過濾掉單字,因此這裡改成了(?u)\b\w+\b。max_features指的是按語料詞頻排序取前多少個詞,這裡設定的是100,這個參數需要注意的是太小容易造成最後模型的欠擬合,太大的話一方面是可能會造成模型的過擬合,另一方面還會導致內存佔用過大,導致程序的運行速度變慢。stop_words用於指定停用詞,設定好後,函數自動檢測和過濾掉語料中有的停用詞。這裡運用了哈工大的停用詞表,後期可以試一下其它的停用詞表比如百度的停用詞表等,看看經過哪種停用詞表過濾後再使用模型效果會更好。

之後,將得到的tf-idf的特徵矩陣進行歸一化處理。需要說明的是,這裡之所以需要進行歸一化處理,是因為後邊可能要用到logistic回歸模型,若logistic回歸使用梯度下降法求最優解,歸一化有助於其快速收斂,否則模型可能會收斂較慢、甚至不能收斂。

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()X=scaler.fit_transform(X)X=pd.DataFrame(X)Y=data['label']

在樣本中隨機選擇十分之九的數據作為訓練集訓練模型,剩餘十分之一作為測試集來檢驗模型的效果。

from sklearn.model_selection import train_test_splitXtrain,Xtest,Ytrain,Ytest=train_test_split(X,Y,test_size=0.1,random_state=20)

四、模型訓練

這裡我們把樸素貝葉斯、logistic回歸、隨機森林、GradientBoostingClassifier、xgboost以及lightgbm這五個可以進行二分類的模型作為備選模型。首先看一下這五個模型預測的大致效果和所耗時間(若所耗時間過長,是否選用該模型則需要慎重考慮):

import timefrom sklearn.naive_bayes import GaussianNBfrom sklearn.linear_model import LogisticRegressionfrom sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifierimport xgboost as xgbimport lightgbm as lgbfrom sklearn.model_selection import cross_val_score
model1=GaussianNB()model2=LogisticRegression()model3=RandomForestClassifier()model4=GradientBoostingClassifier()model5=xgb.XGBClassifier()model6=lgb.LGBMClassifier()for model in [model1,model2,model3,model4,model5,model6]: start_time=time.time() score=cross_val_score(model,Xtrain,Ytrain,cv=10,scoring='accuracy').mean() end_time=time.time() time_cost=round(end_time-start_time,2) print('{}模型下的分類準確率為:{},耗時為{}s'.format(model,score,time_cost))

得到的結果如下:

從結果可以看出,在五個模型中,GradientBoostingClassifier、xgboost以及lightgbm這三個模型的預測結果較其它模型較高,且所用時長也還可以,因此選擇這三個模型對正向評論、負向評論的分類進行預測。在調參之後,為了加強模型的魯棒性,用投票法對三個模型的預測結果進行結合:

from sklearn.ensemble import VotingClassifiermodel_1=lgb.LGBMClassifier(n_estimators=15)model_2=xgb.XGBClassifier(n_estimators=15,max_depth=5)model_3=GradientBoostingClassifier()eclf = VotingClassifier(estimators=[('lgbc', model_1), ('xgbc', model_2), ('gbc', model_3)], voting='hard')eclf.fit(Xtrain,Ytrain)

五、模型檢驗

用測試集的數據對模型效果進行檢驗:

from sklearn.metrics import accuracy_scoreaccuracy=accuracy_score(eclf.predict(Xtest),Ytest)accuracy

結果顯示為0.9499958329860821,預測效果總體還可以。

六、總結

剛剛入門,數據集比較友好,導致最後的預測效果還可以。後邊還會繼續學習LSTM、TextCNN、Bert等模型,以及其他數據預處理方法,相信能有更好的預測效果。

附:數據下載連結:

https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/weibo_senti_100k/intro.ipynb

相關焦點

  • 基於機器學習的情感分析方法
    上次課程我們介紹了基於情感詞典的情感分析方法,本節課我們嘗試基於機器學習的情感分析方法,以電影中文文本情感分析為例,最常見的就是對電影評論數據進行情感分類
  • 文本情感分析:讓機器讀懂人類情感
    賦予機器情感分析能力引起了社會的廣泛關注,研究領域也開展了很多相關的研究工作。科幻電影《她》中人工智慧系統和主人公談戀愛的故事,激發了人們對機器具有人類情感的無限想像。那麼,機器是怎樣理解人類情感呢?通常來講,機器理解人類情感是一個多模態的感知過程,通過表情、行為、語言來理解情感。語言通常以文本的形式存在,本文主要是從文本的角度討論情感分析的研究。
  • 「情感計算」讓機器也可以察言觀色 它是怎麼做到的?
    在近日中國科協發布的12個領域60個重大問題中,人機情感交互位列其中。「無情感不智能」已經成為眾多研究者的共識。 日前,在杭州舉行的第七屆UCAN用戶體驗設計論壇上,阿里巴巴人機自然交互實驗室聯合達摩院機器智能技術實驗室和浙江大學推出了一款可以基於圖文內容自動生成短視頻的人工智慧Aliwood。
  • Facebook基於機器學習的應用程式
    原文連結:http://aiehive.com/facebooks-human-like-learning-applications/研究人員越來越傾向用機器學習的方法來解決現實世界的問題
  • 中文情感分析之TextCNN
    情感分析應用場景情感分析方法情感分析方法可以分為兩大類:一是基於情感詞典的方法,一是基於機器學習算法的方法。基於情感詞典的情感分析基於情感詞典的方法屬於傳統的情感分析方法,是對人的記憶和判斷思維的最簡單的模擬。直觀來講,它先通過學習來記憶一些基本詞彙,從而在大腦中形成一個包含積極詞彙、消極詞彙、否定詞、程度副詞的情感詞典。
  • 就喜歡看綜述論文:情感分析中的深度學習
    本文中,來自領英與伊利諾伊大學芝加哥分校的研究人員對基於深度學習的情感分析研究進行了詳細論述。情感分析或觀點挖掘是對人們對產品、服務、組織、個人、問題、事件、話題及其屬性的觀點、情感、情緒、評價和態度的計算研究。該領域的開始和快速發展與社交媒體的發展相一致,如評論、論壇、博客、微博、推特和社交網絡,因為這是人類歷史上第一次擁有如此海量的以數字形式記錄的觀點數據。
  • 基於機器學習的密碼強度檢測
    但所有的這些檢測都是基於規則的。一個密碼在Google這邊可能是強密碼但在Dropbox就變成了弱密碼。我在想我們能否讓機器學習算法來決定一個密碼是弱密碼還是強密碼。於是,這個帖子誕生了。讓我們開始吧。數據收集此次分析所使用的密碼數據來自於000webhost洩漏,此數據可在網上下載。那麼我們是如何決定哪些密碼是高強度的哪些密碼是低強度的呢?
  • 情感計算:讓機器更加智能
    人類的情感機制也使我們能夠完成太難編程或難以讓當前機器學習的任務 [1]。例如,我們的恐懼情緒使我們能夠意識到危險並保持安全。我們感知他人的情感並站在對方的角度思考問題使我們在複雜的世界中可以做出恰當的決策。飢餓、好奇心、驚喜和喜悅等情感使我們能夠規範自己的行為,並讓我們追求我們希望實現的目標。
  • 專欄 | 情感計算是人機互動核心?談深度學習在情感分析中的應用
    情感計算在人機互動中的作用在談論情感計算之前,先來說說情感本身在人類信息溝通中的意義。情感對於人類的智力、理性決策、社交、感知、記憶和學習以及創造都有很重要的作用,甚至有研究顯示「人類交流中 80% 的信息都是情感性的信息」。但為什麼不是內容,而是情感能傳遞最多的狀態信息呢?其實從認知科學角度來看,情感本身是高級智能的一部分。
  • 人工智慧技術落地:情感分析概述
    目前,絕大多數的人工智慧開放平臺都具備情感分析的能力,如圖所示:是玻森中文語義開放平臺的情感分析功能演示,可以看出除了通用領域的情感分析外,還有汽車、廚具、餐飲、新聞和微博幾個特定領域的分析。針對篇章級、句子級、屬性級這三種類型的情感分析任務,人們做了大量的研究並提出了很多分類的方法,這些方法大致可以分為基於詞典和基於機器學習兩種,下面我們進行詳細的講解。基於詞典的情感分析做情感分析離不開情感詞,情感詞是承載情感信息最基本的單元,除了基本的詞之外,一些包含了情感含義的短語和成語我們也將其統稱為情感詞。
  • 一種基於腦電圖情感識別的新型深度學習模型
    其中一部分機器學習技術中是通過分析腦電圖(EEG)信號來工作的,這些信號本質上是對從一個人的頭皮上收集的腦電活動的記錄。過去十多年來,大多數基於腦電圖的情緒分類方法都採用了傳統的機器學習方法,例如支持向量機(SVM)模型,因為這些方法需要的訓練樣本較少。事實上之所以使用需要訓練樣本量少的方法是因為過去缺乏大規模的EEG數據集。
  • 基於機器學習的數值天氣預報風速訂正研究
    近年來一些學者嘗試基於機器學習方法對數值天氣預報模式結果進行訂正,達到對風速的精細化預報。與傳統的訂正模型相比,基於機器學習方法的訂正模型則能捕捉非線性風速變化,在風速預報上表現出良好的性能。本文採用目前較為常用的三種機器學習(LASSO回歸、隨機森林和深度學習)以及MOS方法(經典天氣預報的統計訂正方法),對ECMWF數值天氣預報模式預測的近地面(10m)風速進行訂正。
  • 情感計算是人機互動核心?談深度學習在情感分析中的應用
    撰稿:竹間智能自然語言與深度學習小組 情感計算在人機互動中的作用 在談論情感計算之前,先來說說情感本身在人類信息溝通中的意義。 從文本情感分析到多模態情感分析 一般情況下,我們探討的情感分析多指文本中的情感分析,但多維度的情感分析,如文字+圖片+表情+顏文字的綜合分析,文本+語音+圖像的綜合,即多模態情感分析,是目前來說,比較前沿和更為重要的情感分析的研究方向。
  • 如何構建基於機器學習的入侵檢測系統
    本文將涵蓋機器學習模型構建機器學習項目的必要步驟如何評估一個機器學習模型最有用的數據科學和機器學習代碼庫人工神經網絡和深度學習基於機器學習的下一代入侵檢測系統人工智慧人工智慧是讓電腦程式變得像人一樣行為的藝術
  • 詳解基於樸素貝葉斯的情感分析及 Python 實現
    相對於「 基於詞典的分析 」,「 基於機器學習 」的就不需要大量標註的詞典,但是需要大量標記的數據,比如: 還是下面這句話,如果它的標籤是: 服務質量 - 中 (共有三個級別,好、中、差)
  • 匯量科技陳緒:如何基於AWS構建一站式機器學習平臺
    匯量科技陳緒:如何基於AWS構建一站式機器學習平臺 匯量科技陳緒:如何基於AWS構建一站式機器學習平臺 2020-12-08 15:07:26  來源:鳳凰網匯量科技資深算法架構師陳緒應邀出席大會,與AWS資深解決方案架構師、區域經理張孝峰展開深度對話,分享了匯量科技是如何基於AWS構建一站式機器學習平臺MindAlpha來滿足日均千億次預測並推動業務飛速發展的。即日起至12月18日,用戶均可通過AWS re:Invent 活動官方頁面觀看該分享內容。
  • 基於Kano模型的MOOC學習支持服務需求分析
    通過對已有研究進行分析,將MOOC學習支持服務界定為技術支持、資源支持、人員支持、情感支持以及評價支持,並以MOOC學習者的需求為出發點,結合Kano模型的理論內涵和研究方法,以國內MOOC平臺上的學習者為調查對象,開展「MOOC學習者對學習支持服務的需求調查」。研究表明,Kano模型下MOOC學習支持服務的有效需求主要分為魅力需求、必備需求和一維需求等三大類。
  • 頂會論文解讀|北大提出ELSA跨語言情感分析模型
    作為用戶情境感知和理解中一個重要方面,情感分析得到了包括數據挖掘、系統軟體、人機互動等多領域研究者的廣泛關注,成為交叉研究熱點並取得一系列進展。現有情感分析工作主要基於英語文本開展。在其他語言上,研究較少、標註語料稀缺,現有方法效果較差。但是,75%的網際網路用戶為非英語用戶,大約一半的Web內容為非英語內容。
  • 基於文本挖掘的學習分析應用研究
    ,校園SNS (Social Networking Services)、微博、博客等Web應用以及移動手機、平板上所產生的文本數據都為密切跟蹤學生學習的感受和需求提供了充足且真實的數據源。通過對收集文獻的總結歸納,基於自動挖掘的方法可以涵蓋以下幾種:(1)分類;(2)聚類;(3)關聯規則分析;(4)語義分析;(5)可視化;(6)話語分析;(7)內容分析;(8)其他。如圖4所示是文本挖掘應用於學習分析具體案例中各種方法數量的柱狀圖。(一篇文獻可能包括一種或多種分析方法,本文採用累加統計。)
  • Alink:基於Flink的機器學習平臺
    分享嘉賓:楊旭 阿里巴巴 資深算法專家編輯整理:朱榮導讀:Alink是基於Flink流批一體的機器學習平臺,提供一系列算法,可以幫助處理各種機器學習任務,比如統計分析、機器學習、實時預測、個性化推薦和異常檢測。