理解 LDA

文章部分来源于以下链接,个人也很推荐.

http://www.mblondel.org/journal/2010/08/21/latent-dirichlet-allocation-in-python/

http://www.cl.cam.ac.uk/teaching/1011/L101/ml4lp-lect8.pdf

http://users-deprecated.aims.ac.za/~ioana/

http://blog.echen.me/2011/08/22/introduction-to-latent-dirichlet-allocation/

OK,转入正题,LDA 究竟是个多么神秘的武器呢?

假如我们有以下一组句子:

  • 我喜欢吃西兰花和香蕉;
  • 我今天早餐吃了香蕉和菠菜汤;
  • 猫和狗都是很可爱的动物;
  • 我妹妹领养了一只小猫;
  • 一只可爱的哈巴狗在狂嚼西兰花.

那么什么是LDA 呢?LDA就是能自动的找出以上五组句子中的谈论的主题的一种动态分配方法。如果我们要求从以上五个句子中找出2个主题,LDA可能会归纳出以下内容:

  • topic A  含有:15%西兰花  、 30%香蕉、 15% 菠菜汤 、15%早餐、20%吃......(给各单词一个大概的估计,我们可以看出topic A 基本上说的是关于 吃的DD)
  • topic B 含有:30%猫,20%狗,20%可爱的,10%哈巴狗......(各个单词出现的概率这里也是一个大概的估计,我们大致的归纳topic B 描述的是可爱的动物)
  • 句子1和句子2 属于TOPIC A;
  • 句子3和句子4属于TOPIC B;
  • 句子5 横跨TOPIC A 和TOPIC B,其中60%属于topicB ,40%属于topic A 。这里的60%和40%也是一个大概的估计;

现在的问题是,LDA 根据什么得出以上的各个主题及单词分配的概率呢?

LDA 表示文档是一个具有多个topic的混合体,topic下的单词依附这个topic,并以某个概率值存在。当我们要写一篇文章的时候,大脑里肯定会立马浮现出这篇文章中的出现频率最高的单词,而后其他的单词逐一沿着我们写文章的思路一一蹦出来,也就是这些单词的概率值没有大脑里立马浮现的单词的似然估计值大。假设现在开始写文章.......

  • 这篇文章可能出现的单词总数N(单词存在形式服从泊松分布);
  • 为文章选择几个主题(Dirichlet distribution );
  • 通过以下2种方式产生文章中的第i个单词w_i:
  1. 从文章布局的几个主题中选择一个主题;
  2. 通过这个主题来生成相应的单词;

举例说明,

  • 某文章D 含有5个单词;
  • 假设这篇文章一个topic是关于‘food’,另一个topic是关于‘cute animals’;
  • 选择一个关于‘topic --food’的单词,结果run出‘西兰花’;
  • 再选择一个关于‘topic --cute animal’的单词,run出 ‘小狗’;
  • 选择的第三个单词也是关于‘topic--cute animal’,run出‘小猫’;
  • 选择的第四个单词,‘topic--food’,得出‘樱桃’;
  • 第五个单词,‘topic--food’,‘吃饭’;

于是我们得出这篇文章中的5个单词是:{西兰花,小狗,小猫,樱桃,吃饭}。

LDA的学习过程:你手头有一袋 bag of words,你现在有好几篇文章打算写,同时你只对K个topic感兴趣。然后你需要运用LDA 模型去将topics 与文章匹配,每篇文章有哪几个topic,对应这几个topic的words分别是哪些。将DOC--TOPICS---WORDS 建议一一对应的关系。这个过程的实现,引入万能的MCMC Gibbs 算法分析,有:

  • 浏览整袋words,随机地将出现的单词归到K个topic下;如同你扔骰子一样,先从玻璃罐中那出一个骰子扔一次得到k,再从另一个玻璃罐中找到编号为K的这个骰子,拿出来一扔,得到单词w;//参见"LDA 数学八卦"
  • 这种随机分配,呈现了DOC--TOPICS---WORDS的一个非常粗糙的版本,但是我们大概知道了各文章中的topics是哪些,各个topic含有的单词又有哪些;
  • 为了获得更精确的结果,对每一篇文章进行更为精确的取样:纵览文章D 的每一个单词,要得出其清晰的结构,我们就需要计算D中topic和word相对文中出现的单词的概率值是多少。
  • 首先对每个topic,计算 1.P(topic t I document d)=文章d中topic t出现的概率(文章D中的单词属于topic t 的概率值);2. P(word _i I topic t)=单词W_i在topic t 下出现在文章D中的概率值,这个topic t 是一个隐含变量,就像给你一堆的苹果,橘子,香蕉、米饭、牛肉等,你知道他们都是属于介绍食物的说明文中,但是其中的水果类下是哪几个单词,通过估计去获取;
  • 现在给w_i安排一个topic t,topic t的选择依据 P(word _i I topic t)*P(topic t I document d)的概率值,这个值是一个随机值,需要通过不断的重复取样来达到一个稳定值,这一过程的实现就是一个gibbs取样的过程。如果P(word _i I topic t)*P(topic t I document d)看着有点糊的话,把它带到LDA模型中,应该是这样的表达式P(w_i,z_k I theta,phi);

至此,K个topics下的words均在gibbs的作用下,浮出水面。

后续会再贴一些公式和图片进行说明。

你可能感兴趣的:(理解 LDA)