ChatGPT 出来引爆了讨论。好久没看论文的我被迫调研了下 LaMDA.

LaMDA, 即 Language Models for Dialog Applications, 面向对话应用的语言模型. 来自 Google (猜测是 Google Research 下的 Brain team).

早在 2021 年 5 月,谷歌博客就发布名为 LaMDA: our breakthrough conversation technology 的文章,宣布了此技术。而直到 2022 年 1 月, Google Research 下面的博客才发布了细节并附上 Arxiv 论文链接, 其最后更新时间是 22 年 2 月,也即本次阅读的文章。

论文结构及作者

文章一共47页,正文 18 页,reference 6 页。 正文除常规部分外,主要介绍了 LaMDA 预训练、指标定义、微调数据集构建及微调方法;结果上展示了指标层面的效果和在 domain grounding 上的示例结果;最后还有一个能源与碳足迹的估计。 附录 23 页,包含  Safety objectives and data collection, Crowdworker instructions for quality and groundedness, Selected example dialogs, Model hyper-parameters, Pre-training data composition, Pre-training and fine-tuning results 等内容。

作者也有半页纸,第一排如下:

Romal Thoppilan, Daniel De Freitas, Jamie Hall, Noam Shazeer, Apoorv Kulshreshtha.

一作 Romal Thoppilan, 来自谷歌大脑(Senior Software Engineer, Google Research, Brain Team),目前似乎已经去了 Character.AI.

Daniel De Freitas, 完成这个工作后就早早地离开谷歌,创建了 Character.AI.

Jamie Hall, 没有太多资料,只看到也是 Meena 的作者(LaMDA 看起来延续了 Meena 的工作)。

Noam Shazeer, 同样是 Character.AI 的创建者;也是 Transformer(Attention is all you need)的核心研发。从报道看到, Noam 提出了缩放点积注意力、多头注意力和无参数位置表示,并成为几乎每一个细节的参与者。

Apoorv Kulshreshtha, 也是 Meena 的作者。

论文内容

11. 结论(放到前面来)

本文研究了模型规模、用于微调的标注数据,以及在对话建模中使用信息检索作为工具的重要性。实验表明:

  • 单是模型规模就能改善所有指标,但它在安全性和 Groundedness 的改善不显著
  • 众包标注数据来定向微调模型,能显著提升在对应维度的效果
  • 调用外部 api(例如信息检索系统) 能显著改善 Groundedness

Groundedness 定义:模型包含声明(claims,即对外部事实的描述,如“2022年世界杯举办地是卡塔尔”)的回复里,有reference(引用来源)的比例

摘要

强调安全性(safty)、事实依据(factual grounding) 这两个 challenge.

  • 安全性: 众包人工标数据,得到人类价值观的训练数据;用来微调LaMDA分类器,然后用这个分类器来过滤(不安全)响应;

  • 事实依据: 让模型能够查询外部知识(主要是信息检索、语言翻译器、计算器等)。通过定义 Groundedness Metric 评估,发现模型可以生成更有依据的回复,而非仅仅听起来合理(plausible)。

1. 简介

对话模型是大型语言模型最有趣的应用之一。与通用语言模型类似,模型规模和对话质量之间有很强的相关性。

LaMDA利用单个模型来执行多个任务:它先生成回复候选,然后进行安全过滤,最终基于质量分重新排序并将最高质量的回复返回给用户。

一些实验结论:

a. 模型变大本身可以提高质量,但其在安全性和Groundness方面的改进远远落后于人类的表现。 “质量” 由三个指标共同表示: SSI,即 sensibleness, specificity, and interestingness

  • Sensibleness: whether a model’s responses make sense in context and do not contradict anything that was said earlier.

  • Specificity: measure whether a response is specific to a given context.

  • Interestingness: to “catch someone’s attention” or “arouse their curiosity”, or if it is unexpected, witty, or insightful.

b. 将扩展和微调结合起来,在所有指标上显著提高LaMDA,尽管模型的性能在安全性和Groundness方面仍然低于人类水平,但与测量的众包工作者水平的质量差距可以缩小(在图1中标记为“人类”)。

  • 安全性做法:定义了一组说明性的安全目标,试图捕捉模型应在对话中表现出的行为(附录a .1),并使用一组人口统计学上不同的众包工作者来为这些目标标记多轮对话中的响应。然后,我们使用这些标签微调鉴别器,以检测和删除不安全的响应。

  • Groundedness 指标上,大模型不只是记住,而是生成,所以会出看着可信但不太OK的结果。用这个指标来避免模型乱说的情况。虽然基于已知来源不能保证事实的准确性,但它允许用户或外部系统根据其来源的可靠性及其忠实再现来判断响应的有效性。利用外部工作来增加模型的输出,是实现这一目标的有希望的方法。从众包标注这可以用外部工具来检索得到实施结果这一个设置下收集数据,然后让模型来学习这种行为。

另外,探讨了 LaMDA 在教育(扮演要了解的角色,如珠穆朗玛 Everest)和内容推荐(音乐推荐家)领域的使用。与 GPT-3 中 prompt 的概念类似,预先在多轮对话中将目标应用的设定用 prompt 表示出来, 从而让 LaMDA 适配相应的应用。通过实验,对比了预训练和微调 LaMDA 模型在特定应用有用性(即有用和正确的回答)和角色一致性(即智能体话语匹配智能体角色)这两个维度上的效果。这两种模型都能很好地适应预设的角色,其中微调的 LaMDA 效果更好。

2. 相关工作

语言模型和对话系统:里面提到了用外部搜索引擎来提升 groudedness. 对比的方法就有 WebGPT.

对话指标:自动指标和人评估有差距,还是要有人工的评估。早期人工的评估,是给1个汇总的度量结果。现在是分项来定义。这种方式是它的可调试性。

安全和对话模型安全:训练集数据有偏向性;通过有标注数据来降低毒性

Groundedness指标:最近的 AIS(Attributable to Identified Sources)表示了一种更精确的评估模型输出是否和外部世界有关的框架。

3. LaMDA 预训练

LaMDA 的架构基础是 decoder-only Transformer(如 GPT), 一些改动是:relative attention as described in T5, and gated-GELU activation as described in Raffel et al.

LaMDA经过预训练,可以预测文本语料库中的下一个 token. 与之前仅在对话数据上训练模型不同,LaMDA 的预训练数据既有对话数据,还有其他公共网络文档。因此,预训练的 LaMDA 可以当做通用语言模型来使用。

预训练数据包括:

  1. 2.97B documents
  2. 1.12B dialogs, 共 13.39B dialog utterances

合计 1.56T words. 超过 90% 的数据是英语。

使用 SentencePiece 的 BPE(Byte Pair Encoding) 来 tokenize, 共得到 2.81 tokens. vocab 大小是 32K tokens.

For comparison, the total number of words in the training set for Meena was 40B words, which is nearly 40x smaller.

最大模型的参数量是 137B (不含 embedding), 共 64 层, $d_{model}$ = 8192, $d_{ff}$ = 65536, h = 128, $d_k$ = $d_v$ = 128.

预训练过程:和 GPT 一样 (从前面数据处理可以看到,用的 BPE,这个和 BERT 的 sub-word 就不一样,而和 GPT 一样)

解码(预测时生成):uses the same sample-and-rank strategy as Meena for decoding. 先解码出 Top 40 个(无温度),选出 Top 16; 然后再基于候选句的 log-likelihood 和 长度来打分,选最高的那个作为回复。

decoder-only 的 Transformer 本身是一个生成式语言模型,故预训练后的模型,就可以直接做生成。

4. 指标

基础指标为 SSI,如前所述。

安全性: 0/1 指标。基于 Google 人工智能原则 定义的评估标准。

Groundedness:

  • groundedness = 限定在需要外部世界知识(external world)的回答中; $= \frac{能够找到权威来源支持的回答}{含外部知识的回答}$
  • informativeness = $\frac{能够找到权威来源支持的回答}{所有回答}$ (和 groundedness 分母不同)
  • citation accuracy = $\frac{有URL的回答}{含外部知识的回答}$

Role-specific metrics: 这个是应用相关的指标,有如下 2 个

  • Helpfulness: 正确且有用
  • Role consistency: 角色一致性。指对话中扮演的角色始终一致

5. LaMDA 用于 微调和评估 数据(讲数据的标注)

SSI 目标-数据集构建:

1. 众包数据集:

  • 原始对话数据获取: 让众包和 LaMDA 实例交互,得到 6.4K 个对话,一共 121K 轮(每个对话是多轮,要求是 14 ~ 30 轮)
  • 人工给 SSI 打分:
    • 每轮对话,需要在 SSI 这 3 个维度上打”是/否”
      • 这 3 个指标是级联关系,且 sensibleness > specificity > interestingness 前面指标是 “是”, 才需要评估后面; 否则后面自动是“否”
    • 每个指标上,要 5 个人打分 (针对LaMDA 的  response);如果 >=3 个是 ”是“,最终结果才是”是“

2. Mini-Turing Benchmark (MTB)

  • 这个是标准数据集: 1.5K 对话;每个对话最多 3 轮; 具体是:315 single-turn dialogs, 500 2-turn dialogs, and 662 3-turn dialogs.
  • 人工给 SSI 打分; 方法同众包

Safety目标-数据标注:

1. 先定义安全目标,用来标识 LaMDA 生成的是否是安全的回复;众包人员是符合人口统计学分布的。

2. 训练集:

  • 和 SSI 一样,让众包工作者和 LaMDA 对话,收集了 8K 个对话,供 48K 个回合(每个对话平均 5 - 10 轮)。
  • 然后再找人来评这些数据:作者要求众包按 3 种方式来和模型交互: a. 自然形式 b. 涉及敏感话题的交互 c. 根据安全目标对抗地交互(试图破坏安全目标);
    • 对一个回复,标注者需要判断是否违背了任何一个安全目标。标注可以是 ”是“, ”否“, ”可能“。
    • 对一个回复最终的标签,要看 3 个标注者的结果:至少 2个是否,才认为回复是安全的,label = 1, 否则就是 0

3.测试集:取的是上面用 “对抗交互”生成的样本。 一共有 1.2K 的对话,1.5K 轮

Groundedness 目标-数据标注:

训练集:

  • 同 SSI 和 Safety, 让众包和模型对话,收集了 4K 对话,共 40K 轮。这次作者对众包的要求是: 让对话尽量包含对信息的获取

  • 然后找人来标注:
    • 判断每一轮对话,是否包含对外部信息的论述:
      • 如果它说的不是公开的人,就不是: 比如 “我上周烤了三个蛋糕” 就不含外部信息;而 “Julius Caesar was born in 100 B” 是外部信息
      • 常识不是:让标注者判断论述是否是对的; 如果 3 个标注者都认为是对的,那这个就被认为是常识,不算对外部知识的论述。
  • 对每一个需要被检查的回复,作者让标注者记录下搜索的query;然后让标注者改写模型的回复,要求合并来自检索结果的精简信息;如果结果来自网络,要把链接附上表示对原文的引用。

测试集:

  • 使用的是 Dinan 的 784 轮对话。包含各种主题。上下文被喂给模型,然后吐出回复。
    • 标注者对每个回复,要求标注出是否包含一些事实声明(是的话,就是groundedness指标的分母);如果是,这些事实是否可以被通过公开数据来验证(如果是,就是 groundedness 的分子)。
    • 每条回复要 3 个人来标注;最终的 groundedness, informativeness和引用正确性(citation accuracy) 是取多数投票(也就是 >= 2)

微调和评估数据,都是英文!

“人工”(human)的效果:

  • 对上述的指标,先随机选出一批数据,然后让人工按照 SSI、安全、groundness 的标准来写回答。 可以用搜索工具等任何外部工具!这个就是 人工的答案对,在指标对比中标记为 human

  • 这些数据同样让众包取去评估,和模型生成的结果的评估一样

6. LaMDA 微调

6.1 对 质量(SSI)和 安全性(Safety) 做判别式和生成式微调

LaMDA是一个只有 decoder 的 generative language model,因此所有的微调数据都要表示为 token 序列。

生成式的任务的序列格式为: <context> <sentinel> <response>

loss 只在 response 部分。

例子:

  • What’s up? RESPONSE not much.

判别式任务的序列格式为:<context> <sentinel> <response> <attribute-name> <rating>

只在 rating 上算 loss

例子:

  • What’s up? RESPONSE not much. SENSIBLE 1
  • What’s up? RESPONSE not much. INTERESTING 0
  • What’s up? RESPONSE not much. UNSAFE 0

可以看到把输入、response都输进去,再把 目标任务给放进去,最后给 RATING 值(RATING值是0、1 怎么定的? => 人工标的标签啊)

可以看到判别的输入,包含了生成的输入+输出; 所以判别程序只需要处理新增的tokens。(怎么实现的?用 cache ?)

微调 LaMDA 预测

  1. 给质量和安全打分
  2. 根据安全过滤掉低分的回复
  3. 再对质量算一个综合分 $s= 3 * P(sensible) + P(specific) + P(interesting)$, 按这个分排序
  4. 取最高的,作为回复(论文说的是 next response. 应该就是这轮的回复?)

从预训练数据中捞安全的对话数据再训练(仅对生成模型)

对预训练数据中随机的的 2.5 百万轮对话做预测,选出安全分高的 80 万轮对话。 然后用这个数据集去训练生成(似乎只训练生成模型,不动判别模型)。

上面的训练过程,似乎都是单轮的? => 模型层面,只有单轮!所谓的多轮,是通过将 history 放入 prompt 来实现的。

6.2 学习调用外部检索系统的微调

生成模型可能会生成看起来合理(plausible)但和事实不符合的内容。

一种解决方法是增加模型参数来记住更多。但仍存在时间泛化的问题 (temporal generalization problem). 有方法尝试用动态/增量训练架构来解决这个问题,但很难覆盖完全。

本文提出的方法是让模型去学会用外部查询工具。

The toolset TS

目前就3个,计算器、翻译系统和检索系统。 输入是字符串,对每个输入,这 3 个工具都会跑一遍,并且都会返回。如果没有结果,就返回为空。

对话数据收集:

这块和前面的数据集部分类似(更详细)

微调:

一个 base 模型产出基础输出, 一个 research 模型判断是否要检索事实,并从检索结果中来更新结果

research 的输出,前面会是 TS, 或者是 User,前者给 Toolset, 后一个就是给 User 了

7. 结果

微调在所有模型尺寸的质量、安全性和接地性方面都有显著改善。此外,质量度量(SSI)通常随着模型大小的提高而提高,无论是否进行微调,但它们在进行微调时始终更好。

如果不进行微调,安全性似乎不会从模型缩放中获益太多。这符合预期,因为一般来说,模型大小与安全不安全无关,而只与语料中的数据分布有关。但在面向安全性的微调之后,安全性显著提升了。

随着模型规模的增加,Groundedness 也会提高,也许是因为更大的模型有更大的记忆不常见知识的能力。然而,微调允许模型访问外部知识来源。这允许模型将部分记忆知识的负担转移到外部知识源,从而达到73.2%的 Groundedness 和 65% 的引用准确性。也就是说,73.2%的包含外部世界陈述的回复可归因到已知来源,65% 的回复在必要时(包含外部世界称述)包含了引用(即来源的url)。

注意,在趣味性上模型效果超过了human. 这可能是一个弱基线,因为众筹工作者没有经过广泛的培训,也没有激励他们产生高质量的响应。事实证明,在有限的经济激励下,很难产生非常有趣的回应,所以众筹工作者可能会提供一些让其他众筹工作者不那么感兴趣的回应。

这个有点意思

还展示了模型规模、各种微调数据作用下各个维度的单独变化。

8. domain grounding (角色扮演)

我们观察到LaMDA可以通过pre-conditioning (也称为 domain grounding)来扮演领域域恰当的角色。

这里让 Pretrain 模型、LaMDA 模型扮演 珠穆朗玛峰 和 音乐推荐家。

LaMDA的角色一致性非常高。

9. 讨论与限制

众包工作者在25-34岁的人口中所占比例过高,考虑到外包,这是意料之中的。

10. 能源和碳足迹估计

LaMDA中最大的模型使用1024个TPU-V3芯片和123 TFLOPS/s预训练57.7天,使用GSPMD的FLOPS利用率为56.5%。总FLOPS为56.5% * 123 TFLOPS/s * 1024个芯片* 57.7天= 3.55E+23,高于 GPT-3 的 3.14E+23 总FLOPS.

LaMDA 使用的数据中心的 PUE 为 1.10, 在 TPUv3 上的实验测量的每个加速器的系统平均功率约为 289W(借用Meena测量值), 则模型的总能量成本为 57.7天* 1024个芯片* 289W * 1.1 * 24小时/天= 451 MWh,是GPT-3能量的0.4倍。

在训练时,LaMDA 能量组合(kg CO2e / kWh)约为0.056,因此LaMDA对最大模型的预训练总碳足迹约为 25.2t CO2e。较小模型的预训练和所有模型的微调的碳足迹约为 0.7t CO2e,这使得LaMDA的总足迹约为 26t CO2e。因此,训练LaMDA模型的碳足迹比 GPT-3 小 22.1 倍,大约相当于22名乘客往返旧金山和纽约(1.2吨 co2e / 乘客)。

LaMDA使用了更多的FLOPS,其能量是GPT-3的0.4倍,但其训练碳足迹明显小于GPT-3,这主要是因为 LaMDA 的能量组合更好(LaMDA: 0.056, GPT-3: 0.429).

能源组合: Energy mix, 从单位 kg CO2e per kWh, 应该是表示产出每千瓦时的电力产出的二氧化碳质量。应该可以用来衡量电力清洁程度。

个人观点

以 ChatGPT 的角度来看这篇论文,最大的亮点是借助外部工具来增强了 Groundedness 效果。这个或许也已经是主流方式了。 目前 ChatGPT 并没有打算引入这个东西,不过面向商业场景的 new bing 是按这个路径在走。

整个模型和训练过程看起来都是中规中矩的。没有用到强化学习,整个训练过程感觉会容易一点? 用微调后的模型去预训练语料中回捞数据再重新训练,这个点倒是不错。 (有点像 self-training? 但还是不一样,毕竟是在微调后再去选择的新数据)

最后的碳排放计算也很有意思,透露了不少信息,当然也是在宣传自己的 TPU 集群了。

这篇文章基于 Zotero 上的 notes 和内部的 PPT copy 和改写而成。整这个东西,感觉自己并没有学到新的知识,读者看这个估计也没啥价值。 后面还是得写更有价值的东西,或者让 Zotero 的 notes 复制到 markdown 上成本更低点。