2.2.2 词性标注器
词性标注是给单词指定标签的过程。这是通过一种称为词性标注器的算法来完成的。算法的目的就这么简单。
大多数词性标注器都是有监督学习算法。有监督学习算法是机器学习算法,学习根据以前标记的数据执行任务。这些算法以数据行作为输入。该数据包含特征列(用于预测某些事物的数据),通常是一个标签列(需要预测的事物)。模型在这个输入上被训练,以学习和理解哪些特征对应于哪个标签,从而学习如何执行预测标签的任务。最终,它们会得到未标记的数据(仅由特征列组成的数据),它们必须为这些数据预测标记。
如图2-1所示是有监督学习模型的一般说明。
图2-1 有监督学习模型
注意 有关有监督学习的更多信息,请访问https://www.packtpub.com/big-data-and-business-intelligence/applied-supervised-learning-python。
因此,词性标注器通过学习先前标注的数据集来磨炼它们的预测能力。在这种情况下,数据集可以由多种特征组成,例如单词本身(显然),单词的定义,单词与其前一个、后一个以及出现在同一句子、短语或段落中的其他相关单词的关系。这些特性共同帮助标注器预测应该给一个单词分配什么样的词性标记。用于训练有监督词性标注器的语料库称为预标注语料库。这种语料库作为创建一个系统的基础,使词性标注器能够标记未标记的单词。这些系统/类型的词性标注将在下一节讨论。
然而,预标注语料库并不总是容易获得的,为了准确地训练标注器,语料库必须很大。因此,最近出现了可被视为无监督学习算法的词性标注器的迭代。这些算法将仅由特征组成的数据作为输入。这些特征与标签无关,因此算法不是预测标签,而是形成输入数据的组或簇。
在词性标注的情况下,模型使用计算方法自动生成词性标注集。虽然在有监督的词性标注器的情况下,预标注语料库负责帮助为标注器创建系统的过程,但是这些计算方法作为创建这种系统的基础。无监督学习方法的缺点是自动生成的词性标注聚类可能不总是像在用于训练有监督方法的预标注语料库中发现的那样准确。
总之,有监督学习方法和无监督学习方法的主要区别如下:
❏有监督词性标注器将预标注语料库作为输入进行训练,而无监督词性标注器将未标注的语料库作为输入来创建一组词性标注。
❏有监督词性标注器根据标注的语料库创建带有各自词性标注的单词词典,而无监督词性标注器使用自己创建的词性标注集生成这些词典。
几个Python库(如NLTK和spaCy)已经训练了自己的词性标注器。你将在下面的内容中学习如何使用标签,但是现在让我们用一个例子来理解词性标注器的输入和输出。需要记住的一件重要事情是,由于词性标注器为给定语料库中的每个单词指定了词性标注,因此输入需要以单词标记的形式进行。因此,在执行词性标注之前,需要对语料库进行标记化。假设我们给训练有素的词性标注器以下标记作为输入:
在词性标注之后,输出将如下所示:
这里,PRO=代词,V=动词,DT=限定词,N=名词。
训练好的有监督和无监督词性标注器的输入和输出是相同的:分别是标记和带有词性标注的标记。
注意 这不是输出的确切语法。稍后当你完成练习时,你会看到正确的输出。这只是给你一个词性标注器的概念。
前面提到的词性是非常基本的标签,为了简化理解自然语言的过程,词性算法创建了更复杂的标签,这些标签是基本标签的变体。以下是词性标注及其描述的完整列表,如图2-2所示。
图2-2 带描述的词性标注
这些标签来自Penn Treebank标签集(https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html),这是最受欢迎的标签集之一。大多数预先训练过的英语标注器都接受过这种标签集的训练,包括NLTK的词性标注器。