使用Krippendorff Alpha

时间:2017-07-27 14:33:48

标签: python nltk metrics

我正在尝试使用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

玩具示例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

2 个答案:

答案 0 :(得分:2)

由Klaus Krippendorff提供的答案

我不知道alpha的NLTK实现。你复制的内容似乎没有错。

为了阐明,α不是基于区间度量差异。区间度量差异函数只是众多版本中的一个。它响应有意义的代数差异,在名义范畴中不存在。

顺便提一下,当您拥有二进制数据时,所有度量标准差异都应该 产生相同的结果,因为只有两个值相同或不同。

让我集中讨论两个编码4个单元的编码器的两个数值例子。重合矩阵(表示单位内所有可能的有价值对的总和)在计算中总和为n = 8而不是10。他们看起来像:

enter image description here

是的,因为方差收敛到零,所以alpha也是如此。在你的第一个例子中几乎没有变化,唯一的偏差是一种分歧。无法依赖数据 计算相关性,测试统计假设,提供有关回答研究问题的现象的信息。如果注释没有任何变化,可靠性数据将无法向您保证编码器是否处于睡眠状态,决定对所有内容进行编码以达到100%的一致性,他们使用的仪器被打破。数据需要变化。

在第二个示例中,您的方差更大。无论您使用名义还是间隔度量计算alpha,可靠性都必须更高。

答案 1 :(得分:0)

手头似乎有两个问题:

1)使用metric=interval_distance的Krippendorff alpha系数的NLTK实现使用与Krippendorff's paper中发布的公式不同的基础公式,或者代码中存在错误。

  • 对于玩具示例1,名义alpha值应为-0.125(而非NLTK返回的0.0):

  • 同样,对于玩具示例2,alpha值应为0.36(而不是NLTK返回的0.93)。

2)Krippendorff指标可以对输入数据进行假设,和/或不是为处理具有少量观察和观察到的协议/不一致单位的玩具示例而设计的。

对于玩具示例1,NTLK 0返回的metric=binary_distance的alpha系数值通过手动计算确认。

二进制alpha公式:

玩具示例1: