LDA

这里简单的介绍一下LDA的另一种身份,概率主题模型

隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA)隐含狄利克雷分布(英语:Latent Dirichlet allocation,简称LDA),是一种主题模型,它可以将文档集中每篇文档的主题按照概率分布的形式给出。同时它是一种无监督学习算法,在训练时不需要手工标注的训练集,需要的仅仅是文档集以及指定主题的数量k即可。此外LDA的另一个优点则是,对于每一个主题均可找出一些词语来描述它。

LDA首先由 David M. Blei、吴恩达和迈克尔·I·乔丹于2003年提出[1],目前在文本挖掘领域包括文本主题识别、文本分类以及文本相似度计算方面都有应用。

维基百科

e~,比较抽象啊。。

举个栗子:

一般写一篇文章,常规的思路就是:

  • 给几个主题,然后以一定的概率选择某个或者某几个,俗称先定题
  • 对于每个主题,再去以一定的概率去选择词去详细说明某个主题,俗称描述主题
  • ok一篇文章生成了~

那LDA正好就是上述过程反过来,已知一篇文章了,但是需要确定这篇文章的主题。

步骤

从狄利克雷分布\(\alpha\) 中取样生成文档i的主题分布\(\theta _{i}\)

从主题的多项式分布\(\theta _{i}\)中取样生成文档i第j个词的主题\(z_{{i,j}}\)

从狄利克雷分布\(\beta\) 中取样生成主题\(z_{{i,j}}\)的词语分布\(\phi _{{z_{{i,j}}}}\)

从词语的多项式分布\(\phi _{{z_{{i,j}}}}\)中采样最终生成词语\(w_{{i,j}}\)

其中,类似Beta分布是二项式分布的共轭先验概率分布,而狄利克雷分布(Dirichlet分布)是多项式分布的共轭先验概率分布。此外,LDA的图模型结构如下图所示(类似贝叶斯网络结构):

主题模型

主题模型(Topic Model)在机器学习和自然语言处理等领域是用来在一系列文档中发现抽象主题的一种统计模型。直观来讲,如果一篇文章有一个中心思想,那么一些特定词语会更频繁的出现。比方说,如果一篇文章是在讲狗的,那“狗”和“骨头”等词出现的频率会高些。如果一篇文章是在讲猫的,那“猫”和“鱼”等词出现的频率会高些。而有些词例如“这个”、“和”大概在两篇文章中出现的频率会大致相等。但真实的情况是,一篇文章通常包含多种主题,而且每个主题所占比例各不相同。因此,如果一篇文章10%和猫有关,90%和狗有关,那么和狗相关的关键字出现的次数大概会是和猫相关的关键字出现次数的9倍。一个主题模型试图用数学框架来体现文档的这种特点。主题模型自动分析每个文档,统计文档内的词语,根据统计的信息来断定当前文档含有哪些主题,以及每个主题所占的比例各为多少。

主题模型最初是运用于自然语言处理相关方向,但目前以及延伸至例如生物信息学的其它领域。维基百科

几个重要分布

二项分布

重复n次的伯努利实验,就是0~1分布,\(X \sim b(n, p)\)

多项分布

是二项分布扩展到多维的情况。多项分布是指单次试验中的随机变量的取值不再是0-1的,而是有多种离散值可能(1,2,3...,k)。比如投掷5个面的骰子实验,N次实验结果服从K=5的多项分布\(\sum_{i=1}^{k} p_{i}=1, p_{i}>0\)

共轭先验分布

贝叶斯里面的先验分布和后验分布

参考这个的先验概率和后验概率难逃贝叶斯的宠幸

Beta分布

二项分布的共轭先验分布。给定参数 α>0 和 β>0,取值范围为[0,1]的随机变量 x 的概率密度函数:

\(f(x ; \alpha, \beta)=\frac{1}{B(\alpha, \beta)} x^{\alpha-1}(1-x)^{\beta-1}\)

\(\frac{1}{B(\alpha, \beta)}=\frac{\Gamma(\alpha+\beta)}{\Gamma(\alpha) \Gamma(\beta)}\)

\(\Gamma(z)=\int_{0}^{\infty} t^{z-1} e^{-t} d t\)

这便是所谓的gamma函数cnblogs

狄利克雷分布

\(f\left(x_{1}, x_{2}, \ldots, x_{k} ; \alpha_{1}, \alpha_{2}, \ldots, \alpha_{k}\right)=\frac{1}{B(\alpha)} \prod_{i=1}^{k} x_{i}^{\alpha^{i}-1}\)

\(B(\alpha)=\frac{\prod_{i=1}^{k} \Gamma\left(\alpha^{i}\right)}{\Gamma\left(\sum_{i=1}^{k} \alpha^{i}\right)}, \sum x_{i}=1\)

\(\operatorname{Dir}(\vec{p} | \vec{\alpha})+\operatorname{Mult} \operatorname{Count}(\vec{m})=\operatorname{Dir}(p | \vec{\alpha}+\vec{m})\)

直接上公式不太好理解

模型

定义变量cnblogs

\(w\) 表示词,\(V\) 表示所有单词的个数(固定值)。

\(z\) 表示主题,\(k\) 是主题的个数(预先给定,固定值)。

\(D=(W_1,...,W_M)\) 表示语料库,其中的\(M\)是语料库中的文档数(固定值)。

\(W=(w1,w2,...,w_N)\) 表示文档,其中的\(N\)表示一个文档中的词数(随机变量)。

Unigram model

对于文档\(W=(w_1,w_2,...,w_N)\),用 \(p(w_n)\) 表示词 \(w_n\) 的先验概率,生成文档\(w\)的概率为:\(p(W)=\prod_{n=1}^{N} p\left(w_{n}\right)\)

这个好理解,就是每个词概率的乘积,先验概率,是一个词袋模型,cnblogs

Mixture of unigrams model

该模型的生成过程是:给某个文档先选择一个主题z,再根据该主题生成文档,该文档中的所有词都来自一个主题。假设主题有 z1,...,zn,生成文档w的概率为:

后验概率

\(p(W)=p\left(z_{1}\right) \prod_{n=1}^{N} p\left(w_{n} | z_{1}\right)+\ldots+p\left(z_{k}\right) \prod_{n=1}^{N} p\left(w_{n} | z_{k}\right)=\sum_{z} p(z) \prod_{n=1}^{N} p\left(w_{n} | z\right)\)

PLSA模型

详细推导见:cnblogs

既然文档已经产生,那么如何根据已经产生好的文档反推其主题呢?这个利用看到的文档推断其隐藏的主题(分布)的过程(其实也就是产生文档的逆过程),便是主题建模的目的:自动地发现文档集中的主题(分布)。

文档d和词w是我们得到的样本,可观测得到,所以对于任意一篇文档,其 \(P(w_j|d_i)\) 是已知的。从而可以根据大量已知的文档-词项信息 \(P(w_j|d_i)\),训练出文档-主题 \(P(z_k|d_i)\) 和主题-词项 \(P(w_j|z_k)\),如下公式所示:\(P\left(w_{j} | d_{i}\right)=\sum_{k=1}^{K} P\left(w_{j} | z_{k}\right) P\left(z_{k} | d_{i}\right)\)

故得到文档中每个词的生成概率为:\(P\left(d_{i}, w_{j}\right)=P\left(d_{i}\right) P\left(w_{j} | d_{i}\right)=P\left(d_{i}\right) \sum_{k=1}^{K} P\left(w_{j} | z_{k}\right) P\left(z_{k} | d_{i}\right)\)

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

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

LDA

再PLSA的基础上加了贝叶斯优化

因此有了先验概率和后验概率

在LDA中,主题分布和词分布不再唯一确定不变,即无法确切给出。例如主题分布可能是{教育:0.5,经济:0.3,交通:0.2},也可能是{教育:0.6,经济:0.2,交通:0.2},到底是哪个我们不再确定(即不知道),因为它是随机的可变化的。但再怎么变化,也依然服从一定的分布,即主题分布跟词分布由Dirichlet先验随机确定。正因为LDA是PLSA的贝叶斯版本,所以主题分布跟词分布本身由先验知识随机给定。cnblogs

怎么确定LDA的topic个数?

基于经验 主观判断、不断调试、操作性强、最为常用。

基于困惑度(主要是比较两个模型之间的好坏)。

使用Log-边际似然函数的方法,这种方法也挺常用的。

非参数方法:Teh提出的基于狄利克雷过程的HDP法。

基于主题之间的相似度:计算主题向量之间的余弦距离,KL距离等。cnblogs

如何用主题模型解决推荐系统中的冷启动问题?

推荐系统中的冷启动问题是指在没有大量用户数据的情况下如何给用户进行个性化推荐,目的是最优化点击率、转化率或用户 体验(用户停留时间、留存率等)。冷启动问题一般分为用户冷启动、物品冷启动和系统冷启动三大类。

用户冷启动是指对一个之前没有行为或行为极少的新用户进行推荐;

物品冷启动是指为一个新上市的商品或电影(这时没有与之相关的 评分或用户行为数据)寻找到具有潜在兴趣的用户;

系统冷启动是指如何为一个 新开发的网站设计个性化推荐系统。

解决冷启动问题的方法一般是基于内容的推荐。以Hulu的场景为例,对于用 户冷启动来说,我们希望根据用户的注册信息(如:年龄、性别、爱好等)、搜 索关键词或者合法站外得到的其他信息(例如用户使用Facebook账号登录,并得 到授权,可以得到Facebook中的朋友关系和评论内容)来推测用户的兴趣主题。 得到用户的兴趣主题之后,我们就可以找到与该用户兴趣主题相同的其他用户, 通过他们的历史行为来预测用户感兴趣的电影是什么。cnblogs

同样地,对于物品冷启动问题,我们也可以根据电影的导演、演员、类别、关键词等信息推测该电影所属于的主题,然后基于主题向量找到相似的电影,并将新电影推荐给以往喜欢看这 些相似电影的用户。可以使用主题模型(pLSA、LDA等)得到用户和电影的主题。

以用户为例,我们将每个用户看作主题模型中的一篇文档,用户对应的特征 作为文档中的单词,这样每个用户可以表示成一袋子特征的形式。通过主题模型 学习之后,经常共同出现的特征将会对应同一个主题,同时每个用户也会相应地 得到一个主题分布。每个电影的主题分布也可以用类似的方法得到。

那么如何解决系统冷启动问题呢?首先可以得到每个用户和电影对应的主题向量,除此之外,还需要知道用户主题和电影主题之间的偏好程度,也就是哪些主题的用户可能喜欢哪些主题的电影。当系统中没有任何数据时,我们需要一些先验知识来指定,并且由于主题的数目通常比较小,随着系统的上线,收集到少量的数据之后我们就可以对主题之间的偏好程度得到一个比较准确的估计。cnblogs

LDA概率主题模型的更多相关文章

  1. 概率主题模型简介 Introduction to Probabilistic Topic Models

    此文为David M. Blei所写的<Introduction to Probabilistic Topic Models>的译文,供大家参考. 摘要:概率主题模型是一系列旨在发现隐藏在 ...

  2. 转:概率主题模型简介 --- ---David M. Blei所写的《Introduction to Probabilistic Topic Models》的译文

    概率主题模型简介 Introduction to Probabilistic Topic Models      转:http://www.cnblogs.com/siegfang/archive/2 ...

  3. LDA算法 (主题模型算法) 学习笔记

    转载请注明出处: http://www.cnblogs.com/gufeiyang 随着互联网的发展,文本分析越来越受到重视.由于文本格式的复杂性,人们往往很难直接利用文本进行分析.因此一些将文本数值 ...

  4. LDA(主题模型算法)

    LDA整体流程 先定义一些字母的含义: 文档集合D,topic集合T D中每个文档d看作一个单词序列< w1,w2,...,wn >,wi表示第i个单词,设d有n个单词.(LDA里面称之为 ...

  5. 用scikit-learn学习LDA主题模型

    在LDA模型原理篇我们总结了LDA主题模型的原理,这里我们就从应用的角度来使用scikit-learn来学习LDA主题模型.除了scikit-learn,  还有spark MLlib和gensim库 ...

  6. Spark:聚类算法之LDA主题模型算法

    http://blog.csdn.net/pipisorry/article/details/52912179 Spark上实现LDA原理 LDA主题模型算法 [主题模型TopicModel:隐含狄利 ...

  7. 自然语言处理之LDA主题模型

    1.LDA概述 在机器学习领域,LDA是两个常用模型的简称:线性判别分析(Linear Discriminant Analysis)和 隐含狄利克雷分布(Latent Dirichlet Alloca ...

  8. 理解 LDA 主题模型

    前言 gamma函数 0 整体把握LDA 1 gamma函数 beta分布 1 beta分布 2 Beta-Binomial 共轭 3 共轭先验分布 4 从beta分布推广到Dirichlet 分布 ...

  9. 主题模型 LDA 入门

    主题模型 LDA 入门(附 Python 代码)   一.主题模型 在文本挖掘领域,大量的数据都是非结构化的,很难从信息中直接获取相关和期望的信息,一种文本挖掘的方法:主题模型(Topic Model ...

随机推荐

  1. 一文搞懂 ThreadLocal 原理

    当多线程访问共享可变数据时,涉及到线程间同步的问题,并不是所有时候,都要用到共享数据,所以就需要线程封闭出场了. 数据都被封闭在各自的线程之中,就不需要同步,这种通过将数据封闭在线程中而避免使用同步的 ...

  2. 火焰图--记一次cpu降温过程

    引子 正值周末,娃儿6:30又如闹铃般准时来叫醒了我们.年前离开美菜,又回到了杭州.原本是想有更多时间陪伴娃儿,然而新的工作节奏与工作地点,让我们每天都是早上见面:这不,为了周末可以多玩一会儿,早早就 ...

  3. [洛谷1437&Codevs1257]敲砖块<恶心的dp>

    题目链接:https://www.luogu.org/problem/show?pid=1437#sub http://codevs.cn/problem/1257/ 不得不说,这个题非常的恶心,在初 ...

  4. LeetCode(一) jump game

    一. 1. #include<iostream> #include<cmath> using namespace std; bool CanJump(int n[],int n ...

  5. Servlet---request内置对象

    Request 对象: 问题: 浏览器发起请求到服务器,会遵循HTTP协议将请求数据发送给服务器. 那么服务器接受到请求的数据改怎么存储呢?不但要存,而且要保证完成性. 解决: 使用对象进行存储,服务 ...

  6. EOS基础全家桶(六)账号管理

    简介 本篇我们会学习最基本的账号相关的操作,包括了创建账号和查询,关于账号资源的操作因为必须先部署系统合约,所以我们会留到后面单独写一篇来讲解. 6-EOS基础全家桶(六)账号管理 简介 账号介绍 账 ...

  7. stm32:#ifndef/#define/#endif使用

    参考:https://blog.csdn.net/abc5382334/article/details/18052757/ 比如:存在a.h文件#include "c.h"而此时b ...

  8. 201771010108 -韩腊梅-java学习进度表

    2018面向对象程序设计(Java)课程进度表 周次 (阅读/编写)代码行数  发布博文量/评论他人博文数量  课余学习时间(小时)  学习收获最大的程序阅读或编程任务 1 30/40 1/0 8   ...

  9. MTK Android Framework用SystemProperties通过JNI调用访问系统属性

    1.导包 import android.os.SystemProperties; 2. Android SystemProperties设置/读取 #设置 Systemproperties.set(n ...

  10. MTK Android ROM与RAM的区别

    ROM与RAM 简单的说,一个完整的计算机系统是由软件和硬件组成的.其中,硬件部分由中央处理单元CPU(包括运算器和控制器).存储器和输入/输出设备构成.目前个人电脑上使用的主板一般只能支持到1GB的 ...