1.5 探索上下文语境

通过增加特征提取函数,我们可以修改这个词性标注器来利用各种词内部的其他特征,例如词长、它所包含的音节数或者它的前缀。然而,只要特征提取器仅仅看着目标词,我们就没法添加依赖词出现的 上下文语境 特征。然而上下文语境特征往往提供关于正确标记的强大线索——例如,标注词”fly”,如果知道它前面的词是“a”将使我们能够确定它是一个名词,而不是一个动词。

为了采取基于词的上下文的特征,我们必须修改以前为我们的特征提取器定义的模式。不是只传递已标注的词,我们将传递整个(未标注的)句子,以及目标词的索引。1.6演示了这种方法,使用依赖上下文的特征提取器定义一个词性标记分类器。

  1. def pos_features(sentence, i): ![[1]](/projects/nlp-py-2e-zh/Images/78bc6ca8410394dcf6910484bc97e2b6.jpg)
  2. features = {"suffix(1)": sentence[i][-1:],
  3. "suffix(2)": sentence[i][-2:],
  4. "suffix(3)": sentence[i][-3:]}
  5. if i == 0:
  6. features["prev-word"] = "<START>"
  7. else:
  8. features["prev-word"] = sentence[i-1]
  9. return features

很显然,利用上下文特征提高了我们的词性标注器的准确性。例如,分类器学到一个词如果紧跟在词”large”或”gubernatorial”后面,极可能是名词。然而,它无法学到,一个词如果它跟在形容词后面可能是名词,这样更一般的,因为它没有获得前面这个词的词性标记。在一般情况下,简单的分类器总是将每一个输入与所有其他输入独立对待。在许多情况下,这非常有道理。例如,关于名字是否倾向于男性或女性的决定可以通过具体分析来做出。然而,有很多情况,如词性标注,我们感兴趣的是解决彼此密切相关的分类问题。