我正在尝试使用 NLTK 模块计算玩具示例的注释者间一致性nltk.metrics.agreement。
具体来说,我尝试使用两个不同的距离度量(和)使用alpha度量(Krippendorff )来计算一致性。binary_distanceinterval_distance
下面的玩具示例 1 的预期结果几乎完全一致(只有一对不同意),其值接近1。然而,在这两种情况下 res 都是0.0。为什么?
据我所知,Krippendorff 的 alpha 是为区间而不是类似二进制的二类标签而设计的。然而,我不希望模块返回零协议值。对于背景,玩具示例只是包含 [1,4] 范围内的注释分数的较大数据集的特定子集。该子集属于该数据集中的特定群体。
在玩具示例 2 中,间隔 alpha 的情况开始看起来更好。鉴于数据中现在有三个标签,二进制 alpha 可能会引发异常。
玩具示例1
from nltk.metrics.agreement import AnnotationTask
from nltk.metrics import interval_distance, binary_distance
annotation_triples = [('coder_1', '1', 4),
('coder_2', '1', 4),
('coder_1', '2', 4),
('coder_2', '2', 4),
('coder_1', '3', 4),
('coder_2', '3', 4),
('coder_1', '4', 4),
('coder_2', '4', 3)]
t = AnnotationTask(annotation_triples, distance=binary_distance)
result = t.alpha()
t = AnnotationTask(annotation_triples, distance=interval_distance)
result = t.alpha()
result binary: 0.0
result interval: 0.0
Run Code Online (Sandbox Code Playgroud)
玩具示例 2(使用 代替 替换第一1对4)
annotation_triples = [('coder_1', '1', 1),
('coder_2', '1', 1),
('coder_1', '2', 4),
('coder_2', '2', 4),
('coder_1', '3', 4),
('coder_2', '3', 4),
('coder_1', '4', 4),
('coder_2', '4', 3)]
result binary: 0.59
result interval: 0.93
Run Code Online (Sandbox Code Playgroud)
小智 7
克劳斯·克里彭多夫提供的答案
\n\n我不知道 alpha 的 NLTK 实现。从你复制的来看,似乎没有错误。
\n\n澄清一下,\xce\xb1 不是基于间隔度量差异。区间度量差分函数只是众多版本之一。它响应名义类别中不存在的有意义的代数差异。
\n\n顺便说一句,当您拥有二进制数据时,所有指标差异都应产生相同的结果,因为只有两个值相同或不同。
\n\n让我重点关注您提供的 2 个编码器编码 4 个单元的两个数值示例。在计算中,重合矩阵(将单位内所有可能的值对的总和制成表格)的总和为 n=8,而不是 10。他们看着像是:
\n\n\n\n是的,随着方差收敛到零,alpha 也收敛到零。在您的第一个示例中,几乎没有差异,与均匀性的唯一偏差是分歧。无法依靠这些数据来计算相关性、测试统计假设、提供有关感兴趣现象的信息来回答研究问题。如果注释没有任何变化,可靠性数据将无法向您保证编码人员是否睡着了,决定对所有内容进行相同的编码以达到 100% 的一致性,他们使用的工具已损坏。数据需要变化。
\n\n在第二个示例中,您确实有较大的方差。无论您使用名义指标还是区间指标计算 alpha,可靠性都必须更高。
\n