使用教科书级质量的合成数据训练语言模型

探索微软研究论文“教科书是你所需的一切”

DALL·E 2 .的图片

微软研究刚刚发布了一篇论文,为关于数据在模型训练中的作用的持续辩论增添了新的燃料,具体涉及到数据质量合成数据的作用。尽管这篇论文的重点是训练模型编写Python代码,但其影响远远超出了编码范畴。这项工作的见解可以作为语言模型项目在各种情境下的宝贵案例研究。

“教科书是你所需的一切”中的模型并不依靠任何突破性的设计或训练方法取得成功。事实上,作者们指出,“我们的模型架构和训练方法都相当传统。”创新在于训练数据。引用论文中的一句话:

“我们假设这种高质量的数据极大地提高了代码语言模型的学习效率,因为它们提供了清晰、自包含、富有教育意义和平衡的编码概念和技能示例。”

在某种程度上,数据质量的价值是不言而喻的——当手头上有同样数量的更好质量的数据时,很难想象有人会主张使用质量较低的数据进行训练。但在过去几年中,关于数据质量相对重要性的观点发生了显著变化。

回顾2020年,OpenAI的论文《神经语言模型的规模定律》将模型大小作为最重要的因素:“最优的计算效率训练涉及在相对较少的数据上训练非常大的模型”。然后在2022年,DeepMind的Chinchilla论文《训练计算优化的大规模语言模型》认为数据规模同样至关重要:“当前的大规模语言模型训练不足”。但现在,在2023年,焦点转向了数据质量。这一转变在最近泄露的谷歌备忘录《我们没有壕沟》中的一节中得到了强调,其中宣称“数据质量比数据规模更具规模性”。

本文所分析的“教科书是你所需的一切”只是这一大趋势中的一个亮点。另一个值得注意的例子是LIMA: Less is More for Alignment,它展示了如何利用一个小而高质量的数据集来实现模型对齐的令人印象深刻的结果。

关于合成数据(由模型自己生成的数据),一直存在着很多争议。尝试训练较小的模型使用更大模型的输出,例如创建Alpaca和Vicuna时,遭遇了怀疑。批评者经常指出类似于伯克利论文《模仿专有语言模型的虚假承诺》中的论点,该论文指出“模型模仿是一种虚假的承诺:开放和封闭语言模型之间存在着实质性的能力差距,当前的方法只能通过大量的模仿数据或使用能力更强的基础语言模型来弥合这个差距”。

然而,《教科书是你所需的一切》挑战了这种观点,展示了更大模型的输出可以用于超越简单模仿的目的。值得注意的是,本文的小型模型甚至能够超越生成其训练数据的大型模型。这个观察引发了一个令人心动的问题:能否通过训练较大的模型使用其自身的输出来提高性能?

结果

在深入研究用于训练模型的训练数据之前,让我们先看一下它们所取得的结果。这篇论文中的三个模型分别是phi-1-basephi-1phi-1-small。值得注意的是,这些模型不仅在参数方面紧凑,而且在有限的数据上进行训练。鉴于此,它们的性能堪称令人惊人。

在HumanEval基准测试中对选定模型的评估。来源:根据《教科书是你所需的一切》改编。

这里的分数是基于OpenAI的HumanEval基准进行评估的,该基准在他们的论文《评估基于代码训练的大型语言模型》中介绍。在这个基准中,模型会给出一个函数的签名和文档字符串,并要求编写函数的主体部分。为了说明,考虑以下示例来自HumanEval论文,其中模型给出以下签名和文档字符串。

来源:《评估基于代码训练的大型语言模型》

对于这个问题,我们希望模型能够生成类似于以下的代码:

来源:《评估基于代码训练的大型语言模型》

然而,模型的评估并不基于生成这个精确的字符串(这需要模型以相同的方式解决问题,并使用相同的变量名作为解决方案),而是根据模型生成的任何主体在多个单元测试中进行评估(平均每个问题有7.7个单元测试,每个测试包括函数的参数选择和生成的代码需要匹配的期望输出)。如果代码通过所有单元测试,则被认为是正确的。上表中的pass@1指标仅仅是通过所有单元测试的生成函数主体的百分比。更一般的pass@k指标允许模型生成k个样本,并且只要其中任何一个样本通过所有单元测试就被认为是成功的。

论文中的模型是使用三个不同来源的数据进行训练的。第一个来源是The Stack+,它是The Stack的一个35B-token去重版本,结合了来自StackOverflow的代码,并仅限于Python。然而,重要的是要注意,phi-1及其变体并没有在这个来源上进行训练。相反,这些模型是在CodeTextbook上进行训练的,CodeTextbook是从The Stack+中筛选出的具有教科书质量的6B-token数据,再加上一个包含1B-token合成组件的数据集CodeExercises,这个数据集模拟了HumanEval数据集中的问题风格。下图展示了这种影响。

在不同来源上进行训练后的HumanEval结果。图片来源:Textbooks Are All You Need。

在这里,我们看到使用不同参数在不同数据子集上训练的9个模型。图表中浅绿色的模型仅在CodeTextbook上进行训练,而不是在The Stack+上进行训练,因此可以明显看出CodeTextbook是更好的来源。而在深绿色的模型上进行的CodeExercises的微调产生了更大的影响。

图表中的三个模型分别命名为:

  • phi-1-base是一个包含1.3B个参数的模型,使用CodeTextbook的7B个令牌进行了“大约8次”预训练。这相当于约50B个训练数据,使用8个A100芯片在4天内训练完成。
  • phi-1是在phi-1-base的基础上对CodeExercises的180M个令牌进行微调。这个微调在8个A100芯片上花费了7个小时。
  • phi-1-small是使用类似于phi-1的过程创建的,但使用了一个包含350M个参数的模型设计,并使用CodeTextbook进行了大约11次训练。在8个A100芯片上训练大约需要2天时间。

CodeTextbook的筛选部分(6B个令牌)

对于CodeTextbook的这部分内容,他们从The Stack的一个35B个令牌的去重和仅限于Python的副本(上图中称为Stack+)开始,然后筛选出一个6B个令牌的教科书质量子集。

为了进行这种筛选,首先使用GPT-4来确定整个35B-token数据集(100M tokens)中约0.3%的教育价值。所使用的提示是“确定对学习基本编码概念目标的学生的教育价值”。

没有明确说明为什么选择GPT-4而不是GPT-3.5进行此步骤,因为GPT-3.5用于整个过程的所有其他阶段。然而,考虑到任务是对“仅仅”100M个token进行分类,使用GPT-4并不过分昂贵,肯定会产生更准确的结果。

接下来,使用这些注释来训练另一个模型(一个随机森林分类器)来将数据集的其余部分分类为高教育价值或低教育价值。随后,使用该分类器将原始数据集过滤为6B-token的高教育质量数据集。

CodeTextbook的合成部分(1B tokens)

这是更有趣的部分,因为作者们使用GPT-3.5生成了高质量的“Python教科书”。

使用LLMs生成用于训练较小模型的合成数据已经有一些先例。在微软研究早期的一篇论文《TinyStories: How Small Can Language Models Be and Still Speak Coherent English?》中,目标是训练小型语言模型(1M到33M个参数)以编写适合幼儿水平的可理解的故事,数据集完全由GPT-3.5和GPT-4编写的故事组成。引用《TinyStories》论文中的内容:

“使用大型语言模型生成训练数据的主要挑战是生成一个足够“多样化”的数据集:即使将生成的温度设置得很高,提示这些模型生成故事,仍然会生成一个非常重复的数据集,其多样性与训练具有相当的语言“理解”能力的语言模型所需的多样性相去甚远。”

《TinyStories》使用的技巧是为每个提示选择三个随机单词(名词、动词和形容词)和少量“故事特征”。例如,他们的一个提示如下图所示。

Source: TinyStories: How Small Can Language Models Be and Still Speak Coherent English?

不幸的是,微软研究并没有提供关于他们用于生成多样化的教科书质量文本的技巧的更多细节,而且该项目似乎没有发布任何代码或数据供我们调查。他们确实表示他们的目标内容是“激发推理和基本算法技能的主题”,并且对教科书的主题和受众提供了限制。下面是他们对其中一个提示的典型回答的示例,引用自该论文。

Source: Textbooks Are All You Need .

不用说,了解更多关于这个过程的步骤将会很有趣。具体提示是什么?如何选择主题?GPT-3.5被告知为哪些受众编写?检查CodeTextbook也将是有趣的,但数据尚未发布。

CodeExercises(180M tokens)

对于phi-1和phi-1-small的训练数据的最后一部分(但不适用于phi-1-base),是一组与HumanEval基准问题的格式相似的练习和解决方案。同样,这些数据完全是由GPT-3.5生成的合成数据。作者表示通过限制函数名称来实现输出的多样性。虽然我不太清楚这是什么意思,但可能意味着另一个模型首先生成一个函数名称和签名列表,然后提示GPT-3.5生成相应的文档字符串和主体。下面是他们提供的一个典型输出示例。

来源:教科书就是你所需

作者将这个数据集称为“小型”,因为它只包含了180M个标记。然而,如果上面的例子代表性的话,那么CodeExercises大约包含了一百万个练习和解决方案。

我们有理由怀疑CodeExercises只是偶然发现了与HumanEval基准中相同的函数,导致phi-1在被测试时被微调为解决方案。作者在第5节中花了很多篇幅来反驳这个担忧。首先,他们认为CodeExercises与HumanEval之间的相似性有限。其次,他们认为即使在CodeExercises中存在与HumanEval中的练习略微相似的练习被修剪掉(相似性是以嵌入距离来衡量的),在修剪过的数据集上训练的模型仍然令人印象深刻。

成本

本文和本文的深入研究主要关注数据质量。然而,考虑到今天复制这个实验将会花费多少,至少可以考虑其各个组成部分的相对成本。

  • 过滤。 过滤The Stack+的过程是使用GPT-4来确定10万个文件的教育价值,或者大约100M个输入标记。忽略输出标记(将会很少),使用今天的价格0.03美元/千个输入标记,这将花费约3000美元。
  • 合成。 CodeTextbook和CodeExercises一共包含大约1280M个GPT-3.5生成的文本标记。按照今天的价格0.002美元/千个输出标记,创建这些数据将花费略超过2500美元。
  • 训练。 phi-1模型训练了1090小时。按照今天的价格,使用A100训练一个小时大约需要1美元,这将约花费1000美元。350M参数的phi-1-small可以用400美元训练。

大约花费了6500美元的计算资源来创建phi-1。

作者推测使用GPT-4进行合成将会更好:“我们还相信使用GPT-4来生成合成数据可以取得显著的进展,因为我们注意到GPT-3.5的数据具有高错误率。”但是,这些成本说明了他们为什么没有这样做。以GPT-3.5的价格的30倍计算,使用GPT-4生成CodeTextbook和CodeExercises的合成部分将花费约75000美元。

结论

《教科书就是你所需》的结果非常令人印象深刻,尤其是考虑到模型的较小规模和有限的训练数据。这篇论文是另一个证明了数据质量可以弥补数据数量和模型规模的证据。

关于合成数据的讨论无疑将持续下去。这个概念很有吸引力——如果我们没有高质量的数据可用,我们是否可以合成它?《教科书就是你所需》在这个领域展示了一些有希望的可能性。然而,鉴于CodeTextbook中只有约10亿个标记是合成的,这并不是我们梦想中的完美实验。但值得指出的是,其他60亿个标记是通过合成筛选出来的。

在图像处理领域,完全使用合成数据进行训练已经取得了一些令人兴奋的结果。Google Research的研究《StableRep: Synthetic Images from Text-to-Image Models Make Strong Visual Representation Learners》采用了文本到图像模型,并完全使用由Stable Diffusion生成的合成数据进行训练。他们报告的结果与Stable Diffusion本身的性能相匹配甚至超过。

类似的方法也在TinyStories论文中采用,该论文仅依赖于合成数据进行训练。但是,它使用的模型非常小。如果以同样的方式训练较大的语言模型会怎样?这展示了令人兴奋的潜力,并且无疑将成为未来众多研究的重点。

参考文献

Chen, M., Tworek, J., Jun, H., Yuan, Q., de Oliveira Pinto, H. P., Kaplan, J., Edwards, H., Burda, Y., Joseph, N., Brockman, G., Ray, A., Puri, R., Krueger, G., Petrov, M., Khlaaf, H., Sastry, G., Mishkin, P., Chan, B., Gray, S., Ryder, N., Pavlov, M., Power, A., Kaiser, L., Bavarian, M., Winter, C., Tillet, P., Such, F. P., Cummings, D., Plappert, M., Chantzis, F., Barnes, E., Herbert-Voss, A., Guss, W. H., Nichol, A., Paino, A., Tezak, N., Tang, J., Babuschkin, I., Balaji, S., Jain, S., Saunders, W., Hesse, C., Carr, A. N., Leike, J., Achiam, J., Misra, V., Morikawa, E., Radford, A., Knight, M., Brundage, M., Murati, M., Mayer, K., Welinder, P., McGrew, B., Amodei, D., McCandlish, S., Sutskever, I., and Zaremba, W. (2021). 评估在代码上训练的大型语言模型. arXiv:2107.03374.

Eldan, R. and Li, Y. (2023). TinyStories:语言模型可以有多小但仍能讲出连贯的英语? arXiv:2305.07759.

Gudibande, A., Wallace, E., Snell, C., Geng, X., Liu, H., Abbeel, P., Levine, S., and Song, D. (2023). 模仿专有LLM的虚假承诺. arXiv:2305.15717.

Gunasekar, S., Zhang, Y., Aneja, J., Mendes, C. C. T., Giorno, A. D., Gopi, S., Javaheripi, M., Kau￿ mann, P., de Rosa, G., Saarikivi, O., Salim, A., Shah, S., Behl, H. S., Wang, X., Bubeck, S., Eldan, R., Kalai, A. T., Lee, Y. T., and Li, Y. (2023). 教科书是你所需要的全部. arXiv:2306.11644.

Hoffmann, J., Borgeaud, S., Mensch, A., Buchatskaya, E., Cai, T., Rutherford, E., de Las Casas, D., Hendricks, L. A., Welbl, J., Clark, A., Hennigan, T., Noland, E., Millican, K., van den Driessche, G., Damoc, B., Guy, A., Osin- dero, S., Simonyan, K., Elsen, E., Rae, J. W., Vinyals, O., and Sifre, L. (2022). 训练计算优化的大型语言模型. arXiv:2203.15556.

Kaplan, J., McCandlish, S., Henighan, T., Brown, T. B., Chess, B., Child, R., Gray, S., Radford, A., Wu, J., and Amodei, D. (2020). 神经语言模型的规模定律. arXiv:2001.08361. Tian, Y., Fan, L., Isola, P., Chang, H., and Krishnan, D. (2023). StableRep:文本到图像模型生成强大的视觉表达学习器. arXiv:2306.00984. Zhou, C., Liu, P., Xu, P., Iyer, S., Sun, J., Mao, Y., Ma, X., Efrat, A., Yu, P., Yu, L., Zhang, S., Ghosh, G., Lewis, M., Zettlemoyer, L., and Levy, O. (2023). LIMA:对齐的简约原则. arXiv:2305.11206.