import nltk
import math
from nltk.corpus import brown
brown_tagged_sents = brown.tagged_sents(categories='news')
size = int(math.floor(.9 * len(brown_tagged_sents)))
brown_tagged_0 = brown_tagged_sents[size:]
brown_tagged_1 = brown_tagged_sents[:size]
t0 = nltk.DefaultTagger('NN')
unigram_tagger_0 = nltk.UnigramTagger(brown_tagged_0,backoff=t0)
bigram_tagger_0 = nltk.BigramTagger(brown_tagged_0,backoff=unigram_tagger_0)
unigram_tagger_1 = nltk.UnigramTagger(brown_tagged_1,backoff=t0)
bigram_tagger_1 = nltk.BigramTagger(brown_tagged_1,backoff=unigram_tagger_1)
eval_A = bigram_tagger_0.evaluate(brown_tagged_0)
eval_B = bigram_tagger_0.evaluate(brown_tagged_1)
eval_C = bigram_tagger_1.evaluate(brown_tagged_0
我试着理解塔格的全部含义。在上面的代码中,我们将使用哪个标记器作为将来的数据,以及为什么? Eval_A和Eval_B是对同一标记器的两种不同评估。你能解释为什么评价分数越高吗?评估A是 出[7]:0.98096262685139 评估值B不在[9]:0.704168093591542
首先,分割语料库的原因是为了保留一些数据,以便评估标记者。因此,不应使用保留数据来训练标记者。
也有一些评估方法考虑到了整个数据而不需要坚持,请参见http://en.wikipedia.org/wiki/Cross-validation_(statistics)
然后仅使用训练数据训练标记器,并仅使用测试数据进行评估。你知道吗
[输出]:
现在您可以看到,使用默认标记器(
tagger0
)会降低精度,而使用unigram和bigrams会得到更好的结果。你知道吗相关问题 更多 >
编程相关推荐