十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

数据标注一致性度量:从 Cohen‘s Kappa 到 Fleiss‘ Kappa 的计算与消歧

数据标注一致性度量:从 Cohen‘s Kappa 到 Fleiss‘ Kappa 的计算与消歧 数据标注一致性度量从 Cohens Kappa 到 Fleiss Kappa 的计算与消歧在自然语言处理与机器学习项目中常有一句老话“垃圾进垃圾出Garbage In, Garbage Out”。如果训练集的标注质量低劣即使使用百亿参数的大模型也无法获得可靠的泛化表现。在多人协同标注如文本情感分析、实体抽取、意图分类中如何量化标注人员之间的理解一致性单纯看“两人标注结果相同的比例”为什么是极具欺骗性的本文详细拆解**标注一致性系数Inter-Annotator Agreement, IAA**的核心算法Cohens Kappa与Fleiss Kappa并给出工业级冲突消歧流水线实现。1. 为什么“重合百分比Percentage Agreement”会严重失真假设两位标注员对 100 条评论进行“是否涉嫌违规”的二分类标注。其中 90 条评论是明显的合规内容。即使两位标注员完全不看文本、随机乱猜由于合规样本占绝大多数两人凑巧选到相同标签的概率随机偶合率 Chance Agreement本身就高达 $0.9 \times 0.9 0.1 \times 0.1 82%$因此表面上 85% 的重合度扣除掉随机蒙对的 82% 之后真实的有效共识微乎其微。Kappa 系数的核心逻辑将观测到的重合度 $P_o$ 扣除掉随机偶合期望 $P_e$计算真实达成的超额一致性比例$$\kappa \frac{P_o - P_e}{1 - P_e}$$$\kappa 0.4$一致性极差说明标注规范定义模糊或标注员未受培训$0.4 \le \kappa 0.75$中等一致性需优化指南并对冲突样本复审$\kappa \ge 0.75$高一致性数据质量合格可直接送入模型训练。2. Cohens Kappa双人标注与 Fleiss Kappa多人标注计算Cohens Kappa专用于恰好两位标注员评估相同样本集Fleiss Kappa支持**任意固定数量 $M$ 位标注员$M \ge 3$**协同标注的大规模场景。import numpy as np from sklearn.metrics import cohen_kappa_score from typing import List, Dict, Any def compute_cohen_kappa(annotator_a: List[int], annotator_b: List[int]) - float: # 基于 sklearn 计算双人一致性 kappa cohen_kappa_score(annotator_a, annotator_b) print(fCohens Kappa 得分: {kappa:.4f}) return kappa def compute_fleiss_kappa(matrix: np.ndarray) - float: matrix: 形状为 (N, K) 的矩阵 N: 样本总数 K: 类别总数 matrix[i, j] 表示第 i 个样本被赋予第 j 个类别的标注员人数 N, K matrix.shape n_annotators np.sum(matrix[0, :]) # 每条样本的标注员总数 # 1. 计算每个类别的全局边缘分布概率 p_j p_j np.sum(matrix, axis0) / (N * n_annotators) # 2. 计算每个样本的内部一致性 P_i P_i (np.sum(matrix ** 2, axis1) - n_annotators) / (n_annotators * (n_annotators - 1)) # 3. 计算观测一致性 P_o 与期望一致性 P_e P_o np.mean(P_i) P_e np.sum(p_j ** 2) if 1.0 - P_e 0: return 1.0 kappa (P_o - P_e) / (1.0 - P_e) print(fFleiss Kappa 得分: {kappa:.4f}) return kappa3. 冲突消歧与多级仲裁流水线在工业级数据标注平台中必须建立自动化的“一致通过 - 多数表决 - 专家仲裁”漏斗机制def arbitrate_annotations(sample_annotations: Dict[str, List[int]], expert_decision_threshold: float 0.6) - Dict[str, Any]: sample_annotations: {sample_001: [1, 1, 1], sample_002: [1, 2, 1], sample_003: [0, 1, 2]} approved_dataset {} pending_expert_review [] for sample_id, labels in sample_annotations.items(): counts np.bincount(labels) max_votes np.max(counts) consensus_ratio max_votes / len(labels) majority_label int(np.argmax(counts)) # 1. 若达成绝对一致或高比例多数共识 if consensus_ratio expert_decision_threshold: approved_dataset[sample_id] majority_label else: # 2. 严重冲突分歧样本流转至专家终审池 pending_expert_review.append({ sample_id: sample_id, votes: labels, consensus_ratio: consensus_ratio }) print(f自动通过样本数: {len(approved_dataset)} | 触发专家仲裁数: {len(pending_expert_review)}) return {approved: approved_dataset, to_arbitrate: pending_expert_review}4. 标注质量治理准则先试标Pilot Annotation再量产在启动 10 万条大规模标注前先抽取 500 条样本由全体标注员盲测打标。若 Fleiss Kappa 未达到 0.70严禁启动量产必须先修订标注手册中歧义模糊的边界 Case动态插入黄金样本Gold Standard Probing在日常标注任务流中随机静默混入 5% 带有已知标准答案的“黄金样本”实时监控每个标注员的单人准确率对于指标跌破 80% 的人员立即暂停其任务权限。
返回列表