在 NLP 中训练 Unigram 标注器

machine learningpythonserver side programmingprogramming

简介

单个标记称为 unigram。unigram 标注器是一种只需要一个单词就能推断单词词性的标注器。它具有单个单词的上下文。NLTK 库为我们提供了 UnigramTagger,它继承自 NgramTagger。

在本文中,让我们了解 Unigram Tagger 在 NLP 中的训练过程。

Unigram Tagger 及其使用 NLTK 的训练

WORKING

  • UnigramTagger 继承自 ContextTagger。实现了 context() 方法。 context 方法具有与 choose_tag() 相同的参数

  • 从 context() 方法中,将使用单词标记来创建模型。此词用于寻找最佳标签。

  • UnigramTagger 将创建一个具有上下文的模型。

Python 实现

import nltk
nltk.download('treebank')
from nltk.tag import UnigramTagger
from nltk.corpus import treebank as tb
sentences_trained = treebank.tagged_sents()[:4000]
uni_tagger = UnigramTagger(sentences_trained)
print("示例句子: ",tb.sents()[1])
print("标记示例句子: ", uni_tagger.tag(tb.sents()[1]))

输出

示例句子:['Mr.', 'Vinken', 'is', 'chairman', 'of', 'Elsevier', 'N.V.', ',', 'the', 'Dutch', 'publishing', 'group', '.']
标记示例句子:[('Mr.', 'NNP'), ('Vinken', 'NNP'), ('is', 'VBZ'), ('chairman', 'NN'), ('of', 'IN'), ('Elsevier', 'NNP'), ('N.V.', 'NNP'), (',', ','), ('the', 'DT'), ('Dutch', 'JJ'), ('publishing', 'NN'), ('group', 'NN'), ('.', '.')]

在上面的代码示例中,第一个 Unigram 标记器在 Treebank 的前 4000 个句子上进行训练。句子训练完成后,将使用相同的标记器对任何句子进行标记。在上面的代码示例中,使用了句子 1。

下面的代码示例可用于测试 Unigram 标注器并对其进行评估。

from nltk.corpus import treebank as tb
sentences_trained = treebank.tagged_sents()[:4000]
uni_tagger = UnigramTagger(sentences_trained)
sent_tested = treebank.tagged_sents()[3000:]
print("测试分数: ",uni_tagger.evaluate(sent_tested))

输出

测试分数:0.96

在上面的代码示例中,对 unigram 标注器进行了训练,并训练了 4000 个句子,然后对最后一个句子进行了评估1000 个句子。

平滑技术

在许多情况下,我们需要在 NLP 中构建统计模型,例如,可以根据训练数据或句子的自动完成来预测下一个单词。在如此多的单词组合或可能性的世界中,获得最准确的单词预测是必不可少的。在这种情况下,可以使用平滑。平滑是一种调整训练模型中概率的方法,以便它可以更准确地预测单词,甚至预测训练语料库中不存在的适当单词。

平滑的类型

拉普拉斯平滑

它也被称为加 1 平滑,我们将 1 添加到分母中的单词数,这样我们就不会产生 0 值或除以 0 的情况

例如,

Problaplace (wi | w(i-1)) = (count(wi w(i-1)) +1 ) / (count(w(i-1)) + N)
N = total words in the training corpus
Prob("He likes coffee")
= Prob( I | <S>)* Prob( likes | I)* Prob( coffee | likes)* Prob(<E> | coffee)
= ((1+1) / (4+6))   *  ((1+1) / (1+8))  *  ((0+1) / (1+5))  *  ((1+1) / (4+8))
= 0.00123

退避和插值

它涉及两个步骤

退避过程

  • 我们从 n-gram 开始,

  • 如果观察不足,我们检查 n-1 gram

  • 如果我们有足够的观察,我们使用 n-2 gram

插值过程

  • 我们使用不同 n-gram 模型的融合

例如,考虑句子 he went xxx,我们可以说 he went to 的三元组出现过一次,如果单词是 to,则单词 he gone 的概率为 1,对于所有其他单词,概率为 0。

结论

UnigramTagger 是一种有用的NLTK 工具用于训练标记器,该标记器可以仅使用单个单词作为上下文来确定句子的词性。UnigramTagger 在 NLTK 工具包中可用,它使用 Ngarm Tagger 作为其父类。


相关文章