LLM 数据工程解析:从预训练到 RAG 的实战策略
探讨大语言模型(LLM)的数据工程核心方法。涵盖预训练、增量预训练(DAPT)、监督微调(SFT)及检索增强生成(RAG)四个阶段。详细阐述了通用文本与专用文本的收集清洗流程,包括质量过滤、去重、隐私去除等步骤。针对研发场景,分析了指令格式构建、领域知识融合及 Prompt 工程策略。强调数据质量对模型性能的决定性作用,并提出 Prompt、微调与知识库的协同使用原则,旨在为构建高质量垂直领域大模型提供数据层面的实践指导。

探讨大语言模型(LLM)的数据工程核心方法。涵盖预训练、增量预训练(DAPT)、监督微调(SFT)及检索增强生成(RAG)四个阶段。详细阐述了通用文本与专用文本的收集清洗流程,包括质量过滤、去重、隐私去除等步骤。针对研发场景,分析了指令格式构建、领域知识融合及 Prompt 工程策略。强调数据质量对模型性能的决定性作用,并提出 Prompt、微调与知识库的协同使用原则,旨在为构建高质量垂直领域大模型提供数据层面的实践指导。

最近一年研究大模型,发现一个普遍现象:很多人认为做大模型只要喂数据就行,不管数据噪声。在计算机视觉(CV)时代,需要人工标注每一个图片,分类检测分割,标注数据都需要 97% 以上准确率;有多少智能就需要多少人工。计算机视觉的鼻祖李飞飞,就是靠人工标注 ImageNet 300M 数据集,才走进大众视野。
数据在大型语言模型(LLM)的训练中起着基础性作用。在预训练和监督微调阶段,有效的数据管理对于增强模型性能和提高训练效率具有重要意义。2023 年的实践表明,即使最强大的模型,没有领域知识的协同,也根本无法上生产。本文依据相关论文和研发实际设计 - 开发 - 测试 - 知识 QA case 整理,期望在澄清通用数据处理方法的基础上,快速聚焦研发场景特定任务需要的数据采集、处理、数据集与知识库的构建。尝试回答针对研发具体的场景任务:基础模型能否完成任务?需要什么数据?数据从哪里来?增量训练还是 SFT,还是知识库?如何构造训练数据集、检索知识库?推理时能否用这些数据?如何管理这些数据…
知识密集型领域使用通用大模型,主要有三个核心方法:
我们将狭义研发大模型数据工程定义为:依据研发场景与任务,采集相关研发数据,生成模型预训练语料或者微调数据集。实质上在增量预训练、SFT、RAG、Prompt 都要应用数据,如何处理和应用这些数据,可以定义为广义研发大模型数据工程。这些数据是什么,是研发资产,是作业用的 RawData、是工程规范积累等等。
参考 A Survey of Knowledge-Enhanced Pre-trained 以及 A Comprehensive Survey on Instruction Following。研发数据工程核心诉求是能处理所有风格的研发资产(文本、图像、知识图谱、数据库…),将形成预训练语料或者指令微调数据集。并针对不同的资产格式(文本、KG、Rules…)或者研发场景任务(编码、UT、检视…)设计详细的训练数据以及分层知识库。
预训练为 LLM 的能力奠定了基础。通过在大规模语料库上进行预训练,LLM 可以获得基本的语言理解和生成能力。预数据用有通用文本和专用文本。
通用文本包含:
专用文本包括:
收集大量文本数据后,对数据进行预处理,特别是消除噪声、冗余、无关和潜在有害的数据,对于构建预训练语料库是必不可少的,因为这些数据可能会极大地影响 LLM 的能力和性能。预处理 LLM 的预训练数据的典型流程如下:
A Survey of Large Language Models 总结了大型语言模型(LLMs)准备预训练数据的一般程序和关键点:
预训练 (pre-train) 的语料与下游任务 (finetune) 语料的【数据分布/领域差异】大时,需要继续预训练(领域增强预训练 or 增量预训练)。领域差距的本质,还是数据问题。token/word/n-gram 的不同以及其出现的上下文的不同造成的。例如:现在你的任务是从法律文件中做 NER 任务,但你使用的模型为普通的 bert-base-chinese,那么如果想要达到一个下游任务上更好的效果,你最好使用大量的法律领域语料来继续预训练从而得到一个适应法律领域的预训练模型。
领域预训练,包括数据设计(挖掘领域和领域任务数据)、训练方法设计(挖掘领域词汇)、数据增强等。Don't Stop Pretraining Adapt Language Models to Domains and Task 表明,进行第二阶段预训练(领域自适应预训练,domain-adaptive pretraining or DAPT)可以带来性能提升。此外,适应任务的无标签数据(任务自适应预训练,task-adaptive pretraining, or TAPT)在领域自适应预训练之后也能提高性能。
多个预训练的文章提到了分词的重要:在适配预训练的分词器时,主要目标是提高特定领域数据的 Token 效率,同时在通用数据集上保持效率和语言模型性能,并尽量减少重新训练/微调的工作量。为了实现这一目标,ChipNeMo 一个四步方法:
• 步骤 1:使用特定领域数据从头开始训练一个标记器。 • 步骤 2:从新分词器的词汇表中,识别出在通用目的分词器中缺失且在通用数据集中很少出现的 Token。 • 步骤 3:使用步骤 2 中新识别的 Token 扩展通用目的分词器。 • 步骤 4:利用通用目的分词器初始化新 Token 的嵌入。
Lawyer LLaMA: Enhancing LLMs with Legal Knowledge 中提到的领域预训练语料包括:从中国法院网站收集了包括判决书、法律文章、司法解释、法院新闻以及各种法律普及文章。为了缓解常识的遗忘,从悟道 Corpora CLUE Corpus 中抽取了中文文本,以及从 C4 中抽取的英文文本,用于基于情节生成文本。
ChipNeMo: Domain-Adapted LLMs for Chip Design,用到的领域训练语料为 NVIDIA 内部数据,包含了各种与芯片设计相关的文本来源,包括设计、验证、基础设施以及内部文档。
也有文献中提到了预训练阶段,使用微调数据或者基于领域任务特定的数据集进行训练,可以使用更少的数据获得较好的效果,匹配领域任务 TAPT。
Continual pre-training 数据工程和预训练阶段类似。针对研发当前选择 Pangu 38B(测试模型)、Code LLaMa 34B L0 基础预训练模型,我们会依据 L0 评估结果:
预训练后,LLM 可以获得解决各种任务的通用能力。越来越多的研究表明,LLM 的能力可以进一步适配到特定的任务。两种适配预训练后的 LLM 的方法:指令微调(instruction tuning)和对齐微调(alignment tuning)。前一种方法旨在增强(或解锁)LLM 的能力,而后一种方法旨在将 LLM 的行为与人类的价值观或偏好对齐。本质上,指令微调首先需要收集或构建指令格式(instruction-formatted)的实例。然后,使用这种格式的实例以有监督的方式微调 LLM。
通常情况下,一个指令格式的实例包括一个任务描述(称为指令)、一对输入 - 输出以及少量示例(可选)。作为重要的公共资源,现有大量开源的指令数据集(NLP task:P3,FLAN、chat: OpenAssistant、合成:Self-Instruct)。这些数据集具体的 Dataset Structure 参见 Hugging Face。
指令格式结构: Task description:XXX Demonstrations:XXX(Optional) Input:XXX,Output:XXX
指令实例的质量对模型的性能有重要影响。关注指令规模、指令格式设计。通常来说,可以向现有数据集的输入 - 输出对添加任务描述和可选的示例,其中任务描述是 LLM 理解任务的最关键部分。此外,使用适当数量的示例作对模型可以产生实质性的改进,这也减轻了其对指令工程的敏感性。将其他部分(例如:避免事项、原因和建议)添加到指令中对 LLM 的性能提升十分轻微。为了引出 LLM 的逐步推理能力,建议同时使用包含和不包含 CoT 的样本微调 LLM。
Lawyer LLaMA: Enhancing LLMs with Legal Knowledge 中提到两种 SFT。
ChipNeMo: Domain-Adapted LLMs for Chip Design,用到的领域训练语料为 NVIDIA 内部数据,包含了各种与芯片设计相关的文本来源,包括设计、验证、基础设施以及内部文档。
总的来说通用大模型缺乏领域专业知识,且不实时。试验表明,即使模型在持续训练阶段反复学习领域文章,它在生成回应时也无法正确使用它们,可能会引用无关的文章,或者混淆术语。为了让模型生成更可靠的回应,我们将模型与检索模块结合使用。
Lawyer LLaMA: Enhancing LLMs with Legal Knowledge:收集用户的法律咨询问题,并请法律专业人员为每个问题标记最多 3 篇必要的法律文章以回答问题。基于 RoBERTa 训练了一个法律文章检索模型。在保留集上该模型可以实现 0.543 的 Macro Recall@1 和 0.807 的 Macro-Recall@3。
ChipNeMo: Domain-Adapted LLMs for Chip Design,幻觉特别影响工程助手聊天机器人的准确性,建议利用检索增强生成 (RAG) 方法。减轻幻觉的影响。文章认为使用针对特定领域的语言模型来进行 RAG,可以显著提高我们领域特定问题的答案质量,通过使用适度数量的领域特定训练数据对检索模型进行微调,可以显着提高检索准确性。领域适应 RAG 实现图:检索模型为微调后的 E5(EmbEddings from bidirEctional Encoder rEpresentations)。
当前研发广泛使用 RAG 技术:
研发知识文档,大量的向量化研发资产,并对语言模型进行 QA 微调。
在预训练或适应性调整之后,使用 LLMs 的主要方法是为解决各种任务设计适合的提示策略(提示工程)。设计良好的提示对于揭示 LLMs 完成特定任务的能力非常有帮助,提示词设计的几个原则:清晰明确地表达任务目标、将任务分解为易懂的子任务、提供 few-shot、利用模型友好的格式。提示工程需要考虑关键要素包括任务描述,输入数据,上下文信息、提示风格以及示例。
当前研发通过 SFT 在代码生成的一些场景,测试集命中率超过 50%,但是放开给用户使用只有 20%+,关键是高质量的 Prompt 工程,譬如如何传递代码逻辑关系、API 调用等等。研发资产数据如何参与 Prompt 构建任务意图以及上下文是当前核心问题。
将 SBOM 概念扩展到'AIBOMs',可以通过记录 AI 训练数据的源代码,模型架构,监控程序和其他 AI 特定元数据,提高透明度和风险评估。
需要明确的是 Prompt(ICL)、微调和检索增强生成并非矛盾,它们可以同时使用,以利用每种方法的优点。Fine-tuning 可以帮助通用语言模型适应特定任务,使其更加任务特定。检索增强生成(RAG)专注于通过检索机制将 LLM 与外部知识源连接起来。它将生成能力与从知识库中搜索并整合相关信息的能力相结合。RAG 和微调的互补角色,提供了强大的协同作用,可以显著提高模型性能和可靠性。
虽然 rag 在提供访问动态外部数据源方面表现出色,并提供了响应生成的透明度,但微调添加了一层关键的适应性和精细的改进。没有微调,模型可能会继续犯同样的错误。微调通过使用领域特定和纠错数据来微调模型,使其能够纠正这些错误。
其他好处还包括学习所需的生成语气。依据业界的建议,以及 23 年的实践,坚持作业数据 - 语料 - 数据集 SFT/知识库 RAG-应用解耦原则,依据任务场景特点综合使用,当前研发场景 SFT/RAG 建议策略:
大模型的数据工程不仅仅是清洗数据,更是构建企业核心竞争力的过程。从预训练的语料筛选,到微调的指令构建,再到推理时的 RAG 检索,每一个环节都直接影响最终的业务效果。随着技术的演进,数据的质量、合规性以及可追溯性(如 AI BOM)将成为衡量大模型落地成熟度的关键指标。研发人员应建立标准化的数据流水线,确保数据资产的有效沉淀与复用,从而实现大模型在垂直领域的深度赋能。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online