点击左上方蓝字关注我们

课程简介

“手把手带你学NLP”是基于飞桨PaddleNLP的系列实战项目。本系列由百度多位资深工程师精心打造,提供了从词向量、预训练语言模型,到信息抽取、情感分析、文本问答、结构化数据问答、文本翻译、机器同传、对话系统等实践项目的全流程讲解,旨在帮助开发者更全面清晰地掌握百度飞桨框架在NLP领域的用法,并能够举一反三、灵活使用飞桨框架和PaddleNLP进行NLP深度学习实践。

6月,百度飞桨 & 自然语言处理部携手推出了12节NLP视频课,课程中详细讲解了本实践项目。

观看课程回放请戳:

https://aistudio.baidu.com/aistudio/course/introduce/24177

欢迎来课程QQ群(群号:758287592)交流吧~~

聊天机器人的“前世今生”

在 1964 年至 1966 年间,麻省理工学院人工智能实验室的德裔美国计算机科学家约瑟夫·维森鲍姆(Joseph Weizenbaum)开发了历史上第一个聊天机器人 —— Eliza。

Eliza 的名字源于爱尔兰剧作家萧伯纳的戏剧作品《卖花女》中的角色,剧中出身贫寒的卖花女 Eliza 通过学习与上流社会沟通的方式,变成大使馆舞会上人人艳羡的“匈牙利王家公主”。作为世界上第一个聊天机器人,Eliza 被其作者赋予了充满戏剧性的内涵。

尽管在当时已经存在一些基本的数字语言生成器(可以输出一些连贯文本的程序),但 Eliza 是第一个明确设计用于与人互动的程序。用户可以使用打字机输入人类的自然语言,获得来自机器的响应。正如维森鲍姆解释的那样,Eliza 使“人与计算机之间的对话成为可能 ”。

随着深度学习技术的不断发展,聊天机器人变得越来越智能。我们可以通过机器人来完成一些机械性的问答工作,也可以在闲暇时和智能机器人进行对话,他们的出现让生活变得更丰富多彩。如今通过飞桨与Wechaty的结合就可实现一个简单的聊天机器人。

如下图就是基于 PaddleHub + Wechaty 的微信闲聊机器人demo。通过Wechaty获取微信接收的消息,然后使用PaddleHub的plato-mini模型根据对话的上下文生成新的对话文本,最终以微信消息的形式发送,实现闲聊的交互。

下图是基于 PaddleNLP + Wechaty 的微信情感识别机器人demo。通过Wechaty获取微信接收的消息,然后使用PaddleNLP的TextCNN模型对输入的文本进行情感判断,最终以微信消息的形式返回,实现对文本情感的识别。

感兴趣的同学可参照此demo在自己微信上实现一个情感识别机器人哦~

Demo链接:

https://github.com/mawenjie8731/paddlenlp-wechaty-demo

是不是很有趣。如果你还不满足于此,欢迎前来报名PaddlePaddle 联合开源聊天机器人框架 Wechaty 和设计师社区 MixLab 带来的创意赛。PaddleNLP为各位参赛选手提供了丰富的深度学习预训练模型,Wechaty也为大家提供了便捷的ChatBot搭建SDK,大家可参照已有demo使用PaddleNLP实现自动写诗、彩虹屁,起名、自动对联等好玩的功能。

比赛报名链接:

https://aistudio.baidu.com/aistudio/competition/detail/98

今天我们要带大家使用飞桨PaddleNLP实现诗歌的对答和一个简单的闲聊机器人,一起来吧!

快速实践

PaddleNLP针对生成式任务提供了generate()函数,内嵌于PaddleNLP所有的生成式模型。支持Greedy Search、Beam Search和Sampling解码策略,用户只需指定解码策略以及相应的参数即可完成预测解码,得到生成的sequence的token ids以及概率得分。

2.1 GPT模型使用生成API的小示例

1.加载 paddlenlp.transformers.GPTChineseTokenizer用于数据处理

文本数据在输入预训练模型之前,需要经过数据处理转化为Feature。这一过程通常包括分词,token to id,add special token等步骤。

PaddleNLP对于各种预训练模型已经内置了相应的tokenizer,指定想要使用的模型名字即可加载对应的tokenizer。

调用GPTChineseTokenizer的__call__方法即可将我们说的话转为模型可接受的输入。

from paddlenlp.transformers import GPTChineseTokenizer
# 设置想要使用模型的名称
model_name = 'gpt-cpm-small-cn-distill'
tokenizer = GPTChineseTokenizer.from_pretrained(model_name)
import paddle
user_input = "花间一壶酒,独酌无相亲。举杯邀明月,"
# 将文本转为ids
input_ids = tokenizer(user_input)['input_ids']
print(input_ids)
# 将转换好的id转为tensor
input_ids = paddle.to_tensor(input_ids, dtype='int64').unsqueeze(0)

2.使用PaddleNLP一键加载预训练模型

PaddleNLP提供了GPT,UnifiedTransformer等中文预训练模型,可以通过预训练模型名称完成一键加载。

GPT以Transformer Decoder的编码器为网络基本组件,采用单向注意力机制,适用于长文本生成任务。

PaddleNLP目前提供多种中英文GPT预训练模型,我们这次用的是一个小的中文GPT预训练模型。

from paddlenlp.transformers import GPTLMHeadModel
# 一键加载中文GPT模型
model = GPTLMHeadModel.from_pretrained(model_name)
# 调用生成API升成文本
ids, scores = model.generate(input_ids=input_ids,max_length=16,min_length=1,decode_strategy='greedy_search')
generated_ids = ids[0].numpy().tolist()
# 使用tokenizer将生成的id转为文本
generated_text = tokenizer.convert_ids_to_string(generated_ids)
print(generated_text)对影成三人。    

可以看到生成的效果还不错,生成式API的用法也是非常的简便。

2.2 UnifiedTransformer

模型和生成式API完成闲聊对话

1.加载paddlenlp.transformers.UnifiedTransformerTokenizer用于数据处理

UnifiedTransformerTokenizer的调用方式与GPT相同,但数据处理的API略有不同。

调用UnifiedTransformerTokenizer的dialogue_encode方法即可将我们说的话转为模型可接受的输入。

from paddlenlp.transformers import UnifiedTransformerTokenizer
# 设置想要使用模型的名称
model_name = 'plato-mini'
tokenizer = UnifiedTransformerTokenizer.from_pretrained(model_name)
user_input = ['你好啊,你今年多大了']
# 调用dialogue_encode方法生成输入
encoded_input = tokenizer.dialogue_encode(user_input,add_start_token_as_response=True,return_tensors=True,is_split_into_words=False)

2.使用PaddleNLP一键加载预训练模型

与GPT相同,我们可以一键调用UnifiedTransformer预训练模型。

UnifiedTransformer以Transformer的编码器为网络基本组件,采用灵活的注意力机制,并在模型输入中加入了标识不同对话技能的special token,使得模型能同时支持闲聊对话、推荐对话和知识对话。

PaddleNLP目前为UnifiedTransformer提供了三个中文预训练模型:

  • unified_transformer-12L-cn 该预训练模型是在大规模中文会话数据集上训练得到的。

  • unified_transformer-12L-cn-luge 该预训练模型是unified_transformer-12L-cn在千言对话数据集上进行微调得到的。

  • plato-mini 该模型使用了十亿级别的中文闲聊对话数据进行预训练。

from paddlenlp.transformers import UnifiedTransformerLMHeadModel
model = UnifiedTransformerLMHeadModel.from_pretrained(model_name)

下一步我们将处理好的输入传入generate函数,并配置解码策略。

这里我们使用的是TopK加sampling的解码策略。即从概率最大的k个结果中按概率进行采样。

ids, scores = model.generate(input_ids=encoded_input['input_ids'],token_type_ids=encoded_input['token_type_ids'],position_ids=encoded_input['position_ids'],attention_mask=encoded_input['attention_mask'],max_length=64,min_length=1,decode_strategy='sampling',top_k=5,num_return_sequences=20)
from utils import select_response
# 简单根据概率选取最佳回复
result = select_response(ids, scores, tokenizer, keep_space=False, num_return_sequences=20)
print(result)
['你好啊,我今年23岁了']

PaddleNLP的example中提供了搭建完整对话系统的代码(人机交互),感兴趣可以去终端里尝试一下哦~

人机交互地址:

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/dialogue/unified_transformer#%E4%BA%BA%E6%9C%BA%E4%BA%A4%E4%BA%92

动手试一试

是不是觉得很有趣呀。小编强烈建议初学者参考上面的代码亲手敲一遍,因为只有这样,才能加深你对代码的理解呦。

本次项目对应的代码:

https://aistudio.baidu.com/aistudio/projectdetail/2017173

更多PaddleNLP信息,欢迎访问GitHub点star收藏后体验:

https://github.com/PaddlePaddle/PaddleNLP

加入交流群,一起学习吧

如果你在学习过程中遇到任何问题或疑问,欢迎加入PaddleNLP的QQ技术交流群!

回顾往期

越学越有趣:『手把手带你学NLP』系列项目01 ——词向量应用的那些事儿

越学越有趣:『手把手带你学NLP』系列项目02 ——语义相似度计算的那些事儿

越学越有趣:『手把手带你学NLP』系列项目03 ——快递单信息抽取的那些事儿

越学越有趣:『手把手带你学NLP』系列项目04 ——实体关系抽取的那些事儿

越学越有趣:『手把手带你学NLP』系列项目05 ——文本情感分析的那些事儿

越学越有趣:『手把手带你学NLP』系列项目06 ——机器阅读理解的那些事儿

越学越有趣:『手把手带你学NLP』系列项目07 ——机器翻译的那些事儿

越学越有趣:『手把手带你学NLP』系列项目08 ——“不缺钱,只缺人” ,同传翻译的那些事儿

越学越有趣:『手把手带你学NLP』系列项目09 ——“此苹果非彼苹果”看意图识别的那些事儿

越学越有趣:『手把手带你学NLP』系列项目10 ——NLP预训练模型小型化与部署的那些事儿

如有飞桨相关技术有问题,欢迎在飞桨论坛中提问交流:

http://discuss.paddlepaddle.org.cn/

欢迎加入官方QQ群获取最新活动资讯:793866180。

如果您想详细了解更多飞桨的相关内容,请参阅以下文档。

·飞桨官网地址·

https://www.paddlepaddle.org.cn/

·飞桨开源框架项目地址·

GitHub: https://github.com/PaddlePaddle/Paddle 

Gitee: https://gitee.com/paddlepaddle/Paddle

????长按上方二维码立即star!????

飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体,是中国首个自主研发、功能丰富、开源开放的产业级深度学习平台。飞桨企业版针对企业级需求增强了相应特性,包含零门槛AI开发平台EasyDL和全功能AI开发平台BML。EasyDL主要面向中小企业,提供零门槛、预置丰富网络和模型、便捷高效的开发平台;BML是为大型企业提供的功能全面、可灵活定制和被深度集成的开发平台。

END

​想聊天?自己搭建个聊天机器人吧!相关推荐

  1. 如何选择视频聊天程序搭建视频聊天网站

    搭建1个视频聊天网站,特别是带有精彩视频的聊天网站,无疑是一种非常快捷的网络创业方式.可是自己没有开发能力怎么办?那么你就需要选购一些视频聊天程序或则视频聊天源码.那么如何选择最适合自己的视频聊天程序 ...

  2. 在 Linux 上搭建 Hubot 聊天机器人服务器

    在 Linux 上搭建 Hubot 聊天机器人服务器 1. 先确定安装了 Node.js 如果还没安装Node.js,就先安装Node.js.Node.js是绿色软件,只要解压安装包即可.这里假设已经 ...

  3. 微信公众号图灵机器人开发php,使用图灵机器人api搭建微信聊天机器人php实现,图灵微信聊天机器人...

    使用图灵机器人api搭建微信聊天机器人php实现,图灵微信聊天机器人之前通过hook技术实现了微信pc端发送消息功能,如果在结合图灵机器人就能实现微信聊天机器人. 代码下载:http://blog.y ...

  4. 深入浅出Node.js游戏服务器开发--分布式聊天服务器搭建

    From: http://www.infoq.com/cn/articles/game-server-development-2?utm_source=infoq&utm_medium=rel ...

  5. 抓住语音社交风口,1天快速搭建语音聊天室

    语音聊天室孵化 一起KTV.众人大合唱.语音开黑.狼人杀.剧本杀.多人配音.观影.语音电台.相亲联谊社交等,一般都是在语音聊天室中进行,那么语音聊天室产品如此火热的原因有哪些呢? 一对一社交适用于朋友 ...

  6. WebRTC 教程五:WebRTC搭建视频聊天室

    这篇文章主要介绍了 WebRTC 聊天室的整体演示,以及 WebRTC 视频聊天的功能设计,代码逻辑以及整体演示. 目录 WebRTC 聊天室:总体演示 WebRTC 视频聊天: 设计 WebRTC ...

  7. vue 文字无缝滚动_手把手教你搭建 Vue 聊天室

    WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单,并且允许服务端主动向客户端推送数据.(HTTP协 ...

  8. 从0搭建在线聊天室,只需4步!

    Vol. 5 聊天室不同于单聊和群聊,是一类集成了多种 IM 功能一体的大规模实时消息分发系统.在跨入新世纪的2000年,聊天室作为新型的即时通讯场景迅速在年轻人群体中火热起来,"网易聊天室 ...

  9. 2021-06-14 Socketio学习使用搭建一个聊天室

    Socketio搭建一个聊天室 前言 本次实验所用编程语言为HTML以及javascript和JQurey语言和Socketio框架,所用编辑文本工具为VS code. 注意事项 (1)前端编程注意H ...

  10. 音视频---速搭建语音聊天室技术分析

    语音聊天室孵化 一起KTV.众人大合唱.语音开黑.狼人杀.剧本杀.多人配音.观影.语音电台.相亲联谊社交等,一般都是在语音聊天室中进行,那么语音聊天室产品如此火热的原因有哪些呢? 一对一社交适用于朋友 ...

最新文章

  1. Bzoj3509 [CodeChef] COUNTARI
  2. DataGridView控件60招(一)
  3. 5首页加载慢_UIViewController 预加载方案浅谈
  4. 数学建模 TSP(旅行商问题) Lingo求解
  5. 解压zip,解决中文乱码
  6. linux如何添加默认路由表_linux 添加静态路由
  7. (34)Verilog HDL算术运算:加减乘除运算
  8. python函数参数的作用是_python函数参数的不同
  9. Spring Boot 2 - 初识与新工程的创建
  10. python程序内存分析_Python中使用MELIAE分析程序内存占用实例
  11. 机器学习各种分类算法比较
  12. 【idea打包jar包+运行jar包】亲测详解
  13. mdadm chuck_面向所有人的Python-Chuck博士提供的14小时免费Python课程
  14. 类似京东商城客户端应用源码
  15. 【con】rounded不起作用(前端bug日记3)
  16. 浙商银行入职计算机考试,浙商银行计算机笔试心得
  17. c语言sht 和ch,普通话指导:z、c、s和zh、ch、sh的分辨
  18. 一些检索英文文献的网址(收藏)
  19. 数字孪生开发 数字孪生用什么软件实现
  20. 【笔记】ARM架构和ARM芯片(三)

热门文章

  1. linux usb视频播放,如何从linux USB捕获设备捕获与ffmpeg同步的音频和视频
  2. 【Reference reading】基于PET和MRI的治疗计划系统:在BNCT和GdNCT中对剂量和通量分布的一种现实评估方法
  3. 专家:应对禽流感需储备不同种药物
  4. 分享灵动MM32L052PF替代STM32F042C6T6
  5. 操作系统期末考试试卷
  6. 【Android】蓝牙开发——经典蓝牙配对介绍(通过手机系统蓝牙演示)
  7. 成都星志远:现在开拼多多网店靠谱吗?
  8. 中国奥运在线流量的数据所做的总结性结案报告
  9. vsp搭建项目全过程
  10. java.lang.NoSuchMethodException: com.xxx.xxx.xxxinit()