七夕节,广大的钢铁直男们,你们给女朋友的礼物买对了么?
“女孩儿的心思男孩你别猜,你猜来猜去也猜不明白。不知道她为什么掉眼泪,也不知她为什么笑开怀……”
对于广大男同胞而言,如何猜透女朋友的心思,是极为苦恼的一件事情。
尤其是在微信聊天的时候,看不到对方的表情,也听不到对方的语气语调,只有聊天界面上“平静如水”的文字,可是你却猜不透,在这表面“平静”的背后,女孩子的心中到底是怎样的“风起云涌”。
△ 图片源自网络
很多时候,女孩子已经闷闷地生了很久的气,男孩儿却没有丝毫的察觉。“你……你生气了吗?”往往导致一场腥风血雨的情侣大战。
铛铛铛铛!敲重点啦!!!
飞桨(PaddlePaddle)对话情绪识别模型,专注于识别对话场景中的用户情绪,能够帮您更快更准地识别出聊天过程中女朋友的各种小情绪。
该模型将对话文本分类为正向情绪、中性情绪和负向情绪三种。
其中,正向情绪进一步细分为:喜爱、愉快和感谢三种;负向情绪进一步细分为:抱怨、愤怒、厌恶、恐惧和悲伤五种。可以帮助理解女友的真实情绪。
除了哄女朋友外,对话情绪识别模型还可以应用到客服聊天等诸多企业场景。识别用户在客服咨询过程中的情绪变化,能够帮助企业更好地把握对话质量、改善用户交互体验,同时分析客服的服务质量、降低人工质检的成本。
那么,飞桨对话情绪识别模型的效果如何呢?基于自建测试集(包含闲聊、客服)和nlpcc2014微博情绪数据集,进行评测,结果如下表。此外,我们还开源了基于海量数据已经训练好的模型,只需要进行简单的fine-tune,就能获得更好的效果。看一下情绪识别准确率的评测结果。
本项目有以下技术优势:
话不多说,让我们来一起实践,快速上手吧!
克隆代码库到本地。
git clone https://github.com/PaddlePaddle/models.git
cd models/PaddleNLP/emotion_detection
运行如下脚本,下载经过预处理的数据。自动生成data目录,data目录下有训练集数据(train.tsv)、开发集数据(dev.tsv)、测试集数据(test.tsv)、 待预测数据(infer.tsv)和对应词典(vocab.txt)。
sh download_data.sh
我们开源了基于海量数据训练好的对话情绪识别模型(基于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
基于已有的预训练模型和数据,可以运行下面的命令进行测试,查看预训练的模型在测试集(test.tsv)上的评测结果。
# TextCNN 模型
sh run.sh eval
# ERNIE 模型
sh run_ernie.sh eval
基于示例的数据集,可以运行下面的命令,在训练集(train.tsv)上进行模型训练,并在开发集(dev.tsv)验证。
# TextCNN 模型
sh run.sh train
# ERNIE 模型
sh run_ernie.sh train
训练完成后,可修改run.sh和run_ernie.sh中的init_checkpoint 参数,选择最优step的模型进行评估和预测。
利用已有模型,可在未知label的数据集(infer.tsv)上进行预测,得到模型预测结果及各label的概率。
# TextCNN 模型
sh run.sh infer
# ERNIE 模型
sh run_ernie.sh infer
对话情绪识别任务输入是一段用户文本,输出是检测到的情绪类别,包括消极、积极、中性,这是一个经典的短文本三分类任务。
本项目针对对话情绪识别问题,开源了一系列分类模型,供用户可配置地使用:
训练、预测、评估使用的数据示例如下,数据由两列组成,以制表符(’\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
.
├── config.json # 模型配置文件
├── config.py # 定义了该项目模型的相关配置,包括具体模型类别、以及模型的超参数
├── reader.py # 定义了读入数据,加载词典的功能
├── run_classifier.py # 该项目的主函数,封装包括训练、预测、评估的部分
├── run_ernie_classifier.py # 基于ERNIE表示的项目的主函数
├── run_ernie.sh # 基于ERNIE的训练、预测、评估运行脚本
├── run.sh # 训练、预测、评估运行脚本
├── utils.py # 定义了其他常用的功能函数
可以根据自己的需求,组建自定义的模型,具体方法如下:
用户可基于百度开源的对话情绪识别模型,在自有数据上实现 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": 240465
如果用户基于开源的 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
快快自己动手尝试下吧!
想与更多的深度学习开发者交流,请加入飞桨官方QQ群:432676488
如果您想详细了解更多飞桨PaddlePaddle的相关内容,请点击文末阅读原文或参阅以下文档。
官网地址:
https://www.paddlepaddle.org.cn?fr=lzw
项目地址:
https://github.com/PaddlePaddle/models/tree/v1.5.1/PaddleNLP/emotion_detection
— 完 —