Lecture 13 & 14: Data

要想训练好一个LLM,除了有强大的模型架构和充足的计算资源,数据同样至关重要。Lecture 13和14深入探讨了用于训练大型语言模型的数据收集、清洗和处理方法。内容涵盖了不同类型的数据源(如网络文本、书籍、对话数据等),以及如何进行数据预处理以提升模型性能。此外,还介绍了数据增强技术和数据质量评估方法,帮助我们更好地理解如何利用高质量的数据来训练出更优秀的语言模型。

我们知道,模型训练需要两个重要的因素:模型架构和数据。前面的几节课程我们主要关注了模型架构的设计和优化,而在这一节,我们将重点讨论数据的重要性。要想训练好一个LLM,除了有强大的模型架构和充足的计算资源,数据同样至关重要。Lecture 13 和 14 将深入探讨用于训练大型语言模型的数据收集、清洗和处理方法。

1 Why Data Matters?

在很多开源权重模型(例如 LLaMA)的论文中,我们经常看到模型架构的描述和训练细节,但很少有关于数据的详细介绍。其背后主要有两个原因:

  1. 数据隐私和商业机密:许多公司和研究机构在训练大型语言模型时使用了大量的网络文本、书籍、对话数据等,这些数据往往涉及版权和隐私问题,因此不便公开。
  2. 竞争壁垒:数据处理是最贵、最难复制的资产之一。

在Foundation Model之前,数据通常是heavy annotation(例如图像分类中的ImageNet),但对于LLM来说,数据主要来自于网络文本、书籍、对话数据等,这些数据的规模和质量直接影响模型的性能和泛化能力。并且,Data 是一个long-tail problem,数据的质量和多样性对于模型的表现有着深远的影响。

2 Different Types of Data

大模型的训练阶段简单来说,可以分成3个阶段(现实里阶段节的边界可能更模糊):

  1. Pre-Training:在这个阶段,模型会使用大规模的文本数据进行无监督的训练,学习语言的基本结构和语义。
  2. Mid-Training:定向补充能力,数据更小,但更高质量,通常是一些特定领域的数据。
  3. Post-Training:让模型可以了聊天,更安全,需要做RLHF等,在这一阶段,需要一些指令数据、对话数据、偏好数据等。

一个很实用的直觉是:

越往后,数据越小、越贵、越“人为设计”,但对最终体验影响越大。

2.1 Example

接下来我们来看一个具体的例子

了解了不同的LLM训练阶段,接下来,我们来看一下在不同的阶段中,数据是如何收集的,我们先来看一下Pre-Training阶段,之后我们再来介绍Mid-Training和Post-Training阶段的数据收集方法。

3 Pre-Training Data Collection

在Pre-Training阶段,模型需要大量的文本数据来学习语言的基本结构和语义。其实在GPT火之前,NLP领域已经有很多预训练语言模型了,例如BERT (Devlin et al. 2019),这些模型的训练数据主要来自于网络文本、书籍等公开可用的数据源。 以BERT为例,BERT的训练数据主要来自于以下几个来源:

  • BooksCorpus:当年从 Smashwords 抓取的免费自出版书籍(后来因 ToS 被下架)
  • Wikipedia:高质量、结构化、引用链清晰,但有明显“缺失面”(观点、生活细节、长尾知识很多不在里面)

Even high quality data source might contain bad content。

我们之所以要以BERT为例子,是因为BERT标志着在Training阶段,Sequence are Document而不是之前的一个短句子Sentence,

接下来我们来看一下GPT-2的训练数据,GPT-2的训练数据主要来自于WebText数据集,WebText是从Reddit上抓取的高质量文本数据,包含了大量的网络文本、新闻文章、博客等内容。其中包含了从 Reddit 高 karma 帖子的外链抓网页,相当于用群体行为做了一层过滤。

3.1 Common Crawl

Common Crawl 是一个非营利组织,致力于定期抓取和存档整个互联网的数据。它提供了一个庞大的、公开可用的网络文本数据集,涵盖了各种类型的网站和内容。Common Crawl 的数据集包含了数十亿个网页的文本内容,这些数据对于训练大型语言模型非常有价值,因为它们提供了丰富的语言表达和多样化的语料来源。Common Crawl(CC)更像:

  • 每月一次大规模 crawl
  • 输出 WARC(原始 HTTP 响应)和 WET(抽取后的文本)
  • 覆盖不完整、重复极多、噪声很大、而且 HTML→text 的工具会显著影响质量

接下来讨论一下如何将HTML转化为Text。

3.1.1 Filter Common Crawl

原始的Common Crawl数据包含了大量的噪声和无关内容,因此需要进行过滤和清洗。常见的过滤方法包括:

  • Rule-Based:基于规则的过滤方法,例如使用正则表达式来去除HTML标签、脚本、样式等无关内容。
  • Model-Based:基于模型的过滤方法,例如使用预训练的语言模型来评估文本的质量,去除低质量或无意义的文本。
Back to top

3.1.1.1

Devlin, Jacob, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. 2019. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.” May 24, 2019. https://doi.org/10.48550/arXiv.1810.04805.