[TOC]
The Pile: An 800GB Dataset of Diverse Text for Language Modeling
arXiv 2101.00027 The Pile: An 800GB Dataset of Diverse Text for Language Modeling
- 通过合成多个数据集,提升多样性,提升大规模语言模型的跨领域通用知识与下游任务泛化能力
稍微看偏了,paper更多的精华在如何去衡量数据集对模型性能的提升水平
和清洗关系不大
The Pile Datasets
- 由22个部分组成
- 由于不同数据集存在差异(维基百科质量更高),因此进行了加权处理
- 权重越高,被使用的概率越高(更可能被重复使用次数)
- 例如维基百科重复采用3次
部分表格:
Dataset Name | Raw Size (before sampling) | Weight (%) | Epochs | Effective Size | Mean Document Size |
---|---|---|---|---|---|
Pile-CC | 227.12 GiB | 18.11% | 1.0 | 227.12 GiB | 4.33 KiB |
PubMed Central | 90.27 GiB | 14.40% | 2.0 | 180.55 GiB | 30.55 KiB |
Books3 | 100.96 GiB | 12.07% | 1.5 | 151.44 GiB | 538.36 KiB |
OpenWebText2 | 62.77 GiB | 10.01% | 2.0 | 125.54 GiB | 3.85 KiB |
ArXiv | 56.21 GiB | 8.96% | 2.0 | 112.42 GiB | 46.61 KiB |
Github | 95.16 GiB | 7.59% | 1.0 | 95.16 GiB | 5.25 KiB |
FreeLaw | 51.15 GiB | 6.12% | 1.5 | 76.73 GiB | 15.06 KiB |
StackExchange | 32.20 GiB | 5.13% | 2.0 | 64.39 GiB | 2.16 KiB |
USPTO Backgrounds | 22.90 GiB | 3.65% | 2.0 | 45.81 GiB | 4.08 KiB |
PubMed Abstracts | 19.26 GiB | 3.07% | 2.0 | 38.53 GiB | 1.30 KiB |
Gutenberg (PG-19) | 10.88 GiB | 2.17% | 2.5 | 27.19 GiB | 398.73 KiB |
OpenSubtitles | 12.98 GiB | 1.55% | 1.5 | 19.47 GiB | 30.48 KiB |
Wikipedia (en) | 6.38 GiB | 1.53% | 3.0 | 19.13 GiB | 1.11 KiB |
Raw Size:采样前的大小
Weight :采样后的大小占比
Epochs:被采样次数
Effective Size:采样后的有效大小
Mean Document Size:平均文档大小
- 部分数据已被发布者清洗的很好,只进行了最小程度的预处理
Pile-CC
- 由CC数据集清洗得到
- 使用justText清洗raw HTTP responses including page HTML,相比于
.WET
的纯文本效果更好
Others
分类 | 来源 |
---|---|
学术文献 | ArXiv、PubMed Central、NIH ExPorter |
图书与出版物 | Books3、Project Gutenberg (PG-19)、BookCorpus2 |
代码与技术文档 | GitHub、StackExchange |
法律与政府文件 | FreeLaw、USPTO Backgrounds |
多语言与翻译文本 | EuroParl、OpenSubtitles |
社交与对话数据 | HackerNews、Ubuntu IRC、Enron Emails |
特殊领域数据 | DeepMind Mathematics、PhilPapers(哲学)、YouTube字幕 |
网络爬取内容 | Pile-CC(新构建的Clean Common Crawl子集) |
Benchmarking Language Models with the Pile
-
可以训练数据,同时因为涉及领域广泛,也可以基准测试
-
划分为训练集、验证集、测试集($0.1%$测试集+验证集,虽然比例很低但是仍各自超过1G)
-
尽管去重,但是肯定还是存在重复
paper中首选了BPB作为评测指标:
-
输入:负对数似然损失(Negative Log-Likelihood Loss)
- 模型在测试数据上输出一个损失值 $L$,表示其预测能力。
- 越低的 $L$ 表示模型越能准确预测下一个词。
-
转换为 BPB:(bits per UTF-8 encoded byte)
- 使用公式将损失 $L$ 转换为每字节的比特数
- 其中:
- $L_T$:数据集以 token 为单位的长度
- $L_B$:数据集以 UTF-8 编码字节为单位的长度
和困惑度有一点相似,用于衡量模型对数据的压缩效率或预测能力
与Bits per Character (bpc)不同的一点,字符不是一个很好的定义(Unicode 中字符的界定可能复杂(例如组合字符、emoji 等),导致统计不一致。)
同时bpb不受到分词的影响,UTF-8的字节定义是准确的,适合基于不同模型、分词进行比较
指标 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
Bits per Byte | 分词无关、字节标准明确 | 对非字节级任务不直观 | 跨模型比较、数据压缩评估 |
Bits per Char | 更贴近人类理解 | Unicode 字符定义模糊 | 字符级生成任务(需统一字符定义) |
Perplexity | 直接反映预测不确定性 | 依赖分词、数值范围不稳定 | 单一模型调参、生成质量评估 |
更加完整的解释
- 自信息:指的是当我们接收到一个消息时所获得的信息量
在信息论中,自信息衡量一个事件携带的信息量,由概率$p$决定。
$$ I(p) = -\log_2(p) $$为了编码这一事件,我们选择霍夫曼编码这类最优编码,同时为了最小化平均码长:
- 高频事件:分配短码
- 低频事件:分配长码
$$ L = -\ln p $$
- 如果事件 $A$ 的概率 $p = 1/2$ ,则 $I(A) = -\log_2(1/2) = 1$ 比特。这表示需要用 1 位二进制码(如
0
或1
)编码。 - 如果事件 $B$ 的概率 $p = 1/8$ ,则 $I(B) = -\log_2(1/8) = 3$ 比特。需要用 3 位二进制码(如000
到111
之一)编码。
一般使用的是自然对数,同时其恰好表示了概率为$p$的事件的信息量(单位为纳特(底数取e))
$$ Bits = I(p) = -\log_2(p) =-\frac{\ln p}{\ln 2} =\frac{L}{\ln 2} $$同时,模型的损失是基于token计算的,即每个token的预测损失
所以这里的单位是:Bits per token
$$ bpb = \frac{L_T}{L_B}\times \frac{L}{\ln2} $$这样就得到了:Bits per Byte,消除了分词器、语种编码等其他影响,可以直接衡量模型输出的质量
评测
然后paper实验验证了一下用训练集训练过的模型会更nb
- 通过分析哪些Pile子数据集的表现最差,就知道模型的训练数据分布在这块比较浅,就可以使用pile这块数据集进行补充
为了探索哪些数据集是模型表现较差的,显然不能直接使用困惑度进行比较(数据集熵值不一样)
- 结构化的数据(熵值低)困惑度天然会比非结构化的更低
困惑度可以用于衡量一个数据集是否更接近另一个数据集
- 如CCNet,在维基百科内训练一个模型,计算其他数据集的困惑度
所以如果要比较的话,可以通过模型的损失值,拟合得越好,说明训练数据中包含了这部分,否则就是缺失
如果钱多的话,当然是直接把所有数据集用模型train一下,看看损失值,与没有train过的原模型(GPT-3),在测试集上比一下Loss
paper这里钱不够,改用了GPT2做了一个trick:
-
首先需要知道GPT3比GPT2强多少
- 参考数据集:OWT2(与GPT训练数据高度相似的一个数据集)
- 用原生的GPT3和在Pile训练的GPT2进行比较
- 得到一个基准差值
- $$ L^{GPT-3}_{TargetSet} - L^{GPT-2-Pile}_{TargetSet} $$
-
两个值作差:大概能衡量出在目标数据集上的提升水平
- Books3等数据集与GPT-3训练数据高度相似,因此不会有过多的提升(0)
清洗
看不动了,以后再说,整理一下清洗的东西:
C.1 Pile-CC(Clean Common Crawl)
- 来源 :Common Crawl 的 WARC 文件(2013–2020 年)。
- 提取工具
- 使用
jusText
提取网页正文,去除菜单、页脚等模板文本。 - 对比了
Trafilatura
、Newspaper
、Goose3
、DragNet
,最终选择jusText
。
- 使用
- 语言过滤
- 使用
pycld2
检测网页语言,仅保留英文内容。
- 使用
- 质量控制
- 使用 FastText 分类器对 OpenWebText2 和 Common Crawl 进行分类,过滤低质量页面。
- 参数 α = 3,使用 Pareto 分布阈值进行过滤。
- 去重
- 使用 MinHash LSH 算法在内存中进行文档级去重。
- 其他说明
- 未使用 WET 文件,因其包含大量模板文本。
- 与 Brown et al. (2020) 类似,但只处理了部分 WARC 文件。
C.2 PubMed Central(PMC)
- 来源 :美国国家生物技术信息中心(NCBI)提供。
- 格式转换
- 使用 Pandoc 将 JATS 格式转为 Markdown。
- 清理步骤
- 删除以
:::
开头的行(Pandoc 添加的 HTML 类标签)。
- 删除以
C.3 Books3
- 来源 :未具体说明,但为高质量书籍数据集。
- 处理细节 :无额外处理。
C.4 OpenWebText2(OWT2)
- 来源 :Reddit 提交链接。
- 处理步骤
- 提取 URL 及其元数据。
- 去除得分低于 3 的链接。
- 使用 Newspaper 抓取网页内容。
- 去重
- 使用 DataSketch 库进行文档级 MinHash LSH 去重。
C.5 ArXiv
- 来源 :arXiv.org 学术论文。
- 处理步骤
- 转换为纯文本。
- 去重
- 使用与验证/测试集对比的方法去重。
C.6 GitHub
- 来源 :GitHub 上的开源项目。
- 获取方式
- 收集星标数 > 100 的仓库。
- 提取内容
- 提取可用于语言建模的文本(代码、README、注释等)。
- 限制条件
- 单个仓库克隆和提取时间不超过 300 秒。
- 文件大小上限为 100KB(避免大文件中的重复自动生成内容)。
C.7 FreeLaw
- 来源 :法律数据库。
- 处理方式
- 未提供详细清洗步骤。
- 数据来自已有结构化格式,可能已做过预处理。
C.8 Stack Exchange
- 来源 :Stack Overflow 等问答网站。
- 处理方式
- 提取问题、回答、评论。
- 按照层级结构组织。
- 保留
/me
类型的动作描述,删除系统消息。
C.9 USPTO Backgrounds
- 来源 :美国专利商标局(USPTO)公开数据。
- 处理方式
- 处理 XML 格式的专利文件。
- 提取“Background”部分内容。
- 处理不同格式变化(APS → XML)。
C.10 PubMed Abstracts
- 来源 :PubMed 数据库摘要。
- 处理方式
- 排除缺失或格式错误的条目。
- 合并标题和摘要,去除版权信息。
- 排除已在 PMC 中出现的内容。
C.11 Project Gutenberg(PG-19)
- 来源 :古登堡计划电子书。
- 处理方式 :无额外处理。
C.12 OpenSubtitles
- 来源 :Tiedemann (2016) 提供的英文字幕数据。
- 处理方式
- 提取 XML 文件中的字幕文本。
- 忽略元数据。
C.13 Wikipedia (en)
- 来源 :Wikipedia English dataset from TensorFlow Datasets。
- 处理方式
- 使用
wikipedia/20200301.en
数据集。 - 在每篇文章开头添加标题。
- 使用
C.14 DeepMind Mathematics(DM Math)
- 来源 :DeepMind 数学数据集。
- 处理方式
- 包含 Easy、Medium、Hard 难度。
- 将每个题目拆分为 8 KiB 块。
C.15 Ubuntu IRC
- 来源 :Ubuntu IRC 日志(2004–2020)。
- 处理方式
- 删除系统消息(如加入、离开频道)。
- 保留
/me
动作。 - 去除时间戳。
- 每周日志合并为一个文档,按日期分隔。
C.16 BookCorpus2
- 来源 :基于 Kobayashi (2018) 方法重新构建。
- 处理方式
- 收集更多书籍(共 17,868 本,原版为 11,038 本)。
- 使用修改后的 EPUB 解析器提取文本。
C.17 EuroParl
- 来源 :欧洲议会会议记录。
- 处理方式
- 已经是干净文本,无需额外清洗。
C.18 HackerNews
- 来源 :Hacker News 提交链接。
- 处理方式
- 提取文章标题、URL、子标题、作者。
- 按照评论层级组织内容。
- 使用 html2text 提取 HTML 文本。
C.19 YouTube Subtitles
- 来源 :YouTube 视频字幕。
- 处理方式
- 三阶段构建:
- GPT-3 生成搜索关键词。
- 下载相关视频。
- 提取字幕并按时间对齐。
- 多语言字幕按分钟段落对齐,并标注语言。
- 三阶段构建:
C.20 PhilPapers
- 来源 :PhilPapers 数据库(哲学论文)。
- 处理方式
- 使用 OAI-MPH 协议抓取元数据。
- 转换为纯文本。
C.21 NIH ExPorter
- 来源 :NIH Grant Application 数据。
- 处理方式
- 合并 ExPORTER 和 CRISP 数据。
- 按申请 ID 去重。
- 删除空或太短的摘要。
- 去除行政模板内容。
C.22 Enron Emails
- 来源 :Enron 公司邮件存档。
- 处理方式
- 使用
mailparser
提取邮件正文作为文档。
- 使用