新聞中心
17行代碼跑最新NLP模型?你也可以!

- 本次作者評(píng)測(cè)所需(防嚇退)
- 一臺(tái)可以上網(wǎng)的電腦
- 基本的python代碼閱讀能力,用于修改幾個(gè)模型參數(shù)
- 對(duì)百度中文NLP最新成果的濃烈興趣
- 訓(xùn)練模型:Senta情感分析模型基本簡(jiǎn)介
- Senta是百度NLP開(kāi)放的中文情感分析模型,可以用于進(jìn)行中文句子的情感分析,輸出結(jié)果為{正向/中性/負(fù)向}中的一個(gè),關(guān)于模型的結(jié)構(gòu)細(xì)節(jié),請(qǐng)查看Senta----github.com/PaddlePaddle/Paddlehub/demo/senta
- 本示例代碼選擇的是Senta-BiLSTM模型。
- 模型來(lái)源:Paddlehub簡(jiǎn)介
- PaddleHub是基于PaddlePaddle開(kāi)發(fā)的預(yù)訓(xùn)練模型管理工具,可以借助預(yù)訓(xùn)練模型更便捷地開(kāi)展遷移學(xué)習(xí)工作。
- 本次評(píng)測(cè)中只使用了預(yù)訓(xùn)練模型,沒(méi)有進(jìn)行fine-tune
- 代碼運(yùn)行環(huán)境:百度 AI studio
實(shí)驗(yàn)代碼
- 來(lái)自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")
- # 把要測(cè)試的短文本以str格式放到這個(gè)列表里
- test_text = [
- "這家餐廳不是很好吃",
- "這部電影差強(qiáng)人意",
- ]
- # 指定模型輸入
- input_dict = {"text": test_text}
- # 把數(shù)據(jù)喂給senta模型的文本分類(lèi)函數(shù)
- results = senta.sentiment_classify(data=input_dict)
- # 遍歷分析每個(gè)短文本
- 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ì)測(cè)評(píng)
成語(yǔ)情感分析
input
- test_text = [
- '滄海桑田', # 中型,世事變化很大
- '下里巴人', # 褒義,通俗的文學(xué)藝術(shù)
- '有口皆碑', # 褒義,對(duì)突出的好人好事一致頌揚(yáng)
- '危言危行', # 褒義,說(shuō)正直的話,做正直的事
- '鬼斧神工', # 褒義,指大自然美景
- '不贊一詞', # 褒義,不能再添一句話,表示寫(xiě)的很好
- '文不加點(diǎn)', # 褒義,指寫(xiě)作技巧高超
- '差強(qiáng)人意', # 褒義,大體還能使人滿意
- '無(wú)微不至', # 褒義,指細(xì)心周到
- '事倍功半', # 褒義,指不費(fèi)力就有好的效果
- '事半功倍', # 貶義,指浪費(fèi)了力氣卻沒(méi)有好效果
- '蠢蠢欲動(dòng)', # 貶義,指要干壞事
- '面目全非', # 貶義,指大破壞
- '江河日下', # 貶義,指事物日漸衰落
- '評(píng)頭論足', # 貶義,指小節(jié)過(guò)分挑剔
- '生靈涂炭', # 貶義,指人民極端困苦
- '始作俑者', # 貶義,第一個(gè)做壞事的人
- '無(wú)所不為', # 貶義,什么壞事都干
- '無(wú)所不至', # 貶義,什么壞事都干
- '陽(yáng)春白雪', # 貶義,高深不容易理解的藝術(shù)
- ]
output
- 運(yùn)行耗時(shí): 4秒480毫秒
- text: 滄海桑田, positive_prob: 0.3838, predict: negative # 錯(cuò)誤
- 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: 文不加點(diǎn), positive_prob: 0.1284, predict: negative # 錯(cuò)誤
- text: 差強(qiáng)人意, positive_prob: 0.0429, predict: negative # 錯(cuò)誤
- text: 無(wú)微不至, positive_prob: 0.8997, predict: positive
- text: 事倍功半, positive_prob: 0.6181, predict: positive
- text: 事半功倍, positive_prob: 0.8558, predict: positive # 錯(cuò)誤
- text: 蠢蠢欲動(dòng), positive_prob: 0.7353, predict: positive # 錯(cuò)誤
- text: 面目全非, positive_prob: 0.2186, predict: negative
- text: 江河日下, positive_prob: 0.2753, predict: negative
- text: 評(píng)頭論足, positive_prob: 0.6737, predict: positive # 錯(cuò)誤
- text: 生靈涂炭, positive_prob: 0.4661, predict: neutral # 錯(cuò)誤
- text: 始作俑者, positive_prob: 0.247, predict: negative
- text: 無(wú)所不為, positive_prob: 0.5948, predict: positive # 錯(cuò)誤
- text: 無(wú)所不至, positive_prob: 0.553, predict: positive # 錯(cuò)誤
- text: 陽(yáng)春白雪, positive_prob: 0.7552, predict: positive # 錯(cuò)誤
正確率:10/20 = 50%
轉(zhuǎn)折復(fù)句情緒分析
input
- test_text = [
- '小明雖然考了第一,但是他一點(diǎn)也不驕傲', # 積極
- '你不是不聰明,而是不認(rèn)真', # 消極
- '雖然小明很努力,但是他還是沒(méi)有考100分', # 消極
- '雖然小明有時(shí)很頑皮,但是他很懂事', # 積極
- '雖然這座橋已經(jīng)建了很多年,但是她依然很堅(jiān)固', # 積極
- '他雖然很頑皮,但是學(xué)習(xí)很好', # 積極
- '學(xué)習(xí)不是枯燥無(wú)味,而是趣味橫生', # 積極
- '雖然很困難,但是我還是不會(huì)退縮', # 積極
- '雖然小妹妹只有5歲,但是她能把乘法口訣倒背如流', # 積極
- '雖然我很過(guò)分,但是都是為了你好', # 積極
- '小明成績(jī)不好,不是因?yàn)椴宦斆?,而是因?yàn)椴慌?, # 消極
- '雖然這樣做不妥當(dāng),但已經(jīng)是最好的選擇', # 積極
- '這次雖然失敗,但卻是成功的開(kāi)始', # 積極
- '雖然這道題很難,但是我相信我會(huì)把它做出來(lái)', # 積極
- '雖然爺爺已經(jīng)很老了,但是他還是堅(jiān)持每天做運(yùn)動(dòng)', # 積極
- '不是沒(méi)有美,而是我們?nèi)鄙侔l(fā)現(xiàn)美的眼光', # 消極
- '雖然他們有良好的生活條件,但是浪費(fèi)資源遲早會(huì)帶來(lái)惡果', # 消極
- '他不是我們的敵人,而是我們的朋友', # 積極
- '他不是不會(huì)做,而是不想做', # 消極
- '雖然那個(gè)夢(mèng)想看起來(lái)離我遙不可及,但是我相信經(jīng)過(guò)我的努力它一定會(huì)實(shí)現(xiàn)', # 積極
- ]
output
- 運(yùn)行耗時(shí): 2秒667毫秒
- text: 小明雖然考了第一,但是他一點(diǎn)也不驕傲, positive_prob: 0.9598,
- predict: positive
- text: 你不是不聰明,而是不認(rèn)真, positive_prob: 0.0275,
- predict: negative
- text: 雖然小明很努力,但是他還是沒(méi)有考100分, positive_prob: 0.7188,
- predict: positive # 錯(cuò)誤
- text: 雖然小明有時(shí)很頑皮,但是他很懂事, positive_prob: 0.8776,
- predict: positive
- text: 雖然這座橋已經(jīng)建了很多年,但是她依然很堅(jiān)固, positive_prob: 0.9782,
- predict: positive
- text: 他雖然很頑皮,但是學(xué)習(xí)很好, positive_prob: 0.9181,
- predict: positive
- text: 學(xué)習(xí)不是枯燥無(wú)味,而是趣味橫生, positive_prob: 0.3279,
- predict: negative # 錯(cuò)誤
- text: 雖然很困難,但是我還是不會(huì)退縮, positive_prob: 0.3974,
- predict: negative # 錯(cuò)誤
- text: 雖然小妹妹只有5歲,但是她能把乘法口訣倒背如流, positive_prob: 0.5124,
- predict: neutral
- text: 雖然我很過(guò)分,但是都是為了你好, positive_prob: 0.399,
- predict: negative # 錯(cuò)誤
- text: 小明成績(jī)不好,不是因?yàn)椴宦斆?,而是因?yàn)椴慌? positive_prob: 0.1881,
- predict: negative
- text: 雖然這樣做不妥當(dāng),但已經(jīng)是最好的選擇, positive_prob: 0.806,
- predict: positive
- text: 這次雖然失敗,但卻是成功的開(kāi)始, positive_prob: 0.4862,
- predict: neutral # 錯(cuò)誤
- text: 雖然這道題很難,但是我相信我會(huì)把它做出來(lái), positive_prob: 0.3959,
- predict: negative # 錯(cuò)誤
- text: 雖然爺爺已經(jīng)很老了,但是他還是堅(jiān)持每天做運(yùn)動(dòng), positive_prob: 0.9178,
- predict: positive
- text: 不是沒(méi)有美,而是我們?nèi)鄙侔l(fā)現(xiàn)美的眼光, positive_prob: 0.5614,
- predict: positive
- text: 雖然他們有良好的生活條件,但是浪費(fèi)資源遲早帶來(lái)惡果, positive_prob: 0.1086,
- predict: negative
- text: 他不是我們的敵人,而是我們的朋友, positive_prob: 0.3749,
- predict: negative # 錯(cuò)誤
- text: 他不是不會(huì)做,而是不想做, positive_prob: 0.1247,
- predict: negative
- text: 雖然那個(gè)夢(mèng)想看起來(lái)離我遙不可及,但是我相信經(jīng)過(guò)我的努力它一定會(huì)實(shí)現(xiàn), positive_prob: 0.957,
- predict: positive
正確率:13/20 = 65%
具體場(chǎng)景情緒分析
input
- test_text = [
- '這車(chē)耗油很快',
- '這車(chē)開(kāi)的很快',
- '這房間有一股死老鼠味道',
- '這房間有煙味',
- '他的發(fā)型像殺馬特',
- '這衣服機(jī)洗掉色',
- '這衣服穿多了起球',
- '這軟件容易閃退',
- '他打球的樣子像蔡徐坤',
- '這把20了',
- '這把可以打',
- '他射球的樣子像科比',
- '這房間的布置很有情調(diào)',
- '這酒讓人回味',
- '這衣服很酷',
- '他的側(cè)臉好像林峰',
- '五星好評(píng)',
- '以后會(huì)回購(gòu)的',
- '性價(jià)比很高',
- '物美價(jià)廉',
- '這女生讓我心動(dòng)'
- ]
output
- 運(yùn)行耗時(shí): 2秒676毫秒
- text: 這車(chē)耗油很快, positive_prob: 0.2926, predict: negative
- text: 這車(chē)開(kāi)的很快, 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 # 錯(cuò)誤
- text: 這軟件容易閃退, positive_prob: 0.0051, predict: negative
- text: 他打球的樣子像蔡徐坤, positive_prob: 0.8684, predict: positive # 錯(cuò)誤
- text: 這把20了, positive_prob: 0.1695, predict: negative
- text: 這把可以打, positive_prob: 0.3503, predict: negative # 錯(cuò)誤
- 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: 五星好評(píng), positive_prob: 0.9971, predict: positive
- text: 以后會(huì)回購(gòu)的, positive_prob: 0.6903, predict: positive
- text: 性價(jià)比很高, positive_prob: 0.9799, predict: positive
- text: 物美價(jià)廉, positive_prob: 0.9542, predict: positive
- text: 這女生讓我心動(dòng), positive_prob: 0.956, predict: positive
正確率:17/20 = 85%
總結(jié),三個(gè)不同類(lèi)別的測(cè)評(píng)如下所示:
總結(jié)
1.模型計(jì)算耗時(shí)較小,使用體驗(yàn)不錯(cuò)。
2.成語(yǔ)情感分析方面,我專(zhuān)門(mén)挑選的是一些比較難從字面理解的,容易混淆情感的成語(yǔ)(比如差強(qiáng)人意被判定為消極),這些也是高考常考的內(nèi)容。雖然最后模型正確率只有一般,但是我認(rèn)為是可以接受的,適當(dāng)增加成語(yǔ)語(yǔ)句作為訓(xùn)練語(yǔ)料會(huì)使模型"更懂"中文。
大家有興趣的可以試一試一些比較容易從字面理解情感的成語(yǔ),我覺(jué)得得分會(huì)比本次評(píng)測(cè)的結(jié)果要好。
3.轉(zhuǎn)折語(yǔ)句情感分析本身也是對(duì)模型的一種挑戰(zhàn),實(shí)測(cè)效果為65分,個(gè)人覺(jué)得模型對(duì)于像“但是”,“雖然”這樣的詞語(yǔ)沒(méi)有足夠的attention,因?yàn)檫@些轉(zhuǎn)折詞背后的語(yǔ)義往往才是最影響整個(gè)句子的情感的,最終評(píng)分65分,個(gè)人認(rèn)為模型在這方面表現(xiàn)一般。
4.評(píng)分最好看的是具體場(chǎng)景情感分析,大概預(yù)訓(xùn)練語(yǔ)料中有大量的淘寶評(píng)價(jià)?像殺馬特 20 科比 這些小字眼是判定情感的關(guān)鍵,而模型也確實(shí)捕捉到并判斷出來(lái)了,這點(diǎn)比較讓我驚喜。
本文名稱:燃爆!17行Python代碼做情感分析?你也可以的
分享鏈接:http://www.dlmjj.cn/article/cosogpi.html


咨詢
建站咨詢
