OpenAI在2022年11月30日发布了ChatGPT,它是一个基于大模型技术实现的通用聊天机器人,它可以用来写作、翻译、润色句子、做事实性问答、执行文本分类/实体抽取/阅读理解/文本摘要等各类NLP任务,甚至可以写SQL、写代码,几乎无所不能。

ChatGPT自发布之后一直大火至今,引起行业震动,我们也持续在跟进ChatGPT,体验其功能,了解其技术原理,并基于爬虫技术封装了ChatGPT API,在实际NLP应用场景下对比了ChatGPT和自研技术的效果。本文从应用角度出发,给出一些对ChatGPT的思考。

一、GPT 到 ChatGPT 的演进

Google于2017年在《Attention Is All You Need》一文中发布了Transformer,此后对NLP、语音、CV等AI领域产生了深远影响。2018年6月,OpenAI发布了GPT(Generative Pre-Training)[1]——基于Transformer Decoder结构和无监督预训练方法实现的生成式预训练语言模型,也即GPT-1。

2018年10月,Google发布了BERT(Bidirectional Encoder Representation from Transformers)[2],BERT是基于Transformer Encoder结构的预训练语言模型,在多项NLP任务上取得SOTA效果,开启了自然语言处理「预训练+微调」的新范式,是自然语言处理发展史上的里程碑。BERT自发布之后在学术界和工业界均产生了重大影响,大量论文和应用基于BERT实现,谷歌学术上BERT的论文引用数也远超GPT,近几年大模型技术火热,国内外发布的大部分大模型也是基于BERT技术路线来实现。

图片

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://openai.com/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的诞生也并非一蹴而就

图片

ChatGPT训练过程. 2022.11.30

图片

InstructGPT训练过程. 2022.3

图片

Learning to summarize from human feedback. 2020.9

图片

Fine-Tuning Language Models from Human Preferences. 2019.9

 

二、GPT API 说明

当前,在OpenAI发布的GPT API中可以调用上文GPT-3到GPT-3.5的进化树中除ChatGPT模型之外的所有模型,用户可以在API Playgroud里选择模型版本进行体验,也可以编写程序调用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 训练成本

GPT-3拥有1750亿参数,模型训练需要消耗大量资源,OpenAI并未公开过GPT系列大模型训练和推理消耗的具体费用,我们可以从其他材料中获得一些信息。

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的应用

ChatGPT可以用来写作、翻译、润色句子、做事实性问答、写SQL、写代码、执行文本分类/实体抽取/阅读理解/文本摘要等各类NLP任务,相关案例不一一赘述,这里仅讨论在智能写稿、智能客服、智能外呼实际产品场景下我们对ChatGPT的应用尝试,相关实验对比结果基于我们自主封装的ChatGPT API完成。

智能写稿:

我们从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任务上可能差异不大,这里我们也进行了验证,在评论情感识别任务上二者差异不大。

图片

ChatGPT在评论正负向情感识别任务上的效果

图片

ChatGPT Few-Shot

此外,在SEO场景我们也进行了探索,使用ChatGPT生成一些SEO场景需要的内容,尽管ChatGPT会生成一些事实性错误的内容,但通过优化Prompt可以使得生成的结果基本可用,并结合人工审核、人工改写,最终能够得到符合SEO需求的内容。

智能客服:

当前网上很多人都说ChatGPT可以直接拿来做智能客服,能够让一些客服或者销售人员下岗,很多人都信以为真,实际并非如此。智能客服是当下发展非常成熟的产品,各大企业都有应用,能够提高客服人效,58同城是2017年开始打造的智能客服。这是智能客服的基本原理:企业维护了一套业务问答知识库,即一些业务问题和答案的集合,若用户在使用APP时遇到相关问题,他会在智能客服聊天窗口里输入问题进行咨询,机器会自动理解用户输入的问题,从问答知识库中找到那条和用户输入语义相同的问题,即文本匹配或文本分类,然后把该问题的答案返回给用户。

图片

智能客服基本原理

智能客服的核心是构建问答知识库和文本匹配,问答知识库里的问题是线上用户遇到的真实业务问题,答案是客服运营人员人工整理的答案,而文本匹配是一项传统的NLP技术。很明显,客服场景的问答知识库是企业独有的,ChatGPT没有学习过这些数据,对于用户咨询它不可能给出正确答案。部分业务方也给我们提过使用ChatGPT代替现有智能客服系统的想法,我们抽取了一定量线上真实用户的输入,并交给ChatGPT回答,最终证实了在业务问题上它会一本正经的"胡说八道"。当然,如果我们将问答知识库数据全部提交给ChatGPT做微调(Fine-tune),它也能回答得较好,但目前ChatGPT还不提供微调功能,GPT-3 API提供了微调功能。

尽管ChatGPT不能直接拿来做智能客服,但是我们可以用它来做智能客服中的文本匹配任务,我们在近期接入的一个新业务场景下实验了ChatGPT,可以类似下图这样向ChatGPT发送Prompt,Zero-Shot的效果较差,若在Prompt里给每个标准问题增加少量扩展问法就能有较好的效果提升,但要超过自研模型还需在Prompt上做更多优化工作。

图片

ChatGPT文本匹配效果

图片

用ChatGPT做文本匹配Prompt示例

智能客服的问答知识库是持续更新的,因为随着产品功能的持续更新升级,线上用户会遇到新的操作问题,这些新问题会被挖掘出来加入到问答知识库中,并通过持续的数据标注来积累这些新问题的扩展问法。往往新问题上线初期扩展问法较少,模型对新问题识别效果较差,这里也可以在新问题产生时直接使用ChatGPT来为每个新问题生成若干扩展问法(数据增强),再加入模型训练,使得模型对新问题有较好的识别效果。我们在一个新接入的场景下也进行了实验对比,针对新增的六条新问题,使用ChatGPT为每条新问题生成数十条扩展问法,然后训练模型,这相比不做数据增强的模型效果有明显提升。

图片

自研模型 + ChatGPT数据增强后效果

在招聘业务赶集直招「微聊反向邀约」场景,在C端用户和B端企业微聊沟通时,我们应用了智能客服留资机器人,具体介绍可参见《一份AI中台产品应用手册》,当C端用户向B端企业发起微聊沟通时,若B端企业不在线,则由机器人和C端用户对话,在对话结束后若识别到用户有高求职意向,则调用智能双呼能力(可参见《智能语音机器人四种人机协同能力介绍》)提醒B端企业,B端企业接听后可以一键直连C端用户,从而双方可以直接电话沟通。这里机器人需要基于微聊对话记录识别用户求职意向,我们也实验了ChatGPT,通过优化Prompt,ChatGPT在F1-Score上超过了自研模型。但是这是一个重准确率的业务场景,因为需要保证B端企业连接的用户尽量是实际求职者,但如何通过调整Prompt来控制ChatGPT的准确率和召回率,目前还没找到行之有效的方法,而自研模型要做到这一点很简单。

图片

用ChatGPT做对话意图识别

智能外呼:

智能外呼是人机实时语音对话场景,电话沟通语音会被语音识别引擎实时转写成文本,然后交给NLP模型进行语义理解,本质上和微聊文本对话没有差别,也会执行上述文本分类、文本匹配、对话意图识别任务,ChatGPT应用类似。

人机语音对话相对微聊文本对话来讲延时更敏感,即需要NLP模型快速返回识别结果,耗时一般要求在数十到上百毫秒之间,因为人和机器在实时对话过程中若机器反应慢,例如数秒才响应,人会明显感觉到停顿,用户体验差,可能会直接挂断电话,影响转化效果,而在一些微聊智能客服场景下,为了让用户感觉到背后不是机器人,会故意让机器人回答慢一点,在程序中做一些延时回复操作。当前ChatGPT和GPT API的推理延时并不低,平均耗时在数秒级别,直接应用ChatGPT来做人机语音对话中的NLP模块不可取。

我们使用ChatGPT离线实验了近期上线的一个语音对话场景下的槽位提取(实体抽取),识别对话内容中的地点和服务类别槽位,这里直接使用Zero-Shot,向ChatGPT发送提示「请抽取这段话中的省、城市、区县和服务类别」,从实验结果看ChatGPT表现不错。

图片

ChatGPT槽位提取效果

 

五、个人思考

ChatGPT在一个大模型里可以完成众多任务,而且效果都很不错,前所未见,令人惊叹。毫无疑问,ChatGPT能够在各类岗位上辅助人工,提升人效,但能否完全替代某类岗位,还需时间验证,以NLP工程师岗位为例,企业若想使用ChatGPT代替NLP工程师,至少需要考虑以下几点:

 

(1)识别效果是否可控。NLP场景一般都会有准确率、召回率的侧重,需要通过调整模型来控制这两项指标,自研模型很容易做到,若使用ChatGPT,则只能通过调整Prompt来控制,如何编写Prompt来控制准确率、召回率,目前还没看到行之有效的方法。

(2)推理性能是否符合应用需求。大模型的推理性能与硬件资源、模型加速手段相关,性能和投入成正比,当前ChatGPT推理较慢,无法满足一些延时要求高的应用场景,例如智能外呼,未来这里可能需要和企业定制化。值得一提的是,当前NewBing体验版的搜索也非常缓慢,用户体验不佳,这也是微软和OpenAI需要解决的痛点。

(3)ROI的精确衡量。企业需要评估某个应用场景下使用ChatGPT API的花费是否比人力成本低,即将发布的ChatGPT API可能也和GPT-3 API一样按照token收费,它包括了输入和输出的token,真正接入使用时需要对Prompt和生成结果做精细化控制,编写Prompt也是一项挑战。

当前,ChatGPT在国内还不能直接访问,未来就算对国内开放,但各大企业与其合作会很敏感,国内企业的大量数据若流入ChatGPT会有很大风险。中国很有必要做出自己的ChatGPT,当下国内大厂和一些创业公司正在努力,也许在不久的将来,国内ChatGPT解决上述问题后,真的不再需要那么多NLP算法工程师。

参考文献:

[1] GPT1:Improving Language Understanding by Generative Pre-Training. https://openai.com/blog/language-unsupervised/ 2018.6 

[2] BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding. 2018.10

[3] GPT2:Language Models are Unsupervised Multitask Learners.

https://openai.com/blog/better-language-models/ 2019.2

[4] GPT3:Language Models are Few-Shot Learners. https://arxiv.org/abs/2005.14165 2020.5 

[5] GPT3 API:https://openai.com/blog/openai-api/ 2020.6

[6] Fine-Tuning Language Models from Human Preferences. https://arxiv.org/abs/1909.08593 2019.9

[7] Learning to summarize from human feedback.  https://openai.com/blog/learning-to-summarize-with-human-feedback/ 2020.9

[8] InstructGPT:Training language models to follow instructions with human feedback. https://arxiv.org/abs/2203.02155 2022.3

[9] ChatGPT: Optimizing Language Models for Dialogue. https://openai.com/blog/chatgpt/ 2022.11.30

[10] How does GPT Obtain its Ability? Tracing Emergent Abilities of Language Models to their Sources. https://yaofu.notion.site/How-does-GPT-Obtain-its-Ability-Tracing-Emergent-Abilities-of-Language-Models-to-their-Sources-b9a57ac0fcf74f30a1ab9e3e36fa1dc1 符尧等. 2022.12.11. 中文版:拆解追溯 GPT-3.5 各项能力的起源. 2022.12.18. https://yaofu.notion.site/GPT-3-5-360081d91ec245f29029d37b54573756

[11] Deep reinforcement learning from human preferences. https://arxiv.org/abs/1706.03741 2017.6

[12] Microsoft announces new supercomputer, lays out vision for future AI work. https://news.microsoft.com/source/features/ai/openai-azure-supercomputer/ 2020.5.19

[13] Efficient Large Scale Language Model Training on GPU Clusters. https://arxiv.org/abs/2104.04473 2021.4

[14] OpenAI API. https://openai.com/api

内容中包含的图片若涉及版权问题,请及时与我们联系删除