溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎樣用Python代碼做情感分析

發(fā)布時間:2021-10-28 17:07:28 來源:億速云 閱讀:203 作者:柒染 欄目:編程語言

本篇文章為大家展示了怎樣用Python代碼做情感分析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

  1. 一臺可以上網(wǎng)的電腦

  2. 基本的python代碼閱讀能力,用于修改幾個模型參數(shù)

  3. 對百度中文NLP最新成果的濃烈興趣

  • 訓(xùn)練模型:Senta情感分析模型基本簡介

Senta是百度NLP開放的中文情感分析模型,可以用于進(jìn)行中文句子的情感分析,輸出結(jié)果為{正向/中性/負(fù)向}中的一個,關(guān)于模型的結(jié)構(gòu)細(xì)節(jié),請查看Senta----github.com/PaddlePaddle/Paddlehub/demo/senta
  • 本示例代碼選擇的是Senta-BiLSTM模型。

  • 模型來源:Paddlehub簡介

PaddleHub是基于PaddlePaddle開發(fā)的預(yù)訓(xùn)練模型管理工具,可以借助預(yù)訓(xùn)練模型更便捷地開展遷移學(xué)習(xí)工作。
  • 本次評測中只使用了預(yù)訓(xùn)練模型,沒有進(jìn)行fine-tune

  • 代碼運(yùn)行環(huán)境:百度 AI studio

怎樣用Python代碼做情感分析

實驗代碼

  • 來自paddlehub/senta_demo.py

github:https://github.com/PaddlePaddle/PaddleHub/blob/release/v0.5.0/demo/senta/senta_demo.py

from __future__ import print_function import json import os import six import paddlehub as hub if __name__ == "__main__":  # 加載senta模型  senta = hub.Module(name="senta_bilstm")  # 把要測試的短文本以str格式放到這個列表里  test_text = [  "這家餐廳不是很好吃",  "這部電影差強(qiáng)人意",  ]  # 指定模型輸入  input_dict = {"text": test_text}  # 把數(shù)據(jù)喂給senta模型的文本分類函數(shù)  results = senta.sentiment_classify(data=input_dict)  # 遍歷分析每個短文本  for index, text in enumerate(test_text):  results[index]["text"] = text  for index, result in enumerate(results):  if six.PY2:  print(  json.dumps(results[index], encoding="utf8", ensure_ascii=False))  else:  print('text: {},    predict: {}'.format(results[index]['text'],results[index]['sentiment_key']))

詳細(xì)測評

成語情感分析

input

  1. test_text = [ 

  2.  '滄海桑田', # 中型,世事變化很大 

  3.  '下里巴人', # 褒義,通俗的文學(xué)藝術(shù) 

  4.  '有口皆碑', # 褒義,對突出的好人好事一致頌揚(yáng) 

  5.  '危言危行', # 褒義,說正直的話,做正直的事 

  6.  '鬼斧神工', # 褒義,指大自然美景 

  7.  '不贊一詞', # 褒義,不能再添一句話,表示寫的很好 

  8.  '文不加點', # 褒義,指寫作技巧高超 

  9.  '差強(qiáng)人意', # 褒義,大體還能使人滿意 

  10.  '無微不至', # 褒義,指細(xì)心周到 

  11.  '事倍功半', # 褒義,指不費(fèi)力就有好的效果 

  12.  '事半功倍', # 貶義,指浪費(fèi)了力氣卻沒有好效果 

  13.  '蠢蠢欲動', # 貶義,指要干壞事 

  14.  '面目全非', # 貶義,指大破壞 

  15.  '江河日下', # 貶義,指事物日漸衰落 

  16.  '評頭論足', # 貶義,指小節(jié)過分挑剔 

  17.  '生靈涂炭', # 貶義,指人民極端困苦 

  18.  '始作俑者', # 貶義,第一個做壞事的人 

  19.  '無所不為', # 貶義,什么壞事都干 

  20.  '無所不至', # 貶義,什么壞事都干 

  21.  '陽春白雪', # 貶義,高深不容易理解的藝術(shù) 

  22.  ]

output

運(yùn)行耗時: 4秒480毫秒 text: 滄海桑田, positive_prob: 0.3838, predict: negative # 錯誤 text: 下里巴人, positive_prob: 0.7957, predict: positive  text: 有口皆碑, positive_prob: 0.906, predict: positive text: 危言危行, positive_prob: 0.588, predict: positive text: 鬼斧神工, positive_prob: 0.657, predict: positive text: 不贊一詞, positive_prob: 0.9698, predict: positive text: 文不加點, positive_prob: 0.1284, predict: negative # 錯誤 text: 差強(qiáng)人意, positive_prob: 0.0429, predict: negative # 錯誤 text: 無微不至, positive_prob: 0.8997, predict: positive text: 事倍功半, positive_prob: 0.6181, predict: positive text: 事半功倍, positive_prob: 0.8558, predict: positive # 錯誤 text: 蠢蠢欲動, positive_prob: 0.7353, predict: positive # 錯誤 text: 面目全非, positive_prob: 0.2186, predict: negative text: 江河日下, positive_prob: 0.2753, predict: negative text: 評頭論足, positive_prob: 0.6737, predict: positive # 錯誤 text: 生靈涂炭, positive_prob: 0.4661, predict: neutral # 錯誤 text: 始作俑者, positive_prob: 0.247, predict: negative text: 無所不為, positive_prob: 0.5948, predict: positive # 錯誤 text: 無所不至, positive_prob: 0.553, predict: positive # 錯誤 text: 陽春白雪, positive_prob: 0.7552, predict: positive # 錯誤

正確率:10/20 = 50%

轉(zhuǎn)折復(fù)句情緒分析

input

test_text = [  '小明雖然考了第一,但是他一點也不驕傲', # 積極   '你不是不聰明,而是不認(rèn)真', # 消極  '雖然小明很努力,但是他還是沒有考100分', # 消極   '雖然小明有時很頑皮,但是他很懂事', # 積極   '雖然這座橋已經(jīng)建了很多年,但是她依然很堅固', # 積極   '他雖然很頑皮,但是學(xué)習(xí)很好', # 積極  '學(xué)習(xí)不是枯燥無味,而是趣味橫生', # 積極   '雖然很困難,但是我還是不會退縮', # 積極   '雖然小妹妹只有5歲,但是她能把乘法口訣倒背如流', # 積極   '雖然我很過分,但是都是為了你好', # 積極   '小明成績不好,不是因為不聰明,而是因為不努力', # 消極   '雖然這樣做不妥當(dāng),但已經(jīng)是最好的選擇', # 積極   '這次雖然失敗,但卻是成功的開始', # 積極  '雖然這道題很難,但是我相信我會把它做出來', # 積極   '雖然爺爺已經(jīng)很老了,但是他還是堅持每天做運(yùn)動', # 積極   '不是沒有美,而是我們?nèi)鄙侔l(fā)現(xiàn)美的眼光', # 消極   '雖然他們有良好的生活條件,但是浪費(fèi)資源遲早會帶來惡果', # 消極   '他不是我們的敵人,而是我們的朋友', # 積極   '他不是不會做,而是不想做', # 消極  '雖然那個夢想看起來離我遙不可及,但是我相信經(jīng)過我的努力它一定會實現(xiàn)', # 積極  ]

output

運(yùn)行耗時: 2秒667毫秒 text: 小明雖然考了第一,但是他一點也不驕傲, positive_prob: 0.9598,  predict: positive  text: 你不是不聰明,而是不認(rèn)真, positive_prob: 0.0275,  predict: negative text: 雖然小明很努力,但是他還是沒有考100分, positive_prob: 0.7188,  predict: positive # 錯誤 text: 雖然小明有時很頑皮,但是他很懂事, positive_prob: 0.8776,  predict: positive text: 雖然這座橋已經(jīng)建了很多年,但是她依然很堅固, positive_prob: 0.9782,  predict: positive text: 他雖然很頑皮,但是學(xué)習(xí)很好, positive_prob: 0.9181,  predict: positive text: 學(xué)習(xí)不是枯燥無味,而是趣味橫生, positive_prob: 0.3279,  predict: negative # 錯誤 text: 雖然很困難,但是我還是不會退縮, positive_prob: 0.3974,  predict: negative # 錯誤 text: 雖然小妹妹只有5歲,但是她能把乘法口訣倒背如流, positive_prob: 0.5124,  predict: neutral text: 雖然我很過分,但是都是為了你好, positive_prob: 0.399,  predict: negative # 錯誤 text: 小明成績不好,不是因為不聰明,而是因為不努力, positive_prob: 0.1881,  predict: negative text: 雖然這樣做不妥當(dāng),但已經(jīng)是最好的選擇, positive_prob: 0.806,  predict: positive text: 這次雖然失敗,但卻是成功的開始, positive_prob: 0.4862,  predict: neutral # 錯誤 text: 雖然這道題很難,但是我相信我會把它做出來, positive_prob: 0.3959,  predict: negative # 錯誤 text: 雖然爺爺已經(jīng)很老了,但是他還是堅持每天做運(yùn)動, positive_prob: 0.9178,  predict: positive text: 不是沒有美,而是我們?nèi)鄙侔l(fā)現(xiàn)美的眼光, positive_prob: 0.5614,  predict: positive text: 雖然他們有良好的生活條件,但是浪費(fèi)資源遲早帶來惡果, positive_prob: 0.1086,  predict: negative text: 他不是我們的敵人,而是我們的朋友, positive_prob: 0.3749,  predict: negative # 錯誤 text: 他不是不會做,而是不想做, positive_prob: 0.1247,  predict: negative  text: 雖然那個夢想看起來離我遙不可及,但是我相信經(jīng)過我的努力它一定會實現(xiàn), positive_prob: 0.957,  predict: positive

正確率:13/20 = 65%

具體場景情緒分析

input

test_text = [  '這車耗油很快',   '這車開的很快',  '這房間有一股死老鼠味道',  '這房間有煙味',  '他的發(fā)型像殺馬特',  '這衣服機(jī)洗掉色',  '這衣服穿多了起球',  '這軟件容易閃退',  '他打球的樣子像蔡徐坤',  '這把20了',  '這把可以打',  '他射球的樣子像科比',  '這房間的布置很有情調(diào)',  '這酒讓人回味',  '這衣服很酷',  '他的側(cè)臉好像林峰',  '五星好評',  '以后會回購的',  '性價比很高',  '物美價廉',  '這女生讓我心動'  ]

output

運(yùn)行耗時: 2秒676毫秒 text: 這車耗油很快, positive_prob: 0.2926, predict: negative text: 這車開的很快, positive_prob: 0.8478, predict: positive text: 這房間有一股死老鼠味道, positive_prob: 0.0071, predict: negative text: 這房間有煙味, positive_prob: 0.2071, predict: negative text: 他的發(fā)型像殺馬特, positive_prob: 0.3445, predict: negative text: 這衣服機(jī)洗掉色, positive_prob: 0.3912, predict: negative text: 這衣服穿多了起球, positive_prob: 0.679, predict: positive # 錯誤 text: 這軟件容易閃退, positive_prob: 0.0051, predict: negative text: 他打球的樣子像蔡徐坤, positive_prob: 0.8684, predict: positive # 錯誤 text: 這把20了, positive_prob: 0.1695, predict: negative text: 這把可以打, positive_prob: 0.3503, predict: negative # 錯誤 text: 他射球的樣子像科比, positive_prob: 0.7263, predict: positive text: 這房間的布置很有情調(diào), positive_prob: 0.9519, predict: positive text: 這酒讓人回味, positive_prob: 0.7431, predict: positive text: 這衣服很酷, positive_prob: 0.9817, predict: positive text: 他的側(cè)臉好像林峰, positive_prob: 0.5621, predict: positive text: 五星好評, positive_prob: 0.9971, predict: positive text: 以后會回購的, positive_prob: 0.6903, predict: positive text: 性價比很高, positive_prob: 0.9799, predict: positive text: 物美價廉, positive_prob: 0.9542, predict: positive text: 這女生讓我心動, positive_prob: 0.956, predict: positive

正確率:17/20 = 85%

總結(jié),三個不同類別的測評如下所示:

怎樣用Python代碼做情感分析

總結(jié)

1.模型計算耗時較小,使用體驗不錯。

2.成語情感分析方面,我專門挑選的是一些比較難從字面理解的,容易混淆情感的成語(比如差強(qiáng)人意被判定為消極),這些也是高考??嫉膬?nèi)容。雖然最后模型正確率只有一般,但是我認(rèn)為是可以接受的,適當(dāng)增加成語語句作為訓(xùn)練語料會使模型"更懂"中文。

大家有興趣的可以試一試一些比較容易從字面理解情感的成語,我覺得得分會比本次評測的結(jié)果要好。

3.轉(zhuǎn)折語句情感分析本身也是對模型的一種挑戰(zhàn),實測效果為65分,個人覺得模型對于像“但是”,“雖然”這樣的詞語沒有足夠的attention,因為這些轉(zhuǎn)折詞背后的語義往往才是最影響整個句子的情感的,最終評分65分,個人認(rèn)為模型在這方面表現(xiàn)一般。

4.評分最好看的是具體場景情感分析,大概預(yù)訓(xùn)練語料中有大量的淘寶評價?像殺馬特 20 科比  這些小字眼是判定情感的關(guān)鍵,而模型也確實捕捉到并判斷出來了,這點比較讓我驚喜。

上述內(nèi)容就是怎樣用Python代碼做情感分析,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI