构建更优秀的大型语言模型 (LLMs) 的竞赛,通常被视为一场对更多数据的争夺战。这主要归因于“缩放定律 (scaling laws) ”,该定律表明模型的性能与训练语料库的规模及模型参数直接相关。然而,该领域的最新进展为这一规则增加了一个至关重要的补充: 这不仅仅关乎数据的数量,同样重要——甚至更重要的是——数据的质量

想象一下,你试图通过阅读街上捡到的每张纸片来学习一门新语言——从经典小说到丢弃的糖纸,再到诈骗传单。你确实能学会这门语言,但你也会学到很多噪音。这就是原始网络数据的现状。为了训练像 Llama 3 或 GPT-4 这样的最先进模型,工程师必须过滤数万亿个 Token 的网络数据,将有教育意义的内容与“垃圾”分离开来。

今天,我们将深入探讨 Upstage AI 研究人员撰写的一篇引人入胜的研究论文,题为 “Rethinking KenLM” 。 他们针对这一过滤问题提出了一个巧妙且高效的解决方案。与其仅仅寻找好数据,他们专门训练了一个模型来识别数据,然后让两者相互博弈。

瓶颈: 质量与效率

在理解解决方案之前,我们必须先理解问题所在。过滤互联网规模的数据集是一场后勤噩梦。

现代过滤管道通常使用繁重且依赖 GPU 的方法。例如,你可能会使用基于 BERT 的分类器或微调一个小型的 LLM 来对文档进行评分。虽然这些方法很有效,但计算成本高昂。当处理 PB 级的文本时,仅仅为了数据清洗而启动 GPU 集群往往在成本上是令人望而却步的。

KenLM 登场

为了解决效率问题,行业标准一直是 KenLM 。 KenLM 是一个实现 n-gram 语言模型的库。

  • 什么是 n-gram 模型? 它是一种统计模型,根据前面的 \(n-1\) 个单词预测序列中的下一个单词。如果 \(n=3\) (trigram,三元组) ,且前面的单词是 “the cat”,模型会查看接下来出现 “sat”、“ate” 或 “ran” 的概率。
  • 为什么要使用它? 它非常轻量级,并且完全在 CPU 上运行。它所需的计算能力仅为神经网络的一小部分。

主流方法 (被 CCNet 和 RefinedWeb 等大型数据集使用) 是在高质量数据 (通常是 Wikipedia )上训练一个 KenLM。在过滤新的网络数据时,利用该模型计算数据的 困惑度 (Perplexity, PPL)

  • 低困惑度: 文本看起来像 Wikipedia (可能是高质量的) 。
  • 高困惑度: 文本看起来奇怪或陌生 (可能是低质量的) 。

标准方法的缺陷

研究人员指出了这种“仅限 Wikipedia”方法的关键弱点。标准的 KenLM 过滤是单向的 。 它显式地学习了“好”文本是什么样子的,但并没有显式地学习“坏”文本是什么样子的。

结果,它会出现假阳性 (false positives) 。那些语法正确但在语义上毫无价值的文本——比如写得很好的垃圾邮件或礼貌的广告——可能仅仅因为使用了标准的句子结构而获得较低的困惑度分数。模型会认为: “嗯,语法没问题,所以这一定是好内容,”却未能意识到内容本身并不适合用于训练 LLM。

核心方法: 好、坏与集成

作者提出了一种“好与坏 (Good and Bad) ”的集成方法。与其依赖单一视角,他们使用两个截然不同的模型来评估文本。

1. Good KenLM (好模型)

首先,他们升级了标准的“好”模型。虽然 Wikipedia 很棒,但它并不能涵盖所有内容。科学论文和教科书可以说是推理和逻辑更好的来源。

作者在以下组合数据上训练了他们的 Good KenLM :

  • S2ORC: 一个包含科学和学术论文的庞大语料库。
  • Textbooks: 具体来说,是 “Textbooks-are-all-you-need-lite” 数据集。

该模型的目标是为高质量、推理严密的文本分配较低的困惑度分数。

2. Bad KenLM (坏模型)

这是本文的新颖贡献。研究人员提出疑问: 为什么不专门在我们想要剔除的数据上训练一个模型呢?

他们创建了一个 Bad KenLM , 训练数据为明显的“噪音”数据集:

  • Spam (垃圾邮件) : 邮件和自动生成的消息。
  • SNS (社交网络服务) : 来自 Twitter (现为 X) 等平台的非正式文本,包含标签、俚语和碎片化的句子。
  • Hate Speech/Toxic Comments (仇恨言论/有毒评论) : (不过,正如我们在实验中看到的,这部分结果喜忧参半) 。

该模型的目标是为垃圾内容分配困惑度分数。如果一份文档从 Bad KenLM 那里得到了低分,意味着“我认得这个!这看起来就像我受训时见过的垃圾邮件。”

3. 集成策略

现在我们为每个文档得到两个分数:

  1. \(P_{good}\): 这有多像教科书? (越低越好)
  2. \(P_{bad}\): 这有多像垃圾邮件? (越低越差)

你不能简单地将这两个数字相加,因为这两个模型是在不同的数据分布上训练的。对于一个模型来说的“低”分,在数值上可能与另一个模型的“低”分不同。

为了解决这个问题,作者使用了 Z-score 标准化 。 他们计算两个模型的均值 (\(\mu\)) 和标准差 (\(\sigma\)) 来归一化分数。

最终的 集成得分 (Ensembled Score) 使用以下公式计算:

结合 Good 和 Bad KenLM 分数的集成公式。

让我们拆解一下这个数学公式 (论文中的公式 1) :

  • 第 1 项 (Good): 我们取归一化的 Good PPL。如果文本质量高,这个 Z-score 会很低 (负数) 。
  • 第 2 项 (Bad): 我们取归一化的 Bad PPL。如果文本质量高,它对 Bad 模型来说应该看起来很陌生,从而产生高 (正数) 的 Z-score。
  • 减法运算: 公式减去 Bad 分数。
  • 如果文本是 高质量的 : Good 分数低 (例如 -2) ,Bad 分数高 (例如 +2) 。
  • 结果: \((-2) - (+2) = -4\)。 (非常低的分数)
  • 如果文本是 垃圾内容 : Good 分数可能一般 (例如 0) ,因为垃圾内容可能语法通顺,但 Bad 分数低 (例如 -2) 。
  • 结果: \((0) - (-2) = +2\)。 (高分数)

参数 \(\alpha\) (alpha) 允许研究人员权衡 Good 模型与 Bad 模型的重要性。

通过结合这些视角,该指标将高质量数据推向评分体系的底部,将噪音数据推向顶部,创造了比任何单一模型都更清晰的分离效果。

实验与结果

为了证明这一方法的有效性,作者使用了一个巨大的网络数据转储 (来自 Fineweb-edu 的 CC-MAIN-2024-10) ,包含 2.11 亿个样本。他们使用“教育评分 (educational scores) ” (由高质量但计算昂贵的分类器生成) 作为地面真值 (ground truth) 。如果一段文本具有较高的教育评分,它就被视为“真阳性”。

RQ1: 它能击败基线模型吗?

结果令人印象深刻。他们将自己的方法与标准的 Wikipedia KenLM 甚至 FastText (一种流行的基于分类器的过滤方法) 进行了比较。

表 1 比较不同模型的性能指标。

查看 表 1 :

  • Wiki KenLM (行业标准) : 实现了 0.5530 的 Recall@30。这意味着在过滤结果的前 30% 中,它错过了近一半的高质量数据。
  • Good KenLM: 仅仅将训练数据从 Wikipedia 更改为教科书/科学论文,性能就提高到了 0.7059 。 这证实了 Wikipedia 并不是好数据的“唯一标准”。
  • Ens(Good, Bad): 提出的集成方法达到了 0.8190 的 Recall@30。

这里最引人注目的结果是 Ensemble (Good, Bad) 击败了 FastText 。 FastText 是一种监督分类器,通常比 n-gram 模型表现更好,但更重一些。在 CPU 上用简单的 n-gram 模型击败 FastText 是效率上的重大胜利。

RQ2: 什么构成了“坏”数据?

你可能会认为在最糟糕的文本 (仇恨言论、有毒评论) 上训练“坏”模型会产生最好的结果。然而,实验显示了不同的情况。

表 2 展示不同数据源对 Bad KenLM 的影响。

表 2 揭示了一个有趣的见解:

  • 有毒数据 (Toxic data) 表现不佳。 与仅使用垃圾邮件或 Twitter 数据相比,添加有毒数据实际上损害了性能。
  • 为什么? 有毒数据集通常包含极端的脏话或非常特定类型的仇恨言论。这种分布是一个离群值 (outlier) 。它与标准网络文本差异巨大,导致模型学习到了一个非常狭窄的“坏”定义。
  • Twitter 和垃圾邮件是王道。 社交媒体和垃圾邮件代表了互联网的普遍噪音——非正式语法、广告、碎片语和无关紧要的闲聊。这正是污染网络语料库的那种“平均”噪音。

RQ3: 平衡的艺术 (\(\alpha\))

我们应该多大程度上信任 Good 模型与 Bad 模型?这由公式中的 \(\alpha\) 参数决定。

图 1 展示 alpha 对性能的影响。

图 1 展示了性能曲线。

  • 如果 \(\alpha\) 太低 (太过信任 Bad 模型) ,性能会下降。Bad 模型可能过于激进。
  • 如果 \(\alpha\) 太高 (太过信任 Good 模型) ,你就会失去集成的优势。
  • 最佳平衡点: 性能在 \(\alpha = 0.7\) 左右达到峰值。这表明“Good”信号是主要驱动力,但“Bad”信号提供了关键的 30% 修正,用于过滤掉棘手的情况。

RQ4: 效率如何?

使用 KenLM 而非神经网络的主要理由是速度和成本。运行两个模型会破坏这一优势吗?

表 3 比较计算开销和成本。

表 3 细分了成本。

  • 时间: 集成方法大约是单个模型耗时的 1.7 倍 (3,928秒 vs 2,234秒) 。
  • 成本: 处理这个数据转储使用集成方法的成本为 \(2.50** , 而单个模型为 **\)1.42

虽然成本实际上翻了一番,但仍然微不足道 。 我们谈论的是以一杯咖啡的价格处理数亿份文档。与在如此海量的数据上运行基于 GPU 的分类器所需的数千美元相比,集成方法依然极具成本效益。

RQ5: 它实际上捕捉到了什么?

统计数据固然好,但眼见为实。Good 模型遗漏了哪些被集成模型捕捉到的文本?

图 2 可视化被集成方法过滤掉的示例。

图 2 提供了定性示例。

  • “礼貌”的垃圾邮件: 看看关于“在线轮盘赌”的第一个例子。句子结构很好: “Online roulette for real money Hungary withdrawals can take up to 3 days…”
  • 仅在“好”数据上训练的模型可能会看到语法并认为: “这看起来是个合法的句子。”
  • 在垃圾邮件上训练的 Bad KenLM 识别出了词汇 (“roulette”, “withdrawals”, “real money”) 和劝诱的语气,立即将其标记出来。
  • 沟通风格: 第二个例子代表了论坛上常见的会话填充词。它没有教育意义,但在语法上也没有“错”到足以让标准模型拒绝。然而,受过 Twitter 训练的 Bad KenLM 确切地知道这是什么样子。

结论与启示

论文 “Rethinking KenLM” 提供了一个令人信服的提醒: 在机器学习中,定义负空间 (negative space) 往往与定义正空间同样重要。

通过利用社交媒体和垃圾邮件文件夹中的噪音显式地对“坏”数据进行建模,研究人员在 CPU 硬件上实现了最先进的过滤性能。这使得高质量数据的策展变得更加普及。你不需要庞大的 H100 GPU 集群来清洗你的数据集;你只需要一个由轻量级模型组成的智能集成。

给学生的核心启示:

  1. 不要忽视 CPU: 在大型 GPU 时代,像 KenLM (n-grams) 这样的高效 CPU 算法在数据基础设施中仍发挥着至关重要的作用。
  2. 显式地对负面内容建模: 如果你想让模型拒绝某些东西,请训练它去识别那个特定的东西。仅仅依靠“它看起来不像好东西”往往是不够的。
  3. 数据选择很重要: 训练数据的选择 (Twitter vs. Toxic) 从根本上改变了模型的行为。理解数据的分布比仅仅囤积更多数据更重要。

随着我们继续扩展 LLM,像这样在最大化质量的同时最小化计算量的技术,对于下一代 AI 开发将是必不可少的。