原文链接:

https://www.zhihu.com/question/575481512/answer/2852937178

作者:知乎用户copytang

知乎个人简介:深耕搜广推算法10+年

在公司内部的分享会上,有个同事提问:chatgpt的上下文多轮会话能力是怎么得到的,当时分享的同事重点在讲解instructgpt的思路,并未去考虑这个问题。而且在试用中,大家都发现chatgpt能够非常自然的进行多轮对话,并且是能够记住上下文的。对话方式相比给定样本做prompt更加自然,能够降低门槛让更多用户使用,即使非专业用户也能使用,这也是chatgpt能出圈的原因。

从chatgpt的首页来看,第一段介绍的文字里一共透露了两个信息:1、chatgpt采用会话方式做交互,可以持续回答问题、承认错误、拒绝不合理的问题;2、是类似instructGPT的兄弟模型,可以根据prompt做详细的回答。然后页面整个就是介绍了instructGPT的原理,并给了instructGPT的链接。instructGPT的目的是用来对其模型和人类的知识、认知、价值观。所以页面上给的一些例子也是说明chatgpt知道什么问题是错误的、不该回答的。

但是chatGPT的chat是怎么来的,只有在开始介绍的地方简单说了一下。说起来openai也是蛮有小心思的。如果chatgpt核心都只是instructgpt,那为啥不直接放出instructgpt呢,还改个名字。所以我理解instructgpt的方法核心体现在结合人工标注和强化学习的方法。但是通篇都没讲多轮会话能力怎么来,我猜测应该会在后续chatgpt的论文中来讲。

虽然openai的官网没有透露太多对话能力的信息,这也阻挡不了如此强悍的上下文对话能力的探索。基于google的工作对chatgpt的多轮会话能力做一些猜测。

其实在21年的谷歌I/O上放出一个叫laMDA(LaMDA: Language Models for Dialog Applications)的模型,并且在22年的时候还放出了一个内部工程师对laMDA模型的测试,可以看到laMDA模型当时已经非常强悍了,可以参考以下视频,体现了laMDA回答问题的自然、富有哲学,个人感觉laMDA的对话能力不亚于chatGPT,所以我觉得可以通过研究laMDA来了解LLM如何获得对话能力的。

幸好laMDA的论文已经放出来了,论文中比较清楚的讲述了如何构建对话能力,看了laMDA的原理基本上与chatGPT的一些碎片信息能对上(直接问chatGPT相关的问题,会告诉你是基于会话数据训练,不过这个只能作为一些参考)。

https://arxiv.org/pdf/2201.08239.pdfarxiv.org/pdf/2201.08239.pdf

laMDA为了训练对话式语言模型,做了以下事情:

使用transformer-decoder做laMDA pre-training

首先基于2.97B的文章、1.12B的对话、12.39B对话语句的数据做了pretrain,得到一个137B参数的模型(比gpt3的175B规模相当,但是略小)。

从数据来看,里面包含了大量特意构造对话数据,这个数据在gpt3中应该是没有的。从codex引入代码能力的思路来看,gpt3的基础上引入了代码训练,所以让gpt3.5有了写代码能力和潜在的推理能力。

因此,为了增加多轮会话的能力,需要从基础模型上特意构建对话数据。

LaMDA fine-tuning

  • finetuning数据构建

在funtuning前先要定义好标注的规范,文章定义了一个优秀的对话模型应该遵循的一些维度的要求:

  1. Quality(Sensibleness, Specificity, Interestingness, SSI): 要求回答是符合常理的、有具体细节的、有趣且能引人关注的。

  2. Safety: 公正、没有风险

  3. Groundedness: 回答的问题是符合事实的,而不是一本正经胡说八道。

基于以上的规范,收集大量的对话数据,并结合人工标注确定是否符合规范。对于以上三条规范,分别构建了几k的对话,并且每个对话有十几轮,然后每条对话让不同的标注来评估。

  • fintuning任务

针对前两条规范的finetuning方案:

基于pretraing的模型结合生成任务、判别任务做finetuning,使得单模型同时支持生成和判别。

生成式的样本方式:

  • e.g. “What’s up? RESPONSE not much.”

判别式的样本方式:

  • “What’s up? RESPONSE not much. SENSIBLE 1”

  • “What’s up? RESPONSE not much. INTERESTING 0”

  • “What’s up? RESPONSE not much. UNSAFE 0”

针对groudedness的finetuning方案:

结合外部数据,构建一个工具集,包含:搜索引擎、计算器、翻译工具,工具集的输入是string,输出也是string,针对每个输入的string针对每个工具都输出一个结果,如果没有结果则空。

finetuning分为两个任务:

  1. 基于base model产出初步结果,并产出ts,query格式的外部查询任务

  2. 根据查询任务查询准确结果,并给予人工微调产出数据后进行finetune

  3. 直到模型能够结合辅助信息生成融合信息

结合laMDA的训练过程和chatgpt的发展路线,做一些简单的猜测,chatgpt之所以有多轮会话能力,原因如下:
  1. pretraining的数据包含大量对话数据,对比laMDA和gpt3.5的训练数据来看,gpt3.5是不包含对话数据的,所以猜测chatgpt训练过程中应该引入了大量的对话数据来支持多轮对话能力;

  2. laMDA通过基于人工规则的数据做finetuning,类比到chatgpt的instruct训练过程(人工标注+强化学习),这一步的目标都是通过跟人工的交互对其人类的价值观。