情緒分析系統來了,還開源

點擊上方藍色字體,選擇「標星公衆號」java

優質文章,第一時間送達python


66套java從入門到精通實戰課程分享git


百度最近開源了情緒分析系統,比較厲害,算法強大,大夥本身看吧!github



gitee開源地址:web

https://gitee.com/baidu/Senta




目錄

  • 簡介面試

  • SKEP算法

  • 代碼結構json

  • 一鍵化工具微信

  • 詳細使用說明app

  • Demo數據集說明

  • 論文效果復現

  • 文獻引用

簡介

情感分析旨在自動識別和提取文本中的傾向、立場、評價、觀點等主觀信息。它包含各式各樣的任務,好比句子級情感分類、評價對象級情感分類、觀點抽取、情緒分類等。情感分析是人工智能的重要研究方向,具備很高的學術價值。同時,情感分析在消費決策、輿情分析、個性化推薦等領域均有重要的應用,具備很高的商業價值。

近日,百度正式發佈情感預訓練模型SKEP(Sentiment Knowledge Enhanced Pre-training for Sentiment Analysis)。SKEP利用情感知識加強預訓練模型, 在14項中英情感分析典型任務上全面超越SOTA,此工做已經被ACL 2020錄用。

論文地址:https://arxiv.org/abs/2005.05635

爲了方便研發人員和商業合做夥伴共享效果領先的情感分析技術,本次百度在Senta中開源了基於SKEP的情感預訓練代碼和中英情感預訓練模型。並且,爲了進一步下降用戶的使用門檻,百度在SKEP開源項目中集成了面向產業化的一鍵式情感分析預測工具。用戶只須要幾行代碼便可實現基於SKEP的情感預訓練以及模型預測功能。

SKEP

SKEP是百度研究團隊提出的基於情感知識加強的情感預訓練算法,此算法採用無監督方法自動挖掘情感知識,而後利用情感知識構建預訓練目標,從而讓機器學會理解情感語義。SKEP爲各種情感分析任務提供統一且強大的情感語義表示。

百度研究團隊在三個典型情感分析任務,句子級情感分類(Sentence-level Sentiment Classification),評價對象級情感分類(Aspect-level Sentiment Classification)、觀點抽取(Opinion Role Labeling),共計14箇中英文數據上進一步驗證了情感預訓練模型SKEP的效果。實驗代表,以通用預訓練模型ERNIE(內部版本)做爲初始化,SKEP相比ERNIE平均提高約1.2%,而且較原SOTA平均提高約2%,具體效果以下表:

任務 數據集合 語言 指標 原SOTA SKEP 數據集地址
句子級情感
分類
SST-2 英文 ACC 97.50 97.60 下載地址
Amazon-2 英文 ACC 97.37 97.61 下載地址
ChnSentiCorp 中文 ACC 95.80 96.50 下載地址
NLPCC2014-SC 中文 ACC 78.72 83.53 下載地址
評價對象級的
情感分類
Sem-L 英文 ACC 81.35 81.62 下載地址
Sem-R 英文 ACC 87.89 88.36 下載地址
AI-challenge 中文 F1 72.87 72.90 暫未開放
SE-ABSA16_PHNS 中文 ACC 79.58 82.91 下載地址
SE-ABSA16_CAME 中文 ACC 87.11 90.06 下載地址
觀點
抽取
MPQA-H 英文 b-F1/p-F1 83.67/77.12 86.32/81.11 下載地址
MPQA-T 英文 b-F1/p-F1 81.59/73.16 83.67/77.53 下載地址
COTE_BD 中文 F1 82.17 84.50 下載地址
COTE_MFW 中文 F1 86.18 87.90 下載地址
COTE_DP 中文 F1 84.33 86.30 下載地址

代碼結構

.
├── README.md
├── requirements.txt
├── senta # senta核心代碼,包括模型、輸出reader、分詞方法等
├── script # 情感分析各任務入口啓動腳本,經過調用配置文件完成模型的訓練和預測
├── config # 任務配置文件目錄,在配置文件中設定模型的方法、超參數、數據等

一鍵化工具

爲了下降用戶的使用門檻,百度在SKEP開源項目中集成了面向產業化的一鍵式情感分析預測工具。具體安裝和使用方法以下:

安裝方法

本倉庫支持pip安裝和源碼安裝兩種方式,使用pip或者源碼安裝時須要先安裝PaddlePaddlePaddlePaddle安裝請參考安裝文檔。

  1. pip安裝

python -m pip install Senta
  1. 源碼安裝

git clone https://github.com/baidu/Senta.git
cd Senta
python -m pip install .

使用方法

from senta import Senta

my_senta = Senta()

# 獲取目前支持的情感預訓練模型, 咱們開放了以ERNIE 1.0 large(中文)、ERNIE 2.0 large(英文)和RoBERTa large(英文)做爲初始化的SKEP模型
print(my_senta.get_support_model()) # ["ernie_1.0_skep_large_ch", "ernie_2.0_skep_large_en", "roberta_skep_large_en"]

# 獲取目前支持的預測任務
print(my_senta.get_support_task()) # ["sentiment_classify", "aspect_sentiment_classify", "extraction"]

# 選擇是否使用gpu
use_cuda = True # 設置True or False

# 預測中文句子級情感分類任務
my_senta.init_model(model_class="ernie_1.0_skep_large_ch", task="sentiment_classify", use_cuda=use_cuda)
texts = ["中山大學是嶺南第一學府"]
result = my_senta.predict(texts)
print(result)

# 預測中文評價對象級的情感分類任務
my_senta.init_model(model_class="ernie_1.0_skep_large_ch", task="aspect_sentiment_classify", use_cuda=use_cuda)
texts = ["百度是一家高科技公司"]
aspects = ["百度"]
result = my_senta.predict(texts, aspects)
print(result)

# 預測中文觀點抽取任務
my_senta.init_model(model_class="ernie_1.0_skep_large_ch", task="extraction", use_cuda=use_cuda)
texts = ["唐 家 三 少 , 本 名 張 威 。"]
result = my_senta.predict(texts, aspects)
print(result)

# 預測英文句子級情感分類任務(基於SKEP-ERNIE2.0模型)
my_senta.init_model(model_class="ernie_2.0_skep_large_en", task="sentiment_classify", use_cuda=use_cuda)
texts = ["a sometimes tedious film ."]
result = my_senta.predict(texts)
print(result)

# 預測英文評價對象級的情感分類任務(基於SKEP-ERNIE2.0模型)
my_senta.init_model(model_class="ernie_2.0_skep_large_en", task="aspect_sentiment_classify", use_cuda=use_cuda)
texts = ["I love the operating system and the preloaded software."]
aspects = ["operating system"]
result = my_senta.predict(texts, aspects)
print(result)

# 預測英文觀點抽取任務(基於SKEP-ERNIE2.0模型)
my_senta.init_model(model_class="ernie_2.0_skep_large_en", task="extraction", use_cuda=use_cuda)
texts = ["The JCC would be very pleased to welcome your organization as a corporate sponsor ."]
result = my_senta.predict(texts)
print(result)

# 預測英文句子級情感分類任務(基於SKEP-RoBERTa模型)
my_senta.init_model(model_class="roberta_skep_large_en", task="sentiment_classify", use_cuda=use_cuda)
texts = ["a sometimes tedious film ."]
result = my_senta.predict(texts)
print(result)

# 預測英文評價對象級的情感分類任務(基於SKEP-RoBERTa模型)
my_senta.init_model(model_class="roberta_skep_large_en", task="aspect_sentiment_classify", use_cuda=use_cuda)
texts = ["I love the operating system and the preloaded software."]
aspects = ["operating system"]
result = my_senta.predict(texts, aspects)
print(result)

# 預測英文觀點抽取任務(基於SKEP-RoBERTa模型)
my_senta.init_model(model_class="roberta_skep_large_en", task="extraction", use_cuda=use_cuda)
texts = ["The JCC would be very pleased to welcome your organization as a corporate sponsor ."]
result = my_senta.predict(texts)
print(result)

詳細使用說明

項目下載

  1. 代碼下載

    下載代碼庫到本地

    git clone https://github.com/baidu/Senta.git
  2. 模型下載

    下載情感分析預訓練SKEP的中文模型和英文模型(本項目中開放了以ERNIE 1.0 large(中文)、ERNIE 2.0 large(英文)和RoBERTa large(英文)做爲初始化,訓練的中英文情感預訓練模型)

    cd ./model_files

    # 以ERNIE 1.0 large(中文)做爲初始化,訓練的SKEP中文情感預訓練模型(簡寫爲SKEP-ERNIE1.0)
    sh download_ernie_1.0_skep_large_ch.sh

    # 以ERNIE 2.0 large(英文)做爲初始化,訓練的SKEP英文情感預訓練模型(簡寫爲SKEP-ERNIE2.0)
    sh download_ernie_2.0_skep_large_en.sh

    # 以RoBERTa large(英文)做爲初始化,訓練的SKEP英文情感預訓練模型(簡寫爲SKEP-RoBERTa)
    sh download_roberta_skep_large_en.sh
  3. demo數據下載

    下載demo數據用做SKEP訓練和情感分析任務訓練

    cd ./data/
    sh download_ch_data.sh # 中文測試數據
    sh download_en_data.sh # 英文測試數據

環境安裝

  1. PaddlePaddle 安裝

    本項目依賴於 PaddlePaddle 1.6.3,PaddlePaddle安裝後,須要及時的將 CUDA、cuDNN、NCCL2 等動態庫路徑加入到環境變量 LD_LIBRARY_PATH 之中,不然訓練過程當中會報相關的庫錯誤。具體的paddlepaddle配置細節請查閱這裏 安裝文檔。

    推薦使用pip安裝方式

    python -m pip install paddlepaddle-gpu==1.6.3.post107 -i https://mirror.baidu.com/pypi/simple
  2. senta項目python包依賴

    支持Python 3 的版本要求 3.7;項目中其餘python包依賴列在根目錄下的requirements.txt文件中,使用如下命令安裝:

    python -m pip install -r requirements.txt
  3. 環境變量添加

    在./env.sh中修改環境變量,包括python、CUDA、cuDNN、NCCL二、PaddlePaddle相關環境變量,PaddlePaddle環境變量說明請參考 PaddlePaddle環境變量說明

模型訓練和預測

  1. Pre-train訓練

    # 在SKEP-ERNIE1.0中文模型的基礎上,繼續pre-train
    sh ./script/run_pretrain_ernie_1.0_skep_large_ch.sh

    # 在SKEP-ERNIE2.0英文模型的基礎上,繼續pre-train
    sh ./script/run_pretrain_ernie_2.0_skep_large_en.sh

    # 在SKEP-RoBERTa英文模型的基礎上,繼續pre-train
    sh ./script/run_pretrain_roberta_skep_large_en.sh
  2. Finetune訓練和預測句子級情感分類任務

    # 基於SEKP-ERNIE1.0模型finetune訓練和預測中文句子級情感分類任務,示例數據:ChnSentiCorp
    sh ./script/run_train.sh ./config/ernie_1.0_skep_large_ch.Chnsenticorp.cls.json # finetune訓練
    sh ./script/run_infer.sh ./config/ernie_1.0_skep_large_ch.Chnsenticorp.infer.json # 預測
    # 基於SKEP-ERNIE2.0模型finetune訓練和預測英文句子級情感分類任務,示例數據:SST-2
    sh ./script/run_train.sh ./config/ernie_2.0_skep_large_en.SST-2.cls.json # finetune訓練
    sh ./script/run_infer.sh ./config/ernie_2.0_skep_large_en.SST-2.infer.json # 預測
    # 基於SKEP-RoBERTa模型finetune訓練和預測英文句子級情感分類任務,示例數據:SST-2
    sh ./script/run_train.sh ./config/roberta_skep_large_en.SST-2.cls.json # finetune訓練
    sh ./script/run_infer.sh ./config/roberta_skep_large_en.SST-2.infer.json # 預測
  3. Finetune訓練和預測評價對象級的情感分類任務

    # 基於SKEP-ERNIE1.0模型finetune訓練和預測中文評價對象級的情感分類任務,示例數據:SE-ABSA 16_PHNS
    sh ./script/run_train.sh ./config/ernie_1.0_skep_large_ch.SE-ABSA16_PHNS.cls.json # finetune訓練
    sh ./script/run_infer.sh ./config/ernie_1.0_skep_large_ch.SE-ABSA16_PHNS.infer.json # 預測
    # 基於SEKP-ERNIE2.0模型finetune訓練和預測英文評價對象級的情感分類任務,示例數據:Sem-L
    sh ./script/run_train.sh ./config/ernie_2.0_skep_large_en.absa_laptops.cls.json # finetune訓練
    sh ./script/run_infer.sh ./config/ernie_2.0_skep_large_en.absa_laptops.infer.json # 預測
    # 基於SKEP-RoBERTa模型finetune訓練和預測英文評價對象級的情感分類任務,示例數據:Sem-L
    sh ./script/run_train.sh ./config/roberta_skep_large_en.absa_laptops.cls.json # finetune訓練
    sh ./script/run_infer.sh ./config/roberta_skep_large_en.absa_laptops.infer.json # 預測
  4. Finetune訓練和預測觀點抽取或標註任務

    # 基於SKEP-ERNIE1.0模型finetune訓練和預測中文觀點抽取任務,示例數據:COTE_BD
    sh ./script/run_train.sh ./config/ernie_1.0_skep_large_ch.COTE_BD.oe.json # finetune訓練
    sh ./script/run_infer.sh ./config/ernie_1.0_skep_large_ch.COTE_BD.infer.json # 預測
    # 基於SKEP-ERNIE2.0模型finetune訓練和預測英文觀點抽取任務,示例數據:MPQA
    sh ./script/run_train.sh ./config/ernie_2.0_skep_large_en.MPQA.orl.json # finetune訓練
    sh ./script/run_infer.sh ./config/ernie_2.0_skep_large_en.MPQA.infer.json # 預測
    # 基於SKEP-RoBERTa模型finetune訓練和預測英文觀點抽取任務,示例數據:MPQA
    sh ./script/run_train.sh ./config/roberta_skep_large_en.MPQA.orl.json # finetune訓練
    sh ./script/run_infer.sh ./config/roberta_skep_large_en.MPQA.infer.json # 預測
  5. 該代碼同時支持用戶進一步開發使用,能夠根據配置文件中設置相關數據、模型、優化器,以及修改模型的超參數進行二次開發訓練。

  6. 本代碼庫目前僅支持基於SKEP情感預訓練模型進行訓練和預測,若是用戶但願使用Bow、CNN、LSTM等輕量級模型,請移步至Senta v1使用。

Demo數據集說明

該項目中使用的各數據集的說明、下載方法及使用樣例以下:

  1. 句子級情感分類數據集

    ChnSentiCorp是中文句子級情感分類數據集,包含酒店、筆記本電腦和書籍的網購評論。爲方便使用demo數據中提供了完整數據,數據示例:

    qid	label	text_a
    0 1 這間酒店環境和服務態度亦算不錯,但房間空間過小~~不宣容納太大件行李~~且房間格調還能夠~~ 中餐廳的廣東點心不太好吃~~要改善之~~~~但算價錢平宜~~可接受~~ 西餐廳格調都很好~~但吃的味道通常且使人等得太耐了~~要改善之~~
    1 <薦書> 推薦全部喜歡<紅樓>的紅迷們必定要收藏這本書,要知道當年我據說這本書的時候花很長時間去圖書館找和借都沒能如願,因此此次一看到噹噹有,立刻買了,紅迷們也要記得備貨哦!
    2 0 商品的不足暫時還沒發現,京東的訂單處理速度實在.......週二就打包完成,週五才發貨...
    ...

    SST-2是英文句子情感分類數據集,主要由電影評論構成。爲方便使用demo數據中提供了完整數據,數據集下載地址,數據示例:

    qid	label	text_a
    0 1 it 's a charming and often affecting journey .
    1 0 unflinchingly bleak and desperate
    2 1 allows us to hope that nolan is poised to embark a major career as a commercial yet inventive filmmaker .
    ...
  2. 評價對象級情感分類數據集

    SE-ABSA16_PHNS是中文評價對象級情感分類數據集,主要由描述手機類別某個屬性的商品用戶評論構成。爲方便使用demo數據中提供了完整數據,數據集下載地址,數據集示例以下:

    qid	label	text_a	text_b
    0 1 software#usability 剛剛入手8600,體會。剛剛從淘寶購買,1635元(包郵)。一、全新,應該是歐版機,配件也是正品全新。二、在三星官網下載了KIES,可用免費軟件很是多,絕對夠用。三、不到2000元能買到此種手機,滿足了。
    1 1 display#quality mk16i用後的體驗感受不錯,就是有點厚,屏幕分辨率高,運行流暢,就是不知道能不能刷4.0的系統啊
    2 1 phone#operation_performance mk16i用後的體驗感受不錯,就是有點厚,屏幕分辨率高,運行流暢,就是不知道能不能刷4.0的系統啊
    ...

    Sem-L數據集是英文評價對象級情感分類數據集,主要由描述筆記本電腦類別某個屬性的商品用戶評論構成。爲方便使用demo數據中提供了完整數據,數據集下載地址,數據集示例以下:

    qid	text_a	text_b	label
    0 Boot time Boot time is super fast, around anywhere from 35 seconds to 1 minute. 0
    1 tech support tech support would not fix the problem unless I bought your plan for $150 plus. 1
    2 Set up Set up was easy. 0
    3 Windows 8 Did not enjoy the new Windows 8 and touchscreen functions. 1
    ...
  3. 觀點抽取抽取數據集

    COTE-BD數據集是中文互聯網評論數據集。爲方便使用demo數據中提供了完整數據,數據集下載地址,數據集使用例子以下,其中爲了方便模型使用,下面數據是將文本進行分詞處理後結果,標籤用BIO標記評論實體或者事件。

    ...
    B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O 張 莉 , 女 , 祖 籍 四 川 , 1982 年 考 入 西 安 美 術 學 院 工 藝 系 , 1986 留 校 任 教 至 今 。
    O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O 可 能 本 片 確 實 應 該 在 電 影 院 看 3d , 才 能 體 會 到 奧 斯 卡 對 其 那 麼 多 技 術 的 表 揚 , 也 才 能 體 會 到 馬 丁 想 用 技 術 的 進 步 對 老 電 影 致 敬 的 用 意 [UNK] 最 近 聽 說 《 雨 果 》 五 月 國 內 排 片 , 想 說 :廣 電 搞 毛 啊 !。
    O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O 《 笑 忘 書 》 是 由 林 夕 做 詞 , c . y . kong 做 曲 , 王 菲 演 唱 的 一 首 歌 , 收 錄 於 專 輯 《 寓 言 》 中 。
    B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O 龍 泉 寺 中 精 致 的 壁 畫 , 近 前 觀 看 每 位 人 物 面 部 表 情 都 表 現 得 栩 栩 如 生 , 文 革 中 部 分 被 損 壞 後 來 修 復 。
    ...

    MPQA數據集是英文互聯網評論數據集。爲方便使用demo數據中提供了完整數據,數據集下載地址,數據集使用例子以下,其中爲了方便模型使用須要將文本進行分詞處理,標籤用BIO標記評論內容、評論實體和實體內容表達主體。

    ...
    O O O B_H B_DS B_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T O O O O O In most cases he described the legal punishments like floggings and executions of murderers and major drug traffickers that are applied based on the Shria , or Islamic law as human rights violations .
    O O O O B_H B_DS I_DS I_DS I_DS I_DS B_T O O O O O O O In other cases , he made unfounded charges by accusing Iran of discrimination against women and minorities .
    B_H B_DS I_DS I_DS O O O O O O O O O O O O O O O O O O O O He made such charges despite the fact that women 's political , social and cultural participation is not less than that of men .
    O O O B_H B_DS O O O O O B_T I_T I_T I_T I_T I_T I_T I_T I_T O O O O O O O O O O O O O For instance , he denounced as a human rights violation the banning and seizure of satellite dishes in Iran , while the measure has been taken in line with the law .
    ...

論文效果復現

基於該項目能夠實現對於論文 Sentiment Knowledge Enhanced Pre-training for Sentiment Analysis 效果的復現。下面給出論文效果的復現方法示例:

#下載以Roberta做爲初始化,訓練的SKEP英文情感預訓練模型(簡寫爲SKEP-RoBERTa)
sh download_roberta_skep_large_en.sh

#基於SKEP-RoBERTa模型finetune訓練和預測英文句子級情感分類任務(示例數據:SST-2)
sh ./script/run_train.sh ./config/roberta_skep_large_en.SST-2.cls.json # finetune訓練
sh ./script/run_infer.sh ./config/roberta_skep_large_en.SST-2.infer.json # 預測

#基於SKEP-RoBERTa模型finetune訓練和預測英文評價對象級的情感分類任務(示例數據:Sem-L)
sh ./script/run_train.sh ./config/roberta_skep_large_en.absa_laptops.cls.json # finetune訓練
sh ./script/run_infer.sh ./config/roberta_skep_large_en.absa_laptops.infer.json # 預測

#基於SKEP-RoBERTa模型finetune訓練和預測英文觀點抽取任務(示例數據:MPQA)
sh ./script/run_train.sh ./config/roberta_skep_large_en.MPQA.orl.json # finetune訓練
sh ./script/run_infer.sh ./config/roberta_skep_large_en.MPQA.infer.json # 預測

注:如須要復現論文數據集結果,請參考論文修改對應任務的參數設置。

文獻引用

如需使用該項目中的代碼、模型或是方法,請在相關文檔、論文中引用咱們的工做。

@inproceedings{tian-etal-2020-skep,
title = "{SKEP}: Sentiment Knowledge Enhanced Pre-training for Sentiment Analysis",
author = "Tian, Hao and
Gao, Can and
Xiao, Xinyan and
Liu, Hao and
He, Bolei and
Wu, Hua and
Wang, Haifeng and
wu, feng",
booktitle = "Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics",
month = jul,
year = "2020",
address = "Online",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/2020.acl-main.374",
pages = "4067--4076",
abstract = "Recently, sentiment analysis has seen remarkable advance with the help of pre-training approaches. However, sentiment knowledge, such as sentiment words and aspect-sentiment pairs, is ignored in the process of pre-training, despite the fact that they are widely used in traditional sentiment analysis approaches. In this paper, we introduce Sentiment Knowledge Enhanced Pre-training (SKEP) in order to learn a unified sentiment representation for multiple sentiment analysis tasks. With the help of automatically-mined knowledge, SKEP conducts sentiment masking and constructs three sentiment knowledge prediction objectives, so as to embed sentiment information at the word, polarity and aspect level into pre-trained sentiment representation. In particular, the prediction of aspect-sentiment pairs is converted into multi-label classification, aiming to capture the dependency between words in a pair. Experiments on three kinds of sentiment tasks show that SKEP significantly outperforms strong pre-training baseline, and achieves new state-of-the-art results on most of the test datasets. We release our code at https://github.com/baidu/Senta.",
}








感謝點贊支持下哈 


本文分享自微信公衆號 - java1234(gh_27ed55ecb177)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索