标注(Labeling)
尽管无监督机器学习大有可为,但当下大多数投入生产环境的 ML 模型仍然是监督学习,也就是说它们需要标签才能学习。而模型的性能在很大程度上取决于所训练的有标签数据的质量和数量。
有些任务的数据本身带有自然标签(natural labels),或者可以“随到随取”地在线获取标签。例如,用于预测广告点击率的标签,就是用户是否点击了广告;推荐系统的标签,也是用户是否点击了推荐内容。然而大多数任务并不存在自然标签,或者这些标签不可直接获取,这时就需要想办法人为地获取标签。
特斯拉 AI 负责人 Andrej Karpathy 曾在对学生的演讲中提到,当他决定组建一个内部标注团队时,招聘人员问他这个团队需要多长时间,他回答:“我们需要工程团队多久?”——这说明数据标注已不再是一个辅助性任务,而是很多生产环境中 ML 团队的核心职能。
下面各节将讨论获取数据标签时会遇到的挑战,包括标签多样性(label multiplicity)问题,以及在缺乏人工标注的情况下可以采取的应对方法。
一、人工标签(Hand Labels)
任何在生产环境中处理数据的人都深有体会:人工标注有诸多困难。
-
费用高昂
- 如果需要领域专家,非常昂贵。
- 例如,对评论做垃圾邮件分类,可以在众包平台上找 200 名标注员,培训 15 分钟后就能开工。但要标注胸片 X 光,就必须聘请有资质的放射科医生,他们时间稀缺且费用高。
-
威胁数据隐私
- 人工标注意味着有人需要直接查看你的数据;如果数据涉及严格的隐私要求(如患者病历、公司机密财务信息),就不可能把数据发给第三方。很多情况下,还要请标注员在本地(on-premise)对数据进行标注。
-
标注效率低
- 比如,做语音的音素级转录,标注时间往往是语音长度的 400 倍:1 小时语音需要 400 小时才能转录完,几乎需要 3 个月。
- 在某个肺癌 X 光的 ML 研究中,研究团队足足等了一年才收集到足够的人工标注。
慢速标注导致迭代速度变慢,模型对环境变化的适应性也随之降低。
举例:你有一个二分类的情感分析模型(NEGATIVE/POSITIVE),部署后公关团队发现真正需要优先处理的是“愤怒”推文(ANGRY),于是要把模型改为三分类:NEGATIVE、POSITIVE、ANGRY。这就需要重新查看已有训练数据、对部分样本做“愤怒”重标,如果“愤怒”样本不够,还要额外采集数据——整个过程耗时越久,现有模型性能退化得就越严重。
二、标签多样性(Label Multiplicity)
为了获得足够多的有标签数据,往往需要依赖多个数据源和不同水平的标注员,而他们的标注准确率也各不相同。这就产生了标签歧义(label ambiguity)或标签多样性(label multiplicity)的问题:当同一个样本出现多种标注时,我们该用哪个作为“真值”?
以实体识别为例,给三位标注员下面这段话做实体标注:
Darth Sidious, known simply as the Emperor, was a Dark Lord of the Sith who reigned over the galaxy as Galactic Emperor of the First Galactic Empire.
三位标注员的结果如下:
标注员 | 实体数量 | 标注结果 |
---|---|---|
1 | 3 | [Darth Sidious]、[Dark Lord of the Sith]、[Galactic Emperor of the First Galactic Empire] |
2 | 6 | [Darth Sidious]、[Emperor]、[Dark Lord]、[Sith]、[Galactic Emperor]、[First Galactic Empire] |
3 | 4 | [Darth Sidious]、[Emperor]、[Dark Lord of the Sith]、[Galactic Emperor of the First Galactic Empire] |
各标注员标出的实体并不一致,用哪种标注来训练模型?如果模型多以标注员 1 的数据为准,和多以标注员 2 的数据为准,性能会有很大差异。
- 专家级任务中,标注员之间分歧更为普遍。
- 如果专家 A 认为标签应是 A,而专家 B 认为是 B,那么“人类水平”的性能也难以定义。
解决办法:
- 明确任务定义。比如在上述实体识别任务中,若规则是“选取所有可能实体中最长的子串”,标注员就不会分别标注“Galactic Emperor”和“First Galactic Empire”,而只会标注整个“Galactic Emperor of the First Galactic Empire”。
- 培训和校准标注员,确保所有人都理解并执行同一套标注规则。
三、数据溯源(Data Lineage)
如果将多个来源、来自不同标注员的数据混合使用而不加甄别,模型容易“莫名其妙地”失效。举例:
- 你用 10 万条数据训练出一个性能尚可的模型,决定再花重金用众包去标注 100 万条新样本,结果模型性能反而下降了。
- 原因是新标注员的准确率远低于初始团队。若数据已混合,后续就无法区分旧数据和新数据,排查更困难。
实践建议:
- 对每条样本及其标签都记录来源(data lineage)。
- 若模型在最新获取的数据上表现不佳,迅速回溯查看这些数据是如何获取和标注的。
- 在多次实践中,我们发现“问题通常出在新数据标注错误率过高”,而非模型本身。
四、在缺乏人工标签时的应对技术
鉴于高质量人工标签难以获取,已有多种技术来缓解这一问题。下表总结了常见的四类方法,以及它们对“真值标签”需求情况:
方法 | 工作原理 | 是否需要真值标签? |
---|---|---|
弱监督(Weak Supervision) | 依赖(通常有噪声的)启发式规则生成标签 | 不需要,但建议准备少量真值标签来指导启发式规则的设计 |
半监督(Semi-Supervision) | 利用结构性假设,从小量初始标签出发生成更多标签 | 需要少量初始标签作为“种子” |
迁移学习(Transfer Learning) | 将一个任务上预训练的模型迁移到新任务;可零样本或微调 | 零样本场景不需要;微调时需要少量真值标签,但远少于从头训练所需数量 |
主动学习(Active Learning) | 根据模型当前的状态,挑选最有价值的样本交给标注员,从而提高标注效率 | 需要真值标签,用于指导模型选择哪些样本最能改进性能 |
下面分别简述这四类技术。
1. 弱监督(Weak Supervision)
如果人工标注困难重重,能否完全不靠人工标签?弱监督——如 Stanford AI Lab 的开源工具 Snorkel——就是基于这一思路。
-
标注函数(Labeling Functions,LF):由领域专家编写的启发式规则,对数据打标签。例如:
def labeling_function(note): if "pneumonia" in note: return "EMERGENT" else: return None