大语言模型数据清洗 · 论文笔记(二)

The Pile An 800GB Dataset of Diverse Text for Language Modeling

[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

Github EleutherAI/the-pile

  • 通过合成多个数据集,提升多样性,提升大规模语言模型的跨领域通用知识与下游任务泛化能力

稍微看偏了,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作为评测指标:

  1. 输入:负对数似然损失(Negative Log-Likelihood Loss)

    • 模型在测试数据上输出一个损失值 $L$,表示其预测能力。
    • 越低的 $L$ 表示模型越能准确预测下一个词。
  2. 转换为 BPB:(bits per UTF-8 encoded byte)

    • 使用公式将损失 $L$ 转换为每字节的比特数
    $$ BPB = \frac{L_T}{L_B}\log_2 e^L = \frac{L_T}{L_B}\times \frac{L}{\ln2} $$
    • 其中:
      • $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) $$

为了编码这一事件,我们选择霍夫曼编码这类最优编码,同时为了最小化平均码长:

  • 高频事件:分配短码
  • 低频事件:分配长码
  • 如果事件 $A$ 的概率 $p = 1/2$ ,则 $I(A) = -\log_2(1/2) = 1$ 比特。这表示需要用 1 位二进制码(如 01)编码。 - 如果事件 $B$ 的概率 $p = 1/8$ ,则 $I(B) = -\log_2(1/8) = 3$ 比特。需要用 3 位二进制码(如 000111 之一)编码。
$$ L = -\ln p $$

一般使用的是自然对数,同时其恰好表示了概率为$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}_{OWT2} - L^{GPT-2-Pile}_{OWT2} $$
  • $$ 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 提取网页正文,去除菜单、页脚等模板文本。
    • 对比了 TrafilaturaNewspaperGoose3DragNet,最终选择 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 视频字幕。
  • 处理方式
    • 三阶段构建:
      1. GPT-3 生成搜索关键词。
      2. 下载相关视频。
      3. 提取字幕并按时间对齐。
    • 多语言字幕按分钟段落对齐,并标注语言。

C.20 PhilPapers

  • 来源 :PhilPapers 数据库(哲学论文)。
  • 处理方式
    • 使用 OAI-MPH 协议抓取元数据。
    • 转换为纯文本。

C.21 NIH ExPorter

  • 来源 :NIH Grant Application 数据。
  • 处理方式
    • 合并 ExPORTER 和 CRISP 数据。
    • 按申请 ID 去重。
    • 删除空或太短的摘要。
    • 去除行政模板内容。

C.22 Enron Emails

  • 来源 :Enron 公司邮件存档。
  • 处理方式
    • 使用 mailparser 提取邮件正文作为文档。
Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计