我正在尝试计算我拥有的数据的困惑度。我正在使用的代码是:
import sys
sys.path.append("/usr/local/anaconda/lib/python2.7/site-packages/nltk")
from nltk.corpus import brown
from nltk.model import NgramModel
from nltk.probability import LidstoneProbDist, WittenBellProbDist
estimator = lambda fdist, bins: LidstoneProbDist(fdist, 0.2)
lm = NgramModel(3, brown.words(categories='news'), True, False, estimator)
print lm
但我收到错误,
File "/usr/local/anaconda/lib/python2.7/site-packages/nltk/model/ngram.py", line 107, in __init__
cfd[context][token] += 1
TypeError: 'int' object has no attribute '__getitem__'
我已经对我拥有的数据执行了潜在狄利克雷分配,并且我已经生成了一元组及其各自的概率(它们被归一化为数据的总概率之和为 1)。
我的 unigrams 和它们的概率看起来像:
Negroponte 1.22948976891e-05
Andreas 7.11290670484e-07
Rheinberg 7.08255885794e-07
Joji 4.48481435106e-07
Helguson 1.89936727391e-07
CAPTION_spot 2.37395965468e-06
Mortimer 1.48540253778e-07
yellow 1.26582575863e-05
Sugar 1.49563800878e-06
four 0.000207196011781
这只是我拥有的 unigrams 文件的一个片段。大约 1000 行遵循相同的格式。总概率(第二列)相加得出 1。
我是一个初出茅庐的程序员。这个 ngram.py 属于 nltk 包,我对如何纠正这一点感到困惑。我这里的示例代码来自 nltk 文档,我现在不知道该怎么做。请帮助我能做些什么。提前致谢!