自然语言处理中训练一元语法标注器
简介
单个词语称为一元语法。一元语法标注器是一种仅需要一个词语就能推断出该词语词性的标注器。它只有一个词语的上下文。NLTK 库为我们提供了 UnigramTagger,它继承自 NgramTagger。
在本文中,让我们了解自然语言处理中一元语法标注器的训练过程。
一元语法标注器及其使用 NLTK 进行的训练
工作原理
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("Sample Sentence : ",tb.sents()[1]) print("Tag sample sentence : ", uni_tagger.tag(tb.sents()[1]))
输出
Sample Sentence : ['Mr.', 'Vinken', 'is', 'chairman', 'of', 'Elsevier', 'N.V.', ',', 'the', 'Dutch', 'publishing', 'group', '.'] Tag sample sentence : [('Mr.', 'NNP'), ('Vinken', 'NNP'), ('is', 'VBZ'), ('chairman', 'NN'), ('of', 'IN'), ('Elsevier', 'NNP'), ('N.V.', 'NNP'), (',', ','), ('the', 'DT'), ('Dutch', 'JJ'), ('publishing', 'NN'), ('group', 'NN'), ('.', '.')]
在以上代码示例中,第一个 Unigram Tagger 在 Treebank 中的前 4000 个句子上进行训练。一旦句子训练完成,它们就会使用相同的标注器对任何句子进行标注。在以上代码示例中,使用了句子 1。
以下代码示例可用于测试和评估 Unigram Tagger。
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("Test score : ",uni_tagger.evaluate(sent_tested))
输出
Test score : 0.96
在以上代码示例中,一元语法标注器在 4000 个句子上进行训练,然后在最后 1000 个句子上进行评估。
平滑技术
在许多情况下,我们需要在自然语言处理中构建统计模型,例如,可以根据训练数据预测下一个词语或自动完成句子。在如此多的词语组合或可能性中,获得最准确的预测词语是必不可少的。在这种情况下,可以使用平滑技术。平滑是一种调整训练模型中概率的方法,以便它能够更准确地预测词语,甚至预测训练语料库中不存在的适当词语。
平滑技术的类型
拉普拉斯平滑
它也称为加 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 模型的混合。
例如,考虑句子“他去了 xxx”,我们可以说三元语法“他去了到”出现过一次,如果词语是“到”,则词语“他去了”的概率为 1,对于所有其他词语,概率为 0。
结论
UnigramTagger 是一个有用的 NLTK 工具,用于训练一个标注器,该标注器可以使用单个词语作为上下文来确定句子的词性。UnigramTagger 在 NLTK 工具包中可用,该工具包使用 Ngram Tagger 作为其父类。