Soruyu içeriğe koymak için birkaç (yapay) dil modelini eğitmek ve test etmek/karşılaştırmak istiyorum. Veri hazırlama yerine modellere odaklanmak için, nltk'den Brown corpus'u kullanmayı ve nltk ile sağlanan Ngrams modelini bir temel olarak (diğer LM'yi karşılaştırmak için) eğitmeyi seçtim.NLTK'da Ngram modeli ve şaşkınlık
Bu yüzden benim ilk sorum, şüpheli bulduğum Nltk Ngram modelinin davranışı hakkındadır. kod Burayı yapıştırılan oldukça kısa olduğu için: Ngram modelleme çok olan 4.6'lık bir şaşkınlıkla ile
... build
... train
len(corpus) = 1161192, len(vocabulary) = 13817, len(train) = 1103132, len(test) = 58060
perplexity(test) = 4.60298447026
görünüyor:
import nltk
print "... build"
brown = nltk.corpus.brown
corpus = [word.lower() for word in brown.words()]
# Train on 95% f the corpus and test on the rest
spl = 95*len(corpus)/100
train = corpus[:spl]
test = corpus[spl:]
# Remove rare words from the corpus
fdist = nltk.FreqDist(w for w in train)
vocabulary = set(map(lambda x: x[0], filter(lambda x: x[1] >= 5, fdist.iteritems())))
train = map(lambda x: x if x in vocabulary else "*unknown*", train)
test = map(lambda x: x if x in vocabulary else "*unknown*", test)
print "... train"
from nltk.model import NgramModel
from nltk.probability import LidstoneProbDist
estimator = lambda fdist, bins: LidstoneProbDist(fdist, 0.2)
lm = NgramModel(5, train, estimator=estimator)
print "len(corpus) = %s, len(vocabulary) = %s, len(train) = %s, len(test) = %s" % (len(corpus), len(vocabulary), len(train), len(test))
print "perplexity(test) =", lm.perplexity(test)
Ne çok şüpheli buluyorum ben şu sonuçları elde ediyoruz Bu corpus üzerinde iyi. Benim yorumum doğruysa, model, ortalama olarak yaklaşık 5 denemede doğru kelimeyi tahmin edebilmelidir (13817 olasılık olsa da ...). Deneyiminizi bu şaşkınlığın değeri üzerine paylaşabilirseniz (gerçekten buna inanmıyorum)? Net üzerinde nltk ngram modeli hakkında herhangi bir şikayet bulamadım (ama belki yanlış yaptım). Ngram modelleri ve bilgisayar şaşkınlığı için NLTK için iyi bir alternatif biliyor musunuz?
Teşekkürler!
NLTK'de ngramların uygulanmasının yanlış olduğu görülmektedir. SRILM (http://www.speech.sri.com/projects/srilm/) ~ 150 (çok daha güvenilir) bir şaşkınlık verir. Yine de, NLTK'nın popülaritesi göz önüne alındığında, hiç kimsenin bunu daha önce deneyimlemediğine şaşıyorum ... – zermelozf