首页 > 其他分享 >【自然语言处理(NLP)】聊天机器人模块实现

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

时间:2022-10-20 16:34:51浏览次数:77  
标签:NLP 模型 ids token API 模块 input import 自然语言

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


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

(文章目录)


前言

(一)、任务描述

使用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)

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

在这里插入图片描述


总结

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

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

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

在这里插入图片描述

标签:NLP,模型,ids,token,API,模块,input,import,自然语言
From: https://blog.51cto.com/u_15745546/5780264

相关文章

  • 【自然语言处理(NLP)】聊天机器人系统评测
    【自然语言处理(NLP)】聊天机器人系统评测作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源......
  • 【听如子说】-python模块系列-AIS编解码Pyais
    PyaisModuleIntroducepyais一个简单实用的ais编解码模块工作中需要和ais打交道,在摸鱼的过程中发现了一个牛逼的模块,对ais编解码感兴趣的可以拿项目学习一下,或者运用到......
  • 内置重要模块(os,json,sys)
    os模块  os模块主要与操作系统进行交互importos#1.创建目录mkdir/makedirsos.mkdir(r'a')os.mkdir(r'a\bb')os.mkdir(r'a\bb\ccc')mk......
  • os,json模块实现用户登录注册
    用户登录注册功能importosimportjson#注册功能#1.获取执行文件所在的目录路径base_dir=os.path.dirname(__file__)#D:/pythonProject03/day19#2.拼接......
  • 数据提取-lxml模块
    数据提取-lxml模块知识点了解lxml模块和xpath语法的关系了解lxml模块的使用场景了解lxml模块的安装了解谷歌浏览器xpathhelper插件的安装和使用掌握xpath语法......
  • 网络安全比赛A模块任务书
    前言这是作者这几个月来的第一次更新文章,问就是太忙了,最近要去参加国赛,在此重新回来写文章,也不知道能写多久,就当练习了。一.A模块基础设施设置/安全加固A-1.登录加固1......
  • Linux源码编译——添加新模块
    C源码文件(如new_module.c)添加到适当目录在menuconfig中增加新条目:修改C源码文件所在目录下的Kconfig文件,参考该文件中已有的编译选项照猫画虎,添加新的项configNEW_MOD......
  • 常用内置模块
    包的使用#PS:虽然python3之后的版本中并不再要求包内必须含有__init__.py,但是考虑到兼容性问题,我们在创建包文件时,还是推荐加上__init__.py当我们再python中导入包时......
  • 常用内置模块
    常用内置模块目录常用内置模块包编程思想的转变软件开发目录规范常用内置模块之collections模块常用内置模块之时间模块常用内置模块之随机数模块包什么是包?包是一个......
  • ### 包的具体使用,软件开发目录规范,常用内置模块之collections模块,常用内置模块之时间
    包的具体使用虽然python3对包的要求降低了不需要__init__.py也可以识别但是为了兼容性考虑最好还是加上__init__.py1.如果只想用包中某几个模块那么还是按照之前的导......