立即下载 DOCA,开启高性能AI 网络之旅,实现“一站式” 编程
数据科学

掌握 LLM 技术:数据预处理

大语言模型(LLMs) 的出现标志着各行业利用人工智能(AI)增强运营和服务的方式发生了重大转变。通过自动化日常任务和简化流程,LLMs 可以释放人力资源,用于更具战略性的工作,从而提高整体效率和生产力。

主要由于 LLM 对高质量数据的依赖性, 训练和定制 LLM 以实现高准确度充满挑战。数据质量差和数据量不足会显著降低模型准确性,因此数据集准备成为 AI 开发者的关键任务。

数据集通常包含重复文档、个人身份信息(PII)和格式问题。一些数据集甚至包含对用户构成风险的有毒或有害信息。在未进行适当处理的情况下基于这些数据集训练模型会增加训练时间并降低模型质量。另一个重大挑战是数据稀缺。模型构建者公开可用的数据不足以用于训练,这促使许多模型构建者转而求助于第三方供应商,或使用高级语言模型生成合成数据。

在本文中,我们将介绍通过提高训练数据质量来优化 LLM 性能的数据处理技术和最佳实践。我们将介绍 NVIDIA NeMo Curator 及其如何应对这些挑战,演示 LLM 的真实数据处理用例。

文本处理流程和最佳实践 

处理大型数据的预处理并非易事,尤其是当数据集主要由网页抓取数据组成时,这些数据可能包含大量格式不当、质量低下的数据。

Text processing pipeline built with NeMo Curator showing stages from data download to blending/shuffling, including relevant NVIDIA NIM microservices
图 1、可以使用 NeMo Curator 构建的文本处理流程

图 1 显示了全面的文本处理工作流,其中包含以下高级步骤:

  1. 从源中下载数据集,并将其提取为所需格式,例如 JSONL。
  2. 应用初步文本清理,例如 Unicode 固定和语言分离。
  3. 根据特定质量标准,对数据集应用标准和自定义定义的过滤器。
  4. 执行不同级别的重复数据删除(精确、模糊和语义)。
  5. 有选择地应用高级质量过滤,包括基于模型的质量过滤、PII 红票、分布式数据分类和任务去污染。
  6. 融合来自多个来源的精选数据集,形成统一的数据集。

以下部分将更深入地介绍每个阶段。

下载并提取文本 

数据管理的第一步涉及从各种常见来源(例如 Common Crawl)、专业集合(例如 arXiv 和 PubMed)或私有 on-prime 数据集下载和准备数据集,每个数据集可能包含 TB 级的数据。

这一关键阶段需要仔细考虑存储格式和提取方法,因为公开托管的数据集通常采用压缩格式(例如.warc.gz、tar.gz 或 zip 文件),这些格式需要转换为更易于管理的格式(例如.jsonl 或.parquet)以进行进一步处理。

初步文本清理 

Unicode 修复和语言识别是数据管护流程中的关键早期步骤,尤其是在处理大规模网络抓取文本语料库时。这一阶段解决了两个基本挑战:Unicode 字符解码不当,以及数据集中存在多种语言。

Unicode 格式问题通常源于错误的字符编码或多个编码/解码周期。常见问题包括特殊字符显示为乱码序列 (例如,“café”显示为“café”)。语言识别和分离同样重要,尤其是对于那些对整理单语数据集感兴趣的策展人而言。此外,一些数据管护步骤 (例如启发式过滤和基于模型的质量分类器) 因语言而异。

这一初步预处理步骤可确保以识别出的语言编写清晰、正确编码的文本,从而为所有后续的数据整理步骤奠定基础。

启发式过滤 

启发式过滤采用基于规则的指标和统计措施来识别和移除低质量内容。

该流程通常评估多个质量维度,例如文档长度、重复模式、标点分布和文本的结构完整性。常见的启发式过滤器包括:

  1. 字数过滤器: 过滤掉过于简短而无意义或长度可疑的代码段。
  2. 模板字符串过滤器: 识别并删除包含过多模板内容的文本。
  3. N-gram 重复过滤器(N-gram repetition filter): 识别不同长度的重复短语,并删除过多重复的文档,这些文档可能表明内容质量低下或人为生成。

对于启发式过滤,最佳实践是实施级联方法。这种方法可以实现更细致入微的质量控制,同时保持过滤过程的透明度。为提高性能,可以实施批量过滤,以同时处理多个文档,从而显著缩短处理大规模数据集时的计算时间。

重复数据删除 

重复数据删除对于提高模型训练效率、降低计算成本和确保数据多样性至关重要。它有助于防止模型过拟合重复内容,并改进泛化。该过程可通过三种主要方法实现:精确、模糊和语义重复数据删除。这些构成了处理大规模数据集中不同类型重复的全面策略,从相同的副本到概念上相似的内容。

精确的重复数据删除

精确的重复数据删除专注于识别和删除完全相同的文档。该方法为每个文档生成哈希签名,并按哈希将文档分组为桶,每个桶仅保留一个文档。虽然这种方法在计算方面高效、快速且可靠,但仅限于检测完全匹配的内容,并且可能会遗漏具有细微变化的语义等效文档。

模糊重复数据删除

模糊重复数据删除使用 MinHash 签名和局部性敏感散列(LSH)来识别类似文档,以解决近乎重复的内容。

此过程包括以下步骤:

  1. 计算文档的 MinHash 签名。
  2. 使用 LSH 将类似文档分组到不同的存储桶中。一个文档可能属于一个或多个存储桶。
  3. 计算同一桶内文档之间的 Jaccard 相似性(Compute Jaccard similarity between documents within the same buckets).
  4. 根据 Jaccard 相似性,将相似性矩阵转换为图,并识别图中的连通分量。
  5. 连接组件中的文档被视为模糊副本。
  6. 从数据集中删除已识别的重复项。

此方法对于识别略有修改的内容、检测文档部分重叠以及查找格式不同但内容相似的文档特别有用。它在计算效率和重复检测能力之间取得了平衡。

语义重复数据删除

语义重复数据删除代表了最为复杂的方法,它采用先进的嵌入模型来捕获语义含义,并结合聚类技术对语义相似的内容进行分组。研究表明,语义重复数据删除可以有效减少数据集大小,同时保持或提高模型性能。它对于识别转述内容、相同材料的翻译版本以及概念上相同的信息尤其重要。

语义重复数据删除包含以下步骤:

  1. 每个数据点都使用预训练模型嵌入。
  2. 使用 k-means 聚类将嵌入聚类为 k 个聚类。
  3. 在每个聚类内,都会计算成对余弦相似性。
  4. 余弦相似度超过阈值的数据对被视为语义重复数据。
  5. 从每个集群内的语义重复项组中,保留一个代表性数据点,其余数据点将被删除。

基于模型的质量过滤 

基于模型的质量过滤利用各种类型的模型来评估和过滤基于质量指标的内容。模型类型的选择对过滤的有效性和所需的计算资源有着显著的影响,因此为特定用例选择合适的模型至关重要。

可用于质量过滤的不同类型的模型包括:

  1. 基于 N-gram 的分类器: 最简单的方法是使用基于 n-gram 的词袋分类器,例如 fastText,该分类器在效率和实用性方面表现出色,因为它们只需要最少的训练数据(100,000 到 1,000,000 个样本)。
  2. BERT 风格的分类器: BERT 风格的分类器代表一种中间方法,通过基于 Transformer 的架构提供更好的质量评估。它们可以捕捉更复杂的语言模式和上下文关系,从而有效地进行质量评估。
  3. LLMs: LLMs 提供最复杂的质量评估能力,利用其丰富的知识来评估文本质量。虽然它们提供对内容质量的更好的理解,但具有重大的计算要求,因此最适合小规模应用,例如微调数据集。
  4. 奖励模型: 奖励模型是专为评估对话式数据质量而设计的专门类别。这些模型可以同时评估多个质量维度,但与 LLMs 类似,它们具有重要的计算要求。

选择优质过滤模型时应考虑数据集规模和可用计算资源。对于大规模预训练数据集,将用于初始过滤的轻量级模型与用于最终质量评估的高级模型相结合,通常可实现效率和效果的最佳平衡。对于质量至关重要的小型专业数据集,使用像 LLMs 或 reward models 等模型变得更加可行和有益。

PII 编辑

个人身份信息(PII)编辑涉及识别和从数据集中删除敏感信息,以保护个人隐私并确保遵守数据保护法规。

在处理包含个人信息的数据集时,这一过程尤为重要,其中包括姓名和社会安全号码等直接标识符,以及与其他数据结合使用时可用于识别个人身份的间接标识符。

现代 PII 编辑采用各种技术来保护敏感信息,包括:

  1. 将敏感信息替换为符号(例如,XXX-XX-1234 表示美国社会安全号码),同时保持数据格式和结构。
  2. 将敏感数据替换为保持参考完整性的非敏感等效数据,以用于分析目的。
  3. 在下游任务不需要敏感信息时消除敏感信息。

总体而言,PII 编辑有助于维护数据隐私、遵守法规并与用户建立信任,同时保留其数据集用于训练和分析目的的实用性。

分布式数据分类

数据分类在数据管护中发挥着至关重要的作用。此过程有助于根据领域和质量等各种属性对数据进行组织和分类,确保数据得到良好平衡并代表不同的知识领域。

域分类通过根据主题识别和分类内容,帮助 LLMs 了解输入文本的上下文和特定领域。域信息可用作宝贵的辅助数据,使开发者能够构建更多样化的训练数据集,同时识别和过滤潜在的有害或不需要的内容。例如,使用 AEGIS 安全模型(将内容分为 13 个关键风险类别),开发者可以有效地识别和过滤训练数据中的有害内容。

在处理通常包含数十亿文档的预训练语料库时,运行分类推理会变得计算密集且耗时。因此,分布式数据分类对于克服这些挑战至关重要。这是通过在多个 GPU 节点上对数据集进行分块来实现的,以便以分布式方式加速分类任务。

任务去污

训练完成后,通常会根据 LLMs 在包含未见测试数据的下游任务上的性能对其进行评估。下游任务去污染这一步骤可解决测试数据向训练数据集的潜在泄露问题,该问题可能会导致产生错误的评估结果。去污过程通常涉及几个关键步骤:

  1. 识别潜在的下游任务及其测试集。
  2. 将测试数据转换为 n-gram 表示。
  3. 在训练语料库中搜索匹配的 n-gram。
  4. 删除或修改受污染的部分,同时保持文档的连贯性。

这种系统化方法有助于确保去污的有效性,同时最大限度地减少对数据质量的意外影响,从而有助于更可靠的模型评估和开发。

混合和混洗 

数据混合和混洗是数据管护工作流中的最后一步,可组合多个精心策划的数据集,同时确保适当的随机化,以优化模型训练。这一过程对于创建多样化、平衡良好的训练数据集至关重要,这些数据集可实现更好的模型泛化和性能。数据混合涉及将多个来源的数据合并到统一的数据集中,从而创建更全面、更多样化的训练数据。混合过程使用两种方法实施:

  1. 在线:训练期间进行数据组合
  2. 离线:在训练之前合并数据集

每种方法都具有独特的优势,这取决于训练过程的具体要求以及最终数据集的预期用途。

合成数据生成 

了解了预处理阶段的复杂性后,我们现在在大型语言模型(LLM)开发领域面临着一个巨大的挑战:数据稀缺。大型语言模型对大量训练数据集(即使是用于微调目的)的需求永无止境,往往会超过特定领域或特定语言数据的可用性。为此, 合成数据生成(SDG) 是一种功能强大的方法,可利用大型语言模型创建模拟真实数据特征的人工数据集,同时保护隐私并确保数据效用。此流程使用外部大型语言模型服务生成高质量、多样化且与上下文相关的数据,这些数据可用于预训练、微调或评估其他模型。

SDG 通过支持适应低资源语言、支持领域专门化和促进跨模型的知识提炼来增强 LLM 的能力,使其成为扩展模型功能的通用工具。在真实数据稀缺、敏感或难以获取的情况下,SDG 变得尤为重要。

Diagram of general SDG pipeline built with NeMo Curator showing stages from domain specific seed data through Generate, Critique, and Filter stages, ultimately generating high quality synthetic data.
图 2. 采用 NeMo Curator 的通用合成数据生成架构。

合成数据管道包含三个关键阶段:生成、批判和过滤。

  1. 生成: 使用提示工程为各种任务生成合成数据。以 Nemotron-4 为例,SDG 可用于为五种不同类型的任务生成训练数据:开放式问答(open-ended QA)、封闭式问答(closed-ended QA)、写作作业(writing assignments)、编码和数学问题。
  2. 批判: 使用 LLM 反射、LLM 作为法官、奖励模型推理和其他代理等方法来评估合成数据的质量。评估结果可用作对 SDG LLM 的反馈,以生成更好的结果或过滤低质量数据。其中一个典型示例是 Nemotron-4-340B 奖励 NIM ,它通过五个关键属性评估数据质量:Helpfulness、Correctness、Coherence、Complexity 和 Verbosity。通过为这些属性分数设置适当的阈值,过滤过程可确保仅保留高质量的合成数据,同时过滤低质量或不当内容。
  3. 过滤器: 通过重复数据删除和个人身份信息编辑等步骤进一步提高 SDG 数据质量。

但是请注意,SDG 并非适用于所有情况。来自外部语言模型的大规模语言模型的幻觉可能会引入不可靠的信息,从而损害数据完整性。此外,生成的数据分布可能与目标分布不一致,可能会导致实际性能不佳。在这种情况下,使用 SDG 实际上会损害系统的有效性,而不是改善系统的有效性。

用于构建主权 LLM 的数据处理 

如前所述,开源的大型语言模型在英语方面表现出色,但难以与其他语言 (尤其是东南亚的语言) 交流。这主要是由于缺乏这些语言的训练数据、对当地文化的理解有限,以及 token 不足以捕捉独特的语言结构和表达。

为了充分满足客户需求,非英语国家的企业必须超越通用模型,并对其进行定制,以捕捉当地语言的细微差别,确保无缝且有影响力的客户体验。例如,使用 NeMo Curator,Viettel Solutions 处理了 高质量的越南语数据 ,将准确性提高 10%,将数据集大小减少 60%,并将训练时间缩短 3 倍。

此用例的主要步骤如下:

  1. 下载多个越南语和多语种数据集(维基百科、越南语新闻语料库、 OSCAR 和 C4),并转换为 Parquet,以高效地处理和处理大型数据集。
  2. 将多个数据集合并、标准化并分片成一个数据集
  3. 应用 Unicode 重新格式化、精确重复数据删除、质量过滤(启发式和基于分类器的)。

您可以 查看完整教程

借助 NVIDIA NeMo Curator 提高数据质量 

到目前为止,我们已经讨论了数据质量在提高 LLMs 准确性方面的重要性,并探索了各种数据处理技术。开发者现在可以直接通过 NeMo Curator 尝试这些技术。它提供了可定制的模块化界面,使开发者能够轻松地基于此进行构建。

NeMo Curator 使用 NVIDIA RAPIDS 的 GPU 加速库 (如 cuDF、cuML 和 cuGraph) 以及 Dask 来加速多节点多 GPU 上的工作负载,从而根据需要减少处理时间和规模。例如,通过使用 GPU 加速数据处理流程, Zyphra 将总拥有成本 (TCO) 降低了 50%,数据处理速度提高了 10 倍 (从 3 周缩短到 2 天)。

要开始使用,请查看 NVIDIA/NeMo-Curator GitHub 资源库 可用教程 ,其中涵盖各种数据管护工作流,例如:

您还可以通过 NeMo 框架容器 获得访问权限,并通过 NVIDIA AI Enterprise 许可证申请企业支持。

标签