Skip to content

异构标注者覆盖

为不同条目分配不同数量的标注者。配置默认上限、用于质量监控的分层重叠样本、自适应分歧提升、每位标注者配额以及自动裁决路由。

异构覆盖让你能够为不同条目分配不同数量的标注者,而不是采用统一上限。常见的研究设计是:对大多数条目使用一名标注者,并在 5–10% 的样本上让两到三名标注者重叠以监控质量。Potato 通过 num_annotators_per_itemper_annotator_quota 配置块来表达这一点。

每条目标注者上限

num_annotators_per_item 是规范键。它接受单个整数作为统一上限,或接受一个带默认值、重叠样本以及可选自适应提升的结构化映射:

yaml
num_annotators_per_item:
  default: 1
  overlap_sample:
    fraction: 0.1
    count: 3
    stratify_by: domain
    seed: 42
  adaptive:
    enabled: true
    disagreement_threshold: 0.5
    boost_to: 3
  min: 1

max_annotations_per_item 现在是 num_annotators_per_item: <int> 的已弃用别名。

重叠样本

overlap_sample 块会在一个确定性的条目子集上提高上限以监控质量。采样在启动时进行一次,所选条目会被打上 required_annotations 标记,以便分配逻辑将它们视为高覆盖条目。

字段类型描述
fraction(0, 1] 内的浮点数要采样的条目比例
countint ≥ 2采样条目的标注者上限(必须超过 default
stratify_by字符串(可选)用于对样本进行分层的条目数据字段
seedint(可选)RNG 种子;默认为全局 random_seed

设置 stratify_by 时,比例会按层应用,因此每个类别都按比例贡献。

自适应提升

自适应提升会扩大那些早期标注者出现分歧的条目的上限。一旦某个条目至少有两个标注,且其分歧分数超过 disagreement_threshold,其上限就会提升到 boost_to,并且该条目会重新进入分配队列。每个条目仅提升一次。

每位标注者配额

per_annotator_quota 控制为每位标注者分配多少条目,独立于每条目上限:

yaml
per_annotator_quota:
  default: 100
  by_user:
    alice: 30
  by_user_role:
    expert: 30
    novice: 200
 
user_roles:
  alice: expert
  carol: novice

解析顺序:by_user[uid]by_user_role[user_roles[uid]]default

裁决自动路由

当裁决块启用时,达到上限的重叠样本条目会被自动评分,如果一致性低于 agreement_threshold,就会被推入裁决队列。低质量条目会在样本饱和时立即显现,而不必等到裁决者手动重建队列。

yaml
adjudication:
  enabled: true
  adjudicator_users: [admin]
  min_annotations: 2
  agreement_threshold: 0.75

检查一致性

一旦重叠样本条目饱和,一致性统计数据便可在 /admin/iaa 处获取,它会计算适合每个模式 annotation_type 的指标集——例如,名义型方案使用 Cohen's 和 Fleiss' kappa,序数型方案使用加权 kappa,跨度(span)使用词元级 kappa 加上 span F1。有关这些指标含义的说明,请参见标注者间一致性指南

示例

一个可运行的演示位于 examples/advanced/heterogeneous-coverage/。从仓库根目录运行:

bash
python potato/flask_server.py start examples/advanced/heterogeneous-coverage/config.yaml -p 8000

它使用了横跨两个领域的 20 个条目,按领域分层抽取 20% 用于 3 名标注者重叠,在阈值 0.5 处启用自适应提升,定义了两个专长层级,并将低一致性条目路由到裁决。

相关

有关实现细节,请参见源文档