life‘s_a_struggle

导航

LDA

LDA 主题模型( Latent Dirichent Allocation)

隐含迪利克雷分布

机器学习的创痛模型中还有一个LDA :就是Linear decision Analise线性判别模型

LDA是机器学习领域的一个传统模型,可以学习的东西非常的多,很经典。同时,他也是nlp领域必学打的一个模型。


 

文本量化:

做自然语言处理,首先我们需要量化文本。

比如我们拿到一堆文章数据:

  1. 词袋模型:一篇文章过长,需要简化处理,放弃顺序信息,不考虑词的顺序。例如onehot编码,文章出现了哪些词,对应位置就为一。这种方法最为简单粗暴,缺点是,常用中文词在几十万,向量特征是离散的,而且占用空间内存大。
  2. 训练词向量。

比如我们需要讲手里的一堆文章按主题分类。怎么做?

一、kmeans聚类  

缺点:

  1. 计算量大
  2. 仅仅以词的重复度为标准
  3. 同主题的文章词不一定相似,抽象度不够
  4. 一个文章只能由一个主题

二、文章——主题——词

文章对应于主题分布,每个主题会对应此分布。根据此思想可以重新描述文章的生成过程。

比如我要写一篇文章,先确定那几个主题,每个主题的占比比方是:{ti},然后,每个主题对应于一个词分布。这样就生成了这篇文章的词分布{wi},相当于生成了这篇文章的词袋,并且有每词出现的概率。

所以,我们已知的是D(doc)和W(word),LDA求出来的就是Topic的分布。这个主题是隐主题。不能映射到现实世界的主题。但如果两篇文章主题分布很近,那可以确定的是这两篇文章很可能主题差不多。

doc1
t1 w1 w3 w5 w11
t2 w2 w3 w5 26
t3 w1 w5 w7 w8
t4 w2 w3 w5 w7

 

doc2
t1 w1 w3 w5 w11
t4 w2 w3 w5 26
t5 w1 w5 w7 w8
t7 w2 w3 w5 w7

  

doc3
t1 w1 w3 w5 w11
t2 w2 w3 w5 26
t4 w1 w5 w7 w8
t9 w2 w3 w5 w7

    

 

 .。。。。。。

 

 

对于每篇文章我们都可以假设他有n个主题,因此可以转化成上面表格的形式。

所以:我们能通过统计得到   P(词 | 主题)和P(主题|文章)

  • 文章 主题分布
  • 主题     词分布

所以,怎么求每个词对应的主题呢?

 

 

 

 

 

通过以上统计运算,最终能得到:

主题分布
p(t1|d,W) p1
p  (t2|d,W) p2
p  (t3|d,W) p3
p  (t4|d,W) p4

 

 

 

 

==>归一化,按概率采样,得到该文章主题分布。

 

 

 

 

总结思想:

一、

  1. 假设文章有k个主题。得到P(词 | 主题)和P(主题|文章)
  2. 根据:得到每个词对应的主题。
  3. 直到了每个词对应的主题,就能再次从1开始循环。直到最后的主题词分布趋于稳定。(鸡生蛋诞生记问题 )

二、

如果做出来最终相关性不是很好,可以考虑

  1. 给文章打上领域标签,费同领域的不会列入相关推荐
  2. 分数设置阈值

三、

LDA档案不仅仅用于文本场景:得到主题-视频分布

user1
t1 v1 v3 v5 v11
t2 v2 v3 v5 v6
t3 v1 v5 v7 v8
t4 v2 v3 v5 v7

 

 

 

更具用户的浏览数据可以得到每个非常重要的信息。

 

 


 

注意:再做概率统计的时候,为了避免出现0导致算法死亡。通常会给灭个词都加一个先验。具体做法可以参照NLP-word2vec


 

posted on 2021-06-09 17:11  life‘s_a_struggle  阅读(51)  评论(0编辑  收藏  举报