【自然语言处理(NLP)】聊天机器人模块实现

news2025/1/9 16:27:47

【自然语言处理(NLP)】聊天机器人模块实现


在这里插入图片描述


作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程爱好者,期待和大家一起学习,一起进步~
.
博客主页ぃ灵彧が的学习日志
.
本文专栏人工智能
.
专栏寄语:若你决定灿烂,山无遮,海无拦
.
在这里插入图片描述

文章目录

  • 【自然语言处理(NLP)】聊天机器人模块实现
  • 前言
    • (一)、任务描述
    • (二)、环境配置
  • 一、下载并更新相关包
  • 二、使用生成API实现闲聊机器人
    • (一)、数据处理
    • (二)、使用PaddleNLP一键加载预训练模型
    • (三) 、使用生成API输出模型预测结果
  • 四、将词典ID转为对应的汉字
  • 总结


前言

(一)、任务描述

使用PaddleNLP内置的生成式API的功能和用法,并使用PaddleNLP内置的plato-mini模型和配置的生成式API实现一个简单的闲聊机器人。


(二)、环境配置

本示例基于飞桨开源框架2.0版本。

import paddle
import paddle.nn.functional as F
import re
import numpy as np

print(paddle.__version__)

# cpu/gpu环境选择,在 paddle.set_device() 输入对应运行设备。
# device = paddle.set_device('gpu')

输出结果如下图1所示:
在这里插入图片描述


一、下载并更新相关包

AI Studio平台已经默认安装了PaddleNLP,但仍然需要使用如下的指令进行版本的更新,否则后续程序的运行会报错。

!pip install --upgrade paddlenlp -i https://pypi.org/simple
!pip install --upgrade pip
!pip install --upgrade sentencepiece

二、使用生成API实现闲聊机器人

下面我们来学习如何使用UnifiedTransformer模型及其内嵌的生成式API实现一个闲聊机器人。


(一)、数据处理

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
)

print(encoded_input.keys())
# dict_keys(['input_ids','token_type_ids','position_ids','attention_mask'])


(二)、使用PaddleNLP一键加载预训练模型

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)


(三) 、使用生成API输出模型预测结果

下一步我们将处理好的输入作为参数传递给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 = encoder_input['attention_mask'],
    max_length =64,
    min_length = 1,
    decode_strategy = 'sampling',
    top_k = 5,
    num_return_sequences = 20
)
print(ids)
print(scores)

部分输出结果如下图所示:

在这里插入图片描述


四、将词典ID转为对应的汉字

#将词典ID转为对应的汉字
response = []
for sequence_ids in ids.numpy().tolist():
    sequence_ids = sequence_ids[:sequence_ids.index(tokenizer.sep_token_id)]
    text = tokenizer.convert_ids_to_string(sequence_ids,keep_space=False)
    response.append(text)
print(response)

因此,当我们在问机器人:“你好啊,你今年多大了”,可以得到的回复结果如下:

在这里插入图片描述


总结

本系列文章内容为根据清华社出版的《自然语言处理实践》所作的相关笔记和感悟,其中代码均为基于百度飞桨开发,若有任何侵权和不妥之处,请私信于我,定积极配合处理,看到必回!!!

最后,引用本次活动的一句话,来作为文章的结语~( ̄▽ ̄~)~:

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。

ps:更多精彩内容还请进入本文专栏人工智能,进行查看,欢迎大家支持与指教啊~( ̄▽ ̄~)~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/50710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《异常检测——从经典算法到深度学习》20 HotSpot:多维特征 Additive KPI 的异常定位

《异常检测——从经典算法到深度学习》 0 概论 1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法 3 基于One-Class SVM的异常检测算法 4 基于高斯概率密度异常检测算法 5 Opprentice——异常检测经典算法最终篇 6 基于重构概率的 VAE 异常检测 7 基于条件VAE异常…

[附源码]计算机毕业设计JAVA鲜花销售管理系统

[附源码]计算机毕业设计JAVA鲜花销售管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

【学习笔记02】node的模块化和内置模块

一、nodejs的模块化 😂 nodejs 所有的东西都是模块 (一)node模块的分类 1. 自定义模块:自己写的模块 2. 内置模块:nodejs提供的模块 3. 第三方模块 别人写好的东西, 上传到某一个位置(npm), 我们去 npm 去下载到我们本…

SpringBoot+MyBatis和MyBatisPlus+vue+ElementUl实现批量删除 我只能说太简单了

目录准备工作MySQL数据库表Result返回结果1、SpringBootMyBatisPlusvueElementUl实现批量删除1.1、演示GIF动态图1.2、实体类1.3、Dao接口1.4、Service接口1.5、ServiceImpl接口实现层1.6、Controller控制层1.7、Vue前端2、SpringBootMyBatisvueElementUl实现批量删除2.1、演示…

关于数据权限的设计

在项目实际开发中我们不光要控制一个用户能访问哪些资源,还需要控制用户只能访问资源中的某部分数据。 控制一个用户能访问哪些资源我们有很成熟的权限管理模型即RBAC,但是控制用户只能访问某部分资源(即我们常说的数据权限)使用R…

云计算-JavaAPI与Hadoop的互联的实现

云计算-JavaAPI与Hadoop的互联的实现 文章目录云计算-JavaAPI与Hadoop的互联的实现一、环境准备二、HDFS 基本的命令操作三、HDFS客户端操作IntelliJ IDEA 环境准备通过API操作HDFS主函数程序进行连接测试1. 初始化hdfs连接获得FileSystem对象1. HDFS获取文件系统2. HDFS创建文…

Redis集群方案备忘录

文章目录哨兵模式官方Redis ClusterJedis(客户端分片)Codis(代理分片)哨兵模式 优点 哨兵模式是基于主从模式的,解决可主从模式中master故障不可以自动切换故障的问题。缺点 (1)是一种中心化的…

Express 6 指南 - 路由 6.3 路线路径 Route paths

Express Express 中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录Express6 指南 - 路由6.3 路线路径 Route paths6 指南 - 路由 6.3 路线路径 Route paths 【这翻译得…生怕国人看懂】 路由路径与请求方法相结合,定义了可以…

大数据培训课程之序列化案例实操

序列化案例实操 1. 需求 统计每一个手机号耗费的总上行流量、下行流量、总流量 (1)输入数据 (2)输入数据格式: 7 13560436666 120.196.100.99 1116 954 200 id…

编辑器实现思路

复杂项目 业务的复杂性: 交互的复杂性数据结构和状态的复杂性,例如级联选择器需要遍历树结构,还有一些需要链表、栈、队列等多项目依赖,工程的复杂性性能优化流程的复杂性 git flowlint 工具单元测试commit信息Code ReviewCI/CD开发一个编辑器 例如低代码的编辑器 编辑器…

如何批量旋转图片?学会这三种方法就能轻松实现

对于喜爱拍照的小伙伴来说,你们的手机或者相机应该有很多图片素材吧。那么在整理这些图片到电脑的时候,你们的图片会不会出现方向不一致的情况呢?有的是倒着的,有的是左旋了90。想要将这些图片都调整为同一个方向,靠手…

Delete `␍` 最简单最有效的解决方法和解释(VScode)

一、原因 VScode 出现 Delete ␍ 的原因,大部分都是因为安装了 Prettier 插件指定了文件的结尾换行符与系统不一致导致的,就是下面这个插件 由于历史原因,windows 和 linux 两个系统的文本文件的换行符不一致;Windows在换行的时候…

空域图像增强-图像灰度变换

1.图像灰度变换。自选一张图片,完成以下图像处理:①显示图像的灰度直方图;②直方图均衡化,对比变化前后的图像和灰度直方图;③对图像进行线性灰度变换,对某部分灰度值进行扩展,压缩其它灰度值区…

汽车空调器前缸盖数控加工工艺的制订及夹具设计

目  录 摘  要 1 Abstract 2 1 引言 3 2 零件的分析 4 2.1 零件的作用 4 2.1.1空调压缩机的功用和要求 4 2.1.2 汽车空调压缩机的一般结构 4 2.1.3 斜盘式压缩机的结构特点 4 2.1.4 斜盘式压缩机的优点 5 2.2 零件的工艺分析 5 3 数控机床的加工性能分析 10 3.1…

[附源码]计算机毕业设计JAVA校园跑腿系统

[附源码]计算机毕业设计JAVA校园跑腿系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis M…

2023年软考备考,系统分析师知识点速记,速看

2023上半年软考系统分析师知识点速记分享给大家,快来一起打卡学习吧! 1、企业集成分类:按组织范围分 2、企业集成分类:按集成点分 3、企业战略与信息化战略集成方法 业务与IT整合(BITA):重心是…

计算机组成原理习题课第三章-4(唐朔飞)

计算机组成原理习题课第三章-4(唐朔飞) ✨欢迎关注🖱点赞🎀收藏⭐留言✒ 🔮本文由京与旧铺原创,csdn首发! 😘系列专栏:java学习 💻首发时间:&…

计算机网络——OSI参考模型

计算机网络的分层结构 OSI参考模型 世界上第一个提出网络结构的公司IBM公司,其他的公司有美国国防部提出的TCP/IP 为了支持不同的网络结构的互联互通,国际标准化组织于1984年提出的开放的系统互联(OSI)参考模型。 OSI参考模型在…

光栅莫尔信号四倍频细分电路模块的设计与仿真研究

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

Kafka是什么?

简介: Kafka 是⼀种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn公司开发,使⽤Scala语⾔编写,⽬前是 Apache 的开源项⽬。broker:Kafka 服务器,负责消息存储和转发topic:消息类别…