跳到主要内容

训练数据流水线

"数据是新石油"这句话在大语言模型时代有了更深的含义。一个 7B 参数的模型,其训练数据通常在 1-3 万亿 Token 以上;GPT-4 级别的模型据估计使用了超过 10 万亿 Token 的数据。数据的质量和多样性,往往比模型架构本身对最终性能影响更大。

数据采集

网络爬虫

互联网是最大的公开文本数据源。Common Crawl 是最常用的开放网络爬虫数据集,每月抓取约 30 亿个网页,压缩后体积超过 20TB。主流模型都以 Common Crawl 为基础数据源之一。

自建爬虫需要考虑:

  • Robots.txt 遵守:合规爬虫必须遵守网站的爬取规则
  • 爬取频率限制:避免对目标网站造成过大压力
  • 内容去重:同一内容可能分布在多个 URL
  • 动态页面处理:JavaScript 渲染的内容需要无头浏览器(Playwright/Puppeteer)

公开数据集

除 Common Crawl 外,常用的公开数据集包括:

  • The Pile(EleutherAI):825GB 多领域英文数据集,涵盖学术论文、代码、书籍等
  • RedPajama:LLaMA 训练数据的开源复现,共 1.2 万亿 Token
  • ROOTS(BigScience):46 种语言的多语言数据集
  • GitHub Code:公开代码仓库,用于代码生成能力训练
  • Wikipedia / Wikidata:结构化知识,质量较高

中文数据集包括 WuDaoCorpora、CLUECorpus、CC-100 中文部分等。

私有数据

企业内部数据是垂直领域微调的核心资产:

  • 客服对话记录、用户反馈
  • 内部知识库、文档
  • 行业特定数据(医疗病历、法律文书、金融报告)

私有数据的价值在于领域特异性,但需要严格的数据治理和脱敏处理。

数据清洗

原始爬取数据充满噪声,清洗是提升数据质量的关键步骤。

去除 HTML 标签

网页数据通常包含大量 HTML 标记、JavaScript 代码和 CSS。常用工具:

  • BeautifulSoup:灵活的 HTML 解析
  • trafilatura:专为内容提取设计,效果较好
  • newspaper3k:新闻文章提取

清洗后需要保留结构信息(标题、段落层级),同时去除导航栏、广告、页脚等非内容区域。

乱码过滤

网页编码错误会产生乱码字符。常见处理:

  • 使用 chardetcharset-normalizer 检测编码
  • 过滤 Unicode 控制字符(\x00-\x1F 范围,保留 \t\n\r)
  • 计算可打印字符占比,低于阈值(如 90%)则丢弃

语言识别

多语言数据集需要按语言分类。常用工具:

  • fastText 语言识别模型(Facebook,速度快)
  • langdetect(基于 Google 的 language-detection)
  • lingua-py(精度更高,尤其对短文本)

对于中英文混合文本,需要按主要语言分类,同时保留适量跨语言数据以训练多语言能力。

去重

去重是数据处理中计算成本最高的步骤之一,但对于防止模型记忆特定数据、提升泛化能力至关重要。

精确去重(MD5)

对每条文本计算 MD5 哈希,在哈希集合中查找是否存在。精确去重速度快,但只能发现完全相同的内容,无法处理轻微变体(如不同换行、空格)。

模糊去重

MinHash:一种 Locality-Sensitive Hashing(LSH)技术,通过多个哈希函数估算两篇文档的 Jaccard 相似度。流程:

  1. 将文档切分为 n-gram(通常 5-gram)
  2. 对每个 n-gram 集合计算多个哈希(通常 128-256 个)
  3. 取每个哈希函数的最小值,组成 MinHash 签名向量
  4. 将签名向量分成多个 band,相同 band 的文档进入同一候选对
  5. 对候选对计算精确相似度,超过阈值(通常 0.8)则认为重复

SimHash:Google 用于网页去重的算法,每篇文档映射为固定长度的 bit 向量,通过 Hamming 距离判断相似性。适合大规模快速去重。

质量过滤

不是所有文本都适合训练语言模型。低质量文本会引入噪声,降低模型性能。

困惑度过滤

使用一个小型语言模型(如 KenLM 或 GPT-2-small)计算每条文本的困惑度(Perplexity)。过高的困惑度通常意味着文本语法混乱、内容随机;过低的困惑度可能意味着内容重复。两端过滤可以保留自然流畅的文本。

分类器过滤

训练一个二分类器,区分"高质量"和"低质量"文本:

  • 正样本:Wikipedia、高质量书籍、精选文章
  • 负样本:随机爬取的低质量网页

Meta 在训练 LLaMA 时使用了基于 fastText 的质量分类器,有效提升了预训练数据质量。

其他启发式规则:

  • 文本长度(过滤过短/过长文本)
  • 标点符号比例
  • 数字/字母比例
  • 重复行/段落比例(文本内部重复)

数据标注平台

高质量的标注数据对监督微调(SFT)和 RLHF 至关重要。

主流平台

  • Label Studio:开源标注平台,支持文本、图像、音频多种类型,可私有部署
  • Scale AI:商业标注服务,提供高质量人工标注,OpenAI、Meta 等公司使用
  • Prolific:学术研究常用的众包平台,参与者筛选机制较好
  • Amazon Mechanical Turk:最大的众包平台,成本低但质量参差不齐
  • Appen:企业级数据标注服务

RLHF 标注流程设计

基于人类反馈的强化学习(RLHF)需要专门设计的标注流程:

  1. 偏好标注:给标注者两个模型输出,选择哪个更好
  2. 绝对评分:对单个输出按多个维度(有用性/无害性/准确性)打分
  3. 失败案例标注:标记模型输出中的具体错误(事实错误、有害内容、逻辑漏洞)
  4. 标注者一致性:计算 Cohen's Kappa 或 Krippendorff's Alpha,剔除低一致性标注

标注指南(Labeling Guidelines)的设计至关重要,模糊的标准会导致标注者主观判断差异巨大。

数据配比策略

预训练数据配比

预训练数据通常是多来源混合,配比会显著影响模型能力:

  • 通用网页文本(40-60%):广泛的世界知识
  • 代码(10-20%):提升推理能力,即使非代码任务也有帮助
  • 书籍(10-15%):长上下文连贯性、深度知识
  • Wikipedia/百科(3-5%):高质量事实知识
  • 科学论文(2-5%):专业领域知识
  • 多语言文本(10-20%):跨语言理解能力

微调数据配比

微调阶段数据量远小于预训练,但质量要求更高:

  • 指令遵循数据(通用问答、写作、分析)
  • 领域特定数据(针对具体应用场景)
  • 对话数据(多轮对话格式)
  • 安全对齐数据(拒绝有害请求的示例)

数据飞轮(Data Flywheel)

数据飞轮是一种通过产品使用持续改善数据质量的正向循环机制:

  1. 部署模型收集用户真实交互数据
  2. 分析失败案例,发现模型薄弱点
  3. 针对性标注薄弱点的高质量数据
  4. 用新数据微调,模型性能提升
  5. 更好的模型吸引更多用户,回到步骤 1

数据飞轮的核心是用户反馈的结构化收集:点赞/点踩、重新生成、用户编辑模型输出等隐式信号,都是宝贵的训练信号。ChatGPT 的快速迭代在很大程度上得益于其庞大的用户基础带来的数据飞轮效应。

构建数据飞轮需要在产品设计阶段就规划好反馈收集机制,并建立从用户行为数据到训练数据的自动化管道。