推荐系统方法(利用用户行为数据)

来源:互联网 发布:陈一发儿淘宝店倒闭 编辑:程序博客网 时间:2024/05/17 21:50

写在前面

基于用户行为数据的应用其实早在个性化推荐系统诞生之前就已经在互联网上非常流行了,其中最典型的就是各种各样的排行榜。这些排行榜包括热门排行榜和趋势排行榜等。尽管这些排行榜应用仅仅基友简单的用户行为统计,但他们在互联网上得到了很多用户的青睐。因此,用户行为数据的分析是很多优秀产品设计的基础,个性化推荐算法通过对用户行为的深度分析,可以给用户带来更好的网站使用体验。

用户行为数据在网站上最简单的形式就是日志。网站在运行过程中都会产生大量原始日志,并将其存储在文件系统中。很多互联网会把多种原始日志按照用户行为汇总成会话日志,其中每个会话表示一次用户行为和对应的服务。

用户行为在个性化推荐系统中一般分为两种:显性反馈行为和隐性反馈行为。显性反馈行为包括用户明确表示对物品的喜好,例如打分和喜欢。隐性反馈行为是指不能明确反应用户喜好的行为,例如页面浏览行为和购买行为等。

仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法。学术界对协同过滤算法进行了深入的研究,提出了很多方法,比如基于邻近的方法(neighborhood-based)、隐语义模型、基于图的随机游走算法等。在这些方法中,最著名的在业界得到最广泛应用的算法就是基于邻近的方法。接下来将会介绍基于邻近的推荐方法。

1基于邻近的推荐算法

基于邻近的推荐算法是推荐系统中最基本的算法。基于邻近的算法分为两类:一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法。

1.1基于用户的协同过滤算法
所谓的基于用户的协同过滤算法(user-based collaborative filtering)是,在一个个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。
基于用户的协同过滤算法(UserCF)主要包括两个步骤:
(1)找到和目标用户兴趣相似的用户集合
(2)找到这个集合中该用户喜欢的,且目标用户没有听说过的物品推荐给目标用户
步骤(1)的关键是计算两个用户的兴趣相似度。这里,协同过滤算法主要利用用户行为的相似度计算兴趣的相似度。给定用户u,v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v)表示用户v曾经有过的正反馈的物品集合。那么可以通过Jacccard公式或者余弦相似度计算两个用户u,v之间的兴趣相似度:
Jaccard:这里写图片描述
余弦:这里写图片描述

1.2基于物品的协同过滤算法
基于物品的协同过滤算法(item-based collaborative filtering)是目前业界应用最多的算法。所谓的基于物品的协同过滤算法(ItemCF)给用户推荐那些和他们之前喜欢的物品相似的物品。比如,你购买过《数据挖掘导论》会给你推荐《机器学习》。不过,ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。
基于物品的协同过滤算法主要分为两步:
(1)计算物品之间的相似度
(2)根据物品的相似度和用户的历史行为给用户生成推荐列表
同样的,计算物品之间的相似度可以用下面的公式:
这里写图片描述
N(i)是喜欢物品i的用户数,N(i)N(j)分子代表同时喜欢物品i和j的用户数。但是这里有一个问题。如果一个物品很热门,很多人喜欢它,那么Wij就会很大,接近1.因此该公式造成任何物品都会和热门的物品有很大的相似度,这对致力于挖掘长尾信息的推荐系统来说显然不是一个好的特性。为了避免推荐出热门的产品,可以用下面的公式:
这里写图片描述
这个公式惩罚了物品j的权重,因此可以减轻热门物品和很多物品相似的可能性。从上面的定义可以看出,在协同过滤中两个物品的相似度是因为它们共同被很多用户喜欢,也就是说每个用户都可以通过他们的历史兴趣列表给物品贡献相似度。这里面蕴含着一个假设,就是每个用户的兴趣局限在某几个方面,因此如果两个物品属于一个用户的兴趣列表,那么这两个物品可能就属于有限的几个领域,而如果两个物品属于多个用户的兴趣列表,那么它们就有可能属于同一个领域。

2隐语义模型

隐语义模型(LFM)是最近几年推荐系统领域最为热门的研究话题,它的核心思想是通过隐含特征联系用户兴趣和物品。隐语义分析技术从诞生到至今产生了很多著名的模型和方法,pLSA、LDA、MF等,是一类概念,其中很多方法可以用于个性化推荐系统。在推荐系统中它能够基于用户的行为对item进行自动聚类,也就是把item划分到不同类别或主题,而这些主题或类别可以理解为用户的兴趣。

对于一个用户来说,他们有着不同的兴趣。列如豆瓣书单来说,用户A会关注计算机、数学、历史方面的书,用户B喜欢机器学习、算法、编程语言方面的书。那么我们在推荐的时候肯定向用户推荐他感兴趣的类别下的书。那么前提是我们要对所有的item进行分类,可是分类标准是因人而异的,每个用户的想法都不一样。所以,我们不能靠由单个人(编辑)或team的主观想法建立起来的分类标准对整个平台用户喜好进行标准化。

此外我们还需要注意的两个问题:
我们在可见的用户书单中归结出3个类别,不等于该用户就只喜欢这3类,对其他类别的书就一点兴趣也没有。也就是说,我们需要了解用户对于所有类别的兴趣度。
对于一个给定的类来说,我们需要确定这个类中每本书属于该类别的权重。权重有助于我们确定该推荐哪些书给用户。

而LFM从用户的行为数据出发, 自动找到那些类然后进行个性化推荐。如下图所示:
这里写图片描述
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后我们发现:

  • 我们不需要关心分类的角度,结果都是基于用户行为统计自动聚类的,全凭数据自己说了算。
  • 不需要关心分类粒度的问题,通过设置LFM的最终分类数就可控制粒度,分类数越大,粒度约细。
  • 对于一个item,并不是明确的划分到某一类,而是计算其属于每一类的概率,是一种标准的软分类。
  • 对于一个user,我们可以得到他对于每一类的兴趣度,而不是只关心可见列表中的那几个类。
  • 对于每一个class,我们可以得到类中每个item的权重,越能代表这个类的item,权重越高。

那么,接下去的问题就是如何计算矩阵P和矩阵Q中参数值。一般做法就是最优化损失函数来求参数。优化损失函数可以定义如下:
这里写图片描述
至于怎么求解这个函数,一般有最小交替二乘(ALS)或者随机梯度下降(SGD)。这里就不具体说明怎么求解,请自行上网查询或者参考《推荐系统实践》。

3.基于图的模型
用户行为很容易用二分图表示,因此很多图的算法都可以用到推荐系统中去。其实研究中,这种方法被扩展的并不算很多相比较前面介绍的两种模型。因此这里就不过多介绍基于图的模型,有兴趣的同学可以去参考《推荐系统实践》这本书。

阅读全文
0 0
原创粉丝点击