相关阅读
视频讲解
以下视频来自IBM cloud实验室,将为大家展示什么是NLP?NLG?NLU?为什么需要NLP这种技术?以及他们都有哪些应用场景?
实例分享
以下内容与原视频无关,为了热心网友能够更加深入的体验到NLP魅力,我们这里以Github上的开源项目《百度开源情绪分析系统》为例
项目介绍
情感分析旨在自动识别和提取文本中的倾向、立场、评价、观点等主观信息。它包含各式各样的任务,比如句子级情感分类、评价对象级情感分类、观点抽取、情绪分类等。情感分析是人工智能的重要研究方向,具有很高的学术价值。同时,情感分析在消费决策、舆情分析、个性化推荐等领域均有重要的应用,具有很高的商业价值。
近日,百度正式发布情感预训练模型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 | 97.61 | 下载地址 |
ChnSentiCorp | 中文 | ACC | 95.80 | 96.50 | 96.50 | 下载地址 |
NLPCC2014-SC | 中文 | ACC | 78.72 | 83.53 | 83.53 | 下载地址 |
评价对象级的 情感分类 |
Sem-L | 英文 | ACC | 81.35 | 81.62 | 下载地址 |
Sem-R | 英文 | ACC | 87.89 | 88.36 | 88.36 | 下载地址 |
AI-challenge | 中文 | F1 | 72.87 | 72.90 | 72.90 | 暂未开放 |
SE-ABSA16_PHNS | 中文 | ACC | 79.58 | 82.91 | 82.91 | 下载地址 |
SE-ABSA16_CAME | 中文 | ACC | 87.11 | 90.06 | 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 | 83.67/77.53 | 下载地址 |
COTE_BD | 中文 | F1 | 82.17 | 84.50 | 84.50 | 下载地址 |
COTE_MFW | 中文 | F1 | 86.18 | 87.90 | 87.90 | 下载地址 |
COTE_DP | 中文 | F1 | 84.33 | 86.30 | 86.30 | 下载地址 |
代码结构
.
├── README.md
├── requirements.txt
├── senta # senta核心代码,包括模型、输出reader、分词方法等
├── script # 情感分析各任务入口启动脚本,通过调用配置文件完成模型的训练和预测
├── config # 任务配置文件目录,在配置文件中设定模型的方法、超参数、数据等
一键化工具
为了降低用户的使用门槛,百度在SKEP开源项目中集成了面向产业化的一键式情感分析预测工具。具体安装和使用方法如下:
安装方法
本仓库支持pip安装和源码安装两种方式,使用pip或者源码安装时需要先安装PaddlePaddle,PaddlePaddle安装请参考安装文档。
- pip安装
python -m pip install Senta
- 源码安装
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)
使用说明
项目下载
git clone https://github.com/baidu/Senta.git
模型下载
下载情感分析预训练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
demo数据下载
下载demo数据用作SKEP训练和情感分析任务训练
cd ./data/
sh download_ch_data.sh # 中文测试数据
sh download_en_data.sh # 英文测试数据
环境安装
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
senta项目python包依赖
支持Python 3 的版本要求 3.7; 项目中其他python包依赖列在根目录下的requirements.txt文件中,使用以下命令安装:
python -m pip install -r requirements.txt
环境变量添加
在./env.sh中修改环境变量,包括python、CUDA、cuDNN、NCCL2、PaddlePaddle相关环境变量,PaddlePaddle环境变量说明请参考 PaddlePaddle环境变量说明
模型训练和预测
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
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 # 预测
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 # 预测
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 # 预测
- 该代码同时支持用户进一步开发使用,可以根据配置文件中设置相关数据、模型、优化器,以及修改模型的超参数进行二次开发训练。
- 本代码库目前仅支持基于SKEP情感预训练模型进行训练和预测,如果用户希望使用Bow、CNN、LSTM等轻量级模型,请移步至Senta v1使用。
暂无评论内容