用python计算lda语言模型的困惑度并作图

困惑度是评估自然语言处理中语言模型质量的指标,常用于确定LDA主题模型的最佳主题数量。本文介绍了如何使用Python计算LDA模型的困惑度,并通过画折线图找到最优主题数。程序包括:转换LDA模型为字典查询概率,统计测试集长度,计算困惑度,以及绘制不同主题数的困惑度曲线。实验证明,合适的主题数能实现较好的主题抽取效果。
摘要由CSDN通过智能技术生成

转载请注明:电子科技大学EClab——落叶花开http://www.cnblogs.com/nlp-yekai/p/3816532.html 

困惑度一般在自然语言处理中用来衡量训练出的语言模型的好坏。在用LDA做主题和词聚类时,原作者D.Blei就是采用了困惑度来确定主题数量。文章中的公式为:

perplexity=exp^{ - (∑log(p(w))) / (N) }

其中,P(W)是指的测试集中出现的每一个词的概率,具体到LDA的模型中就是P(w)=∑z p(z|d)*p(w|z)【z,d分别指训练过的主题和测试集的各篇文档】。分母的N是测试集中出现的所有词,或者说是测试集的总长度,不排重。

因而python程序代码块需要包括几个方面:

1.对训练的LDA模型,将Topic-word分布文档转换成字典,方便查询概率,即计算perplexity的分子

2.统计测试集长度,即计算perplexity的分母

3.计算困惑度

4.对于不同的Topic数量的模型,计算的困惑度,画折线图。

python代码如下:

 

 1 # -*- coding: UTF-8-*-
 2 import numpy
 3 import math
 4 import string
 5 import matplotlib.pyplot as plt
 6 import re
 7 
 8 def dictionary_found(wordlist):               #对模型训练出来的词转换成一个词为KEY,概率为值的字典。
 9     word_dictionary1={}
10     for i in xrange(len(wordlist)):
11         if i%2==0:
12             if word_dictionary1.has_key(wordlist[i])==True:
13                 word_probability=word_dictionary1.get(wordlist[i])
14                
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值