NLP |组合 NGram 标记器
原文:https://www.geeksforgeeks.org/nlp-combining-ngram-taggers/
NgramTagger 有 3 个子类
- UnigramTagger
- bigrammatagger
- trigrammatagger
BigramTagger 子类使用前一个标签作为其上下文的一部分 trigrammatagger 子类使用前两个标签作为其上下文的一部分。
ngram–它是 n 个项目的子序列。 NgramTagger 子类的想法:
- 通过查看前面的单词和 P-O-S 标签,可以猜到当前单词的词性标签。
- 每个标记器维护一个上下文字典(ContextTagger 父类用于实现它)。
- 本词典用于根据上下文猜测标签。
- 在 NgramTagger 子类的情况下,上下文是一些先前标记的单词。
代码# 1:Bigram tagger 的工作
# Loading Libraries
from nltk.tag import DefaultTagger
from nltk.tag import BigramTagger
from nltk.corpus import treebank
# initializing training and testing set
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]
# Tagging
tag1 = BigramTagger(train_data)
# Evaluation
tag1.evaluate(test_data)
输出:
0.11318799913662854
代码#2:三元标记器的工作
# Loading Libraries
from nltk.tag import DefaultTagger
from nltk.tag import TrigramTagger
from nltk.corpus import treebank
# initializing training and testing set
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]
# Tagging
tag1 = TrigramTagger(train_data)
# Evaluation
tag1.evaluate(test_data)
输出:
0.06876753723289446
代码#3:集体使用 Unigram、Bigram 和 Trigram tagger。
# Loading Libraries
from nltk.tag import TrigramTagger
from tag_util import backoff_tagger
from nltk.corpus import treebank
# initializing training and testing set
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]
backoff = DefaultTagger('NN')
tag = backoff_tagger(train_sents,
[UnigramTagger, BigramTagger, TrigramTagger],
backoff = backoff)
tag.evaluate(test_sents)
输出:
0.8806820634578028
它是如何工作的?
- back _ tagger函数创建每个 tagger 类的一个实例。
- 它将以前的标记和训练作为一种补偿。
- Tagger 类的顺序很重要:在上面的代码中,第一个类是 UnigramTagger,因此,它将首先被训练,并被赋予初始退避 tagger(默认 tagger)。
- 然后,这个标记器成为下一个标记器类的回退标记器。
- 返回的最终标记器将是最后一个标记器类的实例–触发标记器。
代码#4:证明
print (tagger._taggers[-1] == backoff)
print ("\n", isinstance(tagger._taggers[0], TrigramTagger))
print ("\n", isinstance(tagger._taggers[1], BigramTagger))
输出:
True
True
True
版权属于:月萌API www.moonapi.com,转载请注明出处