2.2 质量控制

自动和手动的数据准备的好的工具是必不可少的。然而,一个高质量的语料库的建立很大程度取决于文档、培训和工作流程等平凡的东西。标注指南确定任务并记录标记约定。它们可能会定期更新以覆盖不同的情况,同时制定实现更一致的标注的新规则。在此过程中标注者需要接受训练,包括指南中没有的情况的解决方法。需要建立工作流程,尽可能与支持软件一起,跟踪哪些文件已被初始化、标注、验证、手动检查等等。可能有多层标注,由不同的专家提供。不确定或不一致的情况可能需要裁决。

大的标注任务需要多个标注者,由此产生一致性的问题。一组标注者如何能一致的处理呢?我们可以通过将一部分独立的原始材料由两个人分别标注,很容易地测量标注的一致性。这可以揭示指南中或标注任务的不同功能的不足。在对质量要求较高的情况下,整个语料库可以标注两次,由专家裁决不一致的地方。

报告标注者之间对语料库达成的一致性被认为是最佳实践(如通过两次标注 10%的语料库)。这个分数作为一个有用的在此语料库上训练的所有自动化系统的期望性能的上限。

小心!

应谨慎解释标注者之间一致性得分,因为标注任务的难度差异巨大。例如,90%的一致性得分对于词性标注是可怕的得分,但对语义角色标注是可以预期的得分。

Kappa 系数 K 测量两个人判断类别和修正预期的期望一致性的一致性。例如,假设要标注一个项目,四种编码选项可能性相同。这种情况下,两个人随机编码预计有 25%可能达成一致。因此,25%一致性将表示为 k = 0,相应的较好水平的一致性将依比例决定。对于一个 50%的一致性,我们将得到 k = 0.333,因为 50 是从 25 到 100 之间距离的三分之一。还有许多其他一致性测量方法;详情请参阅help(nltk.metrics.agreement)

Images/windowdiff.png

图 2.1:一个序列的三种分割:小矩形代表字、词、句,总之,任何可能被分为语言单位的序列;S<sub>1</sub>和 S<sub>2</sub>是接近一致的,两者都与 S<sub>3</sub>显著不同。

我们还可以测量语言输入的两个独立分割的一致性,例如分词、句子分割、命名实体识别。在2.1中,我们看到三种可能的由标注者(或程序)产生的项目序列的分割。虽然没有一个完全一致,S<sub>1</sub>和 S<sub>2</sub>是接近一致的,我们想要一个合适的测量。Windowdiff 是评估两个分割一致性的一个简单的算法,通过在数据上移动一个滑动窗口计算近似差错的部分得分。如果我们将词符预处理成 0 和 1 的序列,当词符后面跟着边界符号时记录下来,我们就可以用字符串表示分割,应用 windowdiff 打分器。

  1. >>> s1 = "00000010000000001000000"
  2. >>> s2 = "00000001000000010000000"
  3. >>> s3 = "00010000000000000001000"
  4. >>> nltk.windowdiff(s1, s1, 3)
  5. 0.0
  6. >>> nltk.windowdiff(s1, s2, 3)
  7. 0.190...
  8. >>> nltk.windowdiff(s2, s3, 3)
  9. 0.571...

上面的例子中,窗口大小为 3。Windowdiff 计算在一对字符串上滑动这个窗口。在每个位置它计算两个字符串在这个窗口内的边界的总数,然后计算差异。最后累加这些差异。我们可以增加或缩小窗口的大小来控制测量的敏感度。