您好,登錄后才能下訂單哦!
本篇文章為大家展示了怎樣用Python代碼做情感分析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
一臺可以上網(wǎng)的電腦
基本的python代碼閱讀能力,用于修改幾個模型參數(shù)
對百度中文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
實驗代碼
來自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
test_text = [
'滄海桑田', # 中型,世事變化很大
'下里巴人', # 褒義,通俗的文學(xué)藝術(shù)
'有口皆碑', # 褒義,對突出的好人好事一致頌揚(yáng)
'危言危行', # 褒義,說正直的話,做正直的事
'鬼斧神工', # 褒義,指大自然美景
'不贊一詞', # 褒義,不能再添一句話,表示寫的很好
'文不加點', # 褒義,指寫作技巧高超
'差強(qiáng)人意', # 褒義,大體還能使人滿意
'無微不至', # 褒義,指細(xì)心周到
'事倍功半', # 褒義,指不費(fèi)力就有好的效果
'事半功倍', # 貶義,指浪費(fèi)了力氣卻沒有好效果
'蠢蠢欲動', # 貶義,指要干壞事
'面目全非', # 貶義,指大破壞
'江河日下', # 貶義,指事物日漸衰落
'評頭論足', # 貶義,指小節(jié)過分挑剔
'生靈涂炭', # 貶義,指人民極端困苦
'始作俑者', # 貶義,第一個做壞事的人
'無所不為', # 貶義,什么壞事都干
'無所不至', # 貶義,什么壞事都干
'陽春白雪', # 貶義,高深不容易理解的藝術(shù)
]
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é),三個不同類別的測評如下所示:
總結(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è)資訊頻道。
免責(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)容。