transformers生成式对话机器人_机器人transformer-程序员宅基地

技术标签: 机器人  python  nlp  transformer  生成式  

生成式对话机器人是一种人工智能技术,它通过学习大量自然语言数据,模拟人类进行开放、连贯和创造性的对话。这种类型的对话系统并不局限于预定义的回答集,而是能够根据上下文动态生成新的回复内容。其核心组件和技术包括:

1、神经网络架构:现代生成式对话机器人通常基于深度学习框架,特别是Transformer架构(如GPT-3、BERT等)或其他循环神经网络(RNN),如长短期记忆网络(LSTM)。

2、自回归模型:在生成回复时,模型按词或子词单元顺序预测下一个单元,直到生成完整的回复句子。这允许模型处理文本序列的连续性和上下文依赖性。

3、训练数据:为了实现高质量的对话生成,需要大量的对话数据集来训练模型,这些数据可以是电影剧本、社交媒体对话、论坛帖子、客服记录等。

4、注意力机制:尤其是在Transformer中,多头注意力机制让模型能够更好地关注输入序列中的重要部分,从而生成更相关和连贯的回复。

5、强化学习:有时会结合强化学习策略来优化对话机器人的行为,使其能适应不断变化的环境,并根据用户的反馈调整对话策略以达到更好的交互效果。

6、对话管理:除了基本的回复生成之外,一个完整的对话机器人还需要对话管理模块来跟踪对话状态,确保对话流程的连贯性以及适时切换话题或结束对话。

7、后处理与控制:为了保证生成内容的质量和安全,可能还会包含一些后处理步骤,比如对生成回复进行过滤或调整,避免产生不恰当或误导性内容。

Transformer生成式对话机器人是当前对话系统技术的前沿代表之一,下面介绍一下如何使用transformers简单搭建一个生成式对话机器人。

# 导包
from datasets import Dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, DataCollatorForSeq2Seq, TrainingArguments, Trainer
ds = Dataset.load_from_disk("/alpaca_data_zh")
print(ds[:3])
# 数据预处理
tokenizer = AutoTokenizer.from_pretrained("../models/bloom-389m-zh")
# 数据处理函数
def process_func(example):
    MAX_LENGTH = 256
    input_ids, attention_mask, labels = [], [], []
    instruction = tokenizer("\n".join(["Human: " + example["instruction"], example["input"]]).strip() + "\n\nAssistant: ")
    response = tokenizer(example["output"] + tokenizer.eos_token)
    input_ids = instruction["input_ids"] + response["input_ids"]
    attention_mask = instruction["attention_mask"] + response["attention_mask"]
    labels = [-100] * len(instruction["input_ids"]) + response["input_ids"]
    if len(input_ids) > MAX_LENGTH:
        input_ids = input_ids[:MAX_LENGTH]
        attention_mask = attention_mask[:MAX_LENGTH]
        labels = labels[:MAX_LENGTH]
    return {
    
        "input_ids": input_ids,
        "attention_mask": attention_mask,
        "labels": labels
    }
# 数据处理
tokenized_ds = ds.map(process_func, remove_columns=ds.column_names)
tokenized_ds
# 创建模型
model = AutoModelForCausalLM.from_pretrained("../models/bloom-389m-zh")
# 配置训练参数
args = TrainingArguments(
    output_dir="./chatboot",
    per_device_train_batch_size=4,
    gradient_accumulation_steps=8,
    logging_steps=10,
    num_train_epochs=2
)

# 创建训练器
trainer = Trainer(
    args=args,
    model=model,
    train_dataset=tokenized_ds,
    data_collator=DataCollatorForSeq2Seq(tokenizer=tokenizer, padding=True)
)
# 模型训练
trainer.train()
# 模型推理
from transformers import pipeline

pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)

inputs = "Human: {}\n{}".format("重庆南岸区怎么玩?", "").strip() + "\n\nAssistant: "
pipe(inputs, max_length=256, do_sample=True)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/LLMUZI123456789/article/details/136364882

智能推荐

多线程基础之设计模式Future模式_线程 future-程序员宅基地

文章浏览阅读258次。多线程基础之设计模式Future模式_线程 future

CCS中关于error#5、error#10008-D、error#16001的更正指导_cannot find file "libc.a-程序员宅基地

文章浏览阅读1w次,点赞17次,收藏60次。本文档仅对ccs编程过程中所出现的error#5、error#10008-D、error#10010做简要讲解在使用ccs对dsp编程过程中,用户可能会参考一些例程或在维护优化时阅读他人程序,而在导入程序时会出现各种各样的错误或警告,下面对编者在修改程序时遇到的error#5、error#10008-D和error#10010做简要讲解。1.error#5的错误更正讲解在ccs中导入其..._cannot find file "libc.a

poj 3080(3450) KMP(暴力也能过) 多个串的最长公共子串-程序员宅基地

文章浏览阅读359次。题意:给定m(m思路:暴力找出第一个串的所有长度大于等于3的子串,用KMP算法求其是否为剩下m-1个串的子串。为了复用next数组,枚举子串时先固定起点(求一遍next数组即可),然后由长到短枚举子串(剪枝)。#include #include using namespace std;#define N 60char s[12][N+5],t[N+5],res[N+5];int

matlab reshape意义,matlab reshape使用-程序员宅基地

文章浏览阅读1.4k次。reshape把指定的矩阵改变形状,但是元素个数不变,例如,行向量:a = [1 2 3 4 5 6]执行下面语句把它变成3行2列:b = reshape(a,3,2)执行结果:b =1 42 53 6若a=[1 2 34 5 67 8 9]使用reshpe后想得到b=[1 2 3 4 5 6 7 8 9]只需要将a转置一下就可以了:b=reshape(a',1,9)---------------..._matlab中reshape的含义

c语言中数学运算符,运算符在数学和C语言中的区别.doc-程序员宅基地

文章浏览阅读1k次。运算符在数学和C语言中的区别刚开始学C语言的人,一般都认为C语言中的运算符跟数学中的运算符完全相同,没必要去考虑和研究,从而在利用过程中经常出错而把学习C语言越来越难或神秘化,其实学C语言并不是很难的事,要把握有些重要技巧,很容易学会.著名计算机科学家沃思(Nikiklaus Wirth)说“程序=算法+数据类型”,要好好学会程序,首先要深入了解算法,而了解算法事实上指的是就是正确地了解和利用运算..._c语言中的加减乘除和数学中的加减乘除有什么不同【

SSM三大框架Spring_后端框架三大框架-程序员宅基地

文章浏览阅读3.9k次。一、三大框架基本结构1.为什么需要框架说明: 如果生产环境下的项目,都是从头(从底层写起)开发,难度太大了,并且开发的效率极其低下. 所以为了让项目快速的上线部署. 将某些特定的功能.进行了高级的封装. 那么我们如果需要使用封装后的API.,则必须按照人家的要求编码2.框架的分类:1.Spring框架:整个框架中负责“宏观调控”的(主导),负责整合其它的第三方的框架2.SpringMVC框架:主要负责实现前后端数据的交互3.Mybatis框架/MybatisPlus框架:持久层框.._后端框架三大框架

随便推点

数据结构(3):java使用数组模拟堆栈-程序员宅基地

文章浏览阅读2次。   堆栈原理:        数组模拟堆栈: //数组模拟栈class ArrayStack{ //栈顶 private int top = -1; private int maxSize; private int[] arrayStack; public ArrayStack(int maxSize){ this.maxSi...

Understand_6.5.1175::New Project Wizard_understand 6.5.1176-程序员宅基地

文章浏览阅读742次,点赞16次,收藏17次。不选: Enforce portability rules to share this project with others。勾选: Configure Advanced Settings after project creation。保存类型(T):Understand projects (*.udb)勾选:Include subdirectories (包含子文件夹)Additional Filters: (空)单击 文件夹 lab1。文件名(N):lab1。双击 文件夹 boot。_understand 6.5.1176

从零开始带你成为MySQL实战优化高手学习笔记(二) Innodb中Buffer Pool的相关知识_mysql_global_status_innodb_buffer_pool_reads-程序员宅基地

文章浏览阅读969次。在从零开始带你成为MySQL实战优化高手学习笔记(一)中学习到一条语句到底是怎么执行的,从链接获取数据到通过查询解析器解析SQL语句表达的什么意思,解析之后由查询优化器生成查询路径树,选出一条最优查询路径调用存储引擎接口..._mysql_global_status_innodb_buffer_pool_reads

美化上传文件框(上传图片框)_文件上传框很丑-程序员宅基地

文章浏览阅读8.8k次,点赞6次,收藏12次。传统的表单控件十分简陋,可以说是很难看,那怎么办?方法:我们自己做一个好看的样式出来,用各种标签啊,css啊,是可以做到的。如图:做出这样一个样子应该是很简单的,但是怎么让他具有上传的功能的呢?那就使用代理的方法,点击上传就等于点击(上传文件表单控件)废话不多说,直接上代码:html:测试插件body{font_文件上传框很丑

js简单表格操作_"var str = '<table border=\"5px\"><tr><td>序号</td><-程序员宅基地

文章浏览阅读4.8k次,点赞3次,收藏18次。js简单表格操作,对表格进行增删改,效果图:全部代码:&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt; &lt;meta charset="utf-8" /&gt; &lt;script type="text/javascript" src="js/jquery.2.1.4.min.js" &gt;&lt;/sc_"var str = '序号名字

Power BI销售数据分析_powerbi汇总销售人员业绩包括无销售记录的人-程序员宅基地

文章浏览阅读1.1w次,点赞8次,收藏99次。今天通过一份销售数据,聊聊Power BI数据分析。一、分析数据数据源总的有四个表,店铺资料,销售目标,销售数据_本期,销售数据_去年同期。各表表头如下:1店铺资料表:2销售目标:3销售数据_本期:4销售数据_去年同期:数据中包含多个城市、督导、店铺的数据,我希望经过分析后能得到各个城市/店铺的销售情况,即业绩、业绩完成率、业绩贡献度、业绩增长率、各销售人员的销售能力等。此次..._powerbi汇总销售人员业绩包括无销售记录的人

推荐文章

热门文章

相关标签