没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
⽤python计算lda语⾔模型的困惑度并作图
困惑度⼀般在⾃然语⾔处理中⽤来衡量训练出的语⾔模型的好坏。在⽤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 word_probability=float(word_probability)+float(wordlist[i+1])
15 word_dictionary1.update({wordlist[i]:word_probability})
16 else:
17 word_dictionary1.update({wordlist[i]:wordlist[i+1]})
18 else:
19 pass
20 return word_dictionary1
21
22 def look_into_dic(dictionary,testset): #对于测试集的每⼀个词,在字典中查找其概率。
23 '''Calculates the TF-list for perplexity'''
24 frequency=[]
25 letter_list=[]
26 a=0.0
27 for letter in testset.split():
28 if letter not in letter_list:
29 letter_list.append(letter)
30 letter_frequency=(dictionary.get(letter))
31 frequency.append(letter_frequency)
32 else:
33 pass
34 for each in frequency:
35 if each!=None:
36 a+=float(each)
37 else:
38 pass
39 return a
40
41
Aamboo
- 粉丝: 14
- 资源: 559
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0