OpenAI在2022年11月30日发布了ChatGPT,它是一个基于大模型技术实现的通用聊天机器人,它可以用来写作、翻译、润色句子、做事实性问答、执行文本分类/实体抽取/阅读理解/文本摘要等各类NLP任务,甚至可以写SQL、写代码,几乎无所不能。 一、GPT 到 ChatGPT 的演进 OpenAI持续升级优化GPT,于2019年2月发布了GPT-2[3],于2020年6月发布了拥有1750亿参数的超大模型GPT-3[4],轰动一时,GPT-3不需要像BERT那样针对特定任务做微调(Fine-tune),一个大模型即可在一系列自然语言处理任务上取得优秀的效果,结合Few-Shot少样本学习能力,在部分任务上甚至接近或者达到当时的SOTA效果。 使用BERT执行某个具体场景下的NLP任务如文本分类时,需要人工标注该场景下的一定量数据,然后微调得到一个文本分类模型应用于分类,即重新更新了模型,对于不同的任务均要这样做。而使用GPT-3执行NLP任务时,不需要重新更新模型,只需要向其发送一句提示(Prompt)例如「请给这段文字分类,类别标签有A、B、C」即可完成分类,或者可以使用少量标注数据作为例子告诉模型,能够取得更优的效果,在这一点上GPT-3要比BERT更加易用。值得说明的是,自GPT-3开始,OpenAI没有像GPT-1、GPT-2那样发布开源代码,而是以API的形式提供商业化服务,具体见 https:///api。 ![]() BERT和ChatGPT执行任务的区别 ChatGPT是从GPT-3发展而来的,符尧等人在《拆解追溯 GPT-3.5 各项能力的起源》一文[10]中总结了GPT-3到GPT-3.5的进化树,GPT-3在OpenAI API中的模型名称为Davinci(达芬奇),之后经历在代码上训练、指令微调、RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)等过程,进化成ChatGPT,详细内容可参见文章[10],这里不再赘述。2022年11月,OpenAI除了发布ChatGPT之外,还发布了text-davinci-003模型,两者都是在text-davinci-002模型的基础上使用RLHF方法训练得到的,ChatGPT实际上不仅是一个单独的模型,而是一个完整的Web聊天机器人产品,其内部调用的模型假设也称作ChatGPT。 ![]() GPT-3到GPT-3.5的进化树. 符尧等. 2022.12.11 OpenAI当前并未公布ChatGPT论文,只在官网发布了一篇BLOG[9],BLOG中讲到「We trained this model using Reinforcement Learning from Human Feedback (RLHF), using the same methods as InstructGPT, but with slight differences in the data collection setup」,ChatGPT模型训练采用了RLHF方法,和2022年3月发布的InstrutGPT[8]一致,仅是数据采集上有一些差异,当前介绍ChatGPT技术原理的文章均是介绍InstrutGPT。RLHF并非是一个全新的方法,InstrutGPT论文里有讲到该方法参考了2020年9月发布的文章《Learning to summarize from human feedback》[7]和2017年6月发布的文章《Deep reinforcement learning from human preferences》[12],文章[7]又参考了2019年9月发布的文章《Fine-Tuning Language Models from Human Preferences》[6],由此可见,OpenAI在RLHF方法上有持续的沉淀积累,ChatGPT的诞生也并非一蹴而就。
InstructGPT训练过程. 2022.3 Learning to summarize from human feedback. 2020.9 Fine-Tuning Language Models from Human Preferences. 2019.9 二、GPT API 说明 ![]() GPT API Playground GPT API 当前支持的模型 ChatGPT是以一个Web聊天机器人的形态发布的,用户需要登录网站进行体验,OpenAI目前还未发布ChatGPT API,但OpenAI API官网显示不久后将发布「ChatGPT is coming to our API soon, sign up to stay updated」。目前业界有一些声称基于ChatGPT的聊天机器人工具,均是以非官方API来实现的,例如可以基于爬虫技术来访问ChatGPT官网,封装成ChatGPT API,并注册大量ChatGPT账号,以保证支持一定的访问量。ChatGPT官网对访问频率有限制,且官网时不时会因为用户请求过多无法访问,这样的API不是很稳定,只能在一些离线场景应用。值得一提的是,目前ChatGPT提供了付费账号,价格为20美元/月,经测试,付费账号和免费账号在访问频率上并没有多大差别,只是付费账号的服务响应会相对稳定一些,若是个人使用,直接使用免费账号即可。 ![]() ChatGPT官网 GPT API按照输入输出的token数量收费,价格为0.02美元/1000tokens,一个token大概是0.75个英文单词,一个中文汉字为两个token,这里包括请求API的token(Prompt)和API返回的token(Completion),一个GPT账号会免费赠送18美元的额度,有效期为3个月。未来ChatGPT API 收费方式很可能也和此相同。 ![]() GPT API 收费说明 平台针对每次请求输入和输出token计数 从GPT-3到GPT-3.5的进化树中可以看到text-davinci-003模型和ChatGPT模型均是在text-davinci-002模型的基础上使用RLHF方法训练得到,都在2022年11月发布,两者的差别可能是针对不同类型人工反馈数据调优上的差异,ChatGPT模型是应用于对话聊天,会基于线上对话数据调优,在上下文多轮对话、拟人化等能力上可能更强,text-davinci-003基于GPT API上用户反馈数据(如上述Playground)调优,在相关任务上的效果和ChatGPT相比可能差异不大,如后文有实验在评论情感分类任务上二者效果相当。因此,用户可以直接在GPT API中使用text-davinci-003模型来搭建相关应用。 三、GPT-3 训练成本 2020年5月,文章[12]中讲到微软在Azure上为OpenAI搭建了独立的超级计算机系统,包含28.5万个CPU核和1万张GPU卡(当时为V100):The supercomputer developed for OpenAI is a single system with more than 285,000 CPU cores, 10,000 GPUs and 400 gigabits per second of network connectivity for each GPU server。2020年6月发布的GPT-3模型应该是在该系统上训练得到。 英伟达在2021年4月发表的《Efficient Large Scale Language Model Training on GPU Clusters》[13] 文章中有预估不同参数规模的大模型训练需要消耗的资源和时间:使用1024张80G显存的A100卡训练1750亿参数的GPT-3模型,需要训练34天。 这些都是2-3年前之前的费用说明,根据相关材料介绍,当前训练GPT-3的费用更低 ,文章《ChatGPT背后的经济账》讲到「对于大公司而言,训练LLM(即使是从头开始)的成本并不高,如今,在公有云中训练GPT-3仅需花费约140万美元」。 四、ChatGPT的应用 我们从2018年开始就有落地智能写稿,利用机器自动生成一些稿件应用于各类场景,如自动生成二手车车源介绍文章,可参见《58智能写稿机器人实践》。原始生成方法是基于优质车源帖子数据,利用模板填充和文本生成技术自动生成文章,生成的文章较短且生硬,我们使用ChatGPT来润色这些文章,向ChatGPT发送prompt提示「请润色下面这段文字,字数在400字以内」即可完成该任务,通过ChatGPT润色的文章可读性极佳。此外,我们也尝试直接拿车源属性字段来让ChatGPT写作,例如向ChatGPT发送提示「请以下面这些关键词写一篇400字的文章」,最终ChatGPT也能生成可读性较好的结果。我们都知道ChatGPT在一些常识性问题上会犯错误,可能会生成一些错误内容,而我们是基于优质车源帖子数据来生成文章,车源帖子首先是真的,最终生成的内容也是真实可用的。 在本地服务(黄页)业务下,客户(商家)需要定期下线旧帖子,重新发布新贴子,由于商家平时工作繁忙,往往没有时间发帖,因此平台提供了代客发帖服务,人工来帮助其发帖。2022年我们上线了AI自动发帖功能,节省了30+人力。AI自动发帖的大概逻辑是基于旧帖子正文内容和帖子用户评价,自动生成新帖标题和更新正文内容。在更新帖子正文内容这里,需要筛选出用户优质评价,并将评价提炼成一小段文字,再插入到帖子正文头部,以'口碑亮点'模块来展示。 ![]() 帖子正文口碑亮点 我们的原始方案是使用微调的BERT模型来识别评论正负向情感,先挑出正向评论,然后基于抽取式方法生成最终的评论短语。我们将ChatGPT应用于该场景,首先使用ChatGPT来识别评论正负向情感,然后继续用ChatGPT将正向评论润色成最终的'口碑亮点',取得了很好的效果。评论正负向情感识别是一个常见的NLP任务,我们直接向ChatGPT发送Prompt提示「对下面的评论进行分类,类别有正向、其他,[商家很专业,很有耐心]属于什么类别?」,这里没有给其提供任何先验知识和例子,即Zero-Shot,它也能获得不错的效果,比BERT微调模型略低,我们继续实验Few-Shot,告诉其分类标准并给予了一些样例,如下图所示,识别效果明显提升,超过BERT微调模型,可见ChatGPT十分强大。在前文GPT API章节我们有讲到2022年11月同期发布的text-davinci-003模型和ChatGPT模型在部分NLP任务上可能差异不大,这里我们也进行了验证,在评论情感识别任务上二者差异不大。 ![]() ![]() ![]() 智能客服基本原理 智能客服的核心是构建问答知识库和文本匹配,问答知识库里的问题是线上用户遇到的真实业务问题,答案是客服运营人员人工整理的答案,而文本匹配是一项传统的NLP技术。很明显,客服场景的问答知识库是企业独有的,ChatGPT没有学习过这些数据,对于用户咨询它不可能给出正确答案。部分业务方也给我们提过使用ChatGPT代替现有智能客服系统的想法,我们抽取了一定量线上真实用户的输入,并交给ChatGPT回答,最终证实了在业务问题上它会一本正经的'胡说八道'。当然,如果我们将问答知识库数据全部提交给ChatGPT做微调(Fine-tune),它也能回答得较好,但目前ChatGPT还不提供微调功能,GPT-3 API提供了微调功能。 尽管ChatGPT不能直接拿来做智能客服,但是我们可以用它来做智能客服中的文本匹配任务,我们在近期接入的一个新业务场景下实验了ChatGPT,可以类似下图这样向ChatGPT发送Prompt,Zero-Shot的效果较差,若在Prompt里给每个标准问题增加少量扩展问法就能有较好的效果提升,但要超过自研模型还需在Prompt上做更多优化工作。 ![]() ChatGPT文本匹配效果 ![]() 用ChatGPT做文本匹配Prompt示例 ![]() 自研模型 + ChatGPT数据增强后效果 ![]() 用ChatGPT做对话意图识别 智能外呼是人机实时语音对话场景,电话沟通语音会被语音识别引擎实时转写成文本,然后交给NLP模型进行语义理解,本质上和微聊文本对话没有差别,也会执行上述文本分类、文本匹配、对话意图识别任务,ChatGPT应用类似。 人机语音对话相对微聊文本对话来讲延时更敏感,即需要NLP模型快速返回识别结果,耗时一般要求在数十到上百毫秒之间,因为人和机器在实时对话过程中若机器反应慢,例如数秒才响应,人会明显感觉到停顿,用户体验差,可能会直接挂断电话,影响转化效果,而在一些微聊智能客服场景下,为了让用户感觉到背后不是机器人,会故意让机器人回答慢一点,在程序中做一些延时回复操作。当前ChatGPT和GPT API的推理延时并不低,平均耗时在数秒级别,直接应用ChatGPT来做人机语音对话中的NLP模块不可取。 我们使用ChatGPT离线实验了近期上线的一个语音对话场景下的槽位提取(实体抽取),识别对话内容中的地点和服务类别槽位,这里直接使用Zero-Shot,向ChatGPT发送提示「请抽取这段话中的省、城市、区县和服务类别」,从实验结果看ChatGPT表现不错。 ![]() ChatGPT槽位提取效果 五、个人思考
[14] OpenAI API. https:///api 詹坤林 2023.2.21 本文内容为2023年2月14在58技术委员会AI分会AI技术沙龙《ChatGPT科普和应用初探》上的分享总结。 |
|