《推荐系统实践》 3. 通用推荐模型
Posted 推荐系统新视野
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《推荐系统实践》 3. 通用推荐模型相关的知识,希望对你有一定的参考价值。
3.1. 协同过滤推荐
3.1.1. 基于邻域的模型
基于邻域的算法分为两大类,一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法。
(1)基于用户的协同过滤算法 UserCF
在一个在线个性化推荐系统中,当一个用户 A 需要个性化推荐时,可以先找到和 A 有相似兴趣的其他用户,然后把那些用户喜欢的、而用户 A 没有关注过的物品推荐给 A。这种方法称为基于用户的协同过滤算法(UserCF)。
基于用户的协同过滤算法主要包括两个步骤:
-
找到和目标用户兴趣相似的用户集合 -
找到这个集合中的用户喜欢的,且目标用户没有听说过的物品,推荐给目标用户
算法的关键是计算两个用户的兴趣相似度。协同过滤算法主要利用用户兴趣列表的相似度计算用户兴趣的相似度,给定用户 、 ,令 表示用户 曾经有过兴趣的物品集合, 表示用户 曾经有过兴趣的物品集合。
计算用户兴趣相似度的方法有 3 种:
-
Jaccard 公式 -
余弦相似性 -
改进的余弦相似性
用户 | 兴趣物品列表 |
---|---|
A | 、 、 |
B |
、 |
C | 、 |
D | 、 、 |
通过比较我们可以知道用户 与用户 的兴趣相似度最高,所以我们从用户 的兴趣列表中选取物品推荐给用户 。此时我们需要计算用户 与用户 兴趣列表中的物品的感兴趣程度。首先建立“物品-用户”倒排表:
物品 | 喜欢该物品的用户 |
---|---|
a |
、 |
b |
、 |
c |
、 |
d | 、 |
e | 、 |
从倒排表我们可以看出,用户 的兴趣物品 、 、 在用户 、 、 中分别有分布,所以可以计算用户 与用户 、 、 的兴趣列表中物品的感兴趣程度,所以这里取 :
根据计算结果,我们可以知道用户 对物品 、 的兴趣一致,因此我们可以任意推荐他们其中一个,或者一起推荐给用户 。需要注意的是我们没有计算 、 、 ,这是因为物品 、 、 已经在用户 的兴趣列表中了,所以没必要再推荐。
(2)基于物品的协同过滤算法 ItemCF
基于物品的协同过滤算法用于给用户推荐那些与他们之前喜欢的物品相似的物品。
ItemCF 算法主要通过分析用户的行为记录来计算物品之间的相似度。该算法认为,物品 A 和物品 B 具有很大的相似度是因为喜欢物品 A 的用户大都也喜欢物品 B。
基于物品的协同过滤算法主要分为两步:
-
计算物品之间的相似度; -
根据物品的相似度和用户的历史行为给用户生成推荐列表。
我们给定物品 、 ,设 为喜欢物品 的用户数, 为喜欢物品 的用户数,则物品 、 的相似度可以表达为:
-
Jaccard公式
上述公式可以理解为喜欢物品 的用户中有多少比例的用户也喜欢物品
-
余弦相似性
-
改进的余弦相似性
其中 对余弦相似性进行了修正,使得活跃用户对物品相似度的贡献大于不活跃的用户。
在 ItemCF 中,两个物品之所以产生相似度是因为它们共同被很多用户喜欢,即每个用户都可以通过他们的历史兴趣列表给物品“贡献”相似度。也就是说,在得到物品之间的相似度后,我们可以建立一个“用户-物品”倒排表,即对每个用户建立一个包含他喜欢的物品的列表。
然后通过如下公式计算用户 对一个物品 的兴趣度:
这里 是用户喜欢的物品的集合, 是和物品 最相似的 个物品的集合, 是物品 和 的相似度, 是用户 对物品 i 的兴趣(如果用户 对物品 有过行为,即可令 )。该公式的含义是,与用户历史上感兴趣的物品越相似的物品,越有可能是用户感兴趣的物品。
ItemCF 的推荐过程可以用如下例子来表示:假设已知用户对两个物品 、 的兴趣度分别为 1.3、0.9,现有 5 个用户未曾见过的新物品,它们与物品 、 的相似度可以表示为:
物品 | 与物品 的相似度 | 与物品 的相似度 |
---|---|---|
B1 |
0.7 | 0 |
B2 |
0.4 | 0.5 |
B3 |
0 | 0.5 |
B4 | 0.6 | 0 |
B5 |
0 | 0.6 |
可得,用户对 、 、 、 、 的兴趣度分别为:
由此我们可知,用户可能对物品 的兴趣度最高,应该向用户推荐物品
(3)UserCF 与 ItemCF 的区别
特性 | UserCF | ItemCF |
---|---|---|
性能 | 适用于用户数少于物品数的场合,如果用户很多,计算用户相似度矩阵代价很大 | 适用于物品数少于用户数的场合,如果物品很多,计算物品相似度矩阵代价很大 |
领域 | 适用于时效性较强,用户个性化兴趣不太明显的领域 | 适用于长尾物品丰富,用户个性化需求强烈的领域 |
实时性 | 用户有新行为,不一定造成推荐结果的立即变化 | 用户有新行为,一定会导致推荐结果的实时变化 |
冷启动 | 无法给新用户和物品进行准确推荐 | 新用户只要对一个物品产生行为,就可以给他推荐和该物品相关的其他物品 |
推荐解释 | 很难提供令用户信服的推荐解释 | 可以利用用户的历史行为给用户做推荐解释 |
3.1.2. 隐语义模型
LFM(Latent Factor Model)隐语义模型的核心思想是通过隐含特征(Latent Factor)联系用户兴趣和物品,它采取基于用户行为统计的自动聚类,让用户和物品的分类自动化。
LFM 通过如下公式计算用户 u 对物品 i 的兴趣:
其中 , 度量了用户 的兴趣和第 个隐类的关系,而 度量了物品 和第 个隐类之间的关系。
推荐系统的用户行为样本分为正样本(用户喜欢什么物品)和负样本(用户对什么物品不感兴趣)。经过对正负样本的采样,可以得到一个用户—物品集 ,其中如果 是正样本,则有 ,否则 ,然后,通过随机梯度下降法优化如下的损失函数来找到最合适的参数 和 :
然后这两个参数沿着方向导数前进,得到如下递推公式:
特性 | LFM | 基于邻域 |
---|---|---|
理论基础 | 基于机器学习,理论基础好,可以优化参数建立最优模型 | 基于统计的方法,没有学习过程 |
离线计算的空间复杂度 | ,其中 指隐类的个数, 指用户数, 指物品数 | UserCF: ,ItemCF: 。其中 指用户数, 指物品数 |
离线计算的时间复杂度 | ,其中 指隐类的个数, 指迭代次数 | UserCF: ,ItemCF: 。其中 指用户数, 指物品数, 指用户对物品行为记录的总数 |
在线实时推荐 | 不能实时推荐,不适用于物品数量庞大的系统 | 可以实时推荐 |
推荐解释 | 解释性不强 | 解释性好 |
3.1.3. 基于图的模型
用户 | 兴趣物品列表 |
---|---|
A |
、 、 |
B |
、 |
C | 、 |
D | 、 、 |
两个顶点之间有很多路径相连;
链接两个顶点之间的路径长度都比较短;
链接两个顶点之间的路径不会经过出度比较大的顶点。
基于上面 3 个主要因素,研究人员设计了很多计算图中顶点之间相关性的方法,这里讲解基于随机游走的 PageRank 和 PersonalRank 算法。
(1)PageRank 算法
其中 是网页 被访问的概率(也就是重要性程度), 是用户继续访问网页的概率, 是网页总数。 表示指向网页 的网页集合(入度), 表示网页 指向的网页集合(出度)。
将网页替换为其他物品同理。
(2)PersonalRank 算法
PersonalRank 跟 PageRank 的区别只在于每一步概率的取值不一样,PersonalRank 用 替换了 ,也就是说 PersonalRank 走到任意的下一个节点的概率服从均匀分布。
公式表达为:
用 PersonalRank 算法对上面的示例中的用户 进行推荐,可得如下结果:
用户 和物品 、 没有边相连,但是用户 和物品 有三条长度为 的路径相连,用户 和物品 有两条长度为 的路径相连。那么,顶点 与 之间的相关性就要高于顶点 与 ,因而物品 在用户 的推荐列表中应该排在物品 之前。最终得出的推荐列表为
用户 与物品 的路径:
用户 与物品 的路径:
3.2. 基于内容的推荐
基于内容推荐的原理是根据用户感兴趣的物品 A,找到和 A 内容信息相近的物品 B。内容信息是指用户和物品本身的内容特征,如用户的地理位置、性别、年龄,电影物品的导演、演员、发布时间等。比如用户喜欢看《神探夏洛克第一季》,那么就给他推荐《神探夏洛克第二季》。
基于内容推荐的优点如下:
-
简单、有效,推荐结果直观,容易理解,不需要领域知识; -
不需要用户的历史数据,如对对象的评价等; -
没有物品冷启动的问题; -
没有稀疏问题; -
算法成熟,如数据挖掘、聚类分析等。
基于内容的推荐的缺点如下:
-
特征提取能力有限比如图像、视频,没有有效的特征提取方法。即便是文本资源,特征提取也只能反应一部分内容,难以提取内容质量,会影响用户满意度。 -
很难出现新的推荐结果根据用户兴趣的喜好进行推荐,很难出现惊喜。对于时间敏感的内容,如新闻,推荐内容基本相同,体验度较差。 -
存在用户冷启动的问题当新用户出现时, 系统较难获得该用户的兴趣偏好,无法进行有效推荐。 -
推荐对象内容分类方法需要的数据量较大
3.3. 基于关联规则的推荐
关联规则是反映一个事物与其他事物之间的相互依存性和关联性,常用于实体商店或在线电商的推荐系统:通过对顾客的购买记录数据库进行关联规则挖掘,最终目的是发现顾客群体的购买习惯的内在共性。
关联规则分析中的关键概念包括:支持度(Support)、置信度(Confidence)与提升度(Lift):
-
支持度 Support。支持度是两件商品 和 在总销售笔数 中出现的概率,即 与 同时被购买的概率
-
置信度 Confidence。置信度是购买 后再购买 的条件概率。简单来说就是交集部分 在 中比例,如果比例大说明购买 的客户很大可能会购买 商品
-
提升度 Lift。提升度表示先购买 A 对购买 B 的概率的提升作用,用来判断规则是否有实际价值,即使用规则后商品在购物车中出现的次数是否高于商品单独出现在购物车中的频率。如果大于 1 说明规则有效,小于 1 则无效
例如在某电商平台上,可乐和薯片的关联规则的支持度是 20%,购买可乐的支持度是 3%,购买薯片的支持度是 5%,则提升度为:
该提升效果的置信度为:
3.4. 基于知识的推荐
基于知识的推荐(Knowledge-based Recommendation),主要应用于知识型的产品中,主要解决的问题是,为用户定制个性化的进阶路线图。
比如用户想学习钢琴,如果该用户是刚入门的小白,那最好从简单的谱子学起。但这样带来一个问题,由于用户的历史行为都在初级范围之内,根据兴趣偏好,推荐给用户的信息也都在初级范围,无法满足用户的进阶需求。
这个时候就需要基于知识的推荐。推荐系统知道用户现在所处的知识级别(用户知识),也知道学习钢琴所有的级别(产品知识),然后根据用户当前的情况为用户推荐合适的进阶信息。
精确的定义表达为:基于知识的推荐使用用户知识和产品知识, 通过推理什么产品能满足用户需求来产生推荐。这种推荐系统不依赖于用户评分等关于用户偏好的历史数据, 故其不存在冷启动方面的问题。基于知识的推荐系统响应用户的即时需求, 当用户偏好发生变化时不需要任何训练。
例如某论文针对海量习题带来的信息过载导致学习针对性不强、效率不高等问题,提出了基于知识点层次图的个性化习题推荐算法。
该算法首先根据课程知识点体系结构的特点,构建了表征知识点层次关系的权重图,该权重图有效反映知识点间的层次关系。然后,根据学生对知识点的掌握情况,在知识点层次图的基础上提出了一种个性化习题推荐算法。该算法通过更新学生-知识点失分率矩阵,获取学生掌握薄弱的知识点,以此实现习题推荐。
3.5. 基于标签的推荐
3.5.1. 基于标签推荐物品
拿到了用户标签行为数据之后,可以通过如下步骤设计一个推荐算法:
-
统计每个用户最常用的标签; -
对于每个标签,统计被打过这个标签次数最多的物品; -
找到一个用户常用的标签,然后找到具有这些标签的最热门物品推荐给这个用户。
在第三步中,就是要找到用户所标记标签中有哪些物品是他最感兴趣的,可以通过以下兴趣公式计算:
-
简单标签算法 -
TF-IDF 标签算法 -
改进的 TF-IDF 标签算法
TF-IDF 公式(Term Frequency-Inverse Document Frequency, 词频-逆文件频率)是文本分析领域的著名公式,它用于计算词的权重:
其中, ,
众多的标签并不是一个个标签孤岛,实际上,大多数标签之间都有一定的联系,例如“强化学习”和“多臂老虎机算法”、“Q 学习”三个不一样的标签相交于同一领域,为了衡量不同标签之间的相关性,我们这里介绍一种基于邻域的标签扩展方法,即对每个标签找到和它相似的标签,也就是计算标签之间的相似度。
如果认为同一个物品上的不同标签具有某种相似度,那么当两个标签同时出现在很多物品的标签集合中时,我们就可以认为这两个标签具有较大的相似度。对于标签 ,令 为被打上标签 的物品的集合, 为给物品 打上标签 的用户数,我们可以通过如下余弦相似度公式计算标签 和标签 的相似度:
同时我们必须注意到,不是所有标签都能反应用户的兴趣。比如,在一个视频网站中,用户可能对一个视频打了一个表示情绪的标签,比如“不好笑”,但我们不能因此认为用户对“不好笑”有兴趣。因此我们需要进行标签清理。
标签清理的另一个重要意义在于将标签作为推荐解释。如果我们要把标签呈现给用户,将其作为给用户推荐某一个物品的解释,对标签的质量要求就很高。一般来说,标签清理有如下几种方法:
-
去除词频很高的停止词 -
去除因(词根、翻译、叫法)不同造成的同义词。 -
去除因分隔符造成的同义词
此外,为了控制标签的质量,很多网站也采用了让用户进行反馈的思想,即让用户告诉系统某个标签是否合适。
为了得到更好的推荐效果,我们利用图模型做基于标签数据的个性化推荐,即基于图的标签推荐算法。
该方法首先需要将用户打标签的行为表示到一张图上。在用户标签数据集上,有 3 种不同的元素,即用户、物品和标签,因此,我们需要定义 3 种不同的顶点,即用户顶点、物品顶点和标签顶点。这样就得到了一个表示用户 给物品 打了标签 的用户标签行为 。
如下所示用户—物品—标签图包含 3 个用户( 、 、 )、3 个物品( 、 、 )和 3 个标签( 、 、 )
对应的用户标签行为列表为:
用户 | 标签 | 物品 |
---|---|---|
A |
2 | b |
A | 2 | c |
B |
1 | a |
C | 3 | b |
在定义出用户—物品—标签图后,就可以利用 PersonalRank 算法计算所有物品节点相对于当前用户节点在图上的相关性,然后按照相关性从大到小的排序,给用户推荐排名最高的 个物品。
3.5.2. 给用户推荐标签
一般认为,给用户推荐标签有以下好处:
-
方便用户输入标签让用户从键盘输入标签无疑会增加用户打标签的难度,这样很多用户不愿意给物品打标签,因此我们需要一个辅助工具来减小用户打标签的难度,从而提高用户打标签的参与度。 -
提高标签质量同一个语义不同的用户可能用不同的词语来表示。这些同义词会使标签的词表变得很庞大,而且会使计算相似度不太准确。而使用推荐标签时,我们可以对词表进行选择,首先保证词表不出现太多的同义词,同时保证出现的词都是一些比较热门的、有代表性的词
用户 给物品 打标签时,我们有四种简单方法可以给用户推荐和物品 相关的标签:
-
PopularTags 给用户 推荐整个系统里最热门的标签 -
ItemPopularTags 给用户 推荐物品 上最热门的标签 -
UserPopularTags 用户 推荐他自己经常使用的标签 -
HybridPopularTags 给用户推荐物品 上最热门的标签,且他自己经常使用的标签,通过一个系数将两种方法的推荐结果进行线性加权,然后生成最终的推荐结果。
同样的,图模型也可以应用于标签推荐,在根据用户打标签的行为生成图之后,再利用 PersonalRank 算法进行排名。此时顶点的启动概率定义如下
也就是说,只有用户 和物品 对应的顶点有非 0 的启动概率,而其他顶点的启动概率都为 0。
3.6. 基于社交网络的推荐
3.6.1. 给用户推荐内容
社会化推荐受到很多网站的重视,因为其有如下优点:
-
好友推荐可以增加推荐的信任度 好友往往是用户最信任的。用户往往不一定信任计算机的智能,但会信任好朋友的推荐; -
社交网络可以缓解冷启动问题 当一个新用户通过微博或者 Facebook 账号登录网站时,我们可以从社交网站中获取用户的好友列表,然后给用户推荐好友在网站上喜欢的物品。从而我们可以在没有用户行为记录时就给用户提供较高质量的推荐结果。
(1)基于邻域的社会化推荐算法
最简单算法是给用户推荐好友喜欢的物品集合,设用户 对物品 的兴趣 ,则有如下公式:
用户 和用户 的兴趣相似度(similarity)描述了两个用户喜欢的物品集合重合度:
其中 是用户 喜欢的物品集合
(2)基于图的社会化推荐算法
图模型的优点是可以将各种数据和关系都表示到图上去,应用到社交网站中,可以找出两种关系,一种是用户对物品的兴趣关系,一种是用户之间的社交网络关系。
用户的社交网络可以表示为社交网络图,用户对物品的行为可以表示为用户物品二分图,而这两种图可以结合成一个图,例如下图中的用户顶点(圆圈)和物品顶点(方块)在定义完图中的顶点和边后,需要定义边的权重。其中用户和用户之间边的权重可以定义为用户之间相似度的 倍(包括熟悉程度和兴趣相似度),而用户和物品之间的权重可以定义为用户对物品喜欢程度的 倍。之后就可以利用 PersonalRank 图排序算法给每个用户生成推荐结果。
在社交网络中,除了常见的、用户和用户之间直接的社交网络关系,还有一种关系,即两个用户属于同一个社群
为了表达这种社群关系,可以加入一种节点表示社群(下图最左边一列的节点),而如果用户属于某一社群,图中就有一条边联系用户对应的节点和社群对应的节点。在建立完图模型后,我们就可以通过前面提到的基于图的推荐算法(比如 PersonalRank)给用户推荐物品。
(3)信息流推荐
在大多数社交软件中,我们都可以通过信息流看到好友最近的言论,但信息流里面夹杂了很多用户并不关心的信息。基于信息流的推荐就是进一步帮助用户从信息流中挑选有用的信息。
目前最流行的信息流推荐算法是 Facebook 的 EdgeRank,该算法综合考虑了信息流中每个会话的时间、长度与用户兴趣的相似度,它的主要思想为:
将其他用户对当前用户信息流中的会话产生过行为的行为称为 edge,而一条会话的权重定义为:
从上面的算法描述中可以得出看出在该算法中:如果一个会话被你熟悉的好友最近产生过重要的行为,它就会有比较高的权重。
3.6.2. 给用户推荐好友
好友推荐系统的目的是根据用户现有的好友、用户的行为记录给用户推荐新的好友,从而增加整个社交网络的稠密程度和社交网站用户的活跃度。好友推荐算法在社交网络上被称为链接预测(Link Prediction),主要包括以下几种场景:
(1)基于内容的匹配
可以给用户推荐和他们有相似内容属性的用户作为好友。下面给出了常用的内容属性:
-
用户人口统计学属性,包括年龄、性别、职业、毕业学校和工作单位等 -
用户的兴趣,包括用户喜欢的物品和发布过的言论等 -
用户的位置信息,包括用户的住址、IP 地址和邮编等
计算用户在上述内容信息上的相似度就可以找出相似的用户,然后相互推荐。
(2)基于共同兴趣的好友推荐
在 Twitter 和微博为代表的以兴趣图谱为主的社交网络中,用户往往不关心对于一个人是否在现实社会中认识,而只关心是否和他们有共同的兴趣爱好。因此,在这种网站中需要给用户推荐和他有共同兴趣的其他用户作为好友。
因此可以基于用户的利用协同过滤算法(UserCF)计算用户之间的兴趣相似度,其主要思想就是如果用户喜欢相同的信息和内容,则说明他们具有相似的兴趣。此外,也可以根据用户在社交网络中的发言提取用户的兴趣标签,来计算用户的兴趣相似度。
(3)基于社交网络图的好友推荐
基于好友的好友推荐算法可以用来给用户推荐他们在现实社会中互相熟悉,而在当前社交网络中没有联系的其他用户。
介绍 3 种基于社交网络的好友推荐算法:
-
指出相似度
其中 是在社交网络图中用户 指向的其他好友的集合
-
指入相似度
其中 是指在社交网络图中指向用户 的其他好友的集合
-
互指相似度
这个相似度的含义是用户 指向的用户中,有多大比例也指向了用户
-
改进的互指相似度
这个公式考虑了指入的因素,可以避免出现网红被当做好友被推荐过来的现象。
以上是关于《推荐系统实践》 3. 通用推荐模型的主要内容,如果未能解决你的问题,请参考以下文章
推荐实践快手通用策略DSL在推荐系统架构的应用和演进.pdf(附下载链接)...