推荐系统--隐语义模型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 提出了以下方法。

  1. 对于一个用户,用他所有没有过行为的物品作为负样本
  2. 对于一个用户,从他没有过行为的物品中均匀采样出一些物品作为负样本
  3. 对于一个用户,从他没有过行为的物品中采样出一些物品作为负样本,但采样时,保证没给用户的正负样本数目相当
  4. 对于一个用户,从他没有过行为的物品中采样出一些物品作为负样本,但采样时,偏重采样不热门的物品

Rong Ran 表示第一种负样本太多,计算复杂度高,精度也差,而第三种优于第二种,第二种优于第四种。

另外需要遵循的原则是:

  • 对每个用户,要保证正负样本的平衡(数目相似)
  • 对每个用户采样负样本时,要选取哪些很热门,但用户却没有行为的物品
    对于冷门物品,可能用户压根没发现,所以谈不上是否感兴趣

负样本采样过程

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18
'''

items: dictionary of items where user takes action

items_pool: list of candidate items; the more popular item i is, the more often item i appear

'''

def RandomSelectNegativeSample(self, items):

ret = dict()

for i in items.keys():

ret[i] = 1

n=0

for i in range(0, len(items) * 3): # make the number of n 大专栏  推荐系统--隐语义模型LFMegative samples close to that of positvie

item = items_pool[random.randint(0, len(items_pool) - 1)]

if item in ret:

continue

ret[item] = 0

n+=1

if n > len(items):

break

return ret

损失函数及学习过程

得到一个用户-物品集 K={(u,i)},如果(u,i)是正样本,则有 $r_{ui}=1$,否则$r_{ui}=0$,然后通过随机梯度下降来优化损失函数找到最合适的参数 p 和 q:

$lambda ||p_u||^2 + lambda ||q_i||^2$ 是防止过拟合的正则化项,$lambda$ 通过实验获得。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
def LatentFactorModel(user_items, F, N, alpha, lambda):

[P, Q] = InitModel(user_items, F)

for step in range(0,N):

for user, items in user_items.items():

samples = RandSelectNegativeSamples(items)

for item, rui in samples.items():

eui = rui - Predict(user, item)

for f in range(0, F):

P[user][f] += alpha * (eui * Q[item][f] - lambda * P[user][f])

Q[item][f] += alpha * (eui * P[user][f] - lambda * Q[item][f])

alpha *= 0.9

def Recommend(user, P, Q):

rank = dict()

for f, puf in P[user].items():

for i, qfi in Q[f].items():

if i not in rank:

rank[i] += puf * qfi

return rank

实验

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$得到更准确的预测值。

小结

基于邻域的方法相比的优缺点:

原文地址:https://www.cnblogs.com/lijianming180/p/12258971.html

时间: 2024-08-30 02:34:13

推荐系统--隐语义模型LFM的相关文章

推荐系统第5周--- 基于内容的推荐,隐语义模型LFM

基于内容的推荐 制定分类/属性的困难使用专业人员(编辑)对商品进行整理分类,但这样会产生成本和效率瓶颈受限于编辑的专业水平,编辑的意见未必能代表用户的意见分类的粒度难于控制如果商品有多个分类,很难考虑周全多维度,多规角分类编辑很难决定商品在类别里的权重 隐语义模型 LFM的前丕今生 隐语义模型的适用性 关于训练集 常见同类问题求解思路 梯度下降法的几何意义 LFM损失函数极值用梯度下降法求解 LFM中的重要参数 模型中隐特征个数梯度下降法中选取的学习速率损失凼数中的惩罚项系数lambda训练集的

隐语义模型LFM(latent factor model)

对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品.总结一下,这个基于兴趣分类的方法大概需要解决3个问题. 如何给物品进行分类? 如何确定用户对哪些类的物品感兴趣,以及感兴趣的程度? 对于一个给定的类.选择哪些属于这个类的物品推荐给用户,以及如何确定这些物品在一个类中的权重? 隐含语义分析技术采用基于用户行为统计的自动聚类,较好地解决了上面提出的问题. 隐含语义分析技术的分类来自对用户行为的统计,代表了用户对物品分类的看法.隐含语义分析技术和ItemCF在物品分类方面的思想类似

LFM 隐语义模型

隐语义模型: 物品       表示为长度为k的向量q(每个分量都表示  物品具有某个特征的程度) 用户兴趣 表示为长度为k的向量p(每个分量都表示  用户对某个特征的喜好程度) 用户u对物品i的兴趣可以表示为 其损失函数定义为- 使用随机梯度下降,获得参数p,q 负样本生成: 对于只有正反馈信息(用户收藏了,关注了xxx)的数据集,需要生成负样本,原则如下 1.生成的负样本要和正样本数量相当 2.物品越热门(用户没有收藏该物品),越有可能是负样本 实现: # coding=gbk ''' 实现

(7)个性化推荐中的隐语义模型

协同过滤是一种非常流行的推荐算法,通常协同过滤可以分为两种类型:邻域模型和矩阵分解模型.基于邻域的协同过滤算法包括基于用户的协同过滤算法和基于物品的协同过滤算法.隐语义模型是对矩阵分解的改进,通过矩阵分解建立了用户和隐类之间的关系,物品和隐类之间的关系 ,最终得到用户对物品的偏好关系.隐语义模型问世之后,诞生了若干对于隐语义模型的改进算法,包括基于标签的隐语义模型推荐算法,基于社交的隐语义模型推荐算法和基于时间的隐语义模型推荐算法等.为了推动基于隐语义模型的发展,下一步的主流研究趋势有标签,社交

推荐系统_全

1 推荐系统的分类 基于应用领域分类:电子商务推荐,社交好友推荐,搜索引擎推荐,信息内容推荐 基于设计思想:基于协同过滤的推荐,基于内容的推荐,基于知识的推荐,混合推荐 基于使用何种数据:基于用户行为数据的推荐,基于用户标签数据的推荐,基于社交网络数据,基于上下文信息(时间上下文,地点上下文等等) 2 常见评测标准 http://blog.csdn.net/u011263983/article/details/51544495 3 用户行为数据 从用户的行为和偏好中发现规律,并基于此进行推荐,所

推荐系统:矩阵分解与邻域的融合模型

推荐系统通常分析过去的事务以建立用户和产品之间的联系,这种方法叫做协同过滤. 协同过滤有两种形式:隐语义模型(LFM),基于邻域的模型(Neighborhood models). 本篇文章大部分内容为大神Koren的Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model ,这篇文章发表时我还在上初中.文章内容并未过时,主要介绍SVD,SVD++,以及SVD与基于邻域模型的融合. 一.Ba

推荐系统

推荐系统 1.缘起 糖豆作为国内最大的广场舞平台,全网的MAU已经超过4000万,每月PGC和UCG生产的视频个数已经超过15万个,每月用户观看的视频也超过100万个.然而之前糖豆APP首页主要还是依赖内容编辑手工推荐来发现内容,每天的推荐量也是几十个而已.明显可见千人一面的内容分发效率比较低下,继而我们于2016年12月初,启动了糖豆推荐系统的设计以及开发,目前截止到2017年1月初,已经完成第一期推荐系统的开发与评估.推荐项目立项伊始,我撰写了一篇整体架构与设计,本文和架构一文在部分内容有所

题记 《推荐系统实践》读书笔记

<推荐系统实践>是一本入门级书籍,全书不到200页,通熟易懂,非常适合初学者.记不起上次阅读该书是什么时候,可以确定的是很定不超过三个月,今天回想梳理全书结构,甚是模糊,而是打算重读一遍.并在这里留下些许痕迹,以帮助日后回忆之用.对本笔记内容感兴趣的读者还请购买正版书籍,尊重作者权益! 作者介绍如下: 项亮,毕业于中国科学技术大学和中国科学院自动化所,研究方向为机器学习和推荐系统,现任职于北京Hulu软件技术开发有限公司,从事视频推荐的研究和开发.2009年参加Netflix Prize推荐系

推荐系统知识点汇总

整理归纳一下<推荐系统实践>和<推荐系统导论>两本书的知识点,文中排版格式可能会有点乱,如有问题请指正.OK,闲话不说,先上2张图 对推荐系统的建模数据进行分析,代表型数据:1)无上下文的隐形反馈数据:2) 无上下文的显性反馈数据:3) 有上下文的隐形反馈数据:4)有小上下文的显性反馈数据,其中显性的反馈数据就是用户对物品的评分,而隐形的就是用户对物品的浏览,时长等数据(不同的领域,用户对物品的行为种类不一样),像我之前的做的都全是用有上下文的隐形反馈,都是通过点击.登陆.时长归纳