我正在使用Python进行工作,试图编写一个循环,该循环将每个单词乘以句子概率的乘积来计算句子的概率。我有一本字典,其中包含数千个单词作为键,而它们的概率作为值。我遇到的问题是,无论如何,我目前的尝试似乎计算出的句子级别概率为1。这是我目前的代码:
sentence = "This is a short and boring sentence."
## we'll say that "probs" is the dictionary that contains all my word-probability pairs
## this is the loop I'm trying to run my sentence through:
problist = []
for x in sentence:
problist += probs[x]
## my thinking is that the code above will create a list of each word in the sentence's probability
## then I can find the product of the list using numpy
import numpy
sentprob = numpy.prod(problist)
但是,就像我说的那样,这段代码似乎总是返回1的概率。我在做什么错了?
答案 0 :(得分:2)
您的代码存在以下问题:
for x in sentence:
problist += probs[x]
x
这里不是单词,而是字母。表示您正在词典中搜索T
,h
,i
......的概率。
至于为什么是1
的原因,doc说:
空数组的乘积是中性元素1
尝试使用此:
for x in sentence.split():
problist += probs[x]
请注意,句子末尾的.
仍然是个问题,因为最后一个世界将是sentence.
。您应该删除所有.
,,
,?
...等等。