0% found this document useful (0 votes)
52 views67 pages

Slides For 'Large Language Model: From Theory To Implementations', Chapter 3

This is the slides for the book 'Large Language Model: From Theory to Implementations', chapter 3.

Uploaded by

张逸骅
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
52 views67 pages

Slides For 'Large Language Model: From Theory To Implementations', Chapter 3

This is the slides for the book 'Large Language Model: From Theory to Implementations', chapter 3.

Uploaded by

张逸骅
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 67

《大规模语言模型 : 》

第 3 章 大语言模型预训练数据

张奇 桂韬 郑锐 黄萱菁

复旦大学
2023.11.05 1
3 大语言模型预训练数据

训练大语言模型需要数万亿的各类型数据。如何构造海量“高质量”数据对于大语言模型的训练具有至关重要的作用。
截至 2023 年 9 月,还没有非常好的大语言模型的理论分析和解释,也缺乏对语言模型训练数据的严格说明和定义。但是,大多
数研究人员认为预训练数据是影响大语言模型效果及样本泛化能力的关键因素之一。
当前的研究表明,预训练数据需要涵盖各种类型的文本,也需要覆盖尽可能多的领域、语言、文化和视角,从而提高大语言模型的泛化能
力和适应性。
目前,大语言模型所采用的预训练数据通常包括网络数据、图书、论文、百科和社交媒体等。

2
目录
Content
s

3.1 数据来源

3.2 数据处理

3.3 数据影响分析

3.4 开源数据集合

3.5 实践思考

3
目录
Content
s

3.1 数据来源

3.2 数据处理

3.3 数据影响分析

3.4 开源数据集合

3.5 实践思考

4
3.1 数据来源

文献 [5] 介绍了 OpenAI 训练 GPT-3 所使用的主要数据来源,包含经过过滤的 Common-Crawl 数据集


[19] 、 WebText2 、 Books1 、 Books2 以及英文 Wikipedia 等数据集。
• CommonCrawl 的原始数据有 45TB ,进行过滤后仅保留了 570GB 的数据。通过词元方式对上述语料进行切分,大约包含
5000 亿词元。

• 为了保证模型使用更多高质量数据进行训练,在 GPT-3 训练时,根据语料来源的不同,设置不同的采样权重。在完成 3000 亿词元训练


时,英文 Wikipedia 的语料平均训练轮数为 3.4 次,而 CommonCrawl 和 Books 2 仅有 0.44 次和 0.43
次。

Meta 公 司 的 研 究 人 员 在 训 练 OPT[31] 模 型 时 采 用 了 混 合 RoBERTa[71] 、 Pile[72] 和


PushShift.io Reddit[73] 数据的方法。由于这些数据集中包含的绝大部分数据都是英文数据,因此 OPT 也从
CommonCrawl 数据集中抽取了部分非英文数据加入训练语料。

5
3.1 数据来源

大语言模型预训练所需的数据来源大体上分为通用数据和专业数据两大类。通用数据( General Data )包括网页、图书、


新闻、对话文本等内容 [14, 31, 46] 。通用数据具有规模大、多样性和易获取等特点,因此支持大语言模型的语言建模和泛化
能力。专业数据( Specialized Data )包括多语言数据、科学数据、代码及领域特有资料等。通过在预训练阶段引入
专业数据可以有效提升大语言模型的任务解决能力。

6
3.1. 通用数据
1
通用数据在大语言模型训练数据中占比通常非常高,主要包括来自网页、书籍、对话文本等不同类型的数据,为大语言模型提供了大规模
且多样的训练数据。
网页( Webpages )是通用数据中数量最多的一类。随着互联网的大规模普及,人们通过网站、论坛、博客、 App 等各
种类型网站和应用,创造了海量的数据。根据 2016 年 Google 公开的数据,其搜索引擎索引处理了超过 130 万亿网
页。
• 爬 取 和 处 理 海 量 网 页 内 容 并 不 是 一 件 容 易 的 事 情 , 因 此 一 些 研 究 人 员 构 建 了 包 括
ClueWeb09[74] 、 ClueWeb12[75] 、 SogouT-16[76] 、 CommonCrawl 等在内的开源网页数据集。

• 虽然这些爬取的网络数据包含大量高质量的文本(如维基百科),但也包含非常多低质量的文本(如垃圾邮件等)。因此,过滤并处理网页以提高数据质量对大
语言模型训练来说非常重要。

7
3.1. 通用数据
1
对话数据( Conversation Text )是指有两个或更多参与者交流的文本内容。对话数据包含书面形式的对话、聊天记
录、论坛帖子、社交媒体评论等。当前的一些研究表明,对话数据可以有效增强语言模型的对话能力 [31] ,并潜在地提高其在多种问
答任务上的表现 [14] 。
• 对话数据可以通过收集、清洗、归并等过程从社会媒体、论坛、邮件组等构建。相较于网页数据,对话数据收集和处理更加困难,数据数量也相对少非常
多。

• 常见的对话数据集包括 PushShift.io Reddit[73, 77] 、 Ubuntu Dialogue Corpus[78] 、 Douban


Conversation Corpus 、 Chromium Conversations Corpus 等。

• 文献 [79] 也提出了使用大语言模型自动生成对话数据的 UltraChat 方法。

8
3.1. 通用数据
1
书籍( Book )是人类知识的主要积累方式之一,从古代经典著作到现代学术著述,承载了丰富多样的人类思想。书籍通常包含广
泛的词汇,包括专业术语、文学表达及各种主题词汇。利用书籍数据进行训练,大语言模型可以接触多样化的词汇,从而提高其对不同领
域和主题的理解能力。
相较于其他语料库,书籍也是最重要的,甚至是唯一的长文本书面语的数据来源。
• 书籍提供了完整的句子和段落,使得大语言模型可以学习到上下文之间的联系。这对于模型理解句子中的复杂结构、逻辑关系和语义连贯性非常重要。

• 书籍涵盖了各种文体和风格,包括小说、科学著作、历史记录,等等。通过使用书籍数据训练语言模型,可以使模型学习到不同的写作风格和表达方式,
提高大语言模型在各种文本类型上的能力。

• 受 限 于 版 权 因 素 , 开 源 书 籍 数 据 集 很 少 , 现 有 的 开 源 大 语 言 模 型 研 究 通 常 采 用 Pile 数 据 集 [72] 中 提 供 的 Books3 和


Bookcorpus2 数据集。

9
3.1. 专业数据
2
专业数据在通用大语言模型中所占比例通常较低,但是其对改进大语言模型在下游任务上的特定能力有着非常重要的作用。专业数据有非
常多的种类,文献 [18] 总结了当前大语言模型使用的三类专业数据,包括多语言数据、科学文本数据和代码。
多语言数据( Multilingual Text )对于增强大语言模型的语言理解和生成多语言能力具有至关重要的作用。当前的大
语言模型训练除了需要目标语言中的文本,通常还要整合多语言语料库。
• BLOOM[33] 的预训练语料中包含 46 种语言, PaLM[14] 的训练语料中甚至包含高达 122 种语言的数据。此前的研究发
现,通过多语言混合训练,预训练模型可以在一定程度上自动构建多语言之间的语义关联 [80] 。

• 多语言数据混合训练,可以有效提升翻译、多语言摘要和多语言问答等任务能力。此外,由于不同语言中不同类型的知识获取难度不同,多语言数据还可
以有效地增加数据的多样性和知识的丰富性。

10
3.1. 专业数据
2
科学文本( Scientific Text )数据包括教材、论文、百科及其他相关资源。这些数据对于提升大语言模型在理解科学知识
方面的能力具有重要作用 [34] 。
• 科学文本数据的来源主要包括 arXiv 论文 [81] 、 PubMed 论文 [82] 、教材、课件和教学网页等。

• 由于科学领域涉及众多专业领域且数据形式复杂,通常还需要对公式、化学式、蛋白质序列等采用特定的符号标记并进行预处理。这样可以将不同格式的
数据转换为统一的形式,使大语言模型更好地处理和分析科学文本数据。
• 公式可以用 LaTeX 语法表示

• 化学结构可以用 SMILES ( Simplified Molecular Input Line EntrySystem )表示

• 蛋白质序列可以用单字母代码或三字母代码表示

11
3.1. 专业数据
2
代码( Code )数据是进行程序生成任务所必需的训练数据。近期的研究和 ChatGPT 的结果表明,通过在大量代码上进行
预训练,大语言模型可以有效提升代码生成的效果 [83-84] 。
• 代码数据不仅包含程序代码本身,还包含大量的注释信息。与自然语言文本相比,代码数据具有显著的不同。代码是一种格式化语言,它对应着长程依赖
和准确的执行逻辑 [85] 。代码的语法结构、关键字和特定的编程范式都对其含义和功能起着重要的作用。

• 代码数据的主要来源是编程问答社区(如 Stack Exchange[86-87] )和公共软件仓库(如 GitHub[29, 83, 88] )。


• 编程问答社区中的数据包含了开发者提出的问题、其他开发者的回答及相关代码示例。这些数据提供了丰富的语境和真实世界中的代码使用场景。

• 公共软件仓库中的数据则包含了大量的开源代码,涵盖多种编程语言和不同领域。这些代码库中的很多代码经过了严格的代码评审和实际的使用测试,因此具有一
定的质量和可靠性。

12
目录
Content
s

3.1 数据来源

3.2 数据处理

3.3 数据影响分析

3.4 开源数据集合

3.5 实践思考

13
3.2 数据处理

大语言模型的相关研究表明,数据质量对于模型的影响非常大。因此,在收集了各种类型的数据之后,需要对数据进行处理,去除低质量
数据、重复数据、有害信息、个人隐私等内容 [14, 89] 。典型的数据处理流程如图 3.2 所示,主要包括质量过滤、冗余去
除、隐私消除、词元切分这几个步骤。

14
3.2. 质量过滤
1
互联网上的数据质量参差不齐,无论是 OpenAI 联合创始人 Andrej Karpathy 在微软 Build 2023 的报
告,还是当前的一些研究都表明,训练数据的质量对于大语言模型效果具有非常重要的影响。因此,从收集到的数据中删除低质量数据成
为大语言模型训练中的重要步骤。
大语言模型训练中所使用的低质量数据过滤方法可以大致分为两类:基于分类器的方法和基于启发式的方法。

15
3.2. 质量过滤
1
基于分类器的方法的目标是训练文本质量判断模型,并利用该模型识别并过滤低质量数据。 GPT-3[46] 、 PaLM[14] 和
GLaM[90] 模型在训练数据构造时都使用了基于分类器的方法。
文献 [90] 采用了基于特征哈希的线性分类器( Feature Hash Based Linear Classifier ),可以非常
高效地完成文本质量判断。
• 该分类器使用一组精选文本(维基百科、书籍和一些选定的网站)进行训练,目标是给与训练数据类似的网页较高分数。利用这个分类器可以评估网页的
内容质量。

• 在实际应用中,还可以通过使用 Pareto 分布对网页进行采样,根据其得分选择合适的阈值,从而选定合适的数据集。

然而,一些研究发现,基于分类器的方法可能会删除包含方言或者口语的高质量文本,从而损失一定的多样性 [89-90] 。

16
3.2. 质量过滤
1
基于启发式的方法则通过一组精心设计的规则来消除低质量文本, BLOOM[33] 和 Gopher[89] 采用了基于启发式的
方法。这些启发式规则主要包括:
• 语言过滤:如果一个大语言模型仅关注一种或者几种语言,则可以大幅过滤数据中其他语言的文本。

• 指标过滤:利用评测指标也可以过滤低质量文本。例如,可以使用语言模型对给定文本的困惑度( Perplexity )进行计算,利用该值可以过滤


非自然的句子。

• 统计特征过滤:针对文本内容可以计算包括标点符号分布、符号字比( Symbol-to-Word Ratio )、句子长度在内的统计特征,利用这


些特征过滤低质量数据。

• 关键词过滤:根据特定的关键词集,可以识别并删除文本中的噪声或无用元素。例如, HTML 标签、超链接及冒犯性词语等。

17
3.2. 质量过滤
1
在大语言模型出现之前,在自然语言处理领域已经开展了很多文章质量判断( Text Quality Evaluation )相关研究,
主要应用于搜索引擎、社会媒体、推荐系统、广告排序及作文评分等任务中。
• 在搜索和推荐系统中,结果的内容质量是影响用户体验的重要因素之一,因此,此前很多工作都是针对用户生成内容( User-Generated
Content , UGC )的质量进行判断的。

• 自动作文评分也是文章质量判断领域的一个重要子任务,自 1998 年文献 [91] 提出使用贝叶斯分类器进行作文评分预测以来,基于


SVM[92] 、 CNN-RNN[93] 、 BERT[94-95] 等方法的作文评分算法也被相继提出,并取得了较大的进展。

这些方法都可以应用于大语言模型预训练数据过滤。由于预训练数据量非常大,并且对质量判断的准确率要求并不非常高,因此一些基于
深度学习和预训练的方法还没有应用于低质过滤中。

18
3.2. 冗余去除
2
文本冗余发现( Text Duplicate Detection )也称为文本重复检测,是自然语言处理和信息检索中的基础任务
之一,其目标是发现不同粒度上的文本重复,包括句子、段落、文档等不同级别。冗余去除就是在不同的粒度上去除重复内容,包括句
子、文档和数据集等粒度。
文献 [96] 指出,大语言模型训练语料库中的重复数据,会降低大语言模型的多样性,并可能导致训练过程不稳定,从而影响模型性
能。因此,需要对预训练语料库中的重复数据进行处理,去除其中的冗余部分。

19
3.2. 冗余去除
2
在句子级别上,文献 [97] 指出,包含重复单词或短语的句子很可能造成语言建模中引入重复的模式。这对语言模型来说会产生非常
严重的影响,使得模型在预测时容易陷入重复循环( Repetition Loops )。
例如:使用 GPT-2 模型,对于给定的上下文:“ In a shocking finding, scientist discovered a herd
of unicorns living in a remote, previously unexplored valley, in the Andes
Mountains. Even more surprising to the researchers was the fact that the
unicorns spoke perfect English.” 。

如果使用束搜索( Beam Search ),当设置 b = 32 时,模型就会产生如下输出,进入重复循环模式。

“The study, published in the Proceedings of the National Academy of Sciences


of the United States of America (PNAS), was conducted by researchers from
the Universidad Nacional Autónoma de México (UNAM) and the Universidad
Nacional Autónoma de México (UNAM/Universidad Nacional Autónoma de
México/Universidad Nacional Autónoma de México/Universidad Nacional Autónoma
de México/Universidad Nacional Autónoma de · · · ”
20
3.2. 冗余去除
2
在 RefinedWeb[64] 的构造过程中使用了文献 [98] 提出的过滤方法,进行了句子级别的过滤。
• 该方法提取并过滤文档间超过一定长度的相同字符串。给定两个文档 xi 和 xj ,其中存在长度为 k 的公共子串。当 k ⩾ 50 时,就将其中一个子
串过滤。

• 公共子串匹配的关键是如何高效完成字符串匹配,文献 [64] 将整个文档 D 转换为一个超长的字符串序列 S ,之后构造序列 S 的后缀数组


( Suffix Array ) A 。该数组包含在该序列中的所有后缀按字典顺序排列的列表。具体而言,后缀数组 A 是一个整数数组,其中每个元素表示
S 中的一个后缀的起始位置。 A 中的元素按照后缀的字典顺序排列。

• 针对 Wiki-40B 训练语料(约包含 4GB 文本内容),使用拥有 96 核 CPU 以及 768GB 内存的服务器,可以在 140 秒内完


成计算。对于包含 350GB 文本的 C4 数据集,仅需要 12 小时就可以完成后缀数组构造。

21
3.2. 冗余去除
2
在文档级别上,大部分大语言模型依靠文档之间的表面特征相似度(例如 n-gram 重叠比例)进行检测并删除重复文档 [33,
37, 64, 98] 。
• LLaMA[37] 采用 CCNet[99] 的处理模式,先将文档拆分为段落,并把所有字符转换为小写字符、将数字替换为占位符,以及删除所有
Unicode 标点符号和重音符号来对每个段落进行规范化处理。然后,使用 SHA-1 方法为每个段落计算一个哈希码( Hash Code ),并使
用前 64 位数字作为键。最后,利用每个段落的键进行重复判断。

• RefinedWeb[64] 先去除页面中菜单、标题、页脚、广告等内容,仅抽取页面中的主要内容。在此基础上,在文档级别进行过滤,采用与文献
[89] 类似的方法,使用 n-gram 重叠程度来衡量句子、段落及文档的相似度。如果重复程度超过预先设定的阈值,则会过滤重复段落或文档。

22
3.2. 隐私消除
3
由于绝大多数预训练数据源于互联网,因此不可避免地会包含涉及敏感或个人信息( Personally Identifiable
Information , PII )的用户生成内容,这可能会增加隐私泄露的风险 [101] 。

如左图所示,输入前缀词“ East Stroudsburg Stroudsburg” ,语言模型在此基


础上补全了姓名、电子邮 件地址、电话号码、传真号码及实际地址。这些信息都是模型从预训练语料中学
习得到的。

因此,非常有必要从预训练语料库中删除包含个人身份信息的内容。

23
3.2. 隐私消除
3
删除隐私数据最直接的方法是采用基于规则的算法, BigScience ROOTS Corpus[102] 在构建过程中就采用
了基于命名实体识别的方法,利用命名实体识别算法检测姓名、地址、电话号码等个人信息内容并进行删除或者替换。
该方法使用了基于 Transformer 的模型,并结合机器翻译技术,可以处理超过 100 种语言的文本,消除其中的隐私信
息。该方法被集成在 muliwai 类库中。

24
3.2. 词元切分
4
传统的自然语言处理通常以单词为基本处理单元,模型都依赖预先确定的词表 V ,在编码输入词序列时,这些词表示模型只能处理词表
中存在的词。因此,在使用中,如果遇到不在词表中的未登录词,模型无法为其生成对应的表示,只能给予这些未登录词( Out-
of-Vocabulary , OOV )一个默认的通用表示。
在深度学习模型中,词表示模型会预先在词表中加入一个默认的“ [UNK]” ( unknown )标识,表示未知词,并在训
练的过程中将 [UNK] 的向量作为词表示矩阵的一部分一起训练,通过引入某些相应机制来更新 [UNK] 向量的参数。在使用
时,对于全部的未登录词,都使用 [UNK] 的向量作为这些词的表示向量。

25
3.2. 词元切分
4
基于固定词表的词表示模型对词表大小的选择比较敏感。
• 当词表大小过小时,未登录词的比例较高,影响模型性能。

• 当词表大小过大时,大量低频词出现在词表中,而这些词的词向量很难得到充分学习。

• 理想模式下,词表示模型应能覆盖绝大部分的输入词,并避免词表过大所造成的数据稀疏问题。

为了缓解未登录词问题,一些工作通过利用亚词级别的信息构造词表示向量。一种直接的解决思路是为输入建立字符级别表示,并通过字
符向量的组合来获得每个单词的表示,以解决数据稀疏问题。然而,单词中的词根、词缀等构词模式往往跨越多个字符,基于字符表示的
方法很难学习跨度较大的模式。

26
3.2. 词元切分
4
为了充分学习这些构词模式,研究人员们提出了子词词元化( Subword Tokenization )方法,试图缓解上文介
绍的未登录词问题。
词元表示模型会维护一个词元词表,其中既存在完整的单词,也存在形如“ c”, “re”, “ing” 等单词部分信息,称为子词
( Subword )。
词元表示模型对词表中的每个词元计算一个定长向量表示,供下游模型使用。对于输入的词序列,词元表示模型将每个词拆分为词表内的
词元。
例如,将单词“ reborn” 拆分为“ re” 和“ born” 。
模型随后查询每个词元的表示,将输入重新组成为词元表示序列。当下游模型需要计算一个单词或词组的表示时,可以将对应范围
内的词元表示合成为需要的表示。

27
3.2. 词元切分
4
词元表示模型能够较好地解决自然语言处理系统中未登录词的问题。词元分析( Tokenization )目标是将原始文本分割成
由词元( Token )序列的过程。词元切分也是数据预处理中至关重要的一步。
字节对编码( Byte Pair Encoding , BPE )模型 [103] 是一种常见的子词词元模型。该模型采用的词表
包含最常见的单词及高频出现的子词。在使用时,常见词通常本身位于 BPE 词表中,而罕见词通常能被分解为若干个包含在 BPE
词表中的词元,从而大幅降低未登录词的比例。 BPE 算法包括两个部分:
( 1 )词元词表的确定。
( 2 )全词切分为词元以及词元合并为全词的方法。

28
3.2. 词元切分
4
BPE 模型中词元词表的计算过程

首先,确定语料库中全词的词表和词频,然后将每个单词切
分为单个字符的序列,并在序列最后添加符号“ </w>” 作
为单词结尾的标识。所切分出的序列元素称为字节,即每个
单词都切分为字节的序列。之后,按照每个字节序列的相邻
字节对和单词的词频,统计每个相邻字节对的出现频率,合
并出现频率最高的字节对,将其作为新的词元加入词表,并
将全部单词中的该字节对合并为新的单一字节。重复这一步
骤,直至 BPE 词元词表的大小达到指定的预设值,或
没有可合并的字节对为止。

29
3.2. 词元切分
4
在词元词表确定之后,对输入词序列中未在词表中的全词进行切分, BPE 方法对词表中的词元按从长到短的顺序进行遍历,用每一
个词元和当前序列中的全词或未完全切分为词元的部分进行匹配,将其切分为该词元和剩余部分的序列。
例如,对于单词“ lowest</w>”
• 首先通过匹配词元“ est</w>” 将其切分为“ low”“est</w>” 的序列
• 再通过匹配词元“ low”
• 确定其最终切分结果为“ low”“est</w>” 的序列。

通过这样的过程,使用 BPE 尽量将词序列中的词切分成已知的词元。

30
3.2. 词元切分
4
在遍历词元词表后,对于切分得到的词元序列,为每个词元查询词元表示,构成词元表示序列。若出现未登录词元,即未出现在 BPE
词表中的词元,则采取和未登录词类似的方式,为其赋予相同的表示,最终获得输入的词元表示序列。
字节级( Byte-level ) BPE 通过将字节视为合并的基本符号,改善多语言语料库(例如包含非 ASCII 字符的文
本)的分词质量。 GPT-2 、 BART 、 LLaMA 等大语言模型都采用了这种分词方法。原始 LLaMA 的词表大小是
32K ,并且主要根据英文进行训练,因此,很多汉字都没有直接出现在词表中,需要字节来支持所有的中文字符,由 2 个或者 3
个 Byte Token 才能拼成一个完整的汉字。
对于使用了 BPE 的大语言模型,其输出序列也是词元序列。对于原始输出,根据终结符 </w> 的位置确定每个单词的范围,合
并范围内的词元,将输出重新组合为词序列,作为最终的结果。

31
3.2. 词元切分
4
WordPiece[104] 也是一种常见的词元分析算法,最初应用于语音搜索系统。此后,该算法做为 BERT 的分词器。
WordPiece 与 BPE 有非常相似的思想,都是通过迭代地合并连续的词元,但在合并的选择标准上略有不同。为了进行合并,
WordPiece 需要首先训练一个语言模型,并用该语言模型对所有可能的词元对进行评分。在每次合并时,选择使得训练数据似然
概率增加最多的词元对。
由于 Google 并没有发布其 WordPiece 算法的官方实现, HuggingFace 在其在线 NLP 课程中提供了一种
更直观的选择度量方法:一个词元对的评分是根据训练语料库中两个词元的共现计数除以它们各自的出现计数的乘积。计算公式如下所
示:

32
3.2. 词元切分
4
Unigram 词元分析 [105] 是另外一种应用于大语言模型的词元分析方法, T5 和 mBART 采用该方法构建词元分
析器。
不同于 BPE 和 WordPiece , Unigram 词元分析从一个足够大的可能词元集合开始,然后迭代地从当前列表中删除
词元,直到达到预期的词汇表大小为止。基于训练好的 Unigram 语言模型,使用从当前词汇表中删除某个字词后,训练语料库似
然性的增加量作为选择标准。
为了估计一元语言( Unigram )模型,采用了期望最大化( Expectation–Maximization , EM )算
法:每次迭代中,首先根据旧的语言模型找到当前最佳的单词切分方式,然后重新估计一元语言单元概率以更新语言模型。在这个过程
中,使用动态规划算法(如维特比算法)来高效地找到给定语言模型时单词的最佳分解方式。

33
3.2. 词元切分
4
以 HuggingFace NLP 课程中介绍的 BPE 代码为
例,介绍 BPE 方法的构建和使用,代码实现如下所示:

34
3.2. 词元切分
4

35
目录
Content
s

3.1 数据来源

3.2 数据处理

3.3 数据影响分析

3.4 开源数据集合

3.5 实践思考

36
3.3 数据影响分析

大语言模型的训练需要巨大的计算资源,通常不可能多次迭代大语言模型预训练。千亿级参数量的大语言模型每次预训练的计算需要花费
数百万元。因此,在训练大语言模型之前,构建一个准备充分的预训练语料库尤为重要。
本节将从数据规模、数据质量和数据多样性三个方面分析数据对大语言模型的性能影响。
需要特别说明的是,截止本书成稿时,由于在千亿参数规模的大语言模型上进行实验的成本非常高,很多结论是在 100 亿甚至是
10 亿规模的语言模型上进行的实验,其结果并不能完整地反映数据对大语言模型的影响。此外,一些观点仍处于猜想阶段,需要进一
步验证。需要各位读者甄别判断。

37
3.3. 数据规模
1
随着大语言模型参数规模的增加,为了有效地训练模型,需要收集足够数量的高质量数据 [37, 106] 。在文献 [106] 针对
模型参数规模、训练数据量及总计算量与模型效果之间关系的研究之前,大部分大语言模型训练所采用的训练数据量相较于 LLaMA
等最新的大语言模型都少很多。

38
3.3. 数据规模
1
DeepMind 的研究人员在文献 [106] 中给出了他们通过训练参数范围从 7000 万到 160 亿,训练词元数量从 5
亿到 5000 亿不等的 400 多个语言模型所得出的分析结果。
• 研究发现,如果希望模型训练达到计算最优( Compute-optimal ),则模型大小和训练词元数量应该等比例缩放,即模型大小加倍则训练词元
数量也应该加倍。

• 为了验证该分析结果,他们使用与 Gopher 语言模型训练相同的计算资源,根据上述理论预测了 Chinchilla 语言模型的最优参数量与词元数量


组合。最终确定 Chinchilla 语言模型为 700 亿参数,使用了 1.4 万亿词元进行训练。

• 通过实验发现, Chinchilla 在很多下游评估任务中都显著地优于 Gopher ( 280B )、 GPT-3 ( 175B )、 Jurassic-


1 ( 178B )以及 Megatron-Turing NLG ( 530B )。

39
3.3. 数据规模
1
图 3.5 给出了在同等计算量情况下,训练损失随参数量的变化情况。针对 9 种不同的训练参数量设置,使用不同词元数量的训练语
料,训练不同大小的模型参数量,使得最终训练所需浮点运算数达到预定目标。
图 中 绿 色 线 表 示 使 用 Gopher 训 练 计 算 量 所 预 测 的 最 佳 模 型 参 数 量 和 训 练 数 据 词 元 数 量 。 还 可 以 使 用 幂 律
( PowerLaw )对计算量限制、损失最优模型参数量大小及训练词元数之间的关系进行建模。

40
3.3. 数据规模
1
LLaMA[37] 模型在训练时采用了与文献 [106] 相符的训练策略。研究发现, 70 亿参数的语言模型在训练超过 1 万
亿个词元( 1T Tokens )后,性能仍在持续增长。因此, Meta 的研究人员在 LLaMA-2[109] 模型训练
中,进一步增大了训练数据量,训练数据量达到 2 万亿词元。
文献 [106] 给出了不同参数量模型在训练期间,随着训练数据量的增加,模型在问答和常识推理任务上的效果演变过程,如图
3.6 所 示 。 研 究 人 员 分 别 在
TriviaQA 、 HellaSwag 、 NaturalQuestions 、 SIQA 、 WinoGrande 、 PIQA 这
6 个数据集上进行了测试。

41
3.3. 数据规模
1
可以看到,随着训练数据量的不断增加,模型在分属两类任务的 6 个数据集上的性能都在稳步提高。通过使用更多的数据和更长的训
练时间,较小的模型也可以实现良好的性能。

42
3.3. 数据规模
1
文献 [110] 对不同任务类型所依赖的语言模型训练数量进行了分析。针对分类探查( Classifier Probing )、信息论
探 查 ( Info-theoretic Probing ) 、 无 监 督 相 对 可 接 受 性 判 断 ( Unsupervised Relative
Acceptability Judgment ) 以 及 应 用 于 自 然 语 言 理 解 任 务 的 微 调 ( Fine-tuning on NLU
Tasks ) 这四类任务。
基于不同量级预训练数据的 RoBERTa[71] 模型在不同类型任务上的效果进行了实验验证和分析。分别针对预训练了 1M 、
10M 、 100M 和 1B 个单词的 RoBERTa 模型进行了能力分析。
研究发现,模型只需要 10M∼100M 个单词的训练,就可以可靠地获得语法和语义特征。但是需要更多的数据量训练才能获得
足够的常识知识和其他技能,并在典型下游自然语言理解任务中取得较好的结果。

43
3.3. 数据质量
2
数据质量通常被认为是影响大语言模型训练效果的关键因素之一。包含大量重复的低质量数据甚至导致训练过程不稳定,造成模型训练不
收敛 [96, 111] 。
现有的研究表明,训练数据的构建时间、包含噪声或有害信息情况、数据重复率等因素,都对语言模型性能存在较大影响 [89, 96,
98, 112] 。截至 2023 年 9 月的研究都得出了相同的结论,即语言模型在经过清洗的高质量数据上训练数据可以得到更
高的性能。
文献 [89] 介绍了 Gopher 语言模型在训练时针对文本质量进行的相关实验。如图 3.7 所示,具有 140 亿参数的模型
在 OpenWebText 、 C4 及不同版本的 MassiveWeb 数据集上训练得到的模型效果对比。

44
3.3. 数据质量
2
使用经过过滤和去重的 MassiveWeb 数据训练得到的语言模型在三个任务上都远好于使用未经处理的数据训练得到的模型。
使用经过处理的 MassiveWeb 数据训练得到的语言模型在下游任务上的表现也远好于使用 OpenWebText 和
C4 数据集训练得到的结果。

45
3.3. 数据质量
2
构建 GLaM[90] 语言模型时,也对训练数据质量的影响进行了分析。该项分析同样使用包含 17 亿参数的模型,针对下游少
样本任务性能进行了分析。使用相同超参数,对通过原始数据集和经过质量筛选后的数据训练得到的模型效果进行了对比,实验结果如图
3.8 所示。

可以看到,使用高质量数据训练的模型在自然语言生成和自然语言理解的任务上表
现更好。特别是,高质量数据对自然语言生成任务上的影响大于自然语言理解任
务。这可能是因为自然语言生成任务通常需要生成高质量的语言,过滤预训练语料
库对于语言模型的生成能力至关重要。文献 [90] 的研究强调了预训练数据的
质量在下游任务的性能中也扮演着关键角色。

46
3.3. 数据质量
2
Google Research 的研究人员针对数据构建时间、文本质量、是否包含有害信息开展了系统的研究 [113] 。使用具
有不同时间、毒性和质量及领域组成的数据,训练了 28 个 15 亿参数的仅有解码器( Decoder-only )结构语言模型。
研究结果表明,大语言模型训练数据的时间、内容过滤方法及数据源对下游模型行为具有显著影响。
针对数据时效性对于模型效果的影响问题,研究人员在 C4 语料集的 2013 、 2016 、 2019 和 2022 版本上训练
了 4 个自回归语言模型。对于每个版本,从 CommonCrawl 数据集上删除了截止年份之后爬取的所有数据。使用新闻、
Twitter 和科学领域的评估任务来衡量时间错位的影响。
这些评估任务的训练集和测试集按年份划分,分别在每个按年份划分的数据集上微调模型,然后在所有年份划分的测试集上进行评估。

47
3.3. 数据质量
2
图 3.9 给出了使用 4 个不同版本的数据集训练得到的模型在 5 个不同任务上的评测结果。热力图颜色( Heatmap
Colors )根据每一列进行归一化得到。从图中可以看到,训练数据和测试数据的时间错配会在一定程度上影响模型的效果。

48
3.3. 数据质量
2
Anthropic 的研究人员针对数据集中的重复问题开展了系统研究 [96] 。为了研究数据重复对大语言模型的影响,研究人员构
建了特定的数据集,其中大部分数据是唯一的,只有一小部分数据被重复多次,并使用这个数据集训练了一组模型。研究发现了一个强烈
的双峰下降现象,即重复数据可能会导致训练损失在中间阶段增加。
例如,通过将 0.1% 的数据重复 100 次,即使其余 90% 的训练数据保持不变,一个 800M 参数的模型的性能也可能
降低到与 400M 参数的模型相同。此外,研究人员还设计了一个简单的复制评估,即将哈利 · 波特( Harry Potter )的
文字复制 11 次,计算模型在该段上的损失。在仅有 3% 的重复数据的情况下,训练过程中性能最差的轮次仅能达到参数量为
1/3 的模型的效果。

49
3.3. 数据质量
2
文献 [14] 对大语言模型的记忆能力进行分析,根据训练样例在训练数据中出现的次数,显示了记忆率的变化情况,如图 3.10
所示。

可以看到,对于在训练中只见过一次的样例, PaLM 模型的记忆率为


0.75% ,而对见过 500 次以上的样例的记忆率超过 40% 。这也在一定
程度上说明重复数据对于语言模型建模具有重要影响。这也可能进一步影响使用上下文
学习的大语言模型的泛化能力。由于 PaLM 模型仅使用了文档级别过滤,因此片段
级别( 100 个以上 Token )可能出现非常高的重复次数。

50
3.3. 数据多样性
3
来自不同领域、使用不同语言、应用于不同场景的训练数据具有不同的语言特征,包含不同语义知识。通过使用不同来源的数据进行训
练,大语言模型可以获得广泛的知识。

51
3.3. 数据多样性
3
Gopher 模 型 [89] 的 训 练 过 程 对 数 据 分 布 进 行 了 消 融 实 验 , 验 证 混 合 来 源 对 下 游 任 务 的 影 响 情 况 。 针 对
MassiveText 子集设置了不同权重的数据组合,并用于训练语言模型。利用 Wikitext103 、 Lambada 、
C4 和 Curation Corpus 测试不同权重组合训练得到的语言模型在下游任务上的性能。
为了限制数据组合分布范围,实验中固定了 Wikipedia 和 GitHub 两个数据集的采样权重。对于 Wikipedia ,
要求对训练数据进行完整的学习,因此将采样权重固定为 2% ;对于 GitHub ,采样权重设置为 3% 。对于剩余的 4 个子
集( MassiveWeb 、 News 、 Books 和 C4 )设置了 7 种不同的组合。

52
3.3. 数据多样性
3
图 3.11 给出了 7 种不同子集采样权重训练得到 Gopher 模型在下游任务上的性能。可以看到,使用不同数量子集采样权重训练,所获得的模型效果
差别很大。

• 在 所 有 任 务 中 表 现 良 好 且 在 Curation Corpus 上 取 得 最 佳 表 现 的 绿 色 配 置 是 10% 的 C4 、 50% 的


MassiveWeb 、 30% 的 Books 和 10% 的 News 。增加书籍数据的比例可以提高模型从文本中捕获长期依赖关系的能力,因
此可以降低 Lambada 语料集 [114] 上的损失。而使用更高比例的 C4 数据集 [19] 则有助于在 C4 验证集 [89] 上获得更好的表
现。

53
目录
Content
s

3.1 数据来源

3.2 数据处理

3.3 数据影响分析

3.4 开源数据集合

3.5 实践思考

54
3.4 开源数据集

随着基于统计机器学习的自然语言处理算法的发展,以及信息检索研究的需求,特别是近年来深度学习和预训练语言模型的研究,研究人
员构建了多种大规模开源数据集,涵盖了网页、图书、论文、百科等多个领域。
在构建大语言模型时,数据的质量和多样性对于提高模型的性能至关重要。同时,为了推动大语言模型的研究和应用,学术界和工业界也
开放了多个针对大语言模型的开源数据集。

55
3.4. Pile
1
Pile 数据集 [72] 是一个用于大语言模型训练的多样性大规模文本语料库,由 22 个不同的高质量子集构成,包括现有的和新
构 建 的 , 许 多 来 自 学 术 或 专 业 领 域 。 这 些 子 集 包 括 Pile-CC ( CommonCrawl 子
集)、 Wikipedia 、 OpenWebText2 、 ArXiv 、 PubMed Central 等。

Pile 的特点是包含了大量多样化的文本,涵盖了不同领域和主题,从
而 提 高 了 训 练 数 据 集 的 多 样 性 和 丰 富 性 。 Pile 数 据 集 包 含
825GB 英文文本,其数据类型组成如图 3.12 所示,所占面
积大小表示数据在整个数据集中所占的规模。

56
3.4. ROOTS
2
ROOTS ( Responsible Open-science Open-collaboration Text Sources )数
据集 [102] 是 Big-Science 项目在训练具有 1 760 亿参数的 BLOOM 大语言模型时使用的数据集。该数
据集包含 46 种自然语言和 13 种编程语言,总计 59 种语言,整个数据集的大小约 1.6TB

57
3.4. ROOTS
2
ROOTS 数据主要来源于四个方面:公开语料、虚拟抓取、 GitHub 代码、网页数据。
• 在公开语料方面, BigScience Data Sourcing 工作组的目标是收集尽可能多的各种类型的数据,包括自然语言处理数据集和各类型文档
数据集合。

• 在虚拟抓取方面,采用 CommonCrawl 网页镜像,选取了 614 个域名,从这些域名下的网页中提取文本内容补充到数据集中,以提升语言


的多样性。

• 在 GitHub 代码方面,针对程序语言, ROOTS 数据集采用了与 AlphaCode[84] 相同的方法从 BigQuery 公开数据集中


选取文件长度在 100 到 20 万字符之间,字母符号占比在 15% 至 65% ,最大行数在 20 至 1000 行之间的代码。

• 在网页数据方面, ROOTS 数据集中包含了 OSCAR 21.09 版本,对应的是 CommonCrawl 2021 年 2 月的快照,占


整体 ROOTS 数据集规模的 38% 。

58
3.4. ROOTS
2
在数据准备完成后,还要进行清洗、过滤、去重及隐私信息删除等工作

59
3.4. RefinedWeb
3
RefinedWeb[64] 是由位于阿布扎比的技术创新研究院( Technology Innovation Institute ,
TII )在开发 Falcon 大语言模型时同步开源的大语言模型预训练集合,其主要由从 CommonCrawl 数据集
[128] 过滤的高质量数据组成。

60
RefinedWeb 中 CommonCrawl 数据集过滤流程和数据过滤百分比
3.4. RefinedWeb
3
文档准备阶段主要是进行 URL 过滤、文本提取和语言识别三个任务
过滤阶段主要包含重复去除、文档过滤、逐行纠正三个任务
冗余去除阶段包含模糊冗余去除、严格冗余去除及 URL 冗余去除三个任务
文献 [64] 还对三个阶段所产生的数据分别训练 10 亿和 30 亿模型,并使用零样本泛化能力对模型结果进行评测。发现
REFINEDWEB 的效果远好于 RW-RAW 和 RW-FILTERED 。这也在一定程度上说明高质量数据集对语言模
型具有重要的影响。

61
3.4. SlimPajama
4
SlimPajama[131] 是由 CerebrasAI 公司针对 RedPajama 进行清洗和去重后得到的开源数据集。原
始的 RedPajama 包含 1.21 万亿词元( 1.21T Token ),经过处理后的 SlimPajama 数据集包含
670 亿词元( 627B Token )。 SlimPajama 还开源了用于对数据集进行端到端预处理的脚本。
RedPajama 是由 TOGETHER 联合多家公司发起的开源大语言模型项目,试图严格按照 LLaMA 模型论文中
的方法构造大语言模型训练所需数据。虽然 RedPajama 的数据质量较好,但是 CerebrasAI 的研究人员发现
RedPajama 数据集还是存在以下两个问题:( 1 )一些语料中缺少数据文件;( 2 )数据集中包含大量重复数据。

62
3.4. SlimPajama
4
SlimPajama 的整体处理过程如下图所示。所有步骤都假定整个数据集无法全部装载到内存中,并分布在多个进程中进行处理。
使用 64 个 CPU ,大约花费 60 多个小时就可以完成 1.21 万亿词元处理。在整个处理过程中所需要内存峰值为
1.4TB 。

63
目录
Content
s

3.1 数据来源

3.2 数据处理

3.3 数据影响分析

3.4 开源数据集合

3.5 实践思考

64
3.5 实践思考

在大语言模型预训练过程中,数据准备和处理是工程量最大且花费人力最多的部分。当前模型训练采用的词元数量都很
大, LLaMA-2 训练使用了 2 万亿词元, Baichuan-2 训练使用了 2.6 万亿词元,对应的训练文件所需硬盘存
储空间近 10TB 。这些数据还是经过过滤的高质量数据,原始数据来源更是可以达到数百 TB 。
原始数据获取需要大量网络带宽和存储空间。对原始数据进行分析和处理,产生能够用于模型训练的高质量纯文本内容,则需要花费大量
的人力。这其中,看似简单的文本内容提取、质量判断、数据去重等都需要很多精细化处理。例如,大量的图书数据采用 PDF 格式
进行存储,虽然很多 PDF 文本并不是扫描件,但是 PDF 文件协议是按照展示排版进行设计的,从中提取纯文本内容并符合人类
阅读顺序,并不是直接使用 PyPDF2 、 Tika 等开源工具就可以高质量完成的。

65
3.5 实践思考

海量数据处理过程仅靠单服务器需要花费很长时间,因此需要使用多服务器并行处理,需要利用 Hadoop 、 Spark 等分布


式编程框架完成。此外,很多确定性算法的计算复杂度过高,即便使用大量服务器也没有降低总体计算量,仍然需要大量的时间。为了进
一步加速计算,还需要考虑使用概率性算法或概率性数据结构。
• 例如,判断一个 URL 是否与已有数据重复,如果可以接受一定程度上的假阳性,那么可以采用布隆过滤器( Bloom Filter ),其插入和测试操
作的时间复杂度都是 O(k) ,与待查找的集合中的 URL 数量无关。虽然其存在一定的假阳性概率,但是对于大语言模型数据准备这个问题,非常少量的
数据因误判而丢弃,并不会影响整体的训练过程。

66
本章小结
哎呀小小草
专业设计

大语言模型训练需要数万亿的各类型数据。如何构造海量“高质量”数据对于大语言模型的训练具有至关重要的作用。从此前的研究

2015
来看,预训练数据需要涵盖各种类型,包括网络数据、图书、论文、百科和社交媒体等,还需要覆盖尽可能多的领域、语言、文化和
视角,从而提高大语言模型的泛化能力和适应性。

本章介绍了常见的大语言模型训练数据的来源、处理方法、预训练数据对大语言模型影响的分析以及开源数据集合等。
哎呀小小草演示设计

67

You might also like