Mallet LDA留存概率是什么?如何用其计算困惑度?
Mallet LDA留存概率与困惑度相关问题解答
一、你得到的数值不是困惑度
你拿到的负数是留存数据的对数似然值总和,不是困惑度。困惑度是正数,而这个数值是模型对留存词预测概率的对数之和——因为单个词的预测概率在0到1之间,取对数后是负数,累加起来自然也是负数。
二、基于留存概率计算困惑度的方法
困惑度的计算公式很直接,用你得到的对数似然值和留存数据的总词数就能算出:
perplexity = exp(-(log_held_out_likelihood / num_held_out_tokens))
其中:
log_held_out_likelihood:就是你得到的那个负数(比如主题数100时的-8926490.73)num_held_out_tokens:留存数据里的有效词总数(要和模型训练时的词处理规则一致,比如去掉停用词、标点后的实际词数)
举个实际计算的例子:假设你的留存数据总共有500000个有效词,那:
- 100主题的困惑度:
exp(-(-8926490.73 / 500000)) = exp(17.85298) ≈ 4.5×10^7 - 10主题的困惑度:
exp(-(-8968935.68 / 500000)) = exp(17.93787) ≈ 5.0×10^7
困惑度越低,模型对未知数据的预测能力越强,所以这里100主题的模型表现优于10主题的,和你得到的对数似然值趋势一致(-8926490比-8968935更接近0)。
三、Mallet LDA中留存概率的定义
Mallet里的留存概率计算逻辑是这样的:
- 训练模型时,会从每个输入文档里随机保留一小部分词(默认是10%,可通过参数调整),这部分词不参与主题-词分布、文档-主题分布的训练更新
- 模型训练完成后,用训练好的参数(主题-词分布、基于训练词得到的文档主题分布),计算每个留存词的预测概率
- 最终输出的数值,是所有留存词的对数似然值之和。这个值反映了模型对未见过的词的预测能力,绝对值越小(越接近0),模型的泛化能力越好。
内容的提问来源于stack exchange,提问作者May3514
相关产品推荐
相关产品推荐

