回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试图使用NLTK的<code>nltk.metrics.agreement</code>模块计算一个玩具示例上的注释器间的一致性。在</p>
<p>具体来说,我尝试使用<code>alpha</code>度量(<a href="http://repository.upenn.edu/cgi/viewcontent.cgi?article=1043&context=asc_papers" rel="nofollow noreferrer">Krippendorff</a>)使用两个不同的距离度量(<code>binary_distance</code>和<code>interval_distance</code>)来计算一致性。在</p>
<p>下面玩具示例1的预期结果是接近<code>1</code>的值,它几乎完全一致(只有一对不同意)。然而,在这两种情况下res都是<code>0.0</code>。为什么?在</p>
<p>我知道Krippendorff的alpha是为间隔而设计的,而不是像两个类别标签那样的二进制。但是,我不希望模块返回零协议值。作为背景,这个玩具示例只是一个较大数据集的特定子集,该数据集包含范围为[1,4]的注释分数。该子集属于该数据集中的特定总体。在</p>
<p>在玩具的例子中,间隔alpha看起来更好。二进制alpha可能会引发一个异常,因为现在数据中有三个标签。在</p>
<p><strong>玩具示例1</strong></p>
<pre><code>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
</code></pre>
<p><strong>玩具示例2</strong>(用<code>1</code>代替<code>4</code>替换了第一对玩具)</p>
^{pr2}$