Skip to content
Guides1 min read

分歧是信号,不是噪声:何时该保留标注员的分歧,而不是把它消解掉

标注流程往往被设计成抹去分歧,但在主观任务上,分歧本身就是数据。一份关于如何区分真实标签差异与错误、并在 Potato 里把它保留下来的指南。

Potato Team

标准的标注流程就是一台生产一致性的机器。你写标注指南、培训标注员、测量标注者间一致性、对众人分歧的个案做裁定,然后为每条数据交付一个单一的黄金标签。每个步骤都是为了把分歧挤出去,其前提假设是:分歧就是错误,而错误应当被最小化。对很多任务而言,这个假设没问题。但对另外很多任务,它悄悄地扔掉了数据里最有意思的东西。

当标注员产生分歧时,这分歧有时是要消解的错误,有时却是要保留的真实差异。在有真正正确答案的客观任务上,就聚合成一个黄金标签。而在主观或带视角的任务上,一个单一的黄金标签会抹去人类判断的一整片真实分布;这时你更应该保留每位标注员的标签,存下一个分布而不是一个胜者,并在测量一致性时不预设「低于满分就等于坏了」。 这篇文章讲的就是如何区分这两种情形,并在分歧重要的时候把它守住。

单一黄金标签的假设

大多数机器学习仍然假设每条数据存在唯一正确的解读,这正是标注默认走向聚合的原因:取三个标签,取多数,把它称作真值。Plank(2022)把这称作人类标签差异的「问题」,之所以打引号,是因为这套框架本身才是问题所在。人们打标签方式上的真实差异,并不总是围绕某个隐藏真值的噪声。有时候根本不存在单一真值,而众多答案的散布,才是对这条数据的诚实描述。

综述文献在各类任务上都印证了这一点。Uma 和同事(2021)梳理了 NLP 与计算机视觉中「从分歧中学习」的工作,发现人类分歧无处不在,从词性标注到自然语言推理都是如此,同时也出现了越来越多的方法,从分歧中学习,而不是把它平均掉。视角主义转向(Cabitza、Campagner 和 Basile,2021)把这一点推得更远:按多数投票聚合有可能造成实实在在的误导,而更好的做法是保留那些做标注的人的各自视角。

分歧从何而来

并非所有分歧含义都相同,有用的一步是去追问某个分歧究竟从何而来。三个来源基本涵盖了大部分情况。

  • 标注指南。 两位标注员对同一条规则读出了不同意思,或者规则根本没覆盖眼前这个个案。这种分歧是缺陷,修法是把标注指南讲清楚,而不是保留这片散布。试点轮次的存在,正是为了抓住这类问题。
  • 标注员。 有人赶工、看错,或者是个低质量的工作者在一路乱点。这是错误,应当被抓出来并剔除。它和真实差异不是一回事,把两者混为一谈,正是「保留分歧」变成「保留噪声」的原因。
  • 数据本身。 文本确实有歧义,或者判断确实取决于是谁在读。这个笑话冒犯人吗?这条评论是正面还是喜忧参半?在这里,不同的答案并不是错误。这才是值得保留的分歧。

关键的功夫在于把第三个来源与前两个分开。标注指南的问题去修,标注员的错误去过滤,剩下的东西,即真实的数据层面差异,就是信号。

标注员分歧的一份决策辅助:追溯其来源。标注指南的歧义要去修,标注员的错误要过滤掉,而真实的数据层面或视角层面差异则作为信号保留下来,而不是消解成单一标签。把每个分歧追溯到它的来源:修好标注指南,过滤掉错误,保留真实的差异

客观任务还是主观任务

最清爽的经验法则是:一个见多识广、认真细致的人,能否对答案笃定无疑。如果能,任务就是客观的,黄金标签是有意义的,分歧是要去消解的东西。某个日期是 4 月 3 日还是 3 月 4 日,是有答案的。某个句子是否包含一个命名实体,大多数时候也是有答案的。

如果一个见多识广、认真细致的人,仍可能出于正当理由落在不同答案上,那么任务就是主观的,硬要一个黄金标签,就是在给数据强加一份它并不具备的确定性。冒犯性、毒性、幽默、礼貌、立场、图像美感:这些都取决于是谁在判断,而判断者之间的差异,往往才是你真正在意的那项属性。这也正是标注员的人口统计信息会显现在标签里的地方,也是采集并报告这些信息的全部理由。

大多数真实项目都不是纯粹的某一种。一种务实的做法是先测量一致性,再去解读它:高一致性意味着任务表现得像客观任务,你可以聚合;而主观任务上顽固地停在中等水平的一致性,不是一个要去修的失败,而是一个要去保留的分布。

保留分歧是什么样子

保留分歧,主要是一个关于你存什么的决定。不再是每条数据一个标签,而是保留解聚后的标签:每位标注员的判断,且与该标注员绑定。在此基础上,你可以构建一个软标签,即一个跨类别的分布而不是单一胜者,并针对这个分布来训练或评估。

处理同一条数据上多位标注员标签的两种方式:把它们聚合成单一的硬性黄金标签,从而丢掉这片散布;或者把它们作为分布解聚地保留下来,从而留住这条数据究竟引出了多少真实分歧。聚合成一个黄金标签并丢掉散布,或者保留解聚后的分布

这也改变了评估。一个预测分布的模型,可以针对人类分布而非单一标签来打分,于是它会因为在人们不确定的数据上保持不确定而得到奖励。在主观任务上,这比拿准确率去对齐一个半数标注员都不认同的多数投票,是一个更诚实的目标。

这一切都不意味着放弃标注者间一致性。你依然测量一致性;只是不再把任何低于 1.0 的数字当成要消除的缺陷。一致性告诉你任务表现得有多客观。是否要聚合,是你拿着这个数字另行做出的决定。

在 Potato 里怎么做

Potato 不强求共识。当多位标注员标注同一条数据时,他们的标签按标注员分别存储,所以解聚后的数据,即任何基于分布的方法所需的原材料,默认就是你得到的东西。你可以在下游选择是否聚合,而不是在采集时就丢掉这片散布。

对于分歧其实关乎程度的任务,soft_label 类型让单个标注员能直接表达一个分布,把点数分配到各个类别,而不是只挑一个:

yaml
annotation_schemes:
  - annotation_type: soft_label
    name: emotion_mix
    description: Distribute 100 points to reflect how much each emotion applies.
    labels: ["Joy", "Sadness", "Anger", "Fear", "Surprise"]
    total: 100
    show_distribution_chart: true

至于把真实歧义与标注员错误分开,这正是你最需要区分的两个来源,MACE 能帮上忙。它联合估计每位标注员的能力分数和每条数据的熵,于是一个低能力的标注员(错误来源)和一条高熵的数据(真实差异来源)会呈现为不同的东西,而不是一堆混作一团、分不出彼此的分歧:

yaml
mace:
  enabled: true
  min_annotations_per_item: 3

一个能力停在 0.4 附近的标注员,很可能在一路乱点,可以被过滤掉。一条在其余可靠标注员之间呈现高熵的数据,则是真正有争议的,那才是你要保留的分歧。当一个任务确实需要单一答案时,裁定为这些客观个案而备,MACE 预测的标签可以作为供裁定者参考的又一个信号。要点在于,消解分歧成了你逐个任务做出的选择,而不是流程替你做的默认动作。

接下来读什么

主观数据集展示了保留分歧能给你带来什么:GoEmotions 中细粒度、有争议的情绪标签,以及 Social Chemistry 中的社会规范判断,在那里讲道理的人也会真正地各执一词。