大家好,欢迎来到IT知识分享网。
本文作者:飞桨工程师
量子位 转载 | 公众号 QbitAI
七夕节,广大的钢铁直男们,你们给女朋友的礼物买对了么?
“女孩儿的心思男孩你别猜,你猜来猜去也猜不明白。不知道她为什么掉眼泪,也不知她为什么笑开怀……”
对于广大男同胞而言,如何猜透女朋友的心思,是极为苦恼的一件事情。
尤其是在微信聊天的时候,看不到对方的表情,也听不到对方的语气语调,只有聊天界面上“平静如水”的文字,可是你却猜不透,在这表面“平静”的背后,女孩子的心中到底是怎样的“风起云涌”。
△ 图片源自网络
很多时候,女孩子已经闷闷地生了很久的气,男孩儿却没有丝毫的察觉。“你……你生气了吗?”往往导致一场腥风血雨的情侣大战。
铛铛铛铛!敲重点啦!!!
飞桨(PaddlePaddle)对话情绪识别模型,专注于识别对话场景中的用户情绪,能够帮您更快更准地识别出聊天过程中女朋友的各种小情绪。
该模型将对话文本分类为正向情绪、中性情绪和负向情绪三种。
其中,正向情绪进一步细分为:喜爱、愉快和感谢三种;负向情绪进一步细分为:抱怨、愤怒、厌恶、恐惧和悲伤五种。可以帮助理解女友的真实情绪。
除了哄女朋友外,对话情绪识别模型还可以应用到客服聊天等诸多企业场景。识别用户在客服咨询过程中的情绪变化,能够帮助企业更好地把握对话质量、改善用户交互体验,同时分析客服的服务质量、降低人工质检的成本。
那么,飞桨对话情绪识别模型的效果如何呢?基于自建测试集(包含闲聊、客服)和nlpcc2014微博情绪数据集,进行评测,结果如下表。此外,我们还开源了基于海量数据已经训练好的模型,只需要进行简单的fine-tune,就能获得更好的效果。看一下情绪识别准确率的评测结果。
本项目有以下技术优势:
- 依托于百度强大的对话系统,深入分析多种对话场景的主要情绪类型及分布,更能准确理解并识别对话中的情绪
- 基于大数据和深度学习,自动学习词义及词序关系,具备较强的泛化能力,情绪识别精度高
- 在多个垂类(金融客服、闲聊对话、导航交互),负向情绪的识别准确率可达90%以上
话不多说,让我们来一起实践,快速上手吧!
快速上手
(1)克隆项目
克隆代码库到本地。
git clone https://github.com/PaddlePaddle/models.git
cd models/PaddleNLP/emotion_detection
(2)数据准备
运行如下脚本,下载经过预处理的数据。自动生成data目录,data目录下有训练集数据(train.tsv)、开发集数据(dev.tsv)、测试集数据(test.tsv)、 待预测数据(infer.tsv)和对应词典(vocab.txt)。
sh download_data.sh
(3)模型下载
我们开源了基于海量数据训练好的对话情绪识别模型(基于TextCNN、ERNIE等模型训练),可供用户直接使用,并提供两种下载方式。
方式一:基于PaddleHub命令行工具
(PaddleHub安装,可以参考https://github.com/PaddlePaddle/PaddleHub)
mkdir models && cd models
hub download emotion_detection_textcnn–output_path ./
hub download emotion_detection_ernie_finetune–output_path ./
tar xvf emotion_detection_textcnn-1.0.0.tar.gz
tar xvfemotion_detection_ernie_finetune-1.0.0.tar.gz
方式二:直接下载脚本
sh download_model.sh
(4)模型评估
基于已有的预训练模型和数据,可以运行下面的命令进行测试,查看预训练的模型在测试集(test.tsv)上的评测结果。
# TextCNN 模型
sh run.sh eval
# ERNIE 模型
sh run_ernie.sh eval
(5)模型训练
基于示例的数据集,可以运行下面的命令,在训练集(train.tsv)上进行模型训练,并在开发集(dev.tsv)验证。
# TextCNN 模型
sh run.sh train
# ERNIE 模型
sh run_ernie.sh train
训练完成后,可修改run.sh和run_ernie.sh中的init_checkpoint 参数,选择最优step的模型进行评估和预测。
(6)模型预测
利用已有模型,可在未知label的数据集(infer.tsv)上进行预测,得到模型预测结果及各label的概率。
# TextCNN 模型
sh run.sh infer
# ERNIE 模型
sh run_ernie.sh infer
二、进阶使用
(1)任务定义
对话情绪识别任务输入是一段用户文本,输出是检测到的情绪类别,包括消极、积极、中性,这是一个经典的短文本三分类任务。
(2)模型原理介绍
本项目针对对话情绪识别问题,开源了一系列分类模型,供用户可配置地使用:
- BOW:Bag Of Words,是一个非序列模型,使用基本的全连接结构;
- CNN:浅层CNN模型,能够处理变长的序列输入,提取一个局部区域之内的特征;;
- TextCNN:多卷积核CNN模型,能够更好地捕捉句子局部相关性;
- LSTM:单层LSTM模型,能够较好地解决序列文本中长距离依赖的问题;
- BI-LSTM:双向单层LSTM模型,采用双向LSTM结构,更好地捕获句子中的语义特征;
- ERNIE:百度自研基于海量数据和先验知识训练的通用文本语义表示模型,并基于此在对话情绪分类数据集上进行fine-tune获得。
(3)数据格式说明
训练、预测、评估使用的数据示例如下,数据由两列组成,以制表符(’\t’)分隔,第一列是情绪分类的类别(0表示消极;1表示中性;2表示积极),第二列是以空格分词的中文文本,文件为utf8编码。
label text_a
0 谁 骂人 了 ?我 从来不 骂人 , 我 骂 的 都 不是 人 , 你 是 人 吗 ?
1 我 有事 等会儿 就 回来和 你 聊
2 我 见到 你 很高兴 谢谢你 帮 我
注:本项目额外提供了分词预处理脚本(在preprocess目录下),可供用户使用,具体使用方法如下:
python tokenizer.py–test_data_dir ./test.txt.utf8 –batch_size 1 > test.txt.utf8.seg
(4)代码结构说明
.
├── config.json # 模型配置文件
├── config.py # 定义了该项目模型的相关配置,包括具体模型类别、以及模型的超参数
├── reader.py # 定义了读入数据,加载词典的功能
├── run_classifier.py # 该项目的主函数,封装包括训练、预测、评估的部分
├── run_ernie_classifier.py # 基于ERNIE表示的项目的主函数
├── run_ernie.sh # 基于ERNIE的训练、预测、评估运行脚本
├── run.sh # 训练、预测、评估运行脚本
├── utils.py # 定义了其他常用的功能函数
(5)如何组建自己的模型
可以根据自己的需求,组建自定义的模型,具体方法如下:
- 定义自己的网络结构。用户可以在 models/classification/nets.py 中,定义自己的模型,只需要增加新的函数即可。此处假设用户自定义的函数名为user_net。
- 更改模型配置。需要在config.json中将model_type改为用户自定义的user_net。
- 模型训练、评估、预测,需要在run.sh、run_ernie.sh中修改模型、数据、词典路径的配置。
(6)如何基于百度开源模型进行 Fine-tune
用户可基于百度开源的对话情绪识别模型,在自有数据上实现 Fine-tune 训练,以获得更好的效果提升。具体方法如下:
如果用户基于开源的 TextCNN模型进行 Fine-tune,需要修改run.sh和config.json文件。
run.sh脚本修改如下:
# 在train()函数中,增加–init_checkpoint选项;修改–vocab_path
–init_checkpoint ./models/textcnn
–vocab_path ./data/vocab.txt
config.json 配置修改如下:
# vocab_size为词典大小,对应上面./data/vocab.txt
“vocab_size”:
如果用户基于开源的 ERNIE模型进行Fine-tune,需要更新run_ernie.sh脚本,具体修改如下:
# 在train()函数中,修改–init_checkpoint选项
–init_checkpoint./models/ernie_finetune/params
我们也提供了使用PaddleHub加载ERNIE模型的选项。PaddleHub是PaddlePaddle的预训练模型管理工具,可以用一行代码完成预训练模型的加载,简化预训练模型的使用和迁移学习。
需要修改run_ernie.sh中的配置如下:
# 在train()函数中,修改–use_paddle_hub选项
–use_paddle_hub true
注意:使用该选项需要先安装PaddleHub,安装命令如下:
$ pip install paddlehub
快快自己动手尝试下吧!
想与更多的深度学习开发者交流,请加入飞桨官方:
如果您想详细了解更多飞桨PaddlePaddle的相关内容,请点击文末阅读原文或参阅以下文档。
官网地址:
https://www.paddlepaddle.org.cn?fr=lzw
项目地址:
https://github.com/PaddlePaddle/models/tree/v1.5.1/PaddleNLP/emotion_detection
— 完 —
诚挚招聘
量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。
量子位 QbitAI · 头条号签约作者
վ’ᴗ’ ի 追踪AI技术和产品新动态
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/53109.html