【发布时间】:2016-01-20 21:38:03
【问题描述】:
我正在尝试计算我拥有的数据的困惑度。我使用的代码是:
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)。
我的一元组及其概率如下所示:
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 文档,我现在不知道该怎么做。请帮助我能做些什么。提前致谢!
【问题讨论】:
-
您首先说要计算文本语料库上一元模型的困惑度。但是现在你把unigram这个词删掉了。
-
nltk 的示例代码本身不起作用 :( 在示例代码中,它是一个三元组,如果它有效,我会将其更改为一元组。如何克服这个错误?
-
你必须使用 NLTK 吗?
-
不特别关注 NLTK。我只是觉得作为一个编程新手更容易使用。有没有其他方法或包可以用来估计我拥有的数据(不是棕色语料库)的困惑度?
-
当然有。我将假设您有一个简单的文本文件,您想从中构建一个 unigram 语言模型,然后计算该模型的困惑度。对吗?
标签: python-2.7 nlp nltk n-gram language-model