主题模型LDA
转自:主题模型TopicModel:主题模型LDA的应用
http://blog.csdn.net/pipisorry/article/details/45665779
主题模型LDA的应用
拿到这些topic后继续后面的这些应用怎么做呢:
除了推断出这些主题,LDA还可以推断每篇文章在主题上的分布。例如,X文章大概有60%在讨论“空间探索”,30%关于“电脑”,10%关于其他主题。
这些主题分布可以有多种用途:
聚类: 主题是聚类中心,文章和多个类簇(主题)关联。聚类对整理和总结文章集合很有帮助。参看Blei教授和Lafferty教授对于Science杂志的文章生成的总结。点击一个主题,看到该主题下一系列文章。
特征生成:LDA可以生成特征供其他机器学习算法使用。如前所述,LDA为每一篇文章推断一个主题分布;K个主题即是K个数值特征。这些特征可以被用在像逻辑回归或者决策树这样的算法中用于预测任务。
降维:每篇文章在主题上的分布提供了一个文章的简洁总结。在这个降维了的特征空间中进行文章比较,比在原始的词汇的特征空间中更有意义。
排序: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的主观想法建立起来的分类标准对整个平台用户喜好进行标准化。
此外我们还需要注意的两个问题:
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后,
那么,接下去的问题就是如何计算矩阵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。损失函数如下所示:
上式中的 是用来防止过拟合的正则化项,λ需要根据具体应用场景反复实验得到。损失函数的优化使用随机梯度下降算法:
其中,α是学习速率,α越大,迭代下降的越快。α和λ一样,也需要根据实际的应用场景反复实验得到。本书中,作者在 MovieLens 数据集上进行实验,他取分类数F=100,α=0.02,λ=0.01。
【注意】:书中在上面四个式子中都缺少了
综上所述,执行LFM需要:
LFM的伪代码可以表示如下:
总结来说,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]
ref:
http://blog.csdn.net/pipisorry/article/details/45771045
LDA的python实现
从0开始实现
Shuyo的github代码:实现语言,Python,实现模型,LDA,Dirichlet Process Gaussian Mixture Model,online HDP,HDPLDA,Interactive Topic Model,Labeled LDA
地址:https://github.com/shuyo/iir/tree/master/lda
arongdari的github代码:实现语言,Python,实现模型,LDA,Correlated Topic Model,Relational topic model,Author-Topic model,HMM-LDA,Discrete Infinite logistic normal,Supervised Topic Model,Hierarchical Dirichlet process,Hierarchical Dirichlet scaling process
地址:https://github.com/arongdari/python-topic-model
ahmaurya的github代码:实现语言,Python,实现模型,Topic Over Time
github代码地址:https://github.com/ahmaurya/topics_over_time
Blei实验室的代码:实现语言,Python,实现模型,online lda,online HDP,turbo topic model,topic model visualization engine,实现语言,C,实现模型,correlated topic model,discrete infinite logistic normal,HLDA,lda,实现语言C++,实现模型,ctr,class-slda,Dynamic Topic model and the influence model,实现语言R,实现模型 lda
github代码地址:http://www.cs.columbia.edu/~blei/topicmodeling_software.html
gensim实现[主题模型TopicModel:通过gensim实现LDA ]
[Latent Dirichlet Allocation in Python
Latent Dirichlet Allocation in Python
Online LDA的python实现
github:python-topic-model
Multicore LDA in Python: from over-night to over-lunch]
[Getting started with Latent Dirichlet Allocation in Python install lda]
pyspark实现LDA
[Spark:聚类算法之LDA主题模型算法 ]
LDA的c/c++实现
GibbsLDA++: A C/C++ Implementation of Latent Dirichlet Allocation (LDA) using Gibbs Sampling for Parameter Estimation and Inference
GibbsLDA++: A C/C++ Gibbs Sampling LDA | SourceForge.net
plda - A parallel C++ implementation of fast Gibbs sampling of Latent Dirichlet Allocation - Google Project Hosting
Latent Dirichlet Allocation in C
Latent Dirichlet Allocation(LDA)主题模型算法实现及源码解析_AriannaChen_新浪博客
皮皮Blog
LDA的java实现
MALLET:实现语言,Java,实现模型,LDA,HLDA,Pachinko Allocation Model,此外,还实现了HMM,最大熵马尔科夫模型和条件随机场;
yangliuy/LDAGibbsSampling · GitHub
JGibbLDA: A Java Implementation of Latent Dirichlet Allocation (LDA) using Gibbs Sampling for Parameter Estimation and Inference
概率语言模型及其变形系列(5)-LDA Gibbs Sampling 的JAVA实现 - Coding for Dreams - 博客频道 - CSDN.NET
http://www.arbylon.net/projects/LdaGibbsSampler.java
LDA的R实现
R下用GlossEx做关键词抽取和主题分析
from:http://blog.csdn.net/pipisorry/article/details/45771045
ref: 主题模型及其变种的实现代码汇总
总结
- 上一篇: WinRAR 4.0 简体中文正式版美化
- 下一篇: 绘制自己的人际关系图_攒人脉,建圈子,从