前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >七夕礼物没送对?飞桨PaddlePaddle帮你读懂女朋友的小心思

七夕礼物没送对?飞桨PaddlePaddle帮你读懂女朋友的小心思

作者头像
量子位
发布2019-08-12 15:50:25
4090
发布2019-08-12 15:50:25
举报
文章被收录于专栏:量子位量子位
本文作者:飞桨工程师 量子位 转载 | 公众号 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": 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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子位 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 快速上手
    • (1)克隆项目
      • (2)数据准备
        • (3)模型下载
          • (4)模型评估
            • (5)模型训练
              • (6)模型预测
              • 二、进阶使用
                • (1)任务定义
                  • (2)模型原理介绍
                    • (3)数据格式说明
                      • (4)代码结构说明
                        • (5)如何组建自己的模型
                          • (6)如何基于百度开源模型进行 Fine-tune
                          相关产品与服务
                          命令行工具
                          腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档