第 2 课
← 返回系列列表

Course 1:数据管理策略

MLOps Production — 机器学习工程生产实践

数据收集、标注、清洗与版本管理的最佳实践。

Course 1:数据管理策略

课程简介

数据收集、标注、清洗与版本管理的最佳实践。

🎬 本课程视频:MLOps Production — 机器学习工程生产实践


一、数据策略的重要性

1.1 数据是 ML 系统的基石

在工业级 ML 系统中,数据的重要性不亚于模型。Andrew Ng 提出"以数据为中心的人工智能"(Data-Centric AI)理念——与其花时间调模型超参数,不如花时间提升数据质量。

数据质量问题的典型表现:
- 标注错误导致模型学习错误模式
- 类别不平衡导致模型倾向于多数类
- 数据漂移导致模型在生产环境中性能下降
- 特征缺失或不一致导致推理失败

1.2 数据策略的框架

一个完整的数据策略包括:
1. 数据收集策略:收集什么数据、从哪里收集、收集多少
2. 数据标注策略:谁来标注、如何标注、如何保证质量
3. 数据清洗策略:如何处理缺失值、异常值、重复值
4. 数据版本化策略:如何追踪数据变更、回滚到旧版本
5. 数据治理策略:数据安全、隐私合规、访问控制

二、数据收集

2.1 数据来源

第一方数据:系统自身产生的数据
- 用户行为日志(点击、浏览、购买)
- 传感器数据(IoT 设备、监控摄像头)
- 交易记录(订单、支付)

第二方数据:合作伙伴提供的数据
- 社交平台 API 数据
- 第三方支付数据
- 广告平台数据

第三方数据:公开或购买的数据
- 开源数据集
- 公共数据(天气、交通、经济指标)
- 数据市场购买

2.2 数据量估算

需要多少数据?取决于:
- 问题的复杂度:人脸识别需要百万级,线性回归可能只需要几百
- 模型复杂度:深度模型需要更多数据
- 特征维度:高维数据需要更多样本
- 期望精度:精度要求越高,需要数据越多

经验法则:
- 对于线性模型,$m \approx 10n$(10 倍特征数)
- 对于深度学习,$m \approx 10^4 - 10^8$
- 对数据质量要求高时,优先提升质量而非数量

2.3 数据收集的常见陷阱

  1. 采样偏差:只收集了部分场景的数据
  2. 标签泄露:特征中包含了未来的信息
  3. 数据时效性:旧数据不能代表当前分布
  4. 用户隐私:收集了不必要或违规的个人数据

三、数据标注

3.1 标注策略

内部标注:由团队内部专家标注
- 优点:质量可控、领域知识准确
- 缺点:成本高、扩展性差

众包标注:通过平台(如 Amazon Mechanical Turk)外包
- 优点:成本低、可大规模扩展
- 缺点:质量不稳定、需要质量控制

主动学习:模型自动选择最有价值的样本请求标注
- 核心思想:标注不确定度高的样本比确定度高的样本更有价值
- 可以减少 50-90% 的标注量

def active_learning(model, unlabeled_pool, budget=100):
    labeled = []
    for _ in range(budget):
        # 选择不确定性最高的样本
        probs = model.predict_proba(unlabeled_pool)
        uncertainty = 1 - np.max(probs, axis=1)
        query_idx = np.argmax(uncertainty)
        # 请求标注(模拟)
        label = oracle_label(unlabeled_pool[query_idx])
        labeled.append((unlabeled_pool[query_idx], label))
        model.fit(*zip(*labeled))

3.2 标注质量控制

  1. 多人标注:每个样本由多人标注,投票或取平均
  2. 黄金标准样本:插入已知正确标签的样本,检测标注者质量
  3. 标注者一致性:计算标注者间的 Cohen's Kappa 系数
  4. 定期校准:对标注者进行培训和校准

3.3 处理标注不一致

不同标注者对同一标准可能有不同理解:

四、数据清洗

4.1 缺失值处理

4.2 异常值处理

检测方法:
- Z-Score:$|z| > 3$ 视为异常
- IQR 方法:低于 Q1-1.5IQR 或高于 Q3+1.5IQR 视为异常
- 领域知识:根据业务规则判定

处理方法:
- 删除异常样本
- 用上下界截断(Winsorization)
- 保留但做标记

4.3 重复数据

问题:重复数据导致模型偏向重复样本。

解决方案:
- 完全去重:删除所有重复样本
- 部分去重:保留一条,记录重复次数作为权重
- 模糊匹配:对近似的样本做相似度检测

五、数据版本化

5.1 为什么要版本化

数据会随着时间变化——新数据加入、标注修正、清洗规则更新。没有版本化,你会遇到以下问题:

5.2 数据版本化工具

# DVC 基本用法
dvc init
dvc add data/raw/
git add data/raw.dvc
git commit -m "Add raw dataset v1.0"
dvc push

5.3 数据谱系(Data Lineage)

数据谱系追踪数据的来源、变换过程和使用情况:

完整的谱系记录让问题排查和审计变得简单。

六、数据治理与合规

6.1 数据安全

6.2 隐私合规

合规要求包括:数据最小化、匿名化、用户删除权、数据出境限制等。

七、总结

  1. 数据质量比模型复杂度更重要——以数据为中心的 AI 理念
  2. 数据收集需要考虑偏差、时效性、隐私
  3. 数据标注需要质量控制,主动学习可以减少标注成本
  4. 数据清洗处理缺失值、异常值、重复值
  5. 数据版本化保证实验的可复现性
  6. 数据治理确保安全和合规

八、数据工程基础设施

8.1 数据湖与数据仓库

数据湖(Data Lake):存储原始格式数据的集中式存储系统。
- 存储所有类型的数据(结构化、半结构化、非结构化)
- Schema-on-read:读取时再定义数据结构
- 工具:Amazon S3、Azure Data Lake、Apache Hadoop HDFS

数据仓库(Data Warehouse):为分析优化的结构化数据存储。
- Schema-on-write:写入时已定义好数据结构
- 支持高效的分析查询
- 工具:Snowflake、BigQuery、Redshift、ClickHouse

ML 团队通常同时使用两者:数据湖存储原始数据,数据仓库存储清洗后用于分析的特征数据。

8.2 数据管道架构模式

Lambda 架构:同时使用批处理和流处理。
- 批处理层(Batch Layer):处理全量历史数据,生成准确的视图
- 速度层(Speed Layer):处理实时数据,提供低延迟视图
- 服务层(Serving Layer):合并批处理和流处理的结果

Kappa 架构:仅使用流处理,简化架构。
- 所有数据被视为流
- 通过重放流来处理历史数据
- 适合数据量适中、对实时性要求高的场景

8.3 数据测试

数据管道应该有自动化测试覆盖:
- 数据量测试:每日数据量是否在预期范围内
- 计数值唯一性测试:主键是否有重复
- 引用完整性测试:外键是否存在对应记录
- 格式测试:字段格式是否符合规范
- 自定义业务规则测试:根据业务规则验证数据合理性

数据标注的质量控制体系

在大规模数据标注中,质量控制是一个系统工程,需要从多个层面入手。首先是标注人员的管理——标注者需要经过严格的培训和考核,通过测试题后方可参与正式标注。在标注过程中,定期插入"黄金标准"题(已知正确答案的样本)来检测标注质量,如果标注者的正确率低于阈值(如 95%),需要暂停其标注工作并进行再培训。

其次是标注流程的设计。对于主观性较强的标注任务(如情感分析),通常采用多数投票机制——每个样本由 3-5 个标注者独立标注,取多数结果作为最终标签。标注者间的一致性水平用 Cohen's Kappa 系数或 Fleiss' Kappa 系数来衡量。一般而言,Kappa 值在 0.8 以上表示标注质量优秀,0.6-0.8 表示良好,低于 0.6 则需要重新审视标注指南。

数据清洗中的另一个常见问题是标签噪声——一些训练样本的标签可能是错误的。研究发现,当标签噪声比例在 10% 以下时,大多数 ML 模型尚能容忍;但当噪声超过 20% 时,模型性能会显著下降。清洗标签噪声的常用方法包括:使用置信学习(Confident Learning)自动识别可能标注错误的样本、使用模型预测与人工标签的一致性来检测异常。

数据标注的效率提升

在数据标注中,主动学习(Active Learning)是一种可以有效减少标注工作量的方法。其核心思想是:并不是所有未标注样本都能提供相同的价值——模型最不确定的样本(即预测置信度接近 0.5 的样本)包含最多的信息量。主动学习系统选择最有价值的样本交给标注者,其他样本则保留。研究表明,主动学习可以在保持模型性能的前提下,减少 50-80% 的标注量。主动学习的常见策略包括:不确定性采样(选择预测概率最接近 0.5 的样本)、委员会查询(用多个模型投票最不一致的样本)、以及期望模型变化(选择最可能改变当前模型参数的样本)。

合成数据与数据增强

在标注数据不足的情况下,合成数据和数据增强是两种有效的解决方案。合成数据是通过程序生成的、模拟真实数据分布的人工数据。GAN(生成对抗网络)可以生成高质量的合成图像数据。在自动驾驶领域,合成数据被广泛用于训练极端场景(如行人突然横穿马路)下的感知模型——这些场景在真实世界中极难收集。数据增强则是在不改变语义的前提下对现有数据进行变换——图像领域的翻转、旋转、裁剪、颜色抖动,文本领域的同义词替换、回译(翻译成另一种语言再翻译回来),都是常见的数据增强方法。数据增强可以显著提高模型的泛化能力和鲁棒性。

总结来说,数据管理是 ML 项目的基石。没有高质量的数据,再强大的模型也无法发挥作用。系统化的数据收集、标注、清洗和版本化管理,是每个 ML 团队必须建立的核心能力。在投入大量精力调优模型之前,请确保数据基础设施已经完善。

延伸阅读

← Course 1:ML 系统设计 Course 1:ML 流水线构建 →