LDA的java实现

训练

基于gibbs分布的LDA大概训练过程:

推断过程: 主题分布数值的大小与长度无关。

1. 参数解释  返回的是

theta        其中 迭代iterations次后, theta[k] = (nd [k]+ alpha) / (ndsum + K * alpha)

V  : 词典长度            K:topic个数           N:doc中词的个数

nw[V][K] :  doc 的每个词v,被分配到 topic_k 的次数。

nd[K]: doc 中 命中 topic_k 词的个数。  

nwsum[K] :   所有词总共被分配给topic_k  的总次数。 每次iteration都累加? 

ndsum: 数值 ,初始为doc中词的个数N。doc中还剩余多少个词。

z[N]:  doc中每个词n对应的topic_id。

1. 初始化 

      随机为 doc的每个词 n 分配主题  , z[N];随之更新 nw、nd、nwsum 

2. 迭代interactions 次,每次从前到后,迭代N个词。

    1)取第n个词的topic,假设将这个词扔掉。因此随之更新 nw,nd,nwsum ;

    2) 重新估计该词的topic。用多项式方法采样多项式分布,得到该词分配给每个topic的概率(次数),P[K] 。累计多项式分布的参数? 遍历P,得到第一个p[k]> 某值(随机值*所有概率的和) 的那个topic。即为新的topic。

   3)随之更新各个参数。

3. 得到theta。

长短文本相似度计算(与短文本长度无关。但是,用topic-word共现次数,而不是用概率,是否相关。对于在语料库中出现比较少的词计算出来的相似度,是否有影响。)


http://blog.csdn.net/pipisorry/article/details/42129099

https://github.com/hankcs/LDA4j.git

http://blog.csdn.net/tanglizhe1105/article/details/50741356

http://nanjunxiao.github.io/2015/08/08/Topic-Model-LDA%E5%AE%9E%E6%88%98%E7%AF%87/

你可能感兴趣的:(LDA的java实现)