2015-02-16 4 views
0

Я использую NLTK для обучения модели bigram с использованием оценки Лапласа. Застройщик для NgramModel является:Как пройти оценку в NgramModel NLTK?

def __init__(self, n, train, pad_left=True, pad_right=False, 
      estimator=None, *estimator_args, **estimator_kwargs): 

После некоторых исследований я обнаружил, что синтаксис, который работает следующий:

bigram_model = NgramModel(2, my_corpus, True, False, lambda f, b:LaplaceProbDist(f)) 

Хотя, кажется, правильно работать, я запутался о последних двух аргументы. В основном, почему аргумент «оценки» является лямбда-функцией и как взаимодействует с LaplaceProbDist?

ответ

0

В настоящее время вы можете использовать функцию лямбда, чтобы вернуть Freqdist из дистрибутива, например.

from nltk.model import NgramModel 
from nltk.corpus import brown 
from nltk.probability import LaplaceProbDist 

est = lambda fdist: LaplaceProbDist(fdist) 

corpus = brown.words(categories='news')[:100] 
lm = NgramModel(3, corpus, estimator=est) 


print lm 
print (corpus[8], corpus[9], corpus[12]) 
print (lm.prob(corpus[12], [corpus[8], corpus[9]])) 
print 

[выход]:

<NgramModel with 100 3-grams> 
(u'investigation', u'of', u'primary') 
0.0186667723526 

Но обратите внимание, что model пакет в NLTK, который содержит объект LanguageModel находится «под строительство» поэтому, когда стабильная версия придумывает, приведенный выше код может не работа.

Для того чтобы держать в курсе вопросов, связанных с model пакета регулярно проверять эти вопросы: