\u200E
七夕礼物没送对?飞桨PaddlePaddle帮你读懂女朋友的小心思
发布日期:2019-08-07T16:00:00.000+0000 浏览量:188次

七夕节,广大的钢铁直男们,你们给女朋友的礼物买对了么?

“女孩儿的心思男孩你别猜,你猜来猜去也猜不明白。不知道她为什么掉眼泪,也不知她为什么笑开怀……”

对于广大男同胞而言,如何猜透女朋友的心思,是极为苦恼的一件事情。

尤其是在微信聊天的时候,看不到对方的表情,也听不到对方的语气语调,只有聊天界面上“平静如水”的文字,可是你却猜不透,在这表面“平静”的背后,女孩子的心中到底是怎样的“风起云涌”。

640?wx_fmt=png

 图片源自网络

很多时候,女孩子已经闷闷地生了很久的气,男孩儿却没有丝毫的察觉。“你……你生气了吗?”往往导致一场腥风血雨的情侣大战。

铛铛铛铛!敲重点啦!!!

飞桨(PaddlePaddle)对话情绪识别模型,专注于识别对话场景中的用户情绪,能够帮您更快更准地识别出聊天过程中女朋友的各种小情绪。

该模型将对话文本分类为正向情绪、中性情绪和负向情绪三种。

其中,正向情绪进一步细分为:喜爱、愉快和感谢三种;负向情绪进一步细分为:抱怨、愤怒、厌恶、恐惧和悲伤五种。可以帮助理解女友的真实情绪。

除了哄女朋友外,对话情绪识别模型还可以应用到客服聊天等诸多企业场景。识别用户在客服咨询过程中的情绪变化,能够帮助企业更好地把握对话质量、改善用户交互体验,同时分析客服的服务质量、降低人工质检的成本。

那么,飞桨对话情绪识别模型的效果如何呢?基于自建测试集(包含闲聊、客服)和nlpcc2014微博情绪数据集,进行评测,结果如下表。此外,我们还开源了基于海量数据已经训练好的模型,只需要进行简单的fine-tune,就能获得更好的效果。看一下情绪识别准确率的评测结果。

640?wx_fmt=png

本项目有以下技术优势:

  • 依托于百度强大的对话系统,深入分析多种对话场景的主要情绪类型及分布,更能准确理解并识别对话中的情绪

  • 基于大数据和深度学习,自动学习词义及词序关系,具备较强的泛化能力,情绪识别精度高

  • 在多个垂类(金融客服、闲聊对话、导航交互),负向情绪的识别准确率可达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 xvf emotion_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": 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

项目地址:

https://github.com/PaddlePaddle/models/tree/v1.5.1/PaddleNLP/emotion_detection

最后给大家推荐一个GPU福利 - Tesla V100免费算力配合PaddleHub能让模型原地起飞~扫描下方二维码申请~

640?wx_fmt=png