导读:本文是“数据拾光者”专栏的第七十篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇从技术原理到应用案例介绍了ChatGPT模型,对于希望学习ChatGPT并应用到实践的小伙伴可能有帮助。
欢迎转载,转载请注明出处以及链接,更多关于自然语言处理、推荐系统优质内容请关注如下频道。
知乎专栏:数据拾光者
公众号:数据拾光者
摘要:本篇从技术原理到应用案例介绍了ChatGPT模型。首先介绍了NLP发展历程,主要介绍了NLP范式演变以及后BERT时代技术演化;然后介绍了主流预训练模型玩法存在的问题;接着介绍了GPT家族发展史,包括GPT模型发展史信息、GPT系列结构技术演进、GPT数据集之谜和ICL上下文学习路线;然后重点对ChatGPT技术进行解读,主要包括ChatGPT概述、使用的RLHF训练技术、训练数据与标注员构成以及ChatGPT各项能力溯源;最后介绍了ChatGPT效果与局限性。对于希望学习ChatGPT并应用到实践的小伙伴可能有帮助。
下面主要按照如下思维导图进行学习分享:
整体来看NLP发展经历以下四个阶段:
第一个阶段是1950-1970年的基于人工规则的方法。该阶段典型代表是使用正则表达式、句法分析树等;
第二个阶段是1970-2008年的基于统计学习的方法。该阶段典型代表是TFIDF、N-gram和CRF等;
第三个阶段是2008-2018年的基于浅层神经网络的方法。该阶段典型代表是Word2vec、LSTM和Attention机制等;
第四个阶段是2018年至今的大规模预训练模型LLM的Text-to-Text的方式。该阶段的典型代表是GPT、BERT和T5等模型,核心都是Transformer架构。其中重点是引入了注意力机制和人工反馈强化学习,大模型也逐渐成为趋势。尤其ChatGPT大火之后,直接引爆人工智能。
尤其在后BERT时代之后,越来越多研究发现随着模型参数量越来越大,模型效果也不断提升,模型规模带来了质的变化。模型的表现与模型规模存在一定的相关性,当模型规模超过某一量级后模型表现出明显的内涵逻辑性。模型大小增速放缓,但是大模型和更好的训练技术不断涌现。
为了将大模型应用到生产实践满足线上推理要求,需要研究模型的优化和压缩。随着模型的增大,更多的模型优化和压缩方法也出现了,通过知识蒸馏、精度转化从float32转到int8等技术使得一些参数量小的模型支持低成本的推理,并且能表现出比早期大模型更好的效果。
图2 后BERT时代LLM两个研究方向主流预训练模型存在一些问题:
(1) Prompt诱导易生成错误、有害的内容,比如黄赌毒、性别歧视等;
(2)粗暴地增加参数量取得SOTA ≠ 满足用户;
(3)适配任务需要微调。比如像BERT这种预训练+微调两阶段模型,为了适配下游任务,如果是分类任务则需要标注一些分类数据,训练一个分类模型。而如果是实体抽取任务,也需要标注一些实体抽取数据,训练一个实体抽取模型等等。针对不同的任务需要分别训练不同的模型。
这种针对不同任务都需要通过预训练+微调的方式训练一个新的模型成本很高,这和预训练模型的初衷即得到一个强大的主干模型,然后下游很低成本的使用是不符的。
针对预训练模型存在的问题,OpenAI公司开发的GPT系列模型的目标是让AI系统的输出与用户期望/意图一致。OpenAI主要有两个研究方向,第一个方向是生成能力更强的基座模型,主要目标是记住海量的文本信息;第二个方向是反馈研究,使得AI系统的输出与用户期望/意图一致。OpenAI主要技术方案是大规模预训练模型 + 人工交互反馈 + 强化学习。
下面是GPT系列模型发展史信息:
图4 GPT系列模型发展史信息(1)2018年GPT-1出世,模型参数只有0.1B;
(2)2019年GPT-2出世,模型参数量增加到了1.5B。在续写、摘要任务上探索引入人类反馈的价值和方法,RLHF范式得到验证。但这里有两点需要注意,第一当前反馈信息都是由标注人员介入,非应用阶段交互反馈;第二OpenAI已经是强化学习的老玩家了;
(3)2020年GPT-3出世,花费1200W美元,模型参数量增加到了175B。SumGPT模型主要专注摘要任务,使用了RLHF技术;
(4)2021年GPT-3.5出世,模型参数有1.3B/6B/175B三个版本。WebGPT主要专注开放域问答任务,Codex主要专注文本转化成代码任务;
(5)2022年InstructGPT模型出世,底层使用的模型就是GPT-3.5,收集用户经常问的问题训练泛类型任务。随后ChatGPT横空出世,据官网说参考的就是InstructGPT,但是使用了更多的用户问答数据。
虽然说GPT-3.5的模型能力已经很强,但是模型回答的问题和用户期望的存在一定偏差。而ChatGPT成功的一个重要原因就是让模型的回答尽量和用户期望一致。我们希望模型的回答能满足以下几个方面的要求:
(1)内容无偏见、伦理问题;
(2)内容能解决用户诉求,且符合事实;
(3)内容形式易读易理解。
下面是模型的输出和用户期望一致的一个例子:
图5 模型的输出和用户期望一致的一个例子我们向模型提问“人工智能是什么?”,上图中davinci模型是原版GPT-3模型,可以看出模型的回答中规中矩,回答非常像某个网页或者文章中摘抄的。而下面text-davinci-003模型使用了人工标注的数据进行微调,模型的回答更能解决用户诉求,且符合事实,更加易读易理解一些,更符合用户的期望。
下图展示了GPT系列结构/技术演进:
图6 GPT系列结构/技术演进(1) GPT-1
GPT-1使用12层Transformer,每层12个注意力头;
(2) GPT-2
GPT-2在GPT-1的基础上进行了如下改造:
[1] GPT-2有48层,使用1600维向量进行词嵌入;
[2]将层归一化移动到每个子块的输入,并在最终的自注意力块后增加一层归一化;
[3]修改初始化的残差层权重,缩放为原来的1/根号N。其中N是残差层的数量;
[4]特征向量为数从768扩展到1600,词表扩大到50257。
(3) GPT-3
GPT-3在GPT-2的基础上进行了如下改造:
[1]GPT-3有96层,每层有96个注意力头;
[2]GPT-3的词嵌入从1600增加到12888;
[3]上下文窗口大小从1024增加到2048;
[4]采用交替密度和局部带状稀疏注意力模式。
(4) ChatGPT/GPT-3.5
GPT-3.5在GPT-3的基础上进行了如下改造:
[1]ChatGPT使用来自人类反馈的强化学习进行训练;
[2]通过近端策略优化算法进行微调,为信任域策略优化算法带来了成本效益。
GPT数据集主要有三个特点:
第一是数据集量级非常大。从GPT-1使用4.6G语料,到GPT-3增加到了753G语料,并且还在不断增加中。很多大语言模型比如Gopher甚至使用了10550G语料;
第二是数据集多种多样,包括百科、不同领域书籍&期刊、代码等;
第三是倾向于使用“正式/书面”内容。
下面是大模型训练语料汇总:
图7 大模型训练语料汇总其中GPT-3语料采样策略如下:
图8 GPT-3语料采样策略需要注意的是,模型参数量和数据量需要搭配进行使用:
图9 语料量级和模型参数量级对模型效果的影响上图中横轴代表算力,代表模型可以处理的字数,可以看做提供给模型的语料量级。纵轴是模型学习的损失,代表模型的效果。上图可以看做是对比了不同参数量模型分别提供不同量级语料带来模型效果的变化情况。模型参数量越小,曲线的颜色越深。比如上面的model1和model2,model1的参数量就小于model2。可以看出,当模型参数量固定时,即使不断地增加语料量级,模型的效果也不会一直下降,会慢慢稳定在一个范围。比如model1和model2的损失会慢慢下降到一定值之后就不会再下降了。但是model2的参数量要大于model1,随着语料的增加,model2的效果也远高于model1。
3.4.1 In-Context Learning是什么
上下文学习ICL(In-Context Learning)是指以“自然语言形式的指令/任务描述”或/和“任务示例”作为上下文输入(Context),让模型据此输出结果且过程中只进行前向计算,不涉及梯度更新。
图10 ICL示例对于zero-shot场景中,我们添加任务描述作为上下文;对于one-shot和few-shot场景中,我们添加任务描述和任务示例作为上下文。对于fine-tuning,使用业务相关的语料来微调模型作为上下文。
ICL在QA和chat中的示例:
图11 ICL在QA和chat中的示例上图中我们添加任务介绍和任务描述作为上下文。
3.4.2 为什么需要ICL
使用ICL主要有三个原因:
(1) 降低适配新任务成本
预训练-微调范式在遇到新任务时,需要任务相关的标注集,有的任务甚至很难进行标注。通过ICK,可以很好的适配新任务,降低成本。
(2) 提升域外泛化效果
即使预训练阶段吸收学习了通用&广泛的文字分布信息,但经微调后,“预训练-微调”范式容易拟合目标任务的分布,邻域外泛化性会变差。通过实验发现,使用ICL可以有效提升模型效果:
图12 使用ICL可以有效提升模型效果(3) 贴近人类做法
人类完成某个(新)任务时,只需一句“任务描述”或“完成任务的例子/示例”即可开展。AI也应如此。
3.4.3 Chain of Thought = ICL + 思考过程
思维链COT(Chain of Thought)就是ICL + 思考过程。下面是few-shot和zero-shot场景中是否使用COT效果展示:
图13 few/zero-shot场景中是否使用COT效果展示关于ICL、指令微调IFT和CoT特点对比如下:
图14 ICL、指令微调IFT和CoT特点对比3.4.4 CoT的“涌现”能力
通过一系列中间自然语言推理步骤来完成最终输出,用类似于人的推理方式的思维链来提示语言模型,可以极大的提高模型在推理任务上的表现,打破微调的平坦曲线,好的思维链可能来自代码训练集。
思维链的规模临界点,当模型超过62B时会使思维链的效果开始提升并大于标注的提示词方法。当模型接近或超过175B时思维链的效果会超过精调小模型的效果。
模型的思维推理能力与模型参数大小有正相关趋势。训练集中加入编程语言可以提升模型逻辑推理能力。提示推理过程,并提供调试推理路径错误位置的机会。思维链可以用于数学单词问题、符号操作和常识推理等任务。思维链允许模型将多步问题分解为中间步骤,意味着可以将额外的计算分类给需要更多推理步骤的问题。
使用思维链的展示示例:
图15 使用思维链的展示示例分别在LaMDA、GPT和PaLM模型上进行实验,对比使用思维链后当模型参数超过一定规模时模型效果有大幅度提升:
图16 使用思维链对LLM模型效果的影响4.1.1 ChatGPT特点
图17 ChatGPT特点OpenAI使用RLHF(Reinforcement Learning from Human Feedback,人类反馈强化学习)技术对ChatGPT进行了训练,且加入了更多人工监督进行微调。ChatGPT具有如下特点:
(1)可以主动承认自身错误。如果用户指出其错误,模型会听取意见并优化答案;
(2)可以质疑不正确的问题;
(3)可以承认自身的无知,承认对专业技术的不了解;
(4)支持连续多轮对话和上下文理解。
4.1.2 ChatGPT能力
ChatGPT大火的一个主要原因就是应用非常广泛,下面是OpenAI官网介绍的能力:
图18 ChatGPT能力总览下面是ChatGPT应用在搜索引擎中:
图19 ChatGPT应用在搜索引擎下面是ChatGPT参加高考:
图20 ChatGPT参加高考4.2.1 ChatGPT使用RLHF训练流程
下面是ChatGPT使用RLHF训练技术,主要包括三个流程:
(1) 微调监督模型。为了让GPT-3.5初步具备理解指令的意图,首先会在数据集中随机抽取问题,由人类标注人员给出高质量的答案,然后用这些人工标注好的数据来微调GPT-3.5模型,获得微调好的模型。该流程可以视为基本的模型认知和表述的训练流程;
(2) 训练奖励模型。通过人工标注训练数据(约33K个数据)训练回报模型RM。在数据集中随机抽取问题,使用第一流程生成的模型,对每个问题生成多个不同的回答,人类标注者对这些回答综合考虑给出排名顺序,这一过程相当于教练和老师辅导学生。使用排序结果数据来训练奖励模型。对多个排序结果,两两组合形成训练数据对。RM模型接受一个输入,给出评价回答质量的分数。对于一对训练数据,高质量回答的打分要高于低质量回答的得分;
(3) PPO强化学习。将Policy Gradient中的On-policy的训练过程转化为Off-policy,即将在线学习转化为离线学习。利用第二阶段训练好的回报模型通过奖励打分来更新预训练模型参数。在数据集中随机抽取问题,使用PPO模型生成回答,并用上一阶段训练好的RM模型给出质量分数,把回报分数依次传递,由此产生策略梯度,通过强化学习的方式更新PPO模型参数。该过程相当于对奖励模型进行各领域泛化。
ChatGPT使用RLHF训练技术三个流程:
图21 ChatGPT使用RLHF训练技术三个流程因为ChatGPT本身没有公布模型详细信息,但是官网说明是参考InstructGPT进行训练。而InstructGPT已经在论文中进行详细讲解,下面是InstructGPT数据概况:
图22 InstructGPT数据概况4.2.2 ChatGPT训练技术效果提升原因分析
ChatGPT训练技术使模型效果大幅提升主要有以下三个原因:
(1) RLHF技术
使用RLHF技术,引入并利用上人类反馈偏好信息,整个方案可迭代扩展性好,可以引入更多维度的“偏好”优化奖励模型;
(2) 收集OpenaAI API用户请求
收集OpenaAI API用户请求,指令—续写生成、开放问答、头脑风暴开脑洞、聊天、转述、摘要;
(3)严格把控标注过程
关注标注人员的标注质量(试标,度量与研究员标注结果的一致性),标注员决策结果与研究院一致性,关注标注员人口统计特点,伦理问题识别能力,以及对工作的满意度。
根据来自OpenAI 的GPT4技术报告来看,使用RLHF并没有本质的改变基模型能力,下面是基模型和RLHF模型的能力对比:
图23 基模型和RLHF模型的能力对比从上面可以看出,相比于GPT-3.5来说ChatGPT并没有新增能力,更多的是解锁了能力:
图24 ChatGPT非新增而是解锁能力4.3.1 训练数据构建
借助开源数据构造指令集数据,下面是抽取式阅读理解任务构造数据集:
图25 抽取式阅读理解任务构造数据集下面是多语言预训练+QA+对话构建数据集:
图26 多语言预训练+QA+对话构建数据集通过研究表明,指令/任务类型越多,效果越好:
图27 指令/任务类型越多效果越好4.3.2 标注员构成
下面是标注方式和标注员构成:
图28 标注方式和标注员构成ChatGPT各项能力溯源如下:
(1) 更好的通用性
GPT-3需要精心设计提示语来触发相应功能(自然语言编程),而ChatGPT允许用户采用自然的提问,准确识别意图完成各种功能。这里的猜测是当模型参数和指令类型达到一定规模,体现出对新意图的识别能力;
(2) 规避灾难性遗忘
GPT-3这类模型如果在某个任务上训练后可能降低其他任务的精度,在新任务上出现过拟合。这里的猜测是使用特定训练方法后仅对较小领域进行微调;
(3) 大范围连续多轮对话
能进行连续的多轮对话,并且不会以往之前轮次的信息,比较准确的识别省略、指代等细粒度语言现象。这里的猜测是通过超长的语言单元建模能力,涵盖了正常人连续对话范围,提升多轮对话能力;
(4) 交互修正能力
ChatGPT能不做到用户自己更改或指出回复问题所产生的修改意图,并准确识别出需要修改的部分,做出正确的修正。这里的猜测是ChatGPT的对话数据中包含一些交互修正的案例,或修正的逻辑链在大模型训练中形成;
(5) 逻辑推理能力
ChatGPT并没有学会推理本质,但其展示的推理步骤和框架基本是正确的。这里的猜测是大模型本身的逻辑链以及训练数据中存在逻辑推理的示范。
(6) 承认无知
ChatGPT在某些问答中可以坦率的承认自己不了解或者不清楚问题的领域。这里的猜测是使用特定的训练方法,再回大概率低于一定数值的时候触发承认无知的算法区域。
ChatGPT的意图理解能力很好,下面是在各场景中意图识别率和任务完成率的效果:
图29 ChatGPT的意图理解能力很好ChatGPT的对话能力也很好,下面是在各场景中可读性、相关性、专业性、拟人度和趣味性方面的效果:
图30 ChatGPT的对话能力也很好下面是使用ChatGPT效果比较好的几个例子。
(1) 知识对话
图31 ChatGPT应用到知识对话示例(2) 数据生成
图32 ChatGPT应用到数据生成示例(3) 编写/修复代码
图33 ChatGPT应用到编写/修复代码示例(4) 文本创作
图34 ChatGPT应用到文本创作示例虽然ChatGPT在很多应用场景中效果不错,但是在以下几方面存在局限:
(1)暂缺人类常识/实时信息/逻辑计算能力
有时一本正经胡说八道;动态知识停留在2021年前;没有复杂逻辑计算能力;
(2)无法处理复杂冗长或者特别专业的语言结构
对于来自金融、自然科学或医学等非常专业领域的问题,如果没有进行足够的语料“喂食”,ChatGPT可能无法生成适当的回答;
(3)需要大量的算力(芯片)来支持其训练和部署
对于普通大众来说需要等待更轻量型的模型或更高性价比的算力平台;
(4)仍然是黑盒模型
还未能对ChatGPT的内在算法逻辑进行分解,因此并不能保证ChatGPT不会产生攻击甚至伤害用户的表述。
下面是ChatGPT效果不好的几个示例:
图35 ChatGPT效果不好的示例本篇从技术原理到应用案例介绍了ChatGPT模型。首先介绍了NLP发展历程,主要介绍了NLP范式演变以及后BERT时代技术演化;然后介绍了主流预训练模型玩法存在的问题;接着介绍了GPT家族发展史,包括GPT模型发展史信息、GPT系列结构技术演进、GPT数据集之谜和ICL上下文学习路线;然后重点对ChatGPT技术进行解读,主要包括ChatGPT概述、使用的RLHF训练技术、训练数据与标注员构成以及ChatGPT各项能力溯源;最后介绍了ChatGPT效果与局限性。对于希望学习ChatGPT并应用到实践的小伙伴可能有帮助。
最新最全的文章请关注我的微信公众号或者知乎专栏:数据拾光者。
码字不易,欢迎小伙伴们点赞和分享。