主题模型TopicModel:主题模型LDA的应用

http://blog.csdn.net/pipisorry/article/details/45665779html

主题模型LDA的应用

拿到这些topic后继续后面的这些应用怎么作呢:
除了推断出这些主题,LDA还能够推断每篇文章在主题上的分布。例如,X文章大概有60%在讨论“空间探索”,30%关于“电脑”,10%关于其余主题。node

 

这些主题分布能够有多种用途:
聚类: 主题是聚类中心,文章和多个类簇(主题)关联。聚类对整理和总结文章集合颇有帮助。参看Blei教授和Lafferty教授对于Science杂志的文章生成的总结。点击一个主题,看到该主题下一系列文章。
特征生成:LDA能够生成特征供其余机器学习算法使用。如前所述,LDA为每一篇文章推断一个主题分布;K个主题便是K个数值特征。这些特征能够被用在像逻辑回归或者决策树这样的算法中用于预测任务。
降维:每篇文章在主题上的分布提供了一个文章的简洁总结。在这个降维了的特征空间中进行文章比较,比在原始的词汇的特征空间中更有意义。python

排序:The very best ways to sort large databases of unstructured text is to use a technique called Latent Dirichlet allocation (LDA).算法

皮皮blog编程

 

 

应用于推荐系统

在使用LDA(Latent Dirichlet Allocation)计算物品的内容类似度时,咱们能够先计算出物品在话题上的分布,而后利用两个物品的话题分布计算物品的类似度。好比,若是两个物品的话题分布类似,则认为两个物品具备较高的类似度,反之则认为两个物品的类似度较低。计算分布的类似度能够利用KL散度来计算:
DKL(p||q)=∑i∈Xp(i)ln(p(i)/q(i),其中p和q是两个分布,KL散度越大说明分布的类似度越低。机器学习

[基于主题模型的学术论文推荐系统研究]编程语言

 

隐语义模型LFM和LSI,LDA,Topic Model其实都属于隐含语义分析技术,是一类概念,他们在本质上是相通的,都是找出潜在的主题或分类。这些技术一开始都是在文本挖掘领域中提出来的,近些年它们也被不断应用到其余领域中,并获得了不错的应用效果。好比,在推荐系统中它可以基于用户的行为对item进行自动聚类,也就是把item划分到不一样类别/主题,这些主题/类别能够理解为用户的兴趣。

对于一个用户来讲,他们可能有不一样的兴趣。就以做者举的豆瓣书单的例子来讲,用户A会关注数学,历史,计算机方面的书,用户B喜欢机器学习,编程语言,离散数学方面的书, 用户C喜欢大师Knuth, Jiawei Han等人的著做。那咱们在推荐的时候,确定是向用户推荐他感兴趣的类别下的图书。那么前提是咱们要对全部item(图书)进行分类。那如何分呢?你们注意到没有,分类标准这个东西是因人而异的,每一个用户的想法都不同。拿B用户来讲,他喜欢的三个类别其实均可以算做是计算机方面的书籍,也就是说B的分类粒度要比A小;拿离散数学来说,他既能够算做数学,也可当作计算机方面的类别,也就是说有些item不能简单的将其划归到肯定的单一类别;拿C用户来讲,他倾向的是书的做者,只看某几个特定做者的书,那么跟A,B相比它的分类角度就彻底不一样了。

显然咱们不能靠由单我的(编辑)或team的主观想法创建起来的分类标准对整个平台用户喜爱进行标准化。

此外咱们还须要注意的两个问题:ide

  1. 咱们在可见的用户书单中归结出3个类别,不等于该用户就只喜欢这3类,对其余类别的书就一点兴趣也没有。也就是说,咱们须要了解用户对于全部类别的兴趣度。
  2. 对于一个给定的类来讲,咱们须要肯定这个类中每本书属于该类别的权重。权重有助于咱们肯定该推荐哪些书给用户。
下面咱们就来看看LFM是如何解决上面的问题的?对于一个给定的用户行为数据集(数据集包含的是全部的user, 全部的item,以及每一个user有过行为的item列表),使用LFM对其建模后,咱们能够获得以下图所示的模型:(假设数据集中有3个user, 4个item, LFM建模的分类数为4)
R矩阵是user-item矩阵,矩阵值Rij表示的是user i 对item j的兴趣度,这正是咱们要求的值。对于一个user来讲,当计算出他对全部item的兴趣度后,就能够进行排序并做出推荐。LFM算法从数据集中抽取出若干主题,做为user和item之间链接的桥梁,将R矩阵表示为P矩阵和Q矩阵相乘。其中P矩阵是user-class矩阵,矩阵值Pij表示的是user i对class j的兴趣度;Q矩阵式class-item矩阵,矩阵值Qij表示的是item j在class i中的权重,权重越高越能做为该类的表明。因此LFM根据以下公式来计算用户U对物品I的兴趣度
咱们发现使用LFM后,
  1. 咱们不须要关心分类的角度,结果都是基于用户行为统计自动聚类的,全凭数据本身说了算。
  2. 不须要关心分类粒度的问题,经过设置LFM的最终分类数就可控制粒度,分类数越大,粒度约细。
  3. 对于一个item,并非明确的划分到某一类,而是计算其属于每一类的几率,是一种标准的软分类。
  4. 对于一个user,咱们能够获得他对于每一类的兴趣度,而不是只关心可见列表中的那几个类。
  5. 对于每个class,咱们能够获得类中每一个item的权重,越能表明这个类的item,权重越高。

那么,接下去的问题就是如何计算矩阵P和矩阵Q中参数值。通常作法就是最优化损失函数来求参数。在定义损失函数以前,咱们须要准备一下数据集并对兴趣度的取值作一说明。函数


数据集应该包含全部的user和他们有过行为的(也就是喜欢)的item。全部的这些item构成了一个item全集。对于每一个user来讲,咱们把他有过行为的item称为正样本,规定兴趣度RUI=1,此外咱们还须要从item全集中随机抽样,选取与正样本数量至关的样本做为负样本,规定兴趣度为RUI=0。所以,兴趣的取值范围为[0,1]。


采样以后原有的数据集获得扩充,获得一个新的user-item集K={(U,I)},其中若是(U,I)是正样本,则RUI=1,不然RUI=0。损失函数以下所示:
上式中的 是用来防止过拟合的正则化项,λ须要根据具体应用场景反复实验获得。损失函数的优化使用随机梯度降低算法:
  1. 经过求参数PUK和QKI的偏导肯定最快的降低方向;
  1. 迭代计算不断优化参数(迭代次数事先人为设置),直到参数收敛。


其中,α是学习速率,α越大,迭代降低的越快。α和λ同样,也须要根据实际的应用场景反复实验获得。本书中,做者在 MovieLens 数据集上进行实验,他取分类数F=100,α=0.02,λ=0.01。
【注意】:书中在上面四个式子中都缺乏了


综上所述,执行LFM须要:
  1. 根据数据集初始化P和Q矩阵(这是我暂时没有弄懂的地方,这个初始化过程究竟是怎么样进行的,还恳请各位童鞋予以赐教。)
  2. 肯定4个参数:分类数F,迭代次数N,学习速率α,正则化参数λ。

LFM的伪代码能够表示以下:学习

  1. def LFM(user_items, F, N, alpha, lambda):
  2. #初始化P,Q矩阵
  3. [P, Q] = InitModel(user_items, F)
  4. #开始迭代
  5. For step in range(0, N):
  6. #从数据集中依次取出user以及该user喜欢的iterms集
  7. for user, items in user_item.iterms():
  8. #随机抽样,为user抽取与items数量至关的负样本,并将正负样本合并,用于优化计算
  9. samples = RandSelectNegativeSamples(items)
  10. #依次获取item和user对该item的兴趣度
  11. for item, rui in samples.items():
  12. #根据当前参数计算偏差
  13. eui = eui - Predict(user, item)
  14. #优化参数
  15. for f in range(0, F):
  16. P[user][f] += alpha * (eui * Q[f][item] - lambda * P[user][f])
  17. Q[f][item] += alpha * (eui * P[user][f] - lambda * Q[f][item])
  18. #每次迭代完后,都要下降学习速率。一开始的时候因为离最优值相差甚远,所以快速降低;
  19. #当优化到必定程度后,就须要放慢学习速率,慢慢的接近最优值。
  20. alpha *= 0.9
当估算出P和Q矩阵后,咱们就可使用(*)式计算用户U对各个item的兴趣度值,并将兴趣度值最高的N个iterm(即TOP N)推荐给用户。
总结来讲,LFM具备成熟的理论基础,它是一个纯种的学习算法,经过最优化理论来优化指定的参数,创建最优的模型。

[使用LFM(Latent factor model)隐语义模型进行Top-N推荐]

[主题模型LDA及其在微博推荐&广告算法中的应用]

皮皮blog

 

 

LDA主题模型用于BUG修复人推荐

[缺陷修复人预测(Bug Triaging)]

[LDA主题模型用于BUG修复人推荐《DRETOM: developer recommendation based on topic models for bug resolution》]

 

[主题模型在文本挖掘中的应用.pdf]

from: http://blog.csdn.net/pipisorry/article/details/45665779

ref:

相关文章
相关标签/搜索