LDA整体流程

来源:互联网 发布:怎样安装360软件 编辑:程序博客网 时间:2024/05/01 03:48

http://blog.csdn.net/u014313009/article/details/39825827
这篇文章讲贝叶斯公式的共轭分布非常容易理解,
http://wenku.baidu.com/link?url=AiymZjMA0FWi1DBgqSjpakTR6dDWpNVG01uaReI9DJVtR3Hhxn6RFbnvI6ckx-Iu01w0ZLyR5kL_XEwzroz4kelmRLsWqP88JdGtEOZ-CjS 对beta分布共厄的解释。
参考了文章
http://www.52nlp.cn/lda-math-lda-%E6%96%87%E6%9C%AC%E5%BB%BA%E6%A8%A1 ,写得非常好,但理解还是很难。

下面这篇文章讲了LDA的源代码分析,主要写采样了流程。
http://blog.csdn.net/pirage/article/details/50239209

LDA的训练主要是从训练语料中得出主题-词的统计情况,其认为每个主题与一些词强关联,且与每个词的关联情况不一;也可以把主题看做为词上的概率分布,即主题在不同的词上有不同的概率(关联强度),且每个不同主题的主题-词分布不一样。Gibbs Sampling是在训练过程中根据词选每个主题的概率且根据一定的方法为这个词选择一个主题。

其认为每一篇文章是按照如下的方法生成的:
这里写图片描述

LDA学习过程
先随机的给训练语料中的每个词赋一个topic,得出θd和φt赋值(对所有的d和t),然后如下迭代:
1)对于训练语料的每个单词,用Gibbs Sampling采用的方法,为其选择一个主题。选择的方法如下:
Gibbs Sampling方法中计算词i取主题k的概率如下:
这里写图片描述
上面三个公式中:
第一公式表示第m篇文章中每个主题k的概率;
第二个公式表示第k个主题对应选每个词的概率。
第三个式子计算第i个词分类为各主题k的概率统计(没有包含第i个词)
n(k)m,i 代表第m篇文档中除去第i位置的词外,分类为k的词的总数。
n(t)k,i 代表所有文档除去第i位置的词外,词t分类为主题k的数量
K代表主题的数量,V代表词汇表里词的总量;-i代表计算时不考虑第i个位置
至于计算完选每个主题的概率后如何确定本次采样的主题,可以参考http://blog.csdn.net/pirage/article/details/50239209一文中的sample方法。

    for (int k = 0; k < K; k++) {        p[k] = (nw[w][k] + beta) / (nwsum[k] + Vbeta) *                (nd[m][k] + alpha) / (ndsum[m] + Kalpha);    }

nw[w][k]表示训练语料中词w分类为主题k的个数; nwsum[k]表示训练训练语料中分类为主题K的词的总数;nd[m][k]表示文档m中分类为k的词的个数;ndsum[m]文档m中词的个数。注意上面的统计量都是没有包括当前被采样主题的词。

2)全部选择完主题后统计θdϕt,一轮迭代结束,重复一和二步直到收敛。

LDA推断:
推断和训练的方法是一样的,只是在之前的训练中已经得到了主题-词的统计结果ϕt,所以在inference的过程中认为他不变。

for (int k = 0; k < K; k++) {  p[k] = (nw[w][k] + newnw[_w][k] + beta)/(nwsum[k] + newnwsum[k] + Vbeta) * (newnd[m][k] + alpha)/(newndsum[m] + Kalpha);}

这里的nw和nwsum是之前训练得到的数组,在推断的时候是保持不变的。nw[w][k]表示训练语料中词w分类为主题k的个数; nwsum[k]表示训练训练语料中分类为主题K的词的总数
这里写图片描述

0 0