5.7 准确性的极限

一个 n-gram 标注器准确性的上限是什么?考虑一个三元标注器的情况。它遇到多少词性歧义的情况?我们可以根据经验决定这个问题的答案:

  1. >>> cfd = nltk.ConditionalFreqDist(
  2. ... ((x[1], y[1], z[0]), z[1])
  3. ... for sent in brown_tagged_sents
  4. ... for x, y, z in nltk.trigrams(sent))
  5. >>> ambiguous_contexts = [c for c in cfd.conditions() if len(cfd[c]) > 1]
  6. >>> sum(cfd[c].N() for c in ambiguous_contexts) / cfd.N()
  7. 0.049297702068029296

因此,1/20 的三元是有歧义的[示例]。给定当前单词及其前两个标记,根据训练数据,在 5%的情况中,有一个以上的标记可能合理地分配给当前词。假设我们总是挑选在这种含糊不清的上下文中最有可能的标记,可以得出三元标注器准确性的一个下界。

调查标注器准确性的另一种方法是研究它的错误。有些标记可能会比别的更难分配,可能需要专门对这些数据进行预处理或后处理。一个方便的方式查看标注错误是混淆矩阵。它用图表表示期望的标记(黄金标准)与实际由标注器产生的标记:

  1. >>> test_tags = [tag for sent in brown.sents(categories='editorial')
  2. ... for (word, tag) in t2.tag(sent)]
  3. >>> gold_tags = [tag for (word, tag) in brown.tagged_words(categories='editorial')]
  4. >>> print(nltk.ConfusionMatrix(gold_tags, test_tags))

基于这样的分析,我们可能会决定修改标记集。或许标记之间很难做出的区分可以被丢弃,因为它在一些较大的处理任务的上下文中并不重要。

分析标注器准确性界限的另一种方式来自人类标注者之间并非 100%的意见一致。[更多]

一般情况下,标注过程会损坏区别:例如当所有的人称代词被标注为PRP时,词的特性通常会失去。与此同时,标注过程引入了新的区别从而去除了含糊之处:例如 deal 标注为VBNN。这种消除某些区别并引入新的区别的特点是标注的一个重要的特征,有利于分类和预测。当我们引入一个标记集的更细的划分时,在 n-gram 标注器决定什么样的标记分配给一个特定的词时,可以获得关于左侧上下文的更详细的信息。然而,标注器同时也将需要做更多的工作来划分当前的词符,只是因为有更多可供选择的标记。相反,使用较少的区别(如简化的标记集),标注器有关上下文的信息会减少,为当前词符分类的选择范围也较小。

我们已经看到,训练数据中的歧义导致标注器准确性的上限。有时更多的上下文能解决这些歧义。然而,在其他情况下,如(Church, Young, & Bloothooft, 1996)中指出的,只有参考语法或现实世界的知识,才能解决歧义。尽管有这些缺陷,词性标注在用统计方法进行自然语言处理的兴起过程中起到了核心作用。1990 年代初,统计标注器令人惊讶的精度是一个惊人的示范,可以不用更深的语言学知识解决一小部分语言理解问题,即词性消歧。这个想法能再推进吗?第7.中,我们将看到,它可以。