Skip to content
Guides2 min read

负责任地采集标注员的人口统计信息:谁在打标签为何重要,以及如何在不越界的前提下询问

标注员的身份会塑造标签,所以人口统计信息值得采集,但前提是有知情同意、审慎和理由。一份关于该问什么、该放过什么、以及如何在 Potato 里落实的指南。

Potato Team

大多数标注项目都把标注员视为可以互换的:一个标签就是一个标签,谁产出的都一样。对不少任务而言这确实成立。但对另一些任务并非如此,而一旦你决定弄清标注员是谁,你就揽下了一个小小的研究伦理问题。人口统计信息是一个人能交给你的最敏感的信息之一,仅仅因为「可能有用」就去采集它,并不是一个足够充分的理由。

在主观任务上,标注员的背景会塑造标签,所以人口统计信息往往值得采集,但前提是有知情同意、每个字段都有明确理由、有便捷的拒答方式,以及一套对所收集内容做匿名化和报告的方案。只采集能回答你问题的最小集合,优先选用标准化量表而非临时自拟的问题,并把人口统计信息当作要记录的东西,而不只是存起来。 这篇文章讲的就是如何把这件事做好。文末的 Potato 配置展示了「先同意、后人口统计信息」这一流程在实践中的样子。

为什么「谁在打标签」会显现在标签里

标注员身份至关重要,最清晰的证据来自一个正为回答这个问题而构建的数据集。POPQUORN(Pei and Jurgens, 2023)采集了 1,484 名标注员的 45,000 条标注,抽样在性别、年龄和种族上匹配美国人口,然后考察背景是否能预测人们如何打标签。答案是能。年龄、种族和教育程度是冒犯性和礼貌性判断中统计显著的因素;比如说,黑人标注员就把同样的评论评得比其他群体更冒犯。这不是应当被平均掉的噪声,而是人们阅读同一段文本方式上的真实差异。

同一条评论展示给三个标注员群体,在五分制上得到三种不同的冒犯性评分;把它们平均成一个 3.3 的黄金标签会掩盖群体规律。把不同群体的评分平均成单一黄金标签,会掩盖人口统计信息本可揭示的规律

这与关于「地面真值」的一个更大的观点相连。Plank(2022)论证,人类的标签差异往往是真实的,而非错误;如果这种差异是真实的,那么知道是谁产出了哪个标签,就是理解数据的一部分。在主观任务上,一个经过聚合的单一黄金标签会悄悄抹去分歧,而这些分歧本可以借助人口统计信息看见。(我们在《分歧是信号,不是噪声》中对此有更深入的讨论。)

所以采集人口统计信息的理由很直接:只要你的任务带有一丝主观性,标注员群体的构成就是你数据集的一项属性,而如果你从未询问,就既无法报告它,也无法审计它。

该采集什么,又该放过什么

诱惑在于把什么都问一遍,稍后再慢慢梳理。要抵住它。你采集的每个人口统计字段,都是一个你要去论证、去保护、并最终要报告的字段,其中一些还在法律上很敏感:种族、族裔、宗教、政治观点和健康数据是 GDPR 下的特殊类别数据,附带额外的义务。默认应当是能回答你实际问题的最小集合。

对每个字段有一个好用的检验:沿着这个维度的差异,是否有可能改变一个人给你的数据打标签的方式,你又是否真的会去分析它?如果你在标注冒犯性,POPQUORN 的结果让年龄、种族和教育程度站得住脚。如果你在标注一句话是否合乎语法,那这些都不该出现在表单上。采集一个你永远不会去看的属性不是周密,而是白白揽下的风险。

有两条做法能让这件事保持诚实:

  • 把每个问题都绑定到一项分析。 在一个字段进入表单之前,先写下你打算用它做的比较。没有比较,就没有这个字段。
  • 让一切都可跳过。 敏感问题需要一个真正的「不愿回答」选项,而不是一个必填的单选按钮。一个感到被迫披露的人,要么退出、要么给你一个垃圾答案,两者都比留空更糟。

把知情同意做对

采集人口统计信息,正是标注从一项数据工作变成涉及人类受试者的工作的地方。底线是知情同意:在任何人回答一道人口统计问题之前,他们都应当知道你在采集什么、为什么、谁会看到,以及他们可以随时停止而不受惩罚。这不是一道你埋在服务条款高墙里的形式。它是一个页面,标注员会去阅读并同意,然后人口统计问题才加载出来。

有几件事能让同意变得实在而非徒有其名:

  • 自愿参与,并由界面来保障。 只有当拒绝很容易时,拒绝的权利才算数。每个敏感项上都有「不愿回答」,还要有一条途径能退出研究,同时不损失他们已经挣得的报酬。
  • 自我申报,而非推断。 人口统计信息应当来自标注员本人,绝不从他们的姓名、位置或写作方式去猜测。推断出的属性既经常出错,又是比直接询问更严重的隐私侵犯。
  • 匿名化存储。 把人口统计信息回答与任何能识别本人的信息分开。你要能够说「自我认同为 X 的评分者把这条评得更高」,却无法指出那具体是哪一个人。

如果你是通过一所大学来开展工作,这通常是一次 IRB 的对话,而 IRB 恰恰会关心这些要点。如果不是,这些要点依然成立。

一套标注采集流程:一个知情同意页面为前置的人口统计信息调查把关,其中每道敏感问题都提供「不愿回答」,回答在到达主标注任务之前先做匿名化。同意环节为人口统计信息调查把关;每个敏感字段都可跳过,回答在标注开始前先匿名化

标准化量表胜过你自己发明的问题

当你确实要采集一项人口统计信息时,如何措辞的重要性超出直觉。临时自拟的问题会产生与别人对不上号的类别,无法跨研究比较,还常常把选项框定得很糟,在性别和种族上尤其明显。修法是借用社会科学家已经打磨了几十年的调查量表:美国全国选举研究(ANES)或综合社会调查(General Social Survey,GSS)的人口统计量表,给你的是经过检验、站得住脚、并能与大量既有工作相比较的问题措辞和回答选项。

采用一份标准量表还替你完成了一部分伦理工作。这些量表本身就已包含「不愿回答」选项,并且在如何处理敏感类别上经过审查,所以你不必去重新发明一套审查委员会会挑毛病的选项。

采集之后,要报告

采集了人口统计信息却再也不提,就使这件事失去了意义。收集这些数据的理由,正是为了让你、以及日后使用该数据集的每个人,都能看清是谁产出了这些标签。这种报告有一套标准形式:数据声明(Bender and Friedman, 2018)包含一个标注员人口统计信息的章节,正是为了让下游用户能判断数据可能如何泛化,而数据集说明书(datasheets for datasets,Gebru et al.)对任何机器学习数据集都提出同样的要求。在规划采集时就规划好发布:只发布聚合分布,绝不发布个体记录,且细节要足够让读者判断你的群体是否与你模型将要服务的人群相似。我们在《记录你的标注数据集》中讲了这一端。

在 Potato 里怎么做

Potato 有一部分正是为此而建。POPQUORN 就是「Potato-Prolific」数据集,通过在 Prolific 上运行 Potato 研究采集而来,所以「同意加人口统计信息」的流程是一项一等公民般的功能,而不是你另外拼装上去的东西。

采集是一个多环节工作流:一个为研究把关的 consent 环节,然后一个采集人口统计信息的 prestudy 环节,再然后才是标注本身。

yaml
phases:
  consent:
    enabled: true
    data_file: "data/consent.json"
 
  prestudy:
    enabled: true
    data_file: "data/demographics.json"
 
  # annotation phase is always enabled

同意页面是一道带 right_label 的问题,right_label 就是继续下去所需的答案。没有人能在不先同意的情况下抵达人口统计信息或任务。

json
[
  {
    "name": "consent_agreement",
    "type": "radio",
    "description": "I have read the consent form, understand my responses are anonymized, and agree to participate. I may stop at any time.",
    "labels": ["I agree", "I do not agree"],
    "right_label": "I agree",
    "required": true
  }
]

至于人口统计信息本身,给每道敏感问题一个「不愿回答」选项,并在那些棘手的类别上依托内置模板:

json
[
  {
    "name": "age_range",
    "type": "radio",
    "description": "What is your age range?",
    "labels": ["18-24", "25-34", "35-44", "45-54", "55+", "Prefer not to answer"]
  },
  {
    "name": "ethnicity",
    "type": "select",
    "description": "Which best describes you? (optional)",
    "template": "ethnicity",
    "free_response": true,
    "free_response_label": "Prefer to self-describe"
  }
]

如果你压根不想手写这些问题,Potato 附带了经过验证的调查量表,其中包括八套标准化的人口统计量表。把一个 prestudy 环节指向 ANES 或 GSS 的人口统计量表,就能免费获得经过检验的措辞:

yaml
phases:
  prestudy:
    type: prestudy
    instrument: "anes-demographics"   # or gss-demographics, acs-demographics, ...

「带同意的人口统计信息」展示是这整套流程的一个开箱即用版本,而经过验证的调查量表覆盖了更广的量表库,供你在人口统计信息之外测量更多内容时使用。

研究一旦运行起来,人口统计信息回答就会按标注员分别存储、与他们的标签放在一起,正是这一点让你能够做那项当初为采集提供理由的分析:把一致性按群体拆开,检验某项人口统计信息是否像 POPQUORN 发现的那样预测标签。Potato 会对标注报告 Cohen 与 Fleiss 的 kappa,于是「群体归属是否会移动标签」就成了一次测量,而不是一种直觉。当你发布数据时,来自 prestudy 环节的聚合分布,就是你数据声明里那个标注员人口统计信息章节,早已采集完毕。

接下来读什么