1 关于主题模型

使用LDA做推荐已经有一段时间了,LDA的推导过程反复看过很多遍,今天有点理顺的感觉,就先写一版。

  • 隐含狄利克雷分布简称LDA(latent dirichlet allocation),是主题模型(topic model)的一种,由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出。 主题模型属于聚类方法,是一种无监督的学习方法。
  • 与通常的tf-idf相比,主题模型重在可以在语义上计算文本内容的相关性。主题模型是一种词袋模型,即只考虑文本总的词频,不考虑顺序。
  • 假设依据是一篇文本以一定的概率属于多个主题(概率相加为1),一个词也以一定的概率属于多个主题(一个词可能以不同的概率属于不同的主题)。
  • 参数的先验
    topic-word分布受一个参数为α的对称Dirichlet约束
    doc-topic分布受一个参数为β的对称Dirichlet约束

2 频率学派与贝叶斯学派

这里简单介绍频率学派和贝叶斯学派,因为PLSA和LDA分别用的是这两种学派的思想。

  • 直至今日,关于统计推断的主张和想法,大体可以纳入到两个体系之内,其一叫频率学派,其特征是把需要推断的参数θ视作固定且未知的常数,而样本X是随机的,其着眼点在样本空间,有关的概率计算都是针对X的分布。另一派叫做贝叶斯学派,他们把参数θ视作随机变量,而样本X是固定的,其着眼点在参数空间,重视参数θ的分布,固定的操作模式是通过参数的先验分布结合样本信息得到参数的后验分布。

以抛硬币为例,正面朝上的概率是待求的参数。

  • 往小处说,频率派认为参数是客观存在,不会改变,虽然未知,但却是固定值;贝叶斯派则认为参数是随机值,因为没有观察到,那么和是一个随机数也没有什么区别,因此参数也可以有分布。
  • 往大处说,频率派最常关心的是似然函数,而贝叶斯派最常关心的是后验分布。我们会发现,后验分布其实就是似然函数乘以先验分布再normalize一下使其积分到1。因此两者的很多方法都是相通的。贝叶斯派因为所有的参数都是随机变量,都有分布,因此可以使用一些基于采样的方法(如MCMC)使得我们更容易构建复杂模型。频率派的优点则是没有假设一个先验分布,因此更加客观,也更加无偏。
  • 例如,概率学派可能任务抛硬币证明朝上的概率就是0.5;而贝叶斯学派先取得一个先验概率,在通过做试验观察,结合先验概率和观察结果得出一个后验概率,这个后验概率才是硬币证明朝上的概率,后验概率本身也符合某种分布。
  • LDA是三层贝叶斯模型。 简单的说,一篇文章可以以不同的概率属于多个主题,但分别以多大的概率属于这些主题呢?例如文章A可以是{‘科技’:0.5, ‘体育’:0.2, ‘财经’:0.3}这种分布, 也可能是{‘科技’:0.4, ‘体育’:0.4, ‘财经’:0.2}这种分布. 贝叶斯学派认为这个分布也服从一定分布,这里用的就是狄利克雷分布,即它在LDA中其实是一个分布的分布。并且,LDA用到两次Dilichlet:一个主题中词的概率分布也服从狄利克雷分布。

3 PLSA与LDA

介绍PLSA和LDA两种生产模型。

3.1 PLSA

3.1.1 举个生成文本的例子

一篇文章往往有多个主题,只是这多个主题各自在文档中出现的概率大小不一样。比如介绍一个国家的文档中,往往会分别从教育、经济、交通等多个主题进行介绍。那么在pLSA中,文档是怎样被生成的呢?
假设你要写M篇文档,由于一篇文档由各个不同的词组成,所以你需要确定每篇文档里每个位置上的词。
再假定你一共有K个可选的主题,有V个可选的词,咱们来玩一个扔骰子的游戏。

  1. 假设你每写一篇文档会制作一颗K面的“文档-主题”骰子(扔此骰子能得到K个主题中的任意一个),和K个V面的“主题-词项” 骰子(每个骰子对应一个主题,K个骰子对应之前的K个主题,且骰子的每一面对应要选择的词项,V个面对应着V个可选的词)。
    比如可令K=3,即制作1个含有3个主题的“文档-主题”骰子,这3个主题可以是:教育、经济、交通。然后令V = 3,制作3个有着3面的“主题-词项”骰子,其中,教育主题骰子的3个面上的词可以是:大学、老师、课程,经济主题骰子的3个面上的词可以是:市场、企业、金融,交通主题骰子的3个面上的词可以是:高铁、汽车、飞机。
  2. 每写一个词,先扔该“文档-主题”骰子选择主题,得到主题的结果后,使用和主题结果对应的那颗“主题-词项”骰子,扔该骰子选择要写的词。
    先扔“文档-主题”的骰子,假设(以一定的概率)得到的主题是教育,所以下一步便是扔教育主题筛子,(以一定的概率)得到教育主题筛子对应的某个词:大学。
    上面这个投骰子产生词的过程简化下便是:“先以一定的概率选取主题,再以一定的概率选取词”。事实上,一开始可供选择的主题有3个:教育、经济、交通,那为何偏偏选取教育这个主题呢?其实是随机选取的,只是这个随机遵循一定的概率分布。比如可能选取教育主题的概率是0.5,选取经济主题的概率是0.3,选取交通主题的概率是0.2,那么这3个主题的概率分布便是{教育:0.5,经济:0.3,交通:0.2},我们把各个主题z在文档d中出现的概率分布称之为主题分布,且是一个多项分布。
    同样的,从主题分布中随机抽取出教育主题后,依然面对着3个词:大学、老师、课程,这3个词都可能被选中,但它们被选中的概率也是不一样的。比如大学这个词被选中的概率是0.5,老师这个词被选中的概率是0.3,课程被选中的概率是0.2,那么这3个词的概率分布便是{大学:0.5,老师:0.3,课程:0.2},我们把各个词语w在主题z下出现的概率分布称之为词分布,这个词分布也是一个多项分布。
    所以,选主题和选词都是两个随机的过程,先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,然后从该主题对应的词分布{大学:0.5,老师:0.3,课程:0.2}中抽取出词:大学。
  3. 最后,你不停的重复扔“文档-主题”骰子和”主题-词项“骰子,重复N次(产生N个词),完成一篇文档,重复这产生一篇文档的方法M次,则完成M篇文档。

3.1.2 流程总结

pLSA中生成文档的整个过程便是选定文档生成主题,确定主题生成词:

  1. 按照概率选择一篇文档
  2. 选定文档后,从主题分布中按照概率选择一个隐含的主题类别
  3. 选定后,从词分布中按照概率选择一个词

如下图所示(图中被涂色的d、w表示可观测变量,未被涂色的z表示未知的隐变量,N表示一篇文档中总共N个单词,M表示M篇文档):

上图中,文档d和词w是我们得到的样本(样本随机,参数虽未知但固定,所以pLSA属于频率派思想。区别于下文要介绍的LDA中:样本固定,参数未知但不固定,是个随机变量,服从一定的分布,所以LDA属于贝叶斯派思想),可观测得到,所以对于任意一篇文档,其是已知的。

从而可以根据大量已知的文档-词项信息,训练出文档-主题和主题-词项,如下公式所示:

故得到文档中每个词的生成概率为:

由于可事先计算求出,而未知,所以就是我们要估计的参数(值),通俗点说,就是要最大化这个θ。

用什么方法进行估计呢,常用的参数估计方法有极大似然估计MLE、最大后验证估计MAP、贝叶斯估计等等。因为该待估计的参数中含有隐变量z,所以我们可以考虑EM算法。 本文不展开介绍。

3.2 LDA

LDA就是在pLSA的基础上加层贝叶斯框架。pLSA样本随机,参数虽未知但固定,属于频率派思想;而LDA样本固定,参数未知但不固定,是个随机变量,服从一定的分布,LDA属于贝叶斯派思想。 这里的参数是指文档的主题分布、主题的词分布。

3.2.1 LDA流程

从上图可以看出,lda中,依据Dirichlet采样到了不同的文档-主题分布和主题-词分布。

  • Boxed:
    K is the number of topics
    N is the number of words in the document
    M is the number of documents to analyse
  • α is the Dirichlet-prior concentration parameter of the per-document topic distribution
  • β is the same parameter of the per-topic word distribution
  • φ(k) is the word distribution for topic k
  • θ(i) is the topic distribution for document i
  • z(i,j) is the topic assignment for w(i,j)
  • w(i,j) is the j-th word in the i-th document
  • φ and θ are Dirichlet distributions, z and w are multinomials.
    生成文本的过程:

LDA模型中一篇文档生成的方式:

  1. 按照先验概率选择一篇文档
  2. 从狄利克雷分布α中取样生成文档的主题分布,换言之,主题分布由超参数为α的Dirichlet分布生成
  3. 从主题的多项式分布中取样生成文档第 j 个词的主题
  4. 从狄利克雷分布(即Dirichlet分布)β中取样生成主题
    对应的词语分布,换言之,词语分布由参数为β的Dirichlet分布生成
  5. 从词语的多项式分布中采样最终生成词语

3.2.2 Gibbs LDA

前面已经介绍了LDA流程,最终的目标函数是个联合概率。待求的doc-topic和topic-word两个矩阵,是借助上述流程中的求得的。gibbs sample就是用来求这个两个概率矩阵的方法。 具体步骤再另一篇介绍采样和变分的文章中再做介绍。

4 在推荐算法中的应用

步骤:
1. 离线求的模型
2. 用模型对新文本预测topic,取topic概率带到阈值(例如0.2)且topN个topic,例如doc1 :topic1:0.5, topic2:0.2
3. 用户点击doc1,就说明用户对topic1和topic2感兴趣,保存用户新闻分析结果,以待推荐

参考

https://www.douban.com/group/topic/16719644/
http://blog.csdn.net/v_july_v/article/details/41209515
http://blog.csdn.net/pipisorry/article/details/42649657

理顺主题模型LDA及在推荐系统中的应用相关推荐

  1. lda主题模型应用java_主题模型LDA及在推荐系统中的应用

    1 关于主题模型 使用LDA做推荐已经有一段时间了,LDA的推导过程反复看过很多遍,今天有点理顺的感觉,就先写一版.隐含狄利克雷分布简称LDA(latent dirichlet allocation) ...

  2. python主题建模_在PYTHON中进行主题模型LDA分析

    原文链接:在PYTHON中进行主题模型LDA分析​tecdat.cn 主题建模是一种在大量文档中查找抽象主题的艺术方法.一种作为监督无的机器学习方法,主题模型不容易评估,因为没有标记的"基础 ...

  3. 主题模型 LDA,Dirichlet分布 和朴素贝叶斯算法

    主题模型 主题模型(topic model)是以非监督学习的方式对文集的隐含语义结构(latent semantic structure)进行聚类(clustering)的统计模型. 主题模型主要被用 ...

  4. 狄利克雷分布主题模型LDA

    狄利克雷分布主题模型LDA 文章目录 狄利克雷分布主题模型LDA 1.整体把握LDA 2.前提知识 2.1 gamma函数 2.2 四个分布 2.2.1 二项分布 2.2.2 多项分布 2.2.3 B ...

  5. lda主题模型 python_主题模型LDA

    主题模型,说实话之前学的时候还真没见过,所以看到这一章的时候感觉很是疑惑,不知道主题模型是要干什么.看完后感觉这个主题模型应该是nlp中的一种特殊的聚类方式,可以通过对文档提取主题,然后根据不同的主题 ...

  6. 主题模型 LDA 入门(附 Python 代码)

    一.主题模型 在文本挖掘领域,大量的数据都是非结构化的,很难从信息中直接获取相关和期望的信息,一种文本挖掘的方法:主题模型(Topic Model)能够识别在文档里的主题,并且挖掘语料里隐藏信息,并且 ...

  7. python数据分析论文报告_Calaméo - 【原创】在PYTHON中进行主题模型LDA分析数据分析报告论文(代码+数据) ....

    [ 原 创 ] 定 制 代 写 开 发 辅 导 答 疑 r/python/spss/matlab/WEKA/sas/sql/C++/stata/eviews/Computer science assi ...

  8. 系统学习NLP(二十二)--主题模型LDA

    转自:https://blog.csdn.net/kisslotus/article/details/78427585 原文更详细,这里删减了不少 1. 简介 在机器学习领域,LDA是两个常用模型的简 ...

  9. NLP自然语言处理—主题模型LDA案例:挖掘人民网留言板文本数据

    全文链接:tecdat.cn/?p=2155 随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带.领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的 ...

最新文章

  1. ajax用户登录模块,ajax用户注册模块
  2. 【CVPR 2018】腾讯AI lab提出深度人脸识别中的大间隔余弦损失
  3. “==”和equals方法的区别
  4. 美参议员敦促SEC就雅虎黑客案信息披露义务展开调查
  5. C#-获取页面源代码
  6. java object 比较_Java比较两个对象
  7. 深度学习算法_爱奇艺深度学习算法实习生面经
  8. Python Django开发案例:显示登录页面
  9. QT的QScriptValueIterator类的使用
  10. CSS中定位(带你实操代码掌握固定定位、绝对定位与相对定位(子绝父相))
  11. jpa多表联查动态_Spring Data JPA 连表动态条件查询
  12. pytest框架学习
  13. 开源一个简单的VC界面库
  14. 扒小程序 小程序反编译 获取小程序源码 完美反编译任何小程序完整代码
  15. 华为HCIE RS笔记-21OSPF基本知识
  16. Codewars笔记
  17. [QT_015]Qt学习之基于条目控件的自定义特性(拖拽+右键菜单+样式)
  18. 单片机外部中断触发方式:电平触发和边沿触发两者说明
  19. 下载图片 getInputStream、available()问题
  20. 求vector向量中的最大值与最小值

热门文章

  1. html5扑克牌游戏源码,【web】纯JavaScript实现window经典纸牌游戏
  2. 发布动态网站需要额外安装哪些软件_湖北搜索引擎优化排名平台,爱采购发布软件_哆米云采购网...
  3. OLE、OCX和ActiveX控件之间的比较
  4. 宜信区块链|案例解读宜信如何运用区块链双链技术重构供应链金融服务
  5. 超全的Matplotlib速查表,打包下载
  6. 技术分享 | 什么是Minitaur四足机器人?
  7. OPPOEncoAir2Pro怎么样 值得入手吗
  8. 树莓派MQTT服务远程测试MQTT.fx
  9. ESP32 ESP-IDF ftpServer
  10. Word文档如何实现单页横向设置