LLM 数据工程解析:从预训练到 RAG 的实战策略
最近一年研究大模型,发现一个普遍现象:很多人认为做大模型只要喂数据就行,不管数据噪声。在计算机视觉(CV)时代,需要人工标注每一个图片,分类检测分割,标注数据都需要 97% 以上准确率;有多少智能就需要多少人工。计算机视觉的鼻祖李飞飞,就是靠人工标注 ImageNet 300M 数据集,才走进大众视野。
数据在大型语言模型(LLM)的训练中起着基础性作用。在预训练和监督微调阶段,有效的数据管理对于增强模型性能和提高训练效率具有重要意义。2023 年的实践表明,即使最强大的模型,没有领域知识的协同,也根本无法上生产。本文依据相关论文和研发实际设计 - 开发 - 测试 - 知识 QA case 整理,期望在澄清通用数据处理方法的基础上,快速聚焦研发场景特定任务需要的数据采集、处理、数据集与知识库的构建。尝试回答针对研发具体的场景任务:基础模型能否完成任务?需要什么数据?数据从哪里来?增量训练还是 SFT,还是知识库?如何构造训练数据集、检索知识库?推理时能否用这些数据?如何管理这些数据…
知识密集型领域的核心方法
知识密集型领域使用通用大模型,主要有三个核心方法:
- Domain-Adaptive Pre-Training (DAPT) of foundation models with domain-adapted tokenizers:基础模型的领域自适应预训练,即 Continue PreTraining,增量预训练。这一阶段需要使用或者增加领域 token。参考论文 Don't Stop Pretraining: Adapt Language Models to Domains and Tasks。
- Supervised Fine-Tuning:model alignment using general and domain-specific instructions,使用通用和领域特定指令进行模型对齐。
- Retrieval-Augmented Generation (RAG) with a trained domain-adapted retrieval model:使用训练有素的领域自适应检索模型的检索增强生成。
研发大模型数据工程
我们将狭义研发大模型数据工程定义为:依据研发场景与任务,采集相关研发数据,生成模型预训练语料或者微调数据集。实质上在增量预训练、SFT、RAG、Prompt 都要应用数据,如何处理和应用这些数据,可以定义为广义研发大模型数据工程。这些数据是什么,是研发资产,是作业用的 RawData、是工程规范积累等等。
参考 A Survey of Knowledge-Enhanced Pre-trained 以及 A Comprehensive Survey on Instruction Following。研发数据工程核心诉求是能处理所有风格的研发资产(文本、图像、知识图谱、数据库…),将形成预训练语料或者指令微调数据集。并针对不同的资产格式(文本、KG、Rules…)或者研发场景任务(编码、UT、检视…)设计详细的训练数据以及分层知识库。
Pretraining 预训练阶段
预训练为 LLM 的能力奠定了基础。通过在大规模语料库上进行预训练,LLM 可以获得基本的语言理解和生成能力。预数据用有通用文本和专用文本。
通用文本包含:
- 网页,如 CommonCrawl,数据量大,使得 LLM 能够获得多样化的语言知识并增强 LLM 的泛化能力。
- 对话文本,如公共对话语料,对话数据可以增强 LLM 的对话能力,改善 LLM 在问答任务上的表现。
- 书集,如 Books3,提供更正式的文本,语言知识建模长期依赖关系以及连贯文本能力。
专用文本包括:
- 多语言文本:整合多语言语料库,能够增强多语言的生成和理解能力。
- 科学文本:如论文、教材,使能 LLM 在科学和推理任务中取得良好性能。
- 代码:显著提升代码编写能力,且可能是复杂推理能力 CoT 的来源。
收集大量文本数据后,对数据进行预处理,特别是消除噪声、冗余、无关和潜在有害的数据,对于构建预训练语料库是必不可少的,因为这些数据可能会极大地影响 LLM 的能力和性能。预处理 LLM 的预训练数据的典型流程如下:
- 质量过滤:删除收集到的语料库中的低质量数据,可以通过设置规则过滤。
- 去重:重复数据降低语言模型的多样性,从而影响模型性能,应该在不同层级上去重。
- 隐私去除:敏感或个人信息的用户生成内容,可能增加隐私泄露风险,需要从语料库中删除个人信息。
- 分词:用于将文本分解为词或子词的组合,使机器更好地理解和分析文本。
A Survey of Large Language Models 总结了大型语言模型(LLMs)准备预训练数据的一般程序和关键点:


