LDA
这里简单的介绍一下LDA的另一种身份,概率主题模型
隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA)隐含狄利克雷分布(英语:Latent Dirichlet allocation,简称LDA),是一种主题模型,它可以将文档集中每篇文档的主题按照概率分布的形式给出。同时它是一种无监督学习算法,在训练时不需要手工标注的训练集,需要的仅仅是文档集以及指定主题的数量k即可。此外LDA的另一个优点则是,对于每一个主题均可找出一些词语来描述它。
LDA首先由 David M. Blei、吴恩达和迈克尔·I·乔丹于2003年提出[1],目前在文本挖掘领域包括文本主题识别、文本分类以及文本相似度计算方面都有应用。
维基百科
e~,比较抽象啊。。
举个栗子:
一般写一篇文章,常规的思路就是:
- 给几个主题,然后以一定的概率选择某个或者某几个,俗称先定题
- 对于每个主题,再去以一定的概率去选择词去详细说明某个主题,俗称描述主题
- ok一篇文章生成了~
那LDA正好就是上述过程反过来,已知一篇文章了,但是需要确定这篇文章的主题。
步骤
从狄利克雷分布(alpha) 中取样生成文档i的主题分布( heta _{i})
从主题的多项式分布( heta _{i})中取样生成文档i第j个词的主题(z_{{i,j}})
从狄利克雷分布(eta) 中取样生成主题(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, eta)=frac{1}{B(alpha, eta)} x^{alpha-1}(1-x)^{eta-1})
(frac{1}{B(alpha, eta)}=frac{Gamma(alpha+eta)}{Gamma(alpha) Gamma(eta)})
(Gamma(z)=int_{0}^{infty} t^{z-1} e^{-t} d t)
这便是所谓的gamma函数cnblogs
狄利克雷分布
(fleft(x_{1}, x_{2}, ldots, x_{k} ; alpha_{1}, alpha_{2}, ldots, alpha_{k} ight)=frac{1}{B(alpha)} prod_{i=1}^{k} x_{i}^{alpha^{i}-1})
(B(alpha)=frac{prod_{i=1}^{k} Gammaleft(alpha^{i} ight)}{Gammaleft(sum_{i=1}^{k} alpha^{i} ight)}, 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} pleft(w_{n}
ight))
这个好理解,就是每个词概率的乘积,先验概率,是一个词袋模型,cnblogs
Mixture of unigrams model
该模型的生成过程是:给某个文档先选择一个主题z,再根据该主题生成文档,该文档中的所有词都来自一个主题。假设主题有 z1,...,zn,生成文档w的概率为:
后验概率
(p(W)=pleft(z_{1}
ight) prod_{n=1}^{N} pleft(w_{n} | z_{1}
ight)+ldots+pleft(z_{k}
ight) prod_{n=1}^{N} pleft(w_{n} | z_{k}
ight)=sum_{z} p(z) prod_{n=1}^{N} pleft(w_{n} | z
ight))
PLSA模型
详细推导见:cnblogs
既然文档已经产生,那么如何根据已经产生好的文档反推其主题呢?这个利用看到的文档推断其隐藏的主题(分布)的过程(其实也就是产生文档的逆过程),便是主题建模的目的:自动地发现文档集中的主题(分布)。
文档d和词w是我们得到的样本,可观测得到,所以对于任意一篇文档,其 (P(w_j|d_i)) 是已知的。从而可以根据大量已知的文档-词项信息 (P(w_j|d_i)),训练出文档-主题 (P(z_k|d_i)) 和主题-词项 (P(w_j|z_k)),如下公式所示:(Pleft(w_{j} | d_{i} ight)=sum_{k=1}^{K} Pleft(w_{j} | z_{k} ight) Pleft(z_{k} | d_{i} ight))
故得到文档中每个词的生成概率为:(Pleft(d_{i}, w_{j} ight)=Pleft(d_{i} ight) Pleft(w_{j} | d_{i} ight)=Pleft(d_{i} ight) sum_{k=1}^{K} Pleft(w_{j} | z_{k} ight) Pleft(z_{k} | d_{i} ight))
由于 (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