重要的是通过实践更深入地了解贝叶斯思想,先浅浅地了解下LDA。


相关数学知识

非常好!https://arxiv.org/pdf/1908.03142.pdf【LDA精讲】

From: http://blog.csdn.net/huagong_adu/article/details/7937616/

传统方法的缺陷:

传统判断两个文档相似性的方法是通过查看两个文档共同出现的单词的多少,如TF-IDF等,这种方法没有考虑到文字背后的语义关联,可能在两个文档共同出现的单词很少甚至没有,但两个文档是相似的。

在主题模型中,主题表示一个概念、一个方面,表现为一系列相关的单词,是这些单词的条件概率。形象来说,主题就是一个桶,里面装了出现概率较高的单词,这些单词与这个主题有很强的相关性。

怎样才能生成主题?

对文章的主题应该怎么分析?

首先,可以用生成模型来看文档和主题这两件事。

所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到的。

那么,如果我们要生成一篇文档,它里面的每个词语出现的概率为:

这个概率公式可以用矩阵表示:

”文档-词语”矩阵表示每个文档中每个单词的词频,即出现的概率;

”主题-词语”矩阵表示每个主题中每个单词的出现概率;

”文档-主题”矩阵表示每个文档中每个主题出现的概率。

给定一系列文档,通过对文档进行分词,计算各个文档中每个单词的词频就可以得到左边这边”文档-词语”矩阵。

主题模型就是通过左边这个矩阵进行训练,学习出右边两个矩阵。(左边 ==> 右边)

主题模型有两种:pLSA(ProbabilisticLatent Semantic Analysis)和LDA(Latent Dirichlet Allocation),下面主要介绍LDA。


LDA介绍

如何生成M份 N个单词 的 文档,LatentDirichlet Allocation这篇文章介绍了3方法:

方法一:unigram model

该模型使用下面方法生成1个文档:

For each of the N words w_xth:
    Choose a word w_xth ~ p(w);

其中 N 表示要生成的文档的单词的个数,

w_xth表示生成的第n个单词w,

p(w)表示单词w的分布,可以通过语料进行统计学习得到,比如给一本书,统计各个单词在书中出现的概率(词频?)。

这种方法通过训练语料获得一个单词的概率分布函数,然后根据这个概率分布函数每次生成一个单词,使用这个方法M次生成M个文档。其图模型如下图所示:

方法二:Mixture of unigram

unigram模型的方法的缺点 就是生成的文本没有主题,过于简单,mixture of unigram方法对其进行了改进,该模型使用下面方法生成1个文档:

Choose a topicz ~ p(z);
For each ofthe N words w_n:
    Choose a word w_n ~ p(w|z);

其中z表示一个主题,

p(z)表示主题的概率分布,

z通过p(z)按概率产生;

N和w_n同上;

p(w|z)表示给定z时w的分布,可以看成一个k×V的矩阵,

k为主题的个数,

V为单词的个数,每行表示这个主题对应的单词的概率分布,即主题z所包含的各个单词的概率,通过这个概率分布按一定概率生成每个单词。

这种方法首先选选定一个主题z,主题z对应一个单词的概率分布p(w|z),每次按某个主题的分布生成一个单词,使用M次这个方法生成M份不同的文档。其图模型如下图所示:

从上图可以看出,z在w所在的长方形外面,表示z生成一份N个单词的文档时主题z只生成一次,即只允许一个文档只有一个主题,这不太符合常规情况,通常一个文档可能包含多个主题。

 方法三:LDA(Latent Dirichlet Allocation)

LDA方法使生成的文档可以包含多个主题,该模型使用下面方法生成1个文档:

Chooseparameter θ ~ p(θ);
For each ofthe N words w_nth:
Choose a topic z_nth ~ p(z|θ);
Choose a word w_nth ~ p(w|z);

θ 是一个主题向量,向量的每一列表示每个主题在文档出现的概率,该向量为非负归一化向量;

p(θ) 是θ的分布,具体为Dirichlet分布,即分布的分布; // --> 很多小分布 组合在一起,每个分布出一个值,这些值构成一个集合,这个集合又属于某一种分布。

N 表示要生成的文档的单词的个数。

w_xth 表示生成的第n个单词w。

z_nth 表示选择的主题。

p(z|θ) 表示给定θ时,主题z的概率分布,具体为θ的值,即 p(z=i|θ)= θ_i;

p(w|z) 表示给定z时w的分布,可以看成一个k×V的矩阵,

这种方法首先选定一个主题向量θ,确定每个主题被选择的概率。

然后在生成每个单词的时候,

    1. 先从主题分布向量θ中选择一个主题z,
    2. 再按主题z的单词概率分布生成一个单词。

其图模型如下图所示:

从上图可知LDA的联合概率为:

把上面的式子对应到图上,可以大致按下图理解:

从上图可以看出,LDA的三个表示层被三种颜色表示出来:

1. corpus-level(红色)    :α和β表示语料级别的参数,也就是每个文档都一样,因此生成过程只采样一次。

2.document-level(橙色):θ是文档级别的变量,每个文档对应一个θ,也就是每个文档产生各个主题z的概率是不同的,所有生成每个文档采样一次θ。

3. word-level(绿色)      :z和w都是单词级别变量,z由θ生成,w由z和β共同生成,一个 单词w对应一个主题z。

通过上面对LDA生成模型的讨论,可以知道LDA模型主要是从给定的输入语料中学习训练两个控制参数α和β,学习出了这两个控制参数就确定了模型,便可以用来生成文档。其中α和β分别对应以下各个信息:

  • α:分布p(θ)需要一个向量参数,即Dirichlet分布的参数,用于生成一个主题θ向量; // gibbs sampling?
  • β:各个主题对应的单词概率分布矩阵p(w|z)。

把w当做观察变量,θ和z当做隐藏变量,就可以通过EM算法学习出α和β,

求解过程中遇到后验概率p(θ,z|w)无法直接求解,需要找一个似然函数下界来近似求解,

原文使用基于分解(factorization)假设的变分法(varialtional inference)进行计算,用到了EM算法。

每次E-step输入α和β,计算似然函数,M-step最大化这个似然函数,算出α和β,不断迭代直到收敛。

( 详见 Chapter [PGM] )

相关链接 【将LDA打通,是个耗时耗力的事儿】

1、Blei的LDA代码(C):http://www.cs.princeton.edu/~blei/lda-c/index.html
2、D.Bei的主页:http://www.cs.princeton.edu/~blei/publications.html
3、Gibbs LDA++ by Xuan-Hieu Phan and Cam-Tu Nguyen(C++):http://gibbslda.sourceforge.net/
4、用GibbsLDA做Topic Modeling (教程 by Lu Heng):http://weblab.com.cityu.edu.hk/blog/luheng/2011/06/
5、Daichi Mochihashi(C,Matlab) :http://chasen.org/~daiti-m/dist/lda/
6、Griffiths和Steyvers的Topic Modeling工具箱:http://psiexp.ss.uci.edu/research/programs_data/toolbox.htm
7.shuyo的LDA(python):https://shuyo.wordpress.com/2011/05/18/latent-dirichlet-allocation-in-python/
8.python库(lda 1.0.2):https://pypi.python.org/pypi/lda
9.图像主题方面的LDA实现(python):http://www.mblondel.org/journal/2010/08/21/latent-dirichlet-allocation-in-python/
10、一些博客:
(1)【转】LDA必读的资料 http://www.xperseverance.net/blogs/2012/03/657/
(2)我爱机器学习小站里面LDA部分:http://www.52ml.net/tags/lda/page/7
(3)基于LDA的Topic Model变形 http://www.cnblogs.com/wentingtu/archive/2013/06/02/3113422.html
(4)Topic modeling LDA by Blei(对Blei关于LDA的一些文章的评论)http://blog.csdn.net/pirage/article/details/8889951
(5)Latent dirichlet allocation note(里面有对Daichi Mochihashi写的LDA代码应用的教程)http://blog.csdn.net/wangran51/article/details/7408399
(6)Blei教学LDA视频:http://videolectures.NET/mlss09uk_blei_tm/ 主题模型及其变种的实现代码汇总
1.MALLET:实现语言,Java,实现模型,LDA,HLDA,Pachinko Allocation Model,此外,还实现了HMM,最大熵马尔科夫模型和条件随机场;
2.Shuyo的github代码:实现语言,Python,实现模型,LDA,Dirichlet Process Gaussian Mixture Model,online HDP,HDPLDA,Interactive Topic Model,Labeled LDA
地址:https://github.com/shuyo/iir/tree/master/lda
3.arongdari的github代码:实现语言,python,实现模型,LDA,Correlated Topic Model,Relational topic model,Author-Topic model,HMM-LDA,Discrete Infinite logistic normal,Supervised Topic Model,Hierarchical Dirichlet process,Hierarchical Dirichlet scaling process
地址:https://github.com/arongdari/python-topic-model
4.Gensim:实现语言,Python,实现模型,LDA,Dynamic Topic Model,Dynamic Influence Model,HDP,LSI,Random Projections,深度学习的word2vec,paragraph2vec。
官网地址:http://radimrehurek.com/gensim/index.html
github代码地址:https://github.com/piskvorky/gensim
5.ahmaurya的github代码:实现语言,Python,实现模型,Topic Over Time
github代码地址:https://github.com/ahmaurya/topics_over_time
6.Blei实验室的代码:实现语言,Python,实现模型,online lda,online HDP,turbo topic model,topic model visualization engine,实现语言,C,实现模型,correlated topic model,discrete infinite logistic normal,HLDA,lda,实现语言C++,实现模型,ctr,class-slda,Dynamic Topic model and the influence model,实现语言R,实现模型 lda
github代码地址:http://www.cs.columbia.edu/~blei/topicmodeling_software.html
7.中国科学技术信息研究所徐硕老师的PDF,对LDA,TOT,AT模型如何使用gibbs sampling求参进行了细致推导,并依据求参结果给出伪代码。
地址:http://blog.sciencenet.cn/blog-611051-582492.html [转]LDA的必读文章和相关代码
LDA和HLDA:
(1)D. M. Blei, et al., "Latent Dirichlet allocation," Journal of Machine Learning Research, vol. 3, pp. 993-1022, 2003.
(2)T. L. Griffiths and M. Steyvers, "Finding scientific topics," Proceedings of the National Academy of Sciences, vol. 101, pp. 5228-5235, 2004.
(3)D. M. Blei, et al., "Hierarchical Topic Models and the Nested Chinese Restaurant Process," NIPS, 2003.
(4)Blei的LDA视频教程:http://videolectures.net/mlss09uk_blei_tm/
(5)Teh的关于Dirichlet Processes的视频教程:http://videolectures.Net/mlss07_teh_dp/
(6)Blei的毕业论文:http://www.cs.princeton.edu/~blei/papers/Blei2004.pdf
(7)Jordan的报告:http://www.icms.org.uk/downloads/mixtures/jordan_talk.pdf
(8)G. Heinrich, "Parameter Estimation for Text Analysis," http://www.arbylon.net/publications/text-est.pdf
基础知识:
(1)P. Johnson and M. Beverlin, “Beta Distribution,” http://pj.freefaculty.org/ps707/Distributions/Beta.pdf
(2)M. Beverlin and P. Johnson, “The Dirichlet Family,” http://pj.freefaculty.org/stat/Distributions/Dirichlet.pdf
(3)P. Johnson, “Conjugate Prior and Mixture Distributions”,http://pj.freefaculty.org/stat/TimeSeries/ConjugateDistributions.pdf
(4)P.J. Green, “Colouring and Breaking Sticks:Random Distributions and Heterogeneous Clustering”,http://www.maths.bris.ac.uk/~mapjg/papers/GreenCDP.pdf
(5)Y. W. Teh, "Dirichlet Process", http://www.gatsby.ucl.ac.uk/~ywteh/research/npbayes/dp.pdf
(6)Y. W. Teh and M. I. Jordan, "Hierarchical Bayesian Nonparametric Models with Applications,”
http://www.stat.berkeley.edu/tech-reports/770.pdf
(7)T. P. Minka, "Estimating a Dirichlet Distribution", http://research.microsoft.com/en-us/um/people/minka/papers/dirichlet/minka-dirichlet.pdf
(8)北邮论坛的LDA导读:[导读]文本处理、图像标注中的一篇重要论文Latent Dirichlet Allocation,http://bbs.byr.edu.cn/article/PR_AI/2530?p=1
(9)Zhou Li的LDA Note:http://lsa-lda.googlecode.com/files/Latent Dirichlet Allocation note.pdf
(10)C. M. Bishop, “Pattern Recognition And Machine Learning,” Springer, 2006.
代码:
(1)Blei的LDA代码(C):http://www.cs.princeton.edu/~blei/lda-c/index.html
(2)BLei的HLDA代码(C):http://www.cs.princeton.edu/~blei/downloads/hlda-c.tgz
(3)Gibbs LDA(C++):http://gibbslda.sourceforge.net/
(4)Delta LDA(Python):http://pages.cs.wisc.edu/~andrzeje/research/deltaLDA.tgz
(5)Griffiths和Steyvers的Topic Modeling工具箱:http://psiexp.ss.uci.edu/research/programs_data/toolbox.htm
(6)LDA(Java):http://www.arbylon.net/projects/
(7)Mochihashi的LDA(C,Matlab):http://chasen.org/~daiti-m/dist/lda/
(8)Chua的LDA(C#):http://www.mysmu.edu/phdis2009/freddy.chua.2009/programs/lda.zip
(9)Chua的HLDA(C#):http://www.mysmu.edu/phdis2009/freddy.chua.2009/programs/hlda.zip
其他:
(1)S. Geman and D. Geman, "Stochastic Relaxation, Gibbs Distributions, and the Bayesian Restoration of Images," Pattern Analysis and Machine Intelligence, IEEE Transactions on, vol. PAMI-6, pp. 721-741, 1984.
(2)B. C. Russell, et al., "Using Multiple Segmentations to Discover Objects and their Extent in Image Collections," in Computer Vision and Pattern Recognition, 2006 IEEE Computer Society Conference on, 2006, pp. 1605-1614.
(3)J. Sivic, et al., "Discovering objects and their location in images," in Computer Vision, 2005. ICCV 2005. Tenth IEEE International Conference on, 2005, pp. 370-377 Vol. 1.
(4)F. C. T. Chua, "Summarizing Amazon Reviews using Hierarchical Clustering,"http://www.mysmu.edu/phdis2009/freddy.chua.2009/papers/amazon.pdf
(5)F. C. T. Chua, "Dimensionality Reduction and Clustering of Text Documents,”http://www.mysmu.edu/phdis2009/freddy.chua.2009/papers/probabilisticIR.pdf
(6)D Bacciu, "Probabilistic Generative Models for Machine Vision,"http://www.math.unipd.it/~sperduti/AI09/bacciu_unipd_handouts.pdf

[IR] Concept Search and LDA的更多相关文章

  1. [IR] Concept Search and LSI

    基于术语关系的贝叶斯网络信息检索模型扩展研究 LSI 阅读笔记 背景知识 提出一种改进的共现频率法,利用该方法挖掘了索引术语之间的相关关系,将这种相关关系引入信念网络模型,提出了一个具有两层术语节点的 ...

  2. [IR] Concept Search and PLSA

    [Topic Model]主题模型之概率潜在语义分析(Probabilistic Latent Semantic Analysis) 感觉LDA在实践中的优势其实不大,学好pLSA才是重点 阅读笔记 ...

  3. [Bayes] Concept Search and LDA

    重要的是通过实践更深入地了解贝叶斯思想,先浅浅地了解下LDA. 相关数学知识 LDA-math-MCMC 和 Gibbs Sampling LDA-math - 认识 Beta/Dirichlet 分 ...

  4. [Bayes] Concept Search and LSI

    基于术语关系的贝叶斯网络信息检索模型扩展研究 LSI 阅读笔记 背景知识 提出一种改进的共现频率法,利用该方法挖掘了索引术语之间的相关关系,将这种相关关系引入信念网络模型,提出了一个具有两层术语节点的 ...

  5. [Bayes] Concept Search and PLSA

    [Topic Model]主题模型之概率潜在语义分析(Probabilistic Latent Semantic Analysis) 感觉LDA在实践中的优势其实不大,学好pLSA才是重点 阅读笔记 ...

  6. [Bayesian] “我是bayesian我怕谁”系列 - Naive Bayes+prior

    先明确一些潜规则: 机器学习是个collection or set of models,一切实践性强的模型都会被归纳到这个领域,没有严格的定义,’有用‘可能就是唯一的共性. 机器学习大概分为三个领域: ...

  7. 本人AI知识体系导航 - AI menu

    Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯   徐亦达老板 Dirichlet Process 学习 ...

  8. [Bayesian] “我是bayesian我怕谁”系列 - Naive Bayes with Prior

    先明确一些潜规则: 机器学习是个collection or set of models,一切实践性强的模型都会被归纳到这个领域,没有严格的定义,’有用‘可能就是唯一的共性. 机器学习大概分为三个领域: ...

  9. [BOOK] Applied Math and Machine Learning Basics

    <Deep Learning> Ian Goodfellow Yoshua Bengio Aaron Courvill 关于此书Part One重难点的个人阅读笔记. 2.7 Eigend ...

随机推荐

  1. javascript中slice() splice() concat()操作数组的方法

    这三个操作数组,哪个返回一个新数组呢.上代码 splice()方法,用于插入,删除和替换. var arr=[1,2,3,4,5]; var arr1=arr.splice(1,3); console ...

  2. dd命令

    前言 dd命令文件处理 dd命令用于复制文件并对原文件的内容进行转换和格式化处理.dd命令功能很强大的,对于一些比较底层的问题,使用dd命令往往可以得到出人意料的效果. dd命令 转换拷贝一个文件,特 ...

  3. [04] Object类

    1.基本概念 Object类是所有类的父类,位于java.lang包中.任何类的对象,都可以调用Object类中的方法,包括数组对象. 2.常用方法 2.1 toString toString可以将任 ...

  4. 随便讲讲我对于svn和git的想法

    1.SVN是集中式版本管理工具,而Git是分布式版本管理工具,这是核心区别. 二者都有集中的库,只是git偏向于分布式,用户可以再自己电脑上克隆一份自己的库,即使在断网的情况下也能够查看版本,创建分支 ...

  5. Android 之xml解析

    HTTP网络传输中的数据组织方式有三种方式:1.HTML方式2.XML方式 3.JSON方式 XML称为可扩展标记语言,它与HTML一样,都是SGML(标准通用标记语言) XML是Internet环境 ...

  6. 以下内容对于灵活修改textField中文本以及占位文本属性进行了完整的封装,加入项目中可以节约开发时间。

    textField对占位文本设置属性有限,在项目中需要改变占位文本的属性以及位置,需要自己对控件进行封装 封装方法如下: 在LDTextField.m 文件中: #import <UIKit/U ...

  7. python文件名和文件路径操作

    Readme: 在日常工作中,我们常常涉及到有关文件名和文件路径的操作,在python里的os标准模块为我们提供了文件操作的各类函数,本文将分别介绍"获得当前路径""获得 ...

  8. 第一个ExtJS练习(添加用户面板)

    1.[准备] 我是在visual studio里面建立了一个asp.net MVC项目,然后导入ExtJS必要的包,然后写的. ExtJS5.1版本下载:https://pan.baidu.com/s ...

  9. 当你的SSM项目中的springmvc.xml发生第一行错误解决方案

    当你新建了一个SSM项目,你复制网上的xml文件来配置或者你下载了一个SSM项目打开发现xml文件错误,打开是第一行报错的时候你是不是很懵逼 或者是这样 总之就是xml文件中<?xml vers ...

  10. uvalive 3135 Argus

    https://vjudge.net/problem/UVALive-3135 题意: 有一个系统有多个指令,每个指令产生一个编号为qnum的时间,每个指令的触发间隔不相同,现在给出若干个指令,现在的 ...