LABEL

# 标注（Labeling）

尽管无监督机器学习大有可为，但当下大多数投入生产环境的 ML 模型仍然是**监督学习**，也就是说它们需要**标签**才能学习。而模型的性能在很大程度上取决于所训练的有标签数据的**质量**和**数量**。

有些任务的数据本身带有自然标签（natural labels），或者可以“随到随取”地在线获取标签。例如，用于预测广告点击率的标签，就是用户是否点击了广告；推荐系统的标签，也是用户是否点击了推荐内容。然而大多数任务并不存在自然标签，或者这些标签不可直接获取，这时就需要想办法人为地获取标签。

特斯拉 AI 负责人 Andrej Karpathy 曾在对学生的演讲中提到，当他决定组建一个内部标注团队时，招聘人员问他这个团队需要多长时间，他回答：“我们需要工程团队多久？”——这说明数据标注已不再是一个辅助性任务，而是很多生产环境中 ML 团队的核心职能。

下面各节将讨论获取数据标签时会遇到的挑战，包括标签多样性（label multiplicity）问题，以及在缺乏人工标注的情况下可以采取的应对方法。

---

## 一、人工标签（Hand Labels）

任何在生产环境中处理数据的人都深有体会：人工标注有诸多困难。

1. **费用高昂**  
   - 如果需要领域专家，非常昂贵。  
   - 例如，对评论做垃圾邮件分类，可以在众包平台上找 200 名标注员，培训 15 分钟后就能开工。但要标注胸片 X 光，就必须聘请有资质的放射科医生，他们时间稀缺且费用高。

2. **威胁数据隐私**  
   - 人工标注意味着有人需要直接查看你的数据；如果数据涉及严格的隐私要求（如患者病历、公司机密财务信息），就不可能把数据发给第三方。很多情况下，还要请标注员在本地（on-premise）对数据进行标注。

3. **标注效率低**  
   - 比如，做语音的音素级转录，标注时间往往是语音长度的 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，那么“人类水平”的性能也难以定义。

**解决办法**：  
1. **明确任务定义**。比如在上述实体识别任务中，若规则是“选取所有可能实体中**最长**的子串”，标注员就不会分别标注“Galactic Emperor”和“First Galactic Empire”，而只会标注整个“Galactic Emperor of the First Galactic Empire”。  
2. **培训和校准标注员**，确保所有人都理解并执行同一套标注规则。

---

## 三、数据溯源（Data Lineage）

如果将多个来源、来自不同标注员的数据混合使用而不加甄别，模型容易“莫名其妙地”失效。举例：

- 你用 10 万条数据训练出一个性能尚可的模型，决定再花重金用众包去标注 100 万条新样本，结果模型性能反而下降了。  
- 原因是新标注员的准确率远低于初始团队。若数据已混合，后续就无法区分旧数据和新数据，排查更困难。

**实践建议**：  
- 对每条样本及其标签都记录来源（data lineage）。  
- 若模型在最新获取的数据上表现不佳，迅速回溯查看这些数据是如何获取和标注的。  
- 在多次实践中，我们发现“问题通常出在新数据标注错误率过高”，而非模型本身。

---

## 四、在缺乏人工标签时的应对技术

鉴于高质量人工标签难以获取，已有多种技术来缓解这一问题。下表总结了常见的四类方法，以及它们对“真值标签”需求情况：

| 方法                         | 工作原理                                                        | 是否需要真值标签？                                                                                   |
| ---------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| **弱监督**（Weak Supervision）    | 依赖（通常有噪声的）启发式规则生成标签                              | 不需要，但建议准备少量真值标签来指导启发式规则的设计                                                            |
| **半监督**（Semi-Supervision）   | 利用结构性假设，从小量初始标签出发生成更多标签                       | 需要少量初始标签作为“种子”                                                                                 |
| **迁移学习**（Transfer Learning） | 将一个任务上预训练的模型迁移到新任务；可零样本或微调                   | 零样本场景不需要；微调时需要少量真值标签，但远少于从头训练所需数量                                                        |
| **主动学习**（Active Learning）   | 根据模型当前的状态，挑选最有价值的样本交给标注员，从而提高标注效率        | 需要真值标签，用于指导模型选择哪些样本最能改进性能                                                                 |

下面分别简述这四类技术。

### 1. 弱监督（Weak Supervision）

如果人工标注困难重重，能否完全不靠人工标签？**弱监督**——如 Stanford AI Lab 的开源工具 Snorkel——就是基于这一思路。

- **标注函数（Labeling Functions，LF）**：由领域专家编写的启发式规则，对数据打标签。例如：
  ```python
  def labeling_function(note):
      if "pneumonia" in note:
          return "EMERGENT"
      else:
          return None