Latent Dirchlet Allocation in action

LDA in action

Latent Direchlet Allocation

关于公式推导可以看LDA数学八卦和Parameter estimation for text analysis,代码中的公式标号来自于后文。

toy code

https://github.com/gajanlee/toys/tree/master/toy_lda

如何实现

1. 数据转换

LDA 是词袋模型,所以不在乎词的顺序,每个文档转换为list形式。[1, 1, 2, 2, 3, 4 …]代表有两个word_id为1的词,2个word_id为2的词… 所有的document一起输入进去,所以为了方便起见,需要一个Docs_is和Term_js代表文档编号和词编号,合起来表示一个文档中的词,Term_js中的每个值代表word_id。

2. train

每个词需要一个topic,所以用一个一维list存放所有词的topic(初始化为随机)。使用collapsed Gibbas sample公式forumula 79,对于输入文档的各项统计后,得到当前词的各个topic概率。随机一个数,看看落在哪个topic内,作为新的采样。对每个词进行一次。

采样后,使用前验+后验公式formula 82,归一化后,获取topic_term_distribution和document_topic_distribution。

3. perplexity

在运行中检查算法运行效果的公式,loglikelihood,同一个文章内每个词概率相乘。

4. inference

Evaluation Methods for Topic Models在Section 4.1提出了一种更能逼近真实分布的"iterated pseudo-counts"方法。

并行LDA

document和term不能够并行,所以我们可以使用对角线并行法。详见《LDA》漫游指南。

代码参考

https://github.com/lda-project/lda

你可能感兴趣的:(Latent Dirchlet Allocation in action)