LDA主题模型代码实现流程
来源:互联网 发布:linux 驱动 usleep 编辑:程序博客网 时间:2024/05/17 11:06
LDA主题模型的原理,推导过程比较复杂,可以参考此链接,讲的比较详细:http://www.52nlp.cn/lda-math-mcmc-%E5%92%8C-gibbs-sampling1
本文主要是通过阅读别人实现的LAD主题模型代码,总结的一个实现流程,供别人想实现LAD时可作参考,如若有何错误,麻烦请指出:
LDA代码流程:
(1) 先对文档切词,然后对每个词语赋ID编号0~(n-1),计算共有n个词,m个文档
(2) 参数,变量设置:
K 主题数
beta β
alpha α
iter_times 迭代次数
top_words_num 每个主题特征词个数
p,概率向量,double类型,存储采样的临时变量,长度为主题数
nw,词word在主题上的分布数,长度为[n][K]
nwsum,每个主题的词的总数,长度为[K]
nd,每个文档中各个主题的词的总数,长度为[m][K]
ndsum,每个文档中词的总数,长度为[m]
Z,文档中各个词的所属主题,长度为[m][各个文档的词个数]
theta,长度为[m][K] 文章-主题分布
phi,长度为[K][n] 词-主题分布
(3) 初始化
先为各个文档里的单词随机分配主题
for i to 文档数:
ndsum[i] = 文档i的单词数
for j to 文档i的单词数:
随机主题topic
Z[i][j] = topic
nw[词的ID编号][topic] += 1
nd[i][topic] += 1
nwsum[topic] += 1
(4) 开始迭代
迭代iter_times次:
for i to 文档数:
for j to 文档i的单词数:
topic = self.Z[i][j] 取出文档i中第j的单词的主题
取出文档i中第j的单词的ID编号id,假设去除这个词后的主题分布
nw[id][topic] -= 1
nd[i][topic] -= 1
nwsum[topic] -= 1
ndsum[i] -= 1
#计算每个主题的概率分布
Vbeta = 单词数 * self.beta
Kalpha = K * self.alpha
p = (nw[id] + beta)/(nwsum + Vbeta)*(nd[i] + alpha) / (ndsum[i] + Kalpha)
for k to K:
p[k] += p[k-1]
随机一个概率u in (0,p[K-1])
#如果转移概率大于u,则转移.
for topic to K:
if p[k]>u:
break
#确定文档i中的第j个单词的主题为topic,重新赋值
nw[id][topic] +=1
nwsum[topic] +=1
nd[i][topic] +=1
ndsum[i] +=1
(5) 计算文章-主题分布,计算词-主题分布
for i to m: #这文档各个主题的单词数除以这文档总的单词数
theta[i] = (nd[i]+alpha)/(ndsum[i]+K * alpha)
for i to K: #这主题各个的单词的数量除以这主题总的单词数
phi[i] = (nw.T[i]+beta)/(nwsum[i]+ n * beta)
(6) 取各个主题的前top_words_num个特征词
循环phi,取每一行的前top_words_num的最大值的下标,将下表反编码成词语输出.
阅读全文
0 0
- LDA主题模型代码实现流程
- LDA主题模型的java代码实现
- mahout 中LDA主题模型算法流程
- 【LDA】LDA主题模型
- 主题模型TopicModel:LDA编程实现
- 主题模型TopicModel:通过gensim实现LDA
- 主题模型TopicModel:通过gensim实现LDA
- LDA主题模型简介
- LDA主题模型简介
- LDA主题模型简介
- 主题模型LDA研究
- LDA主题模型简介
- 主题模型-LDA浅析
- 主题模型-LDA浅析
- 主题模型-LDA浅析
- 主题模型-LDA浅析
- 主题模型-LDA理解
- 主题模型-LDA浅析
- 设计模式--代理模式
- C语言实现的线程池
- HDFS特点(优缺点)
- spring定时器触发时间表达式规则
- 混合拉普拉斯
- LDA主题模型代码实现流程
- 尝试在C++里实现 Java 的 synchronized 关键字
- webpack代码分割-使用require.ensure
- Uncaught TypeError: Cannot read property 'getItem' of null
- Picasso的简单使用
- 腾讯arttemplate模板官方介绍
- 导入项目工程后如果出现下面的错误该如何解决
- 快速排序
- iOS 给字符串添加删除线,下划线效果遇到的坑(10.3 与 8.1 系统)