基于深度学习的自然语言处理
上QQ阅读APP看书,第一时间看更新

2.3 词性标注的应用

就像文本预处理技术通过鼓励机器只关注重要的细节来帮助机器更好地理解自然语言一样,词性标注帮助机器实际解释文本的上下文,从而理解它。虽然文本预处理更像是一个清理阶段,词性标注实际上是机器开始输出有关语料库的有价值信息的部分。

理解哪些单词对应哪些词性,有助于机器以多种方式处理自然语言:

❏词性标注有助于区分同音异义词——拼写相同但含义不同的词。例如,单词“play”可以指进行活动时的动词,也可以指将在舞台上表演的戏剧作品中的名词。词性标注器可以通过确定词性标注来帮助机器理解单词“play”在什么上下文中使用。

❏词性标注建立在句子和分词需求的基础上,这是自然语言处理的基本任务之一。

❏词性标注被其他算法用于执行更高级别的任务,我们将在本章讨论命名实体识别。

❏词性标注也有助于情感分析和问题回答的过程。例如,在句子“蒂姆·库克(Tim Cook)是这家科技公司的首席执行官”中,你希望机器能够用公司的名称来代替“这家科技公司”。词性标注可以帮助机器识别短语“该技术公司”是限定词((this)+名词短语(technology company))。例如,它可以使用这些信息在网上搜索文章,并检查“蒂姆·库克是苹果公司的首席执行官”出现多少次,然后决定苹果公司是否是正确的答案。

因此,词性标注是理解自然语言过程中的重要一步,因为它有助于完成其他任务。

词性标注的类型

正如我们在上一节中看到的,词性标注器可以是有监督学习类型和无监督学习类型。这种差异很大程度上影响了标注器的训练方式。还有一个区别会影响标注器实际上如何给一个未标记的单词分配一个标记,这是用来训练标注器的方法。

这两种类型的词性标注器是基于规则的和随机的。下面分别介绍。

1.基于规则的词性标注器

这些词性标注器的工作方式几乎和它们的名字一样——按照规则。给标注器一组规则的目的是确保它们在大多数情况下准确地标记一个模棱两可或未知的单词,因此大多数规则仅在标注器遇到模棱两可或未知的单词时才适用。

这些规则通常被称为上下文框架规则,并为标注器提供上下文信息,以理解给一个模棱两可的单词加什么标记。一个规则的例子如下:如果一个模棱两可或未知的单词“x”前面有限定词,后面有名词,那么就给它指定一个形容词的标记。例如“一个小女孩”,其中“一个”是限定词,“女孩”是名词,因此标注器会给“小”一词指定形容词。

规则取决于你的语法理论。此外,它们通常还包括大写和标点符号等规则。这可以帮助你识别代词,并将其与句子开头(句号后)的单词区分开来。

大多数基于规则的词性标注器都是有监督的学习算法,以便能够学习正确的规则并将其应用于正确标注歧义词。然而,最近有一些实验以无监督的方式训练这些标注器。未标注的文本被给予标注器进行标注,并且人类检查输出标注,纠正不准确的标注。然后,将正确标注的文本交给标注器,以便它可以在两个不同的标注集之间制定校正规则,并学习如何准确标注单词。

这种基于校正规则的词性标注器的一个例子是布里尔的标记器,它遵循前面提到的过程。它的功能可以和绘画艺术相提并论——当画房子的时候,先画房子的背景(例如,棕色的正方形),然后用更细的刷子在背景上画细节,例如门和窗户。类似地,布里尔的基于规则的词性标注器的目标是首先通常标注一个未标注的语料库(即使有些标注可能是错误的),然后重新访问这些标注以理解为什么有些标注是错误的并从中学习。

注意 练习10~16可以在同一个Jupyter Notebook上进行。

练习10:执行基于规则的词性标注

NLTK有一个基于规则的词性标记器。在本练习中,我们将使用NLTK的词性标注器来执行词性标注。以下步骤将帮助你解决问题:

1)根据你的操作系统,打开cmd或终端。

2)导航至所需路径,并使用以下命令初始化Jupyter Notebook:

3)导入nltk和punkt,如下所示:

4)将输入字符串存储在名为s的变量中,如下所示:

5)将句子标记化,如下所示:

6)在标记上应用词性标注器,然后打印标注集,如下所示:

你的输出将如图2-3所示。

图2-3 标记输出

7)要理解“NN”词性标注代表什么,可以使用以下代码行:

输出如图2-4所示。

图2-4 名词细节

你可以通过使用“NN”代替每个词性标注来实现这一点。

让我们用一个包含同音异义词的句子来试试。

8)将包含同音异义词的输入字符串存储在名为sent的变量中:

9)标注这个句子,然后在标记上应用词性标注符,如下所示:

预期输出如图2-5所示。

图2-5 标注输出

如你所见,单词play的第一个实例被标注为“VB”,代表动词;单词play的第二个实例被标记为“NN”,代表名词。因此,词性标注器能够区分同音异义词和同一个词的不同实例。这有助于机器更好地理解自然语言。

2.随机的词性标注器

随机词性标注器是使用除了基于规则的方法之外的任何方法来给单词指定标注的标注器。因此,有许多方法属于随机范畴。当确定单词的词性标注时,所有结合统计方法(如概率和频率)的模型都是随机模型。

我们将讨论三种模型:

❏单位法或词频法

❏n元法

❏隐马尔可夫模型

1)单位法或词频法

最简单的随机词性标注器仅根据一个单词与一个标签一起出现的概率将词性标注分配给模棱两可的单词。这基本上意味着,标注器在训练集中发现的与某个单词最常链接的任何标注,都会被分配给同一个单词的模糊实例。例如,假设训练集中的单词“美丽(beautiful)”在大多数情况下被标注为形容词。当词性标注器遇到“beaut”时,不能直接标注,因为它不是一个合适的词。这将是一个模棱两可的单词,因此它将根据该单词的不同实例被每个词性标注标注的次数来计算它成为每个词性标注的概率。“beaut”可以被看作是“美丽”的模糊形式,由于“美丽”在大多数情况下被标记为形容词,所以词性标注器也会将“beaut”标记为形容词。这称为词频法,因为标记器会检查分配给单词的词性标注的频率。

2)n元法

这基于前面的方法。名称中的n代表在确定一个单词属于特定词性标注的概率时要考虑多少个单词。在单位标注器中,n=1,因此只考虑单词本身。增加n值会导致标注器计算n个词性标注的特定序列一起出现的概率,并基于该概率为单词分配标签。

当给一个单词分配一个标注时,这些词性标注器通过将它是什么类型的标记以及前面n个单词的词性标注考虑在内来创建单词的上下文。基于上下文,标注器选择最有可能与前面单词的标注顺序一致的标注,并将其分配给所讨论的单词。最流行的n元标注器被称为维特比算法(Viterbi Algorithm)。

3)隐马尔可夫模型

隐马尔可夫模型结合了词频法和n元法。马尔可夫模型是描述一系列事件或状态的模型。每种状态发生的概率仅取决于前一事件所达到的状态。这些事件基于观察。隐马尔可夫模型的“隐藏”方面是事件可能隐藏的一组状态。

在词性标注的情况下,观察值是单词标记,隐藏的状态集是词性标注。这种工作方式是,模型基于前一个单词的标注计算一个单词具有特定标注的概率。例如,假设前一个单词是名词,则P(V|NN)是当前单词成为动词的概率。

注意 这是隐马尔可夫模型的一个非常基本的解释。要了解更多信息,请访问https://medium.freecodecamp.org/an-introduction-to-part-of-speech-tagging-and-the-hidden-markov-model-953d45338f24

要了解有关随机模型的更多详细信息,请访问http://ccl.pku.edu.cn/doubtfire/NLP/Lexical_Analysis/Word_Segmentation_Tagging/POS_Tagging_Overview/POS%20Tagging%20Overview.htm

前面提到的三种方法已经按照每个模型建立在前一个模型的基础上并提高其准确性的顺序进行了解释。然而,建立在前面模型基础上的每个模型都涉及更多的概率计算,因此根据训练语料库的大小,执行计算需要更多的时间。因此,使用哪种方法取决于语料库的大小。

练习11:执行随机词性标注

spaCy的词性标注是随机的。在本练习中,我们将在一些句子上使用spaCy的词性标注器来查看基于规则的标注和随机标注结果的差异。以下步骤将帮助你解决问题:

注意 要安装spaCy,请访问链接https://spacy.io/usage并按照说明操作。

1)导入spaCy:

2)加载spaCy的'en_core_web_sm'模型:

spaCy有特定于不同语言的模型。'en_core_web_sm'模型是一种英语语言模型,已经在博客和新闻文章等书面网络文本上训练了,包括词汇、语法和实体。

注意 要了解更多关于spaCy模型的信息,请访问https://spacy.io/models

3)将模型与你想要分配词性标注的句子相匹配。这里使用我们给NLTK的词性标注器的句子:

4)现在,让我们标记这个句子,分配词性标注,并打印它们:

预期输出如图2-6所示。

图2-6 词性标注的输出

要理解词性标注代表什么,请使用以下代码行:

用你想知道的词性标注替换“VBZ”。在这种情况下,你的输出将是:

如你所见,结果与从NLTK词性标注器获得的结果基本相同。这是因为我们的输入很简单。