English 中文(简体)
自然语言工具包 - 更多国家 Taggers
  • 时间:2024-09-17

More Natural Language Toolkit Taggers


Previous Page Next Page  

Affix Tagger

另外一个重要的背景类别是AffixTagger。 在AffixTagger类别中,情况要么预先确定,要么只是字面。 这就是AffixTagger阶级能够根据一字开始或结束的固定长子学习标签的原因。

How does it work?

其工作取决于所列举的论点,该论点明确了预设或补满的期限。 违约价值为3。 但是,它如何区分AffixTagger这一类人是否学过“前身”或“uff”一词?

    affix_length=active 如果固定装置的价值是肯定的,则意味着AffixTagger的班级将学习字面。

    affix_length=negative 如果固定装置的数值为负值,则意味着AffixTagger的班级将学习其子。

为了更清楚地说明这一点,我们将在紧凑的树木行刑上使用AffixTagger等舱。

Example

在这种例子中,AffixTagger将学习“前言”,因为我们没有具体说明“装饰”论点的任何价值。 论点将具有违约价值3——


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

Output


0.2800492099250667

让我们在下面的事例中看到,当我们为确定第4项价值——宽恕论点——提供准确的是什么。


from nltk.tag import AffixTagger
from nltk.corpus import treebank
train_sentences = treebank.tagged_sents()[:2500]
Prefix_tagger = AffixTagger(train_sentences, affix_length=4 )
test_sentences = treebank.tagged_sents()[1500:]
Prefix_tagger.evaluate(test_sentences)

Output


0.18154947354966527

Example

在这种例子中,AffixTagger将学习“uff”一词,因为我们将具体指明“fix”论点的负面价值。


from nltk.tag import AffixTagger
from nltk.corpus import treebank
train_sentences = treebank.tagged_sents()[:2500]
Suffix_tagger = AffixTagger(train_sentences, affix_length = -3)
test_sentences = treebank.tagged_sents()[1500:]
Suffix_tagger.evaluate(test_sentences)

Output


0.2800492099250667

Brill Tagger

Brill Tagger是一个基于转变的夸张。 图瓦卢 第一组夸张,不属于SequentialBackoffTagger。 除此以外,BrillTagger使用了一系列规则,以纠正初步夸大的结果。

How does it work?

培训BrillTagger BrillTaggerTrainer 我们确定了以下职能:

defrain_brill_tagger(初始_tagger, 火车_sentences, **kwargs-


templates = [
   brill.Template(brill.Pos([-1])),
   brill.Template(brill.Pos([1])),
   brill.Template(brill.Pos([-2])),
   brill.Template(brill.Pos([2])),
   brill.Template(brill.Pos([-2, -1])),
   brill.Template(brill.Pos([1, 2])),
   brill.Template(brill.Pos([-3, -2, -1])),
   brill.Template(brill.Pos([1, 2, 3])),
   brill.Template(brill.Pos([-1]), brill.Pos([1])),
   brill.Template(brill.Word([-1])),
   brill.Template(brill.Word([1])),
   brill.Template(brill.Word([-2])),
   brill.Template(brill.Word([2])),
   brill.Template(brill.Word([-2, -1])),
   brill.Template(brill.Word([1, 2])),
   brill.Template(brill.Word([-3, -2, -1])),
   brill.Template(brill.Word([1, 2, 3])),
   brill.Template(brill.Word([-1]), brill.Word([1])),
]
trainer = brill_trainer.BrillTaggerTrainer(initial_tagger, templates, deterministic=True)
return trainer.train(train_sentences, **kwargs)

我们可以看到,这项职能需要 初始_taggertrain_sentences。 选取 采用BrillTemplate接口的论证和模板清单。 BrillTemplate接口见nltk.tbl.template。 模块。 其中一项是brill.Template

基于转变的夸大公司的主要作用是制定改造规则,纠正最初的夸大公司的产出,使之与培训判决更加一致。 让我们看到以下工作流程:

BrillTemplate

Example

例如,我们将使用combine_tagger。 我们在从NgramTagger后继链中(在前对等)合并起来时所创造的。 页: 1 首先,让我们利用Combine.tagger来评估结果,然后将结果作为 初始_tagger用于培训钻探。


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

现在,让我们在以下时间看到评价结果:Combine_tagger被作为 初始_tagger用于培训博尔-波段。


from tagger_util import train_brill_tagger
brill_tagger = train_brill_tagger(combine_tagger, train_sentences)
brill_tagger.evaluate(test_sentences)

Output


0.9246832510505041

我们可以注意到BrillTagger。 在Combine_tagger上,班级的准确性略有提高。

Complete implementation 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)
from tagger_util import train_brill_tagger
brill_tagger = train_brill_tagger(combine_tagger, train_sentences)
brill_tagger.evaluate(test_sentences)

Output


0.9234530029238365
0.9246832510505041

TnT Tagger

TnT Tagger, 代表Tringrams'nTags, 是一个统计夸张,以第二行“Markov”模式为基础。

How does it work?

在以下步骤的帮助下,我们可以理解TnT tagger的工作:

    首先根据培训数据,TnT tegger维持了几个内部FreqDist ConditionsalFreqDist

    之后,这些频率分布情况将计算出图表和三图。

    现在,通过使用频率进行标记时,它将计算每个字的可能标签的概率。

因此,它不建造NgramTagger的背后链,而是使用所有Ngram模型共同选择每一字的最佳标签。 让我们在以下例子中用TnT tagger来评估准确性:


from nltk.tag import tnt
from nltk.corpus import treebank
train_sentences = treebank.tagged_sents()[:2500]
tnt_tagger = tnt.TnT()
tnt_tagger.train(train_sentences)
test_sentences = treebank.tagged_sents()[1500:]
tnt_tagger.evaluate(test_sentences)

Output


0.9165508316157791

我们的精度略低于我们Brill Tagger。

请注意,我们需要在 评价()之前打电话train(>)。 否则,我们将达到0%的准确性。

Advertisements