想聊天?自己搭建个聊天机器人吧!

百度大脑 百度大脑     2022-12-09     377

关键词:

 课程简介 
“手把手带你学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

百度AI开发者社区https://ai.baidu.com/forum ,为全国各地开发者提供一个交流、分享、答疑解惑的平台,让开发者在研发路上不再“孤军奋战”,通过不断地交流与探讨找出更好的技术解决方案。如果你想尝试各种人工智能技术、开拓应用场景,赶快加入百度AI社区,你对 AI 的所有畅想,在这里都可以实现!

扫描下方二维码,添加小助手微信「京东卡、小度定制周边、神秘礼盒、行李箱」等更多福利你来拿~

 

徒然学会了抗拒热闹,却还来不及透悟真正的冷清;写个聊天机器人治愈自己吧!(代码片段)

写在前面之前上学使用华为的ModelArts平台做了类似的图像识别之类的小项目,零编码,但是需要自己搞数据集,标注、选择算法、训练模型等,用的话直接调API。NLP方面之前的一个实习公司有用,对一些类似... 查看详情

用tensorflow做个聊天机器人

上一次提到了不错的学习聊天机器人的资源,不知道小伙伴们有没有去学习呢。自己动手做聊天机器人教程我最近每天都会学一点,拿出解读来和大家分享一下。本文结构:聊天机器人的架构简图用TensorFlow实现Chatbot的模型如何... 查看详情

自己动手做个微信聊天机器人

长夜慢慢无人聊天,自己动手做个微信聊天机器人陪自己。 智力太低,还是让他调戏别人吧。 看了上面的动画图片是不是有人好奇程序是怎么实现的?解决方案其实很简单:1.通过微信的web接口可以实现自动回复、登录... 查看详情

关于制作我自己的聊天机器人的想法的信息

】关于制作我自己的聊天机器人的想法的信息【英文标题】:Infoaboutanideaofmakingmyownchatbot【发布时间】:2019-03-2011:57:50【问题描述】:集成api.aiIntegratingapi.aichatbotonawebsite在研究我有和想做的想法时遇到麻烦。我认为有两个版本:... 查看详情

初识bot聊天机器人

...简单指LOL里面的下路了。这里的BOT指的是ChatBot——聊天机器人。这个我知道,微软小冰嘛,有调戏过。正好我一直想做一个用来提醒自己任务,安排时间的东 查看详情

如何在本地通过weixin4japi和第三方图灵机器人api搭建java聊天机器人

1、首先我们需要下载natapp,一个本地实现外网调用,需要调用微信接口,要联网,你有服务器域名是最好的到natapp官网上注册一个账号吧设置参数2、下载natapp.exe,编辑一个bat文件。一个开机启动本地网络化,完成一个网络映射... 查看详情

chatgpt多个可用的聊天机器人

当今,聊天机器人已成为人工智能技术的热门应用之一。许多公司和开发者都在尝试使用聊天机器人来改善用户体验和提高效率。在这篇文章中,我们将分享一些常用的聊天机器人链接,让您可以更快地找到适合自己... 查看详情

chatgpt多个可用的聊天机器人

当今,聊天机器人已成为人工智能技术的热门应用之一。许多公司和开发者都在尝试使用聊天机器人来改善用户体验和提高效率。在这篇文章中,我们将分享一些常用的聊天机器人链接,让您可以更快地找到适合自己... 查看详情

python搭建qq聊天机器人极简教程(代码片段)

为了方便管理QQ粉丝群,想着弄一个机器人来进行自动回复,本来想着去某平台去购买结果发现都很贵而且是按年收费,可是群管家又不能满足大规模内容回复的需求,所以只能自己做一个咯。先来看一下效果吧&#... 查看详情

加更搭建基于chatgpt的钉钉聊天机器人

应某些小伙伴的加更请求,出一期基于钉钉上的聊天机器人,我顺便加更一期,搭建一个钉钉聊天机器人的小教程。首先进入到钉钉开放平台的后台管理系统:https://open.dingtalk.com/进入到应用开发->企业内部开发... 查看详情

手把手创建一个聊天机器人(代码片段)

今天来写一个属于自己的聊天机器人。思路:当用户点击发送后,需要根据用户输入的内容,提交到服务器,然后由服务器根据你输入的内容,返回对应的结果,我们拿到结果展示到界面上当做机器人的回答即可。这里使用的接... 查看详情

北半球自己动手做聊天机器人

转自:https://www.beibq.cn/book/n2uy1/810 SharEDITor :http://www.shareditor.com/ 查看详情

使用socket.io搭建一个实时聊天机器人(代码片段)

一、安装socket.ionpmisocket.io--save二、使用第一种:服务端使用原生node//创建http服务器consthttp=require('http')varfs=require('fs')constapp=http.createServer()app.on('request',(req,r 查看详情

有开发聊天机器人的教程吗? [关闭]

】有开发聊天机器人的教程吗?[关闭]【英文标题】:Anytutorialsfordevelopingchatbots?[closed]【发布时间】:2012-03-3104:42:10【问题描述】:作为一名工科学生,我想使用python制作一个聊天机器人。因此,我进行了很多搜索,但无法真正... 查看详情

自己动手开发智能聊天机器人完全指南(附完整源码)

一、前言本文是《自己动手开发智能聊天机器人完全指南(附完整源码)》的第二篇,也是21天实战人工智能系列《知识图谱完全项目案例剖析》里面的知识图谱应用的案例。前文中实现了一个最基本的人工智能聊天机器人,其... 查看详情

如何使用chatgptapi训练具有自定义知识库的ai聊天机器人(代码片段)

...们之前的文章中,我们演示了如何使用ChatGPTAPI构建AI聊天机器人,并分配一个角色来对其进行个性化设置。但是,如果您想根据自己的数据训练AI,该怎么办?例如,您可能有一本书、财务数据或大量数据库,并且您希望轻松搜... 查看详情

聊天机器人(chatbot)终极指南:自然语言处理(nlp)和深度机器学习(deepmachinelearning)(代码片段)

...(NLP)以及如何将NLP和深度学习(DeepLearning)应用到聊天机器人(Chatbots)方面的最好的资料。时不时地我会发现一个出色的资源,因此我很快就开始把这些资源编制成列表。不久,我就发现自己开始与bot开发人员和bot社区的其... 查看详情

自己动手做聊天机器人一-涉及知识

...是人类的梦想,造一台可以为你做一切事情并且有情感的机器人,像哆啦A梦一样,现在这已经不是一个梦了:iPhone里会说话的siri、会下棋的阿法狗、小度机器人、大白......,他们都能够具有智能,和人类交互,帮人类解决问题... 查看详情