在python nltk中求三元组的条件概率



我已经开始学习NLTK,并且我正在遵循这里的教程,在那里他们使用像这样的双元图找到条件概率。

import nltk
from nltk.corpus import brown
cfreq_brown_2gram = nltk.ConditionalFreqDist(nltk.bigrams(brown.words()))

然而,我想找到条件概率使用三元组。当我尝试将nltk.bigrams更改为nltk.trigrams时,我得到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "home/env/local/lib/python2.7/site-packages/nltk/probability.py", line 1705, in __init__
    for (cond, sample) in cond_samples:
ValueError: too many values to unpack (expected 2)

如何使用三元组计算条件概率?

nltk.ConditionalFreqDist期望它的数据是(condition, item)元组的序列。nltk.trigrams返回长度为3的元组,这导致了您发布的确切错误。

从你的帖子中,你不太清楚你想用什么作为条件,但在做语言建模时的惯例是将最后一个词作为条件。下面的代码演示了如何实现它。

brown_trigrams = nltk.trigrams(brown.words())
condition_pairs = (((w0, w1), w2) for w0, w1, w2 in brown_trigrams)
cfd_brown = nltk.ConditionalFreqDist(condition_pairs)

您可以使用这里描述的n-gram模型。

用法示例:

from nltk.util import ngrams
input= '...'
N = 3
trigrams = ngrams(input.split(), N)
for grams in trigrams:
  print grams

我强烈建议您阅读上述文档,我希望它会有所帮助。

最新更新