在大模型(Large Language Model, LLM)研发与应用中,数据处理是决定模型性能上限的关键环节。一个完整、高质量的数据处理链路(Data Pipeline)通常包含从原始数据采集到最终用于训练/推理的多个阶段。以下是工业级大模型数据处理的标准全流程,适用于预训练、指令微调(SFT)、强化学习(RLHF)等场景。


🌐 一、整体流程概览

原始数据源
    ↓
1. 数据采集(Data Collection)
    ↓
2. 数据清洗(Data Cleaning)
    ↓
3. 数据去重(Deduplication)
    ↓
4. 质量过滤(Quality Filtering)
    ↓
5. 内容安全过滤(Safety & PII Filtering)
    ↓
6. 数据标注 / 指令构造(Labeling / Prompt Engineering)
    ↓
7. 格式标准化(Formatting & Tokenization)
    ↓
8. 数据集划分与存储(Splitting & Storage)
    ↓
→ 用于:预训练 / SFT / RLHF / 评估

二、各阶段详解

1. 数据采集(Data Collection)

  • 来源多样
    • 公开网页(Common Crawl、Wikipedia、Books3、ArXiv、GitHub 等)
    • 企业私有数据(客服对话、产品文档、内部知识库)
    • 合成数据(LLM 生成、规则模板、数据增强)
  • 关键要求
    • 合法合规(遵守版权、robots.txt、GDPR)
    • 多语言、多领域覆盖
    • 时间新鲜度(避免过时信息)

✅ 工具:wget, scrapy, trafilatura(网页提取),huggingface datasets


2. 数据清洗(Data Cleaning)

目标:去除噪声、格式混乱、无意义内容。

清洗类型 示例
HTML/XML 标签移除 <div>...<script>...</script> → 纯文本
特殊字符/乱码清理 ``, &nbsp;, 控制字符(\x00-\x1f)
语言识别与过滤 fasttext 识别语种,保留目标语言
文本规范化 全角转半角、统一标点、大小写处理(可选)
空行/短文本过滤 长度 ✅ 工具:ftfy, unidecode, langdetect, 自定义正则

3. 数据去重(Deduplication)

防止模型“死记硬背”重复内容,提升泛化能力。

常见策略:
粒度 方法 说明
文档级 MinHash + LSH 快速近似去重(如 Deduplication in C4)
句子/段落级 n-gram Jaccard 相似度 防止局部重复
跨数据集去重 与验证集/测试集比对 避免数据泄露(critical!)

⚠️ 重要:必须在训练集与评估集之间去重,否则评估结果虚高。

✅ 工具:datasketch, sentence-transformers(向量去重)


4. 质量过滤(Quality Filtering)

筛选高信息量、高可读性文本。

方法:
  • 启发式规则
    • 单词/字符比例(排除乱码)
    • 标点符号密度(排除无标点长句)
    • 停用词比例(排除无意义文本)
  • 分类器打分(更高级):
    • 训练一个“文本质量分类器”(如基于 BERT)
    • 使用 Perplexity(困惑度):低 PPL 表示语言更自然
    • 使用 LLM 打分(如 GPT-4 判断“是否值得学习”)

✅ 示例:C4 数据集使用 heuristics 过滤掉含“List of”、“Template:”的维基页面。


5. 内容安全与隐私过滤(Safety & PII Filtering)

  • PII(个人身份信息)脱敏
    • 姓名、电话、身份证、银行卡 → 替换为 [NAME], [PHONE]
    • 工具:presidio, spacy + NER 模型
  • 有害内容过滤
    • 暴力、色情、仇恨言论、违法信息
    • 使用分类模型或关键词黑名单
  • 偏见过滤(可选):
    • 降低性别、种族等刻板印象语料权重

🔒 合规要求:尤其在金融、医疗等领域必须做 PII 脱敏。


6. 数据标注 / 指令构造(Labeling & Prompt Engineering)

仅用于监督微调(SFT)和 RLHF 阶段

类型:
任务 数据形式 构造方式
指令微调 (instruction, input, output) 人工编写 / LLM 自动生成(Self-Instruct)
偏好数据 (prompt, chosen, rejected) 人工标注 or AI Feedback(如 DPO)
问答对 (question, answer) 从 FAQ、社区问答(Stack Overflow)提取

✅ 技术趋势:用强模型(如 GPT-4)生成高质量合成指令数据(降低成本)。


7. 格式标准化与分词(Formatting & Tokenization)

  • 统一输入格式

    ### Instruction:
    Summarize the following text.
    
    ### Input:
    Large language models...
    
    ### Response:
    LLMs are powerful...
    
  • 分词(Tokenization)

    • 使用模型对应的 tokenizer(如 Llama 的 BPE、Gemma 的 SentencePiece)
    • 处理特殊 token(<|endoftext|>, <s>, </s>
    • 截断/填充至固定长度(如 2048, 4096 tokens)

✅ 输出:.bin.arrow 格式的 tokenized dataset(高效加载)


8. 数据集划分与存储

  • 划分
    • 预训练:通常不分 train/val,但需预留 hold-out 评估集
    • SFT/RLHF:按 9:1 划分 train/validation
  • 存储格式
    • 小规模:JSONL(每行一个样本)
    • 大规模:Apache Arrow、Parquet、TFRecord、HDF5
    • 向量数据库(用于 RAG 场景)

✅ 分布式训练支持:Sharding(分片)、Streaming(流式加载)


三、不同训练阶段的数据需求差异

阶段 数据特点 数据量级 关键要求
预训练(Pretraining) 通用、海量、无标签 TB 级(万亿 tokens) 多样性、去重、质量
指令微调(SFT) 高质量指令-响应对 1万 ~ 100万条 指令多样性、输出准确性
RLHF / DPO 偏好对(chosen vs rejected) 1万 ~ 50万对 偏好一致性、难负例
评估(Evaluation) 标准 benchmark(如 MMLU, GSM8K) 固定测试集 无数据泄露、权威性

四、工具链与平台(工业级)

功能 开源工具 商业方案
数据采集 Scrapy, Trafilatura Bright Data
清洗/过滤 CleanLab, Datatrove Scale AI, Snorkel
去重 datasketch, simhash
PII 脱敏 Microsoft Presidio AWS Comprehend
标注平台 Label Studio, CVAT Scale AI, Appen
数据管理 Hugging Face Datasets, Apache Iceberg Weights & Biases, Neptune

💡 Meta 的 Datatrove、EleutherAI 的 LMQL、Hugging Face 的 datasets 是当前主流开源 pipeline 框架。


五、常见陷阱与最佳实践

陷阱 建议
数据泄露(训练集含测试集内容) 严格跨集合去重,使用 hash 比对
低质量合成数据污染 对 LLM 生成数据做二次过滤
领域偏差 按目标应用场景加权采样(如医疗模型多采医学文本)
tokenization 不一致 预训练和微调必须用同一 tokenizer
忽略评估集构建 早期就定义 hold-out 评估集,监控真实性能

✅ 总结:高质量数据 = 模型成功的基石

“Garbage in, garbage out.” —— 在大模型时代,这句话比以往任何时候都更正确。

一个健壮的数据处理链路应具备:

  • 自动化(可复现、可扩展)
  • 可审计(每步日志、样本抽样检查)
  • 安全合规(PII、版权、伦理)
  • 面向任务(预训练 vs 微调数据策略不同)

只有经过精心设计和严格质检的数据,才能训练出可靠、有用、安全的大模型。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐