English 中文(简体)
自然语言工具箱——将Taggers混为一谈
  • 时间:2024-09-17

Natural Language Toolkit - Combining Taggers


Previous Page Next Page  

Combining Taggers

相互交织的夸夸大或相互交错是挪威皇家骑士团的重要特征之一。 混淆夸大论背后的主要概念是,如果一触即发者不知道如何打上一字,就会被带上链条.。 为此目的,SequentialBackoffTagger 为我们提供Backoff tagging

Backoff Tagging

如前所述,背对冲是SequentialBackoffTagger

How does it work?

实际上,每一次SequentialBackoffTagger 可以提出“背弃”关键词。 这一关键词的数值是SequentialBackoffTagger的另一个例子。 现在每逢SequentialBackoffTagger。 分类为初步分类,将编制一份内部备份清单(作为第一个要素)。 此外,如果提供背书的夸张,将附上该冲锋枪的内部清单。

以下文为例,我们正在把DefaulTagger作为上面的Zalph recipe的背叛者,我们已培训UnigramTagger

Example

在这方面,我们利用DefaulTagger作为后继器。 每当UnigramTagger无法打上词、背书、即DefaulTagger时,就我们而言,它将与“NN”混在一起。


from nltk.tag import UnigramTagger
from nltk.tag import DefaultTagger
from nltk.corpus import treebank
train_sentences = treebank.tagged_sents()[:2500]
back_tagger = DefaultTagger( NN )
Uni_tagger = UnigramTagger(train_sentences, backoff = back_tagger)
test_sentences = treebank.tagged_sents()[1500:]
Uni_tagger.evaluate(test_sentences)

Output


0.9061975746536931

从上述产出来看,你可以观察到,通过增加回击率,准确性将增加约2%。

Saving taggers with pickle

正如我们已经看到,培训一触即发非常麻烦,也需要时间。 为节省时间,我们可以选择一个经过训练的夸张,以便日后使用。 在下面的例子中,我们将对我们已经受过培训的夸张——`Uni_tagger'——这样做。

Example


import pickle
f = open( Uni_tagger.pickle , wb )
pickle.dump(Uni_tagger, f)
f.close()
f = open( Uni_tagger.pickle , rb )
Uni_tagger = pickle.load(f)

NgramTagger Class

从前单位讨论的等级图表,UnigramTagger 页: 1 但是,我们有另外两个小类别:NgarmTagger。 班级

BigramTagger subclass

实际只有一克是一小件,因此,正如名称所示,BigramTagger。 分层看着这两个项目。 第一项目是前一个滞后字,第二个项目是目前滞后字。

TrigramTagger subclass

关于BigramTagger, TrigramTagger 次列审视了三个项目,即前两字和当前一字。

实际上,如果我们采用BigramTaggerTrigramTagger,按我们与UnigramTagger分流一样单独使用,这两者都表现很差。 让我们在以下例子中看到:

Using BigramTagger Subclass


from nltk.tag import BigramTagger
from nltk.corpus import treebank
train_sentences = treebank.tagged_sents()[:2500]
Bi_tagger = BigramTagger(train_sentences)
test_sentences = treebank.tagged_sents()[1500:]
Bi_tagger.evaluate(test_sentences)

Output


0.44669191071913594

Using TrigramTagger Subclass


from nltk.tag import TrigramTagger
from nltk.corpus import treebank
train_sentences = treebank.tagged_sents()[:2500]
Tri_tagger = TrigramTagger(train_sentences)
test_sentences = treebank.tagged_sents()[1500:]
Tri_tagger.evaluate(test_sentences)

Output


0.41949863394526193

你可以比较UnigramTagger的表现,我们以前使用过(约89%的准确性)比德拉·塔格(约44%的准确性)和特里克塔戈(大约41%的准确性)。 原因是,Bigram和Trinc taggers不能从第一句中学习。 另一方面,UnigramTagger族对以往情况没有兴趣,对每个字的主角进行了评估,因此能够有较高的基线准确性。

Combining ngram taggers

从上述例子来看,很显然,当我们把大布拉和三瑞克的夸夸大与背对等结合起来时,它们可以作出贡献。 在下面的例子中,我们把Unigram、Bigram和Trigram的夸大同背对。 这一概念与先前的对应办法相同,同时将UnigramTagger与背书gger合。 唯一的区别是,我们利用下文所述从夸大_util.py中点名的背负功能开展后继行动。


def backoff_tagger(train_sentences, tagger_classes, backoff=None):
   for cls in tagger_classes:
      backoff = cls(train_sentences, backoff=backoff)
   return backoff

Example


from tagger_util import backoff_tagger
from nltk.tag import UnigramTagger
from nltk.tag import BigramTagger
from nltk.tag import TrigramTagger
from nltk.tag import DefaultTagger
from nltk.corpus import treebank
train_sentences = treebank.tagged_sents()[:2500]
back_tagger = DefaultTagger( NN )
Combine_tagger = backoff_tagger(train_sentences,
[UnigramTagger, BigramTagger, TrigramTagger], backoff = back_tagger)
test_sentences = treebank.tagged_sents()[1500:]
Combine_tagger.evaluate(test_sentences)

Output


0.9234530029238365

从上述产出来看,我们可以看到它提高了精确度约3%。

Advertisements