我需要计算困惑,我试着用它
def get_perplexity(test_set, model):
perplexity = 1
n = 0
for word in test_set:
n += 1
perplexity = perplexity * 1 / get_prob(model, word)
perplexity = pow(perplexity, 1/float(n))
return perplexity
经过一些步骤,我的perplexity
等于无穷大。
我需要得到数字和作为最后一步做pow(perplexity, 1/float(n))
有什么能像这样把数字相乘得到结果吗?你知道吗
3.887311155784627e+243
8.311806360146177e+250
1.7707049372801292e+263
1.690802669602979e+271
3.843294667766984e+278
5.954424789834101e+290
8.859529887856071e+295
7.649470766862909e+306
重复的乘法将导致一些棘手的数值不稳定性,因为乘法的结果需要越来越多的位来表示。我建议您将其转换为日志空间,并使用求和而不是乘法:
这样,所有的对数都可以用标准位数来表示,而且不会出现数值放大和精度损失。此外,还可以使用
decimal
模块引入任意精度:因为e+306只是10^306,你可以把这个类分成两部分
相关问题 更多 >
编程相关推荐