当前位置: 首页 > news >正文

自然语言处理: 第八章chatGPT的搭建

理论基础

Transformer 大模型家族可以分成三类, 至于三者的区别可以参考上一章:

  • Encoder-only,
  • Decoder-only, 只需要Pre_train
  • Encoder-decoder , 可以在一些任务上无需进行fine_tune

必须要在下游任务进行微调比如Bert , Bart 。 T5 这种无需要微调就能完成一些任务 。最后GPT从3开始,只需要预训练就能适应很多任务。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EO295wD2-1692024764313)(image/09_chatGPT/1691416067253.png)]



关于现在ChatgGPT的训练方法主要分为三步:

  1. Pre-Training, 这些就是从大量的文本中作问答的无监督的预训练,这个过程可以参考上一章内容,这一部分基本大家都一样,通过大量文本的无监督的学习,大模型就逐渐拥有了文本的理解能力,这种大模型由于参数超过一定数量级后(million级),就拥有了涌现能力(拥有few-shot 或者zero-shot的能力)
  2. Instruction Tuning, SFT(supervised Fine-tuning)通过特定的指令调优,进行监督学习,使得生成的内容类似你问我答。
  3. Alignment, RLHF(Reinforcement Learning human feedback)经过人类的输入的强化学习从而得到更好的结果,生成的内容就更像对话

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nossRgZR-1692024764313)(image/09_chatGPT/1691589194128.png)]



In - context Tuning(上下文调优)

由于预训练的文本不全是对话的数据集,所以为了让GPT更适合作为聊天机器人,所以利用对话内容作为数据,对GPT进行tuning,也就是给机器例子,从而让机器学会你的例子模板去回答。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IQdzJqQK-1692024764314)(image/09_chatGPT/1691589966907.png)]


下面的数据来自于Larger language models do in-context learning differently , 作者对in-context learning进行了研究,主要工作是对in-context learning的数据集给标记错误的lable后,再让不同大小的模型去学习这些错误的label,最后作者发现,其实in-context learning是有学习到知识的,而不是只是通过这些例子去学习到对话(或者激活某种任务的能力),从下面从左至右模型大小逐渐减少,可以看到这个在in-context learning的能力只有在大模型的基础上才能实现,具体可以参考上面这一篇论文。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ynhm1qIF-1692024764314)(image/08_ChatGPT/1691990780419.png)]



Instruction Tuning(指令调优)

通过添加一些明确的指令(Prompt)从而使得模型不仅仅会对话,而且能通过prompt暗示得到人类最想要的结果,这也是为什么prompt工程师诞生的原因。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oXqWTdQN-1692024764314)(image/09_chatGPT/1691590080891.png)]

Scaling Instruction-Finetuned Language Models 在这篇文章中以PaLM为例验证了instruction tuning的有效性,如下图,可以看到随着instruction tuning的任务量增多,模型在不同任务的准确性也越来越好。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3WWFBIPf-1692024764315)(image/08_ChatGPT/1692007589972.png)]

最近刷到了李宏毅老师教材,这里也解释了上文中in - context learning 和 instruction learning 的区别,对应的题目描述就是instruction , 而下面的例子就是in-content learning。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xGJgyeFJ-1692024764315)(image/08_ChatGPT/1691935401894.png)]




Alignment Training

在GPT -> instructGPT之后,为了让模型更像人类的行为,因此引入了对齐训练。OPENAI使用的是RLHF(Reinforcement Learning human feedback),简单的理解就是他在训练的时候引入了人类的打分机制,由于GPT生成模型其每次对于同样的问题回答都不一样,而人类根据GPT的回答进行打分,然后将这个分数去训练一个回归判分模型,训练完成之后这个打分模型能根据GPT的回答自动打分。拥有了这个打分模型之后,就可以在instructGPT模型不断生成答案,通过训练好的打分模型去打分,得到的分数再去优化instructGPT 使得优化后的GPT的得分越来越高。最后不断的重复这个过程最终可以使得GPT的回答与人类的回答对齐

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J5G1MG7E-1692024764315)(image/09_chatGPT/1691590504242.png)]


  1. 通过大量的文本作预训练,使得GPT拥有涌现能力
  2. 通过SFT得到InstructionGPT,教会GPT拥有对话的能力,并且通过特殊的prompt得到对应的回答(对应下图step1)
  3. 创建强化学习的奖励模型(对应下图step2)
  4. 利用奖励模型,使用近端策略优化微调模型(PPO),可以参考这一篇知乎Proximal Policy Optimization (PPO) 算法理解:从策略梯度开始
    (对应下图step3)


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-imGHge9b-1692024764315)(image/09_chatGPT/1691594172958.png)]




代码实现

SFT(Supervised Fine-tuning)

这里展示了一个简易代码,也就是在读取了做完无监督的预训练模型,利用一些加入了prompt的对话文本去作tuning,使得整个模型具备能根据prompt得到对应的贴合人类的回答,从而实现聊天机器人的功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JRxu1poG-1692024764316)(image/09_chatGPT/1691595292946.png)]

Reward-model

根据人为的打分去训练一个判分模型。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-myMs93wh-1692024764316)(image/09_chatGPT/1691595555964.png)]

PPO

利用step2训练好的打分模型,对经过SFT模型生成的答案进行打分,然后将这个分数的奖励进行最大化最终去优化整个instructGPT,不断的循环最终得到chatGPT

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MGauY2j6-1692024764316)(image/09_chatGPT/1691596150299.png)]




结果

这里展示的一个任务是在之前WiKi数据集上做完预训练之后得到的WikiGPT模型,这个模型已经具备一定的文本生成和理解能力了。再在Movie对白数据集进行的In-context tuning,使得其具有对话的能力,令其生成的内容更像对话,而不是生硬的文本。(PS: 如果想使得自己的模型进行prompt tuning, 目前比较常见的方法是利用特定的prompt 生成一段指令,然后将文本输入给GPT的API作生成回答,便可以快速得到一定量的问答数据,但是这样的话模型能力肯定是比GPT的能力低的,但是比自己找人生成对话数据成本更低时间更快,适用于小的垂直领域)

import torch
from GPT_Model_with_Decode import GPT
from CorpusLoader import MovieCorpus
from Utilities import read_data
from ModelTrainer import Trainer
import datetimedevice = "cuda" if torch.cuda.is_available() else "cpu"
# 加载 MovieCorpus 数据  
dialog_corpus = MovieCorpus(read_data('cornell movie-dialogs corpus/processed_movie_lines.txt'))
chat_gpt = GPT(dialog_corpus).to(device)
chat_gpt.load_state_dict(torch.load('99_TrainedModel/WikiGPT_0.01_200_20230620_111344.pth'))
# chat_gpt.eval()# 微调 ChatGPT 模型
trainer = Trainer(chat_gpt, dialog_corpus, learning_rate=0.001, epochs=200)
trainer.train()# 保存微调后的模型
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") # 获取当前时戳
model_save_path = f'99_TrainedModel/miniChatGPT_{trainer.lr}_{trainer.epochs}_{timestamp}.pth'
torch.save(chat_gpt.state_dict(), model_save_path)# 测试微调后的模型
input_str = "how are you ?"
greedy_output = chat_gpt.decode(input_str, strategy='greedy', max_len=50)
beam_search_output = chat_gpt.decode(input_str, strategy='beam_search', max_len=50, beam_width=5, repetition_penalty=1.2)print("Input text:", input_str)
# print("Greedy search output:", greedy_output)
print("Beam search output:", beam_search_output)

如同上面代码,数据集采用的是电影对白的形式,一问一答。首先读取之前预训练好的WikiGPT,然后直接在MovieCorpus作训练就好了,因为数据的格式也是一问一答,所以代码与上一章的内容基本一致。这样训练好的之后的MiniGPT的文本生成能力就会更像人类的对话功能靠齐。

最终的效果如下:可以看到可能还是因为数据太小,或者训练的问题,整个生成的文本还是不能练成一句话,但是看上去也比较像对话了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jeVigeG2-1692024764317)(image/09_chatGPT/1691658273867.png)]

相关文章:

自然语言处理: 第八章chatGPT的搭建

理论基础 Transformer 大模型家族可以分成三类, 至于三者的区别可以参考上一章: Encoder-only,Decoder-only, 只需要Pre_trainEncoder-decoder , 可以在一些任务上无需进行fine_tune 必须要在下游任务进行微调比如Bert , Bart 。 T5 这种无需要微调就能完成一些任…...

阿里云国际版云服务器防火墙怎么设置呢?

入侵防御页面为您实时展示云防火墙拦截流量的源IP、目的IP、阻断应用、阻断来源和阻断事件详情等信息。本文介绍了入侵防御页面展示的信息和相关操作,下面和012一起来了解阿里云国际版云服务器防火墙设置: 前提条件 您需要先在防护配置页面,开…...

安装elasticsearch

一、docker安装elasticsearch 1、下载镜像 docker pull elasticsearch:6.5.4 2、启动容器 docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \ -e "discovery.typesingle-node" \ -e "cluster.nameelasticsearch" \ -e "ES_JAVA_OPTS-Xm…...

【Sklearn】基于朴素贝叶斯算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于朴素贝叶斯算法的数据分类预测(Excel可直接替换数据) 1.模型原理2.模型参数3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果1.模型原理 模型原理: 朴素贝叶斯分类是基于贝叶斯定理的一种分类方法。它假设特征之间相互独立(朴素性),从而简化计算过…...

学习Vue:创建和使用组件

组件化开发是现代前端开发的一种重要方法,它可以将复杂的应用程序拆分成多个独立、可复用的组件。在Vue.js中,创建和使用组件非常简单,让我们一起来了解如何通过Vue.js实现组件化开发。 创建组件 在Vue.js中,您可以通过Vue.compo…...

【MongoDB基础】

目录 一、概述 1.概念 2.相关 2.1 实例 2.2 库 2.3 集合 2.4 文档 2.5 主键 3.特性 4,应用场景 二、安装 1.RPM安装 2.启动数据库 三、目录结构 1.rpm -ql mongodb-org-server 2.rpm -ql mongodb-org-shell 3.rpm -ql mongodb-org-tools 四、默…...

NLP文本匹配任务Text Matching [有监督训练]:PointWise(单塔)、DSSM(双塔)、Sentence BERT(双塔)项目实践

NLP文本匹配任务Text Matching [有监督训练]:PointWise(单塔)、DSSM(双塔)、Sentence BERT(双塔)项目实践 0 背景介绍以及相关概念 本项目对3种常用的文本匹配的方法进行实现:Poin…...

2023牛客第八场补题报告A H J K

2023牛客第八场补题报告A H J K A-Alive Fossils_2023牛客暑期多校训练营8 (nowcoder.com) 思路 统计字符串&#xff0c;取出现次数为t的。 代码 #include <bits/stdc.h> #define int long long #define endl \n #define IOS ios::sync_with_stdio(0), cin.tie(0), …...

KubeSphere 部署 Zookeeper 实战教程

前言 知识点 定级&#xff1a;入门级如何利用 AI 助手辅助运维工作单节点 Zookeeper 安装部署集群模式 Zookeeper 安装部署开源应用选型思想 实战服务器配置(架构 1:1 复刻小规模生产环境&#xff0c;配置略有不同) 主机名IPCPU内存系统盘数据盘用途ks-master-0192.168.9.9…...

麦肯锡重磅发布2023年15项技术趋势,生成式AI首次入选,选对了就是风口

两位朋友在不同群里分享了同一份深度报告。 一位是LH美女&#xff0c;她在“AIGC时代”群里上传了这份文档&#xff0c;响应寥寥&#xff0c;可能是因为这些报告没有像八卦文那样容易带来冲击。 你看韩彬的这篇《金融妲己&#xff1a;基金公司女销售的瓜&#xff0c;一个比一个…...

【软件工程质量】代码质量管理平台Sonar

分析代码质量的工具有挺多的&#xff0c;比如&#xff1a;Alibaba Java Coding Guidelines plugin、QAPlug、SonarQube 等&#xff0c;平时用的比较多的事Alibaba Java Coding Guidelines plugin和sonarlint。 SonarQube 是一个用于管理源码质量的平台&#xff0c;帮助开发者…...

【EI/SCOPUS检索】第三届计算机视觉、应用与算法国际学术会议(CVAA 2023)

第三届计算机视觉、应用与算法国际学术会议&#xff08;CVAA 2023) The 3rd International Conference on Computer Vision, Application and Algorithm 2023年第三届计算机视觉、应用与算法国际学术会议&#xff08;CVAA 2023&#xff09;主要围绕计算机视觉、计算机应用、计…...

crm客户管理系统的功能有哪些?

阅读本文&#xff0c;您可以了解&#xff1a;1、CRM客户管理系统的定义&#xff1b;2、CRM客户管理系统的功能。 CRM客户管理系统是一个工具或软件&#xff0c;能够帮助企业更好地与客户进行沟通、理解客户需求&#xff0c;以及有效地处理客户信息和互动。通俗地说&#xff0c…...

leetcode 面试题 02.05 链表求和

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;面试题 02.05 链表求和 ps&#xff1a; 首先定义一个头尾指针 head 、tail&#xff0c;这里的 tail 是方便我们尾插&#xff0c;每次不需要遍历找尾&#xff0c;由于这些数是反向存在的&#xff0c;所以我们直接加起来若…...

培训报名小程序-用户注册

目录 1 创建数据源2 注册用户3 判断用户是否注册4 完整代码总结 我们的培训报名小程序&#xff0c;用户每次打开时都需要填写个人信息才可以报名&#xff0c;如果用户多次报名课程&#xff0c;每次都需要填写个人信息&#xff0c;比较麻烦。 本篇我们就优化一下功能&#xff0c…...

java八股文之基本语法

目录 注释有几种形式 1.注释有几种形式 单行注释&#xff1a; 通常用于 解释 代码内某单行得作用 多行注释&#xff1a;通常用于接收某个方法得作用文档注释&#xff1a;通常用于生成 Java 开发文档。 标识符和关键字得区别 标识符&#xff1a;由字母&#xff0c;…...

java不支持发行版本5

这篇文章主要给大家介绍了关于如何解决java错误:不支持发行版本5的相关资料,发行版本5是Java5,已经是十多年前的版本了,现在已经不再被支持,需要的朋友可以参考下 − 目录 问题描述&#xff1a;解决方法&#xff1a;永久解决方法&#xff1a;总结 问题描述&#xff1a; 在i…...

旧版本docker未及时更新,导致更新/etc/docker/daemon.json配置文件出现docker重启失败

一、背景 安装完docker和containerd之后&#xff0c;尝试重启docker的时候&#xff0c;报错如下&#xff1a; systemctl restart dockerJob for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “…...

HTML 语言简介

1.概述 HTML 是网页使用的语言&#xff0c;定义了网页的结构和内容。浏览器访问网站&#xff0c;其实就是从服务器下载 HTML 代码&#xff0c;然后渲染出网页。 HTML 的全名是“超文本标记语言”&#xff08;HyperText Markup Language&#xff09;&#xff0c;上个世纪90年代…...

免费网站客服机器人来了(基于有限状态机),快来体验下

免费网站客服机器人来了,快来体验下 51jiqiren.cn 五分钟就可以完成一个简单的机器人. 懂json的同学可以自定义状态和状态跳转,完成复杂的业务流程. 更多功能还在开发中. 网站右下角点"联系客服"截图: 弹出来了: 后端管理界面: 有限状态机界面: 数据界面: 在网站…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...