LDA
LDA 主题模型( Latent Dirichent Allocation)
隐含迪利克雷分布
机器学习的创痛模型中还有一个LDA :就是Linear decision Analise线性判别模型
LDA是机器学习领域的一个传统模型,可以学习的东西非常的多,很经典。同时,他也是nlp领域必学打的一个模型。
文本量化:
做自然语言处理,首先我们需要量化文本。
比如我们拿到一堆文章数据:
- 词袋模型:一篇文章过长,需要简化处理,放弃顺序信息,不考虑词的顺序。例如onehot编码,文章出现了哪些词,对应位置就为一。这种方法最为简单粗暴,缺点是,常用中文词在几十万,向量特征是离散的,而且占用空间内存大。
- 训练词向量。
比如我们需要讲手里的一堆文章按主题分类。怎么做?
一、kmeans聚类
缺点:
- 计算量大
- 仅仅以词的重复度为标准
- 同主题的文章词不一定相似,抽象度不够
- 一个文章只能由一个主题
二、文章——主题——词
文章对应于主题分布,每个主题会对应此分布。根据此思想可以重新描述文章的生成过程。
比如我要写一篇文章,先确定那几个主题,每个主题的占比比方是:{ti},然后,每个主题对应于一个词分布。这样就生成了这篇文章的词分布{wi},相当于生成了这篇文章的词袋,并且有每词出现的概率。
所以,我们已知的是D(doc)和W(word),LDA求出来的就是Topic的分布。这个主题是隐主题。不能映射到现实世界的主题。但如果两篇文章主题分布很近,那可以确定的是这两篇文章很可能主题差不多。
t1 | w1 | w3 | w5 | w11 |
t2 | w2 | w3 | w5 | 26 |
t3 | w1 | w5 | w7 | w8 |
t4 | w2 | w3 | w5 | w7 |
t1 | w1 | w3 | w5 | w11 |
t4 | w2 | w3 | w5 | 26 |
t5 | w1 | w5 | w7 | w8 |
t7 | w2 | w3 | w5 | w7 |
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 |
==>归一化,按概率采样,得到该文章主题分布。
总结思想:
一、
- 假设文章有k个主题。得到P(词 | 主题)和P(主题|文章)
- 根据:得到每个词对应的主题。
-
直到了每个词对应的主题,就能再次从1开始循环。直到最后的主题词分布趋于稳定。(鸡生蛋诞生记问题 )
二、
如果做出来最终相关性不是很好,可以考虑
- 给文章打上领域标签,费同领域的不会列入相关推荐
- 分数设置阈值
三、
LDA档案不仅仅用于文本场景:得到主题-视频分布
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 阅读(57) 评论(0) 编辑 收藏 举报