LDA背景资料
[https://zhuanlan.zhihu.com/p/30226687] LDA模型的前世今生
在文本挖掘中,有一项重要的工作就是分析和挖掘出文本中隐含的结构信息,而不依赖任何提前标注的信息。LDA(Latent Dirichlet Allocation)模型在过去十年里开启了一个主题模型领域。
LDA 的论文作者是戴维·布雷(David Blei)、吴恩达和迈克尔·乔丹(Michael Jordan)。这三位都是今天机器学习界炙手可热的人物。论文最早发表在 2002 年的神经信息处理系统大会(Neural Information Processing Systems,简称 NIPS)上,然后长文章(Long Paper)于 2003 年在机器学习顶级期刊《机器学习研究杂志》(Journal of Machine Learning Research)上发表。迄今为止,这篇论文已经有超过 1 万 9 千次的引用数,也成了机器学习史上的重要文献之一。
[ https://zhuanlan.zhihu.com/p/21377575] 关于LDA, pLSA, SVD, Word2Vec的一些看法
LDA从12年开始,经历了SparseLDA, AliasLDA, LightLDA, WarpLDA的发展道路,到了15年底,已经能非常快的学100万topic了,而且这个快是靠直接降低理论的时间复杂度实现的,代码写的更好只是起了辅助作用。
SparseLDA利用了如果topic很多,那么当模型快收敛时,一个word其实只会属于很少的topic,然后利用稀疏性来加速了算法。但这个算法有个致命的缺陷,就是初始化时,模型并不稀疏,因此迭代的前几轮会非常慢。当然充满智慧的群众发明了一堆奇技淫巧部分解决了这个问题。
AliasLDA是优化了Gibbs Sampling采样的时间复杂度,利用Alias Table让对K个topic采样的时间复杂度从O(K)降低到O(1)
LightLDA修改了采用的分布,把原来基于一个word doc在topic上联合分布的采样过程,改成了2个交替进行的独立采样过程,一个只依赖word,另一个只依赖doc。
WarpLDA做了更多的工程级别的优化,让LightLDA更快。
[http://blog.csdn.net/xianlingmao/article/details/7076165] 话题模型(topic model)的提出及发展历史
如果对目前出现的topic models进行分门别类作者认为topic models主要可以分为四大类:
无监督的、无层次结构的topic model 主要有: PLSA, LDA, Correlated Topic Model, PAM,Concept Topic Model等
无监督的、层次结构的topic model 主要有: HLDA, HDP,HPAM等
有监督的、无层次结构的topic model 主要有: S-LDA, Disc-LDA, MM-LDA, Author-Model, Labeled LDA, PLDA 等等
有监督的、层次结构的topic model 主要有: hLLDA, HSLDA
以上模型对应的文章名字,用google直接搜索即可得到,这里就不列出。
下面对于每一类topic model,我都选择一个模型来进行介绍:
对于1) 上述已经介绍了LDA,所以就不介绍这类模型了;
对于2) 我想介绍HLDA(Hierarchical Latent Dirichlet Allocation) 模型
由于LDA产生出来的topic都是孤立的,topic之间没有关系,HLDA模型在LDA的基础上,试图建立topic之间的层次关系,同时考虑到LDA需要指定topic的数量作为参数,如果能自动决定topic的数量就比较理想了。为了自动发现决定topic的数量,HLDA用Chinese Restaurant Process去自动决定每一层的topic数量,然而需要指定topic层次的高度H(也就是有多少层的topic),同时它训练出来的层次结构是等高的,都是H这么高。至于怎么产生文档的每个词,这个和LDA都是一样的。
对于3) 我想介绍Labeled LDA (Labeled Latent Dirichlet Allocation) 模型
这个模型最大的好处是能够训练出来带标签的topic,因为在以前的topic model训练出来的topic都是分布,怎么赋予一个标签给这些topic则是很难的一个问题。
Labeled LDA与LDA最大的不同是: LDA是在所有topics上为某一个词进行选择某个topic,而labeled LDA则是只从文档相关的label对应的topic中去选择,其余和LDA都是一样的。
对于4) 我想介绍hLLDA (hierarchical Labeled Latent Dirichlet Allocation)模型
这个模型最大的好处就是在Labeled Latent Dirichlet Allocation模型的基础上扩展到层次结构,其思想也是很简单的,认为一个文档只是由这个文档对应的层次label所产生,具体学习和推断的时候几乎和Labeled Latent Dirichlet Allocation模型一样。
[https://github.com/baidu/Familia/wiki] Familia 说明文档
由于LDA中采用文档内的Bag-of-Words假设,词与词之间的位置信息是被忽略的。在很多工业界场景中,我们往往需要限制某些位置相近的词产生自同一主题,通过SentenceLDA能很好地满足这个需求。
SentenceLDA假设同一个句子里的词产生自同一主题,对句子内的词进行了进一步的建模,能捕捉到更加细粒度的共现关系。
但是LDA产生的主题往往被高频词占据,这种现象导致低频词在实际应用中的作用非常有限。
Topical Word Embedding (TWE) 利用LDA训练获得的主题为词向量的训练提供补充信息,进而得到词和主题的向量表示。有鉴于向量表示可以较好地建模低频词的语义信息,通过利用词和主题的向量表示,我们可以更好地捕捉每个主题下的低频词的语义信息,提升下游应用的效果。
主题模型在工业界的应用范式可以分为两类:语义表示和语义匹配。
[http://blog.csdn.net/hero_fantao/article/details/70176839] LDA工程化之快速采样算法
标准的Gibbs 采样LDA相关介绍, 采样时间复杂度是O(K),K表示主题数(不同主题有不同命中概率,需要计算累计概率归一化项):
Sparse LDA利用稀疏性的特征,相对标准Gibbs LDA 提升了几十倍速度。现实中一般文档只会包含少数若干个主题,一个词也是参与到少数几个主题中。基于这种假设,Sparse LDA 的时间复杂度是O(Kd + Kw), 其中Kd是表示文档的主题数(稀疏),Kw表示词的主题数 (稀疏)
Alias LDA 时间复杂度是O(Kd),主要是从pw分布采样时间复杂度是O(Kd),而才qw分布采样时间复杂度是O(1)。
把主题采样概率分布分解成两部分,两部分都可以采用Alias table 和Metropolis Hastings 方法进行O(1)时间复杂度采样呢? Light LDA就是试图解决这个问题。