推荐系统--隐语义模型LFM
主要介绍 隐语义模型 LFM(latent factor model)。
隐语义模型最早在文本挖掘领域被提出,用于找到文本的隐含语义,相关名词有 LSI、pLSA、LDA 等。在推荐领域,隐语义模型也有着举足轻重的地位。下述的实验设计见 推荐系统–用户行为和实验设计
基本思想
核心思想: 通过隐含特征(latent factor)联系用户兴趣和物品。具体来说,就是对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。
基于兴趣分类的方法需要解决3个问题:
- 如何对物品进行分类?
- 如何确定物品对哪些类的物品感兴趣,以及感兴趣的程度?
- 对于一个给定的类,选择哪些属于这个类的物品推荐给用户,以及如何确定这些物品在一个类中的权重?
如何对物品进行分类?
物品分类往往是通过人工编辑进行,然而人工编辑存在很多缺陷
- 编辑的分类大部分是从书的内容出发,而不是从书的读者群出发。
比如说《具体数学》这本书,人工编辑可能认为属于数学,而这本书的读者可能更多是计算机出身的,会认为它属于计算机 - 编辑很难控制分类的粒度
有些推荐我们做粗粒度就可以了(比如说初学者),而有些推荐我们需要深入到细分领域(比如资深研究人员) - 编辑很难给一个物品多个分类
- 编辑很难给出多个维度的分类
- 编辑很难决定一个物品在某一个分类中的权重
隐含语义分析技术(latent variable analysis)采取基于用户行为统计的自动聚类,可以较好解决上面提出的问题。
- 代表用户意见
分类来自对用户行为的统计,和 ItemCF 在物品分类方面的思想类似,如果两个物品同时被多个用户喜好,那么这两个物品可能属于同一个类 - 控制分类粒度
自定义分类个数 - 一个物品多分类
计算出物品属于某个类的权重,因此每个物品都不是硬性地被分到某一个类中 - 多维度分类
基于用户的共同兴趣计算出来的,如果用户的共同兴趣是某一个维度,那么 LFM 给出的类也是相同维度 - 物品在分类下的权重
统计用户行为决定物品在某一个分类中的权重,如果某个类的用户都会喜欢某个物品,那么这个物品在这个类中的权重可能比较高
算法
隐含语义分析技术有很多著名的模型和方法,相关的名词有 pLSA、LDA、隐含类别模型(latent class model)、隐含主题模型(latent topic model)、矩阵分解(matrix factorization),这些技术和方法本质上是相通的,很多方法都可以用于个性化推荐系统。本篇只介绍 LFM。
用户对物品的兴趣
计算用户 u 对物品 i 的兴趣
$$Preference(u,i)=r_{ui}=P^T_uq_i=sum^F_{f=1}p_{u,k}q_{i,k}$$
- $p_{u,k}$: 模型参数,用户 u 的兴趣和第 k 个隐类的关系
- $q_{i,k}$: 模型参数,第 k 个隐类和物品 i 之间的关系
产生负样本
我们这里用的是隐反馈数据集,只有正样本(用户喜欢什么物品),而没有负样本(用户对什么物品不感兴趣),因此第一个问题是如何对每个用户产生负样本。
Rong Ran 提出了以下方法。
- 对于一个用户,用他所有没有过行为的物品作为负样本
- 对于一个用户,从他没有过行为的物品中均匀采样出一些物品作为负样本
- 对于一个用户,从他没有过行为的物品中采样出一些物品作为负样本,但采样时,保证没给用户的正负样本数目相当
- 对于一个用户,从他没有过行为的物品中采样出一些物品作为负样本,但采样时,偏重采样不热门的物品
Rong Ran 表示第一种负样本太多,计算复杂度高,精度也差,而第三种优于第二种,第二种优于第四种。
另外需要遵循的原则是:
- 对每个用户,要保证正负样本的平衡(数目相似)
- 对每个用户采样负样本时,要选取哪些很热门,但用户却没有行为的物品
对于冷门物品,可能用户压根没发现,所以谈不上是否感兴趣
负样本采样过程
|
|
损失函数及学习过程
得到一个用户-物品集 K={(u,i)},如果(u,i)是正样本,则有 $r_{ui}=1$,否则$r_{ui}=0$,然后通过随机梯度下降来优化损失函数找到最合适的参数 p 和 q:

$lambda ||p_u||^2 + lambda ||q_i||^2$ 是防止过拟合的正则化项,$lambda$ 通过实验获得。
|
|
实验
4 个隐类中排名最高的一些电影
参数:
- 隐特征个数 F
- 学习速率 alpha
- 正则化参数 lambda
- 负样本/正样本比例 ratio
实验发现,ratio 对 LFM 性能影响最大,随着负样本数目的增加,LFM 的准确率和召回率有明显提高,当 ratio > 10后趋于稳定,同时,随着负样本数目增加,覆盖率不断降低,流行度不断增加,说明 ratio 参数控制了推荐算法发掘长尾的能力。另外,与之前实验比较,在所有指标上都优于 UserCF 和 ItemCF。然而当数据集非常稀疏时,LFM 的性能会明显下降。
固定 F=100, alpha=0.02, lambda=0.01,研究 ratio 对推荐性能的影响。

实际应用
LFM 模型在实际使用中有一个困难,就是很难实现实时推荐。经典的 LFM 模型每次训练都需要扫描所有的用户行为记录,并且需要在用户行为记录上反复迭代来优化参数,所以每次训练都很耗时,实际应用中只能每天训练一次。在新闻推荐中,冷启动问题非常明显,每天都会有大量的新闻,这些新闻往往如昙花一现,在很短的时间获得很多人的关注,然后在很短时间内失去关注,实时性就非常重要。雅虎对此提出了一个解决方案。
首先,利用新闻链接的内容属性(关键词、类别等)得到链接 i 的内容特征向量 yi,其次,实时收集用户对链接的行为,并且用这些数据得到链接 i 的隐特征向量 qi,然后,利用下面的公式预测用户 u 是否会单击链接 i:
$$r_{ui}=x^T_uy_i+p^T_uq_i$$
$y_i$: 根据物品的内容属性直接生成
$x_{uk}$: 用户 u 对内容特征 k 的兴趣程度,用户向量 $x_u$ 可以根据历史行为记录获得,每天计算一次
$p_u$,$q_i$: 实时拿到的用户最近几小时的行为训练 LFM 模型获得
对于一个新加入的物品 i,可以通过 $x^T_uy_i$估计用户 u 对物品 i 的兴趣,然后经过几个小时后,通过 $p^T_uq_i$得到更准确的预测值。
小结
与基于邻域的方法相比的优缺点:
推荐系统--隐语义模型LFM的更多相关文章
- 推荐系统第5周--- 基于内容的推荐,隐语义模型LFM
基于内容的推荐
- 推荐系统之隐语义模型(LFM)
LFM(latent factor model)隐语义模型,这也是在推荐系统中应用相当普遍的一种模型.那这种模型跟ItemCF或UserCF的不同在于: 对于UserCF,我们可以先计算和目标用户兴趣 ...
- 推荐系统之隐语义模型LFM
LFM(latent factor model)隐语义模型,这也是在推荐系统中应用相当普遍的一种模型.那这种模型跟ItemCF或UserCF的不同在于: 对于UserCF,我们可以先计算和目标用户兴趣 ...
- 隐语义模型LFM
隐语义模型是通过隐含特征,联系用户和物品,基于用户的特征对物品进行自动聚类,然后在用户感兴趣的类中选择物品推荐给用户. 对于推荐系统,常用的算法: USER-CF:给用户推荐和他兴趣相似的用户喜欢 ...
- 隐语义模型LFM(latent factor model)
对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品.总结一下,这个基于兴趣分类的方法大概需要解决3个问题. 如何给物品进行分类? 如何确定用户对哪些类的物品感兴趣,以及感兴趣的程度? ...
- 【转载】使用LFM(Latent factor model)隐语义模型进行Top-N推荐
最近在拜读项亮博士的<推荐系统实践>,系统的学习一下推荐系统的相关知识.今天学习了其中的隐语义模型在Top-N推荐中的应用,在此做一个总结. 隐语义模型LFM和LSI,LDA,Topic ...
- 使用LFM(Latent factor model)隐语义模型进行Top-N推荐
最近在拜读项亮博士的<推荐系统实践>,系统的学习一下推荐系统的相关知识.今天学习了其中的隐语义模型在Top-N推荐中的应用,在此做一个总结. 隐语义模型LFM和LSI,LDA,Topic ...
- 海量数据挖掘MMDS week4: 推荐系统之隐语义模型latent semantic analysis
http://blog.csdn.net/pipisorry/article/details/49256457 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- RS:关于协同过滤,矩阵分解,LFM隐语义模型三者的区别
项亮老师在其所著的<推荐系统实战>中写道: 第2章 利用用户行为数据 2.2.2 用户活跃度和物品流行度的关系 [仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法.学术界对协同过滤算 ...
随机推荐
- Laravel常见问题总结
1.Whoops, looks like something went wrong. 一般报这个问题是由于复制框架文件时没有把相应的env (隐藏文件) 复制 导致新复制的框架没有配置选项 解决方法: ...
- C#匿名委托,匿名函数,lambda表达式
一.类型.变量.实例之间的关系. 类型>变量>实例 类型可以创建变量,实体类可以创建实例,实例可以存储在变量里. 二.委托使用过程: 1.定义委托(写好签名): 2.创建委托变量: 3.给 ...
- AtCoder Beginner Contest 126
因为本人rating太低,这场比赛还要记rating就来划水了,果然垫底了. 6题都很水,于是头一次在网赛中AK,不过由于网卡+手速太慢还是成功垫底. ABE 签到.不贴代码了,因为A考察字符串读入和 ...
- HTMLTestRunner 报告框架使用
HTMLTestRunner 报告框架使用 file_path = base_path + '/Report/report.html' with open(file_path, 'wb') as f: ...
- 三十二、http与www服务介绍
一.用户访问百度(www.baidu.com) 用户访问在url中输入地址后,首先会访问本地的缓存和hosts文件,如果没有,会访问本地DNS,在就是根域和顶级域名等,在前面已经说过了,这里不再赘述. ...
- LeetCode No.100,101,102
No.100 IsSameTree 相同的树 题目 给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 输入: 1 1 / \ ...
- Java面试题4-附答案
BIO.NIO和AIO的区别 Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程 ...
- python学习笔记(13)常用模块列表总结
os模块: os.remove() 删除文件 os.unlink() 删除文件 os.rename() 重命名文件 os.listdir() 列出指定目录下所有文件 os.chdir() 改变当前工作 ...
- HTML语言 网页制作-----标签、表格、表单、框架
一:序 Html静态网页,内容(hyper text markup language,超文本标记语言) Css 网页美化 Javascript 脚本语言 二:html的介绍 <!DOCTYPE ...
- Python||NameError: name 'reload' is not defined
多半是运行如下代码时报错: import sysreload(sys)sys.setdefaultencoding("utf-8")123这段代码是为了解决Python中中文输出出 ...