❶ PageRank算法实现好友推荐(算法原理)
对于社交系统与电商网站,推荐系统占有很重要的位置,当数据量越来越大的时候,用户无法确定该选择什么商品,因此在电商系统中需要按照兴趣或者相似度给用户推荐相应的商品。相应的,在一个大型社交网络平台中,对于一些用户,我们希望推荐一些知名度较高,活跃度较高或者感兴趣的用户,比如一些明星,歌手,演员等等。在社交网络中,PageRank算法有着广泛的应用,因此,本篇文章主要介绍其原理。
对于大部分社交系统来说,如果只是简单的获取好友的信息远远不够,我们可以通过获取好友的好友的信息来扩展用户的朋友圈,使得信息量更加丰富,本项目中使用PageRank算法来完成二级邻居,然后按照Rank排序,选择Top5用户实现用户的好友的好友的推荐。
PageRank算法由Google的创始人拉里·佩奇和谢尔·布林于1998年发明.这项技术设计之初是为了体现网页的相关性和重要性,在搜索引擎优化操作中经常被用来评估网页优化的成效因素之一.
从技术上看,搜索引擎需要解决以下三个问题:
本质就是一个爬虫问题,通过爬虫获取整个互联网的数据
关键在于快速找到.
它的实现方式有: 倒排索引,签名文件,后缀树等。我们最熟悉的是 倒排索引 。(并不熟悉,以后有机会再看)
排序是Google的搜索引擎能够兴起的一个决定性因素。
对网页排序有很多种方式,我们来看三种:
就是原封不懂地把索引到的链接直接返回给用户,缺点就不说了,想找自己感兴趣的内容估计要费不少功夫。
这种方式是一种只从关键词出现的次数和位置进行排序的方法。该方法以一个关键词与网页的相关度大小作为排序标准,而关键词在网页的相关度大小作为排序标准,而关键词在网页中的相关度则由它在网页中出现的频次和位置两方面加权计算得出。
缺点也很明显,容易出现刷分的情况,整篇文章中大量地刷关键词就能提高排名。
真正找到计算网页自身质量的完美的数学模型是Google的创始人拉里佩奇和谢尔盖布林。 下一节讲一下原理。
我们模拟一个悠闲的上网者,上网者首先随机选择一个网页打开,然后在这个网页上呆了几分钟后,跳转到该网页所指向的链接,这样无所事事、漫无目的地在网页上跳来跳去,PageRank就是估计这个悠闲的上网者分布在各个网页上的概率,这个概率就代表这个网页的重要性.
PageRank主要基于两个重要的假设:
如果一篇文章被越来越多的人引用,那么这篇文章可能就是一篇经典之作,如果这篇文章引用了其他的论文,那么一定程度上这篇被引用的文章也是一篇很好的文章。应用到社交网络中,如果一个好友被更多的人关注,那么说明该好友有很高的知名度和活跃度,那么,我们可以将该好友推荐给用户。
基于这两个假设,我们可以总结出PageRank算法的核心:
如下图,可以更好的表达PageRank算法的思想:
由上图可知,每个页面将自己的一部分rank传递给某个页面,我们可以通过计算传递给某个页面的所有rank值的和来计算出它的rank值,当然,不可能是通过一次计算完成,我们刚开始可以给每个页面赋予一个初始rank值,比如 1/N(N为页面总数) ,通过迭代计算得到该页面的rank值。
迭代计算停止的条件为:
使用有向图表示:
这个例子中只有四个网页,如果当前在A网页,那么悠闲的上网者将会各以1/3的概率跳转到B、C、D,这里的3表示A有3条出链,如果一个网页有k条出链,那么跳转任意一个出链上的概率是1/k,同理D到B、C的概率各为1/2,而B到C的概率为0。
我们在做计算的时候会将该图表示成一个二维的矩阵,我们做一个转换,就会变成下图的矩阵形式。 M(i,j) 表示j节点指向i节点的概率 ,一般来说每列和为1。
生成的 转移矩阵 非常简单, 矩阵的每一列代表该顶点所代表的页面除以对应页面的出链数得到的 。
有了转移矩阵,我们可以来定义行向量 V , V 的第i个分量记录 对应的Rank值,因此一次Rank的更新可以表示为:
在算法的第一轮计算中,我们假设上网者在每一个网页的概率都是相等的,即1/n,于是初试的概率分布就是一个所有值都为1/n的n维列向量 ,用 去右乘转移矩阵M,就得到了第一步之后上网者的概率分布向量 ,得到一个nX1的矩阵 , 这个 一轮迭代计算出来的PageRank值 。下面是 的计算过程:
得到了 后,再用 去右乘M得到 ,一直下去,即 , 最终V会收敛 .
不断的迭代,最终得到结果.
但是在迭代计算中,我们需要考虑如下两大阻力: Dead End 和 Spider Trap :
Dead End就是指一个页面只有入链但是没有出链,这时转移矩阵M的一列为零,导致最后结果为零。这时web不是强连通的,即存在某一类节点不指向别人,如下图的D。这个时候我们的算法就会出问题了,它不满足收敛性了。
为什么不满足收敛性了?
Spider Trap指页面的所有出链都指向自己,这样会使迭代结果中只有自己的页面的Rank值很高。其他页面的Rank值为零。
要克服上面两个问题,我们需要将迭代计算公式做如下转变。我们可以加入一个 随机跳转 机制.
即假设每个页面有很小概率拥有一个指向其他页面的链接。
表现出来就是:其他页面本来传递给一个页面的Rank值需要做一个折扣,作为补偿,可能需要一个页面指向该页面并且传递Rank值给该页面,该跳转的概率为β,因此表达式变为:
其中,N为页面总数; e 为一个N维且各个分量都是1的向量;β通过经验得知一般设为0.15.
此时的计算结果过程为:
有机会再写,先空着
❷ 推荐算法简介
写在最前面:本文内容主要来自于书籍《推荐系统实践》和《推荐系统与深度学习》。
推荐系统是目前互联网世界最常见的智能产品形式。从电子商务、音乐视频网站,到作为互联网经济支柱的在线广告和新颖的在线应用推荐,到处都有推荐系统的身影。推荐算法是推荐系统的核心,其本质是通过一定的方式将用户和物品联系起来,而不同的推荐系统利用了不同的方式。
推荐系统的主要功能是以个性化的方式帮助用户从极大的搜索空间中快速找到感兴趣的对象。因此,目前所用的推荐系统多为个性化推荐系统。个性化推荐的成功应用需要两个条件:
在推荐系统的众多算法中,基于协同的推荐和基于内容的推荐在实践中得到了最广泛的应用。本文也将从这两种算法开始,结合时间、地点上下文环境以及社交环境,对常见的推荐算法做一个简单的介绍。
基于内容的算法的本质是对物品内容进行分析,从中提取特征,然后基于用户对何种特征感兴趣来推荐含有用户感兴趣特征的物品。因此,基于内容的推荐算法有两个最基本的要求:
下面我们以一个简单的电影推荐来介绍基于内容的推荐算法。
现在有两个用户A、B和他们看过的电影以及打分情况如下:
其中问好(?)表示用户未看过。用户A对《银河护卫队 》《变形金刚》《星际迷航》三部科幻电影都有评分,平均分为 4 .7 分 ( (5+4+5 ) / 3=4.7 );对《三生三世》《美人鱼》《北京遇上西雅图》三部爱情电影评分平均分为 2.3 分 ( ( 3十2+2 ) /3=2.3 )。现在需要给A推荐电影,很明显A更倾向于科幻电影,因此推荐系统会给A推荐独立日。而对于用户B,通过简单的计算我们可以知道更喜欢爱情电影,因此给其推荐《三生三世》。当然,在实际推荐系统中,预测打分比这更加复杂些,但是其原理是一样的。
现在,我们可以将基于内容的推荐归纳为以下四个步骤:
通过上面四步就能快速构建一个简单的推荐系统。基于内容的推荐系统通常简单有效,可解释性好,没有物品冷启动问题。但他也有两个明显的缺点:
最后,顺便提一下特征提取方法:对于某些特征较为明确的物品,一般可以直接对其打标签,如电影类别。而对于文本类别的特征,则主要是其主题情感等,则些可以通过tf-idf或LDA等方法得到。
基于协同的算法在很多地方也叫基于邻域的算法,主要可分为两种:基于用户的协同算法和基于物品的协同算法。
啤酒和尿布的故事在数据挖掘领域十分有名,该故事讲述了美国沃尔玛超市统计发现啤酒和尿布一起被购买的次数非常多,因此将啤酒和尿布摆在了一起,最后啤酒和尿布的销量双双增加了。这便是一个典型的物品协同过滤的例子。
基于物品的协同过滤指基于物品的行为相似度(如啤酒尿布被同时购买)来进行物品推荐。该算法认为,物品A和物品B具有很大相似度是因为喜欢物品A的用户大都也喜欢物品B。
基于物品的协同过滤算法主要分为两步:
基于物品的协同过滤算法中计算物品相似度的方法有以下几种:
(1)基于共同喜欢物品的用户列表计算。
此外,John S. Breese再其论文中还提及了IUF(Inverse User Frequence,逆用户活跃度)的参数,其认为活跃用户对物品相似度的贡献应该小于不活跃的用户,应该增加IUF参数来修正物品相似度的公式:
上面的公式只是对活跃用户做了一种软性的惩罚, 但对于很多过于活跃的用户, 比如某位买了当当网80%图书的用户, 为了避免相似度矩阵过于稠密, 我们在实际计算中一般直接忽略他的兴趣列表, 而不将其纳入到相似度计算的数据集中。
(2)基于余弦相似度计算。
(3)热门物品的惩罚。
从上面(1)的相似度计算公式中,我们可以发现当物品 i 被更多人购买时,分子中的 N(i) ∩ N(j) 和分母中的 N(i) 都会增长。对于热门物品,分子 N(i) ∩ N(j) 的增长速度往往高于 N(i),这就会使得物品 i 和很多其他的物品相似度都偏高,这就是 ItemCF 中的物品热门问题。推荐结果过于热门,会使得个性化感知下降。以歌曲相似度为例,大部分用户都会收藏《小苹果》这些热门歌曲,从而导致《小苹果》出现在很多的相似歌曲中。为了解决这个问题,我们对于物品 i 进行惩罚,例如下式, 当α∈(0, 0.5) 时,N(i) 越小,惩罚得越厉害,从而使热门物品相关性分数下降( 博主注:这部分未充分理解 ):
此外,Kary pis在研究中发现如果将ItemCF的相似度矩阵按最大值归一化, 可以提高推荐的准确率。 其研究表明, 如果已经得到了物品相似度矩阵w, 那么可以用如下公式得到归一化之后的相似度矩阵w':
归一化的好处不仅仅在于增加推荐的准确度,它还可以提高推荐的覆盖率和多样性。一般来说,物品总是属于很多不同的类,每一类中的物品联系比较紧密。假设物品分为两类——A和B, A类物品之间的相似度为0.5, B类物品之间的相似度为0.6, 而A类物品和B类物品之间的相似度是0.2。 在这种情况下, 如果一个用户喜欢了5个A类物品和5个B类物品, 用ItemCF给他进行推荐, 推荐的就都是B类物品, 因为B类物品之间的相似度大。 但如果归一化之后, A类物品之间的相似度变成了1, B类物品之间的相似度也是1, 那么这种情况下, 用户如果喜欢5个A类物品和5个B类物品, 那么他的推荐列表中A类物品和B类物品的数目也应该是大致相等的。 从这个例子可以看出, 相似度的归一化可以提高推荐的多样性。
那么,对于两个不同的类,什么样的类其类内物品之间的相似度高,什么样的类其类内物品相似度低呢?一般来说,热门的类其类内物品相似度一般比较大。如果不进行归一化,就会推荐比较热门的类里面的物品,而这些物品也是比较热门的。因此,推荐的覆盖率就比较低。相反,如果进行相似度的归一化,则可以提高推荐系统的覆盖率。
最后,利用物品相似度矩阵和用户打过分的物品记录就可以对一个用户进行推荐评分:
基于用户的协同算法与基于物品的协同算法原理类似,只不过基于物品的协同是用户U购买了A物品,会计算经常有哪些物品与A一起购买(也即相似度),然后推荐给用户U这些与A相似的物品。而基于用户的协同则是先计算用户的相似性(通过计算这些用户购买过的相同的物品),然后将这些相似用户购买过的物品推荐给用户U。
基于用户的协同过滤算法主要包括两个步骤:
步骤(1)的关键是计算用户的兴趣相似度,主要是利用用户的行为相似度计算用户相似度。给定用户 u 和 v,N(u) 表示用户u曾经有过正反馈(譬如购买)的物品集合,N(v) 表示用户 v 曾经有过正反馈的物品集合。那么我们可以通过如下的 Jaccard 公式简单的计算 u 和 v 的相似度:
或通过余弦相似度:
得到用户之间的相似度之后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的物品。如下的公式度量了UserCF算法中用户 u 对物品 i 的感兴趣程度:
首先回顾一下UserCF算法和ItemCF算法的推荐原理:UserCF给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品, 而ItemCF给用户推荐那些和他之前喜欢的物品具有类似行为的物品。
(1)从推荐场景考虑
首先从场景来看,如果用户数量远远超过物品数量,如购物网站淘宝,那么可以考虑ItemCF,因为维护一个非常大的用户关系网是不容易的。其次,物品数据一般较为稳定,因此物品相似度矩阵不必频繁更新,维护代价较小。
UserCF的推荐结果着重于反应和用户兴趣相似的小群体的热点,而ItemCF的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反应了用户所在小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反应了用户自己的个性传承。因此UserCF更适合新闻、微博或微内容的推荐,而且新闻内容更新频率非常高,想要维护这样一个非常大而且更新频繁的表无疑是非常难的。
在新闻类网站中,用户的兴趣爱好往往比较粗粒度,很少会有用户说只看某个话题的新闻,而且往往某个话题也不是每天都会有新闻。 个性化新闻推荐更强调新闻热点,热门程度和时效性是个性化新闻推荐的重点,个性化是补充,所以 UserCF 给用户推荐和他有相同兴趣爱好的人关注的新闻,这样在保证了热点和时效性的同时,兼顾了个性化。
(2)从系统多样性(也称覆盖率,指一个推荐系统能否给用户提供多种选择)方面来看,ItemCF的多样性要远远好于UserCF,因为UserCF更倾向于推荐热门物品。而ItemCF具有较好的新颖性,能够发现长尾物品。所以大多数情况下,ItemCF在精度上较小于UserCF,但其在覆盖率和新颖性上面却比UserCF要好很多。
在介绍本节基于矩阵分解的隐语义模型之前,让我们先来回顾一下传统的矩阵分解方法SVD在推荐系统的应用吧。
基于SVD矩阵分解在推荐中的应用可分为如下几步:
SVD在计算前会先把评分矩阵 A 缺失值补全,补全之后稀疏矩阵 A 表示成稠密矩阵,然后将分解成 A' = U∑V T 。但是这种方法有两个缺点:(1)补成稠密矩阵后需要耗费巨大的储存空间,对这样巨大的稠密矩阵进行储存是不现实的;(2)SVD的计算复杂度很高,对这样大的稠密矩阵中进行计算式不现实的。因此,隐语义模型就被发明了出来。
更详细的SVD在推荐系统的应用可参考 奇异值分解SVD简介及其在推荐系统中的简单应用 。
隐语义模型(Latent Factor Model)最早在文本挖掘领域被提出,用于找到文本的隐含语义。相关的算法有LSI,pLSA,LDA和Topic Model。本节将对隐语义模型在Top-N推荐中的应用进行详细介绍,并通过实际的数据评测该模型。
隐语义模型的核心思想是通过隐含特征联系用户兴趣和物品。让我们通过一个例子来理解一下这个模型。
现有两个用户,用户A的兴趣涉及侦探小说、科普图书以及一些计算机技术书,而用户B的兴趣比较集中在数学和机器学习方面。那么如何给A和B推荐图书呢?
我们可以对书和物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。简言之,这个基于兴趣分类的方法大概需要解决3个问题:
对于第一个问题的简单解决方案是找相关专业人员给物品分类。以图书为例,每本书出版时,编辑都会给出一个分类。但是,即使有很系统的分类体系,编辑给出的分类仍然具有以下缺点:(1)编辑的意见不能代表各种用户的意见;(2)编辑很难控制分类的细粒度;(3)编辑很难给一个物品多个分类;(4)编辑很难给一个物品多个分类;(5)编辑很难给出多个维度的分类;(6)编辑很难决定一个物品在某一个类别中的权重。
为了解决上述问题,研究员提出可以从数据出发,自动找到那些分类,然后进行个性化推荐。隐语义模型由于采用基于用户行为统计的自动聚类,较好地解决了上面提出的5个问题。
LFM将矩阵分解成2个而不是3个:
推荐系统中用户和物品的交互数据分为显性反馈和隐性反馈数据。隐式模型中多了一个置信参数,具体涉及到ALS(交替最小二乘法,Alternating Least Squares)中对于隐式反馈模型的处理方式——有的文章称为“加权的正则化矩阵分解”:
一个小细节:在隐性反馈数据集中,只有正样本(正反馈)没有负反馈(负样本),因此如何给用户生成负样本来进行训练是一个重要的问题。Rong Pan在其文章中对此进行了探讨,对比了如下几种方法:
用户行为很容易用二分图表示,因此很多图算法都可以应用到推荐系统中。基于图的模型(graph-based model)是推荐系统中的重要内容。很多研究人员把基于领域的模型也称为基于图的模型,因为可以把基于领域的模型看作基于图的模型的简单形式。
在研究基于图的模型之前,需要将用户行为数据表示成图的形式。本节的数据是由一系列用户物品二元组 (u, i) 组成的,其中 u 表示用户对物品 i 产生过行为。
令 G(V, E) 表示用户物品二分图,其中 V=V U UV I 由用户顶点 V U 和物品节点 V I 组成。对于数据集中每一个二元组 (u, i) ,图中都有一套对应的边 e(v u , v i ),其中 v u ∈V U 是用户对应的顶点,v i ∈V I 是物品i对应的顶点。如下图是一个简单的物品二分图,其中圆形节点代表用户,方形节点代表物品,用户物品的直接连线代表用户对物品产生过行为。比如下图中的用户A对物品a、b、d产生过行为。
度量图中两个顶点之间相关性的方法很多,但一般来说图中顶点的相关性主要取决于下面3个因素:
而相关性高的一对顶点一般具有如下特征:
举个例子,如下图,用户A和物品c、e没有边直连,但A可通过一条长度为3的路径到达c,而Ae之间有两条长度为3的路径。那么A和e的相关性要高于顶点A和c,因而物品e在用户A的推荐列表中应该排在物品c之前,因为Ae之间有两条路径。其中,(A,b,C,e)路径经过的顶点的出度为(3,2,2,2),而 (A,d,D,e) 路径经过了一个出度比较大的顶点D,所以 (A,d,D,e) 对顶点A与e之间相关性的贡献要小于(A,b,C,e)。
基于上面3个主要因素,研究人员设计了很多计算图中顶点相关性的方法,本节将介绍一种基于随机游走的PersonalRank算法。
假设要给用户u进行个性化推荐,可以从用户u对应的节点 v u 开始在用户物品二分图上进行随机游走。游走到任一节点时,首先按照概率α决定是继续游走还是停止这次游走并从 v u 节点重新开始游走。若决定继续游走,则从当前节点指向的节点中按照均匀分布随机选择一个节点作为游走下次经过的节点。这样,经过很多次随机游走后,每个物品被访问到的概率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。
上述算法可以表示成下面的公式:
虽然通过随机游走可以很好地在理论上解释PersonalRank算法,但是该算法在时间复杂度上有明显的缺点。因为在为每个用户进行推荐时,都需要在整个用户物品二分图上进行迭代,知道所有顶点的PR值都收敛。这一过程的时间复杂度非常高,不仅无法在线进行实时推荐,离线计算也是非常耗时的。
有两种方法可以解决上面PersonalRank时间复杂度高的问题:
(1)减少迭代次数,在收敛之前停止迭代。但是这样会影响最终的精度。
(2)从矩阵论出发,重新涉及算法。另M为用户物品二分图的转移概率矩阵,即:
网络社交是当今社会非常重要甚至可以说是必不可少的社交方式,用户在互联网上的时间有相当大的一部分都用在了社交网络上。
当前国外最着名的社交网站是Facebook和Twitter,国内的代表则是微信/QQ和微博。这些社交网站可以分为两类:
需要指出的是,任何一个社交网站都不是单纯的社交图谱或兴趣图谱。如QQ上有些兴趣爱好群可以认识不同的陌生人,而微博中的好友也可以是现实中认识的。
社交网络定义了用户之间的联系,因此可以用图定义社交网络。我们用图 G(V,E,w) 定义一个社交网络,其中V是顶点集合,每个顶点代表一个用户,E是边集合,如果用户va和vb有社交网络关系,那么就有一条边 e(v a , v b ) 连接这两个用户,而 w(v a , v b )定义了边的权重。一般来说,有三种不同的社交网络数据:
和一般购物网站中的用户活跃度分布和物品流行度分布类似,社交网络中用户的入度(in degree,表示有多少人关注)和出度(out degree,表示关注多少人)的分布也是满足长尾分布的。即大部分人关注的人都很少,被关注很多的人也很少。
给定一个社交网络和一份用户行为数据集。其中社交网络定义了用户之间的好友关系,而用户行为数据集定义了不同用户的历史行为和兴趣数据。那么最简单的算法就是给用户推荐好友喜欢的物品集合。即用户u对物品i的兴趣 p ui 可以通过如下公式计算。
用户u和用户v的熟悉程度描述了用户u和用户在现实社会中的熟悉程度。一般来说,用户更加相信自己熟悉的好友的推荐,因此我们需要考虑用户之间的熟悉度。下面介绍3中衡量用户熟悉程度的方法。
(1)对于用户u和用户v,可以使用共同好友比例来计算他们的相似度:
上式中 out(u) 可以理解为用户u关注的用户合集,因此 out(u) ∩ out(v) 定义了用户u、v共同关注的用户集合。
(2)使用被关注的用户数量来计算用户之间的相似度,只要将公式中的 out(u) 修改为 in(u):
in(u) 是指关注用户u的集合。在无向社交网络中,in(u)和out(u)是相同的,而在微博这种有向社交网络中,这两个集合的含义就不痛了。一般来说,本方法适合用来计算微博大V之间的相似度,因为大v往往被关注的人数比较多;而方法(1)适用于计算普通用户之间的相似度,因为普通用户往往关注行为比较丰富。
(3)除此之外,还可以定义第三种有向的相似度:这个相似度的含义是用户u关注的用户中,有多大比例也关注了用户v:
这个相似度有一个缺点,就是在该相似度下所有人都和大v有很大的相似度,这是因为公式中的分母并没有考虑 in(v) 的大小,所以可以把 in(v) 加入到上面公式的分母,来降低大v与其他用户的相似度:
上面介绍了3种计算用户之间相似度(或称熟悉度)的计算方法。除了熟悉程度,还需要考虑用户之间的兴趣相似度。我们和父母很熟悉,但很多时候我们和父母的兴趣确不相似,因此也不会喜欢他们喜欢的物品。因此,在度量用户相似度时,还需要考虑兴趣相似度,而兴趣相似度可以通过和UserCF类似的方法度量,即如果两个用户喜欢的物品集合重合度很高,两个用户的兴趣相似度很高。
最后,我们可以通过加权的形式将两种权重合并起来,便得到了各个好有用户的权重了。
有了权重,我们便可以针对用户u挑选k个最相似的用户,把他们购买过的物品中,u未购买过的物品推荐给用户u即可。打分公式如下:
其中 w' 是合并后的权重,score是用户v对物品的打分。
node2vec的整体思路分为两个步骤:第一个步骤是随机游走(random walk),即通过一定规则随机抽取一些点的序列;第二个步骤是将点的序列输入至word2vec模型从而得到每个点的embedding向量。
随机游走在前面基于图的模型中已经介绍过,其主要分为两步:(1)选择起始节点;(2)选择下一节点。起始节点选择有两种方法:按一定规则抽取一定量的节点或者以图中所有节点作为起始节点。一般来说会选择后一种方法以保证所有节点都会被选取到。
在选择下一节点方法上,最简单的是按边的权重来选择,但在实际应用中需要通过广度优先还是深度优先的方法来控制游走范围。一般来说,深度优先发现能力更强,广度优先更能使社区内(较相似)的节点出现在一个路径里。
斯坦福大学Jure Leskovec教授给出了一种可以控制广度优先或者深度优先的方法。
以上图为例,假设第一步是从t随机游走到v,这时候我们要确定下一步的邻接节点。本例中,作者定义了p和q两个参数变量来调节游走,首先计算其邻居节点与上一节点t的距离d,根据下面的公式得到α:
一般从每个节点开始游走5~10次,步长则根据点的数量N游走根号N步。如此便可通过random walk生成点的序列样本。
得到序列之后,便可以通过word2vec的方式训练得到各个用户的特征向量,通过余弦相似度便可以计算各个用户的相似度了。有了相似度,便可以使用基于用户的推荐算法了。
推荐系统需要根据用户的历史行为和兴趣预测用户未来的行为和兴趣,因此大量的用户行为数据就成为推荐系统的重要组成部分和先决条件。如何在没有大量用户数据的情况下设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统,就是冷启动问题。
冷启动问题主要分为三类:
针对用户冷启动,下面给出一些简要的方案:
(1)有效利用账户信息。利用用户注册时提供的年龄、性别等数据做粗粒度的个性化;
(2)利用用户的社交网络账号登录(需要用户授权),导入用户在社交网站上的好友信息,然后给用户推荐其好友喜欢的物品;
(3)要求用户在登录时对一些物品进行反馈,手机用户对这些物品的兴趣信息,然后给用推荐那些和这些物品相似的物品;
(4)提供非个性化推荐。非个性化推荐的最简单例子就是热门排行榜,我们可以给用户推荐热门排行榜,然后等到用户数据收集到一定的时候,在切换为个性化推荐。
对于物品冷启动,可以利用新加入物品的内容信息,将它们推荐给喜欢过和他们相似的物品的用户。
对于系统冷启动,可以引入专家知识,通过一定高效的方式快速建立起物品的相关度表。
在上面介绍了一些推荐系统的基础算法知识,这些算法大都是比较经典且现在还在使用的。但是需要注意的是,在实践中,任何一种推荐算法都不是单独使用的,而是将多种推荐算法结合起来,也就是混合推荐系统,但是在这里并不准备介绍,感兴趣的可以查阅《推荐系统》或《推荐系统与深度学习》等书籍。此外,在推荐中非常重要的点击率模型以及基于矩阵的一些排序算法在这里并没有提及,感兴趣的也可自行学习。
虽然现在用的很多算法都是基于深度学习的,但是这些经典算法能够让我们对推荐系统的发展有一个比较好的理解,同时,更重要的一点——“推陈出新”,只有掌握了这些经典的算法,才能提出或理解现在的一些更好地算法。
❸ 抖音的推荐机制是利用的什么原理
一、智能算法的推荐原理
智能算法推荐的本质,是从一个聚合内容池里面给当前用户匹配出最感兴趣的内容。
这个内容池,每天有几十上百万的内容,涵盖15s短视频、1min长视频、5min超长视频。
而在给用户匹配内容的时候,平台主要依据3个要素:内容、用户以及用户对内容的感兴趣程度。
系统是怎么理解我们创作的内容呢?
平台在做内容刻画的时候,主要会依托于关键词识别技术:通过提取文案、视频中的关键词,根据关键词将内容进行粗分类,然后根据细分领域的关键词,再对分类进行细化。
比如,视频文案及内容的关键词是“罗纳尔多、足球、世界杯”。
大部分关键词都属于体育类词汇,就会先把你的作品分到体育大类,然后根据具体的关键词,再细分到“足球”、“国际足球”等二三级类目。
用户刻画
通过这一系列的比对、分析,系统推测还原出一个用户的基本属性,比如:Ta可能是一个正在旅游的男性,喜欢足球、汽车等分类。
系统会把上述的用户特征,归类为这个用户的标签。
用户标签主要分为3大类:
1)用户的基本信息(年龄、性别、地域);
2)用户的行为信息(关注账号,历史流浪记录,点赞收藏的内容、音乐、话题);
3)阅读兴趣(阅读行为、用户聚类、用户标记)。
系统根据用户的信息和行为,对用户进行分析计算,计算出用户喜好的分类、话题、人物等其他信息,这样就完成了系统对用户的刻画。
推荐算法的本质
利用作品的特征(主题词、标签、热度、转发、时效、相似度)、用户喜好特征(短期点击行为、兴趣、职业、年龄、性别等),以及环境因素(地域、时间、天气、网络环境),拟合一个用户对内容满意的函数,它会估算用户对每一个作品的点击概率,然后再从系统几十上百万的内容流量池中,将所有的作品按照兴趣由高到低排序,Top10的作品在此时会脱颖而出,被推荐到用户的手机上进行展现。
大概就是这个样子想学的可以私信小编
❹ 07_推荐系统算法详解
基于人口统计学的推荐与用户画像、基于内容的推荐、基于协同过滤的推荐。
1、基于人口统计学的推荐机制( Demographic-based Recommendation)是一种最易于实现的推荐方法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户。
2、对于没有明确含义的用户信息(比如登录时间、地域等上下文信息),可以通过聚类等手段,给用户打上分类标签。
3、对于特定标签的用户,又可以根据预设的规则(知识)或者模型,推荐出对应的物品。
4、用户信息标签化的过程一般又称为 用户画像 ( User Profiling)。
(1)用户画像( User Profile)就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后,完美地抽象出一个用户的商业全貌作是企业应用大数据技术的基本方式。
(2)用户画像为企业提供了足够的信息基础,能够帮助企业快速找到精准用户群体以及用户需求等更为广泛的反馈信息。
(3)作为大数据的根基,它完美地抽象出一个用户的信息全貌,为进一步精准、快速地分析用户行为习惯、消费习惯等重要信息,提供了足够的数据基础。
1、 Content- based Recommendations(CB)根据推荐物品或内容的元数据,发现物品的相关性,再基于用户过去的喜好记录,为用户推荐相似的物品。
2、通过抽取物品内在或者外在的特征值,实现相似度计算。比如一个电影,有导演、演员、用户标签UGC、用户评论、时长、风格等等,都可以算是特征。
3、将用户(user)个人信息的特征(基于喜好记录或是预设兴趣标签),和物品(item)的特征相匹配,就能得到用户对物品感兴趣的程度。在一些电影、音乐、图书的社交网站有很成功的应用,有些网站还请专业的人员对物品进行基因编码/打标签(PGC)。
4、 相似度计算:
5、对于物品的特征提取——打标签(tag)
- 专家标签(PGC)
- 用户自定义标签(UGC)
- 降维分析数据,提取隐语义标签(LFM)
对于文本信息的特征提取——关键词
- 分词、语义处理和情感分析(NLP)
- 潜在语义分析(LSA)
6、 基于内容推荐系统的高层次结构
7、 特征工程
(1)特征( feature):数据中抽取出来的对结果预测有用的信息。
特征的个数就是数据的观测维度。
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
特征工程一般包括特征清洗(采样、清洗异常样本),特征处理和特征选择。
特征按照不同的数据类型分类,有不同的特征处理方法:数值型、类别型、时间型、统计型。
(2)数值型特征处理
用连续数值表示当前维度特征,通常会对数值型特征进行数学上的处理,主要的做法是归一化和离散化。
* 幅度调整归一化:
特征与特征之间应该是平等的,区别应该体现在 特征内部 。
例如房屋价格和住房面积的幅度是不同的,房屋价格可能在3000000~15000000(万)之间,而住房面积在40-300(平方米)之间,那么明明是平等的两个特征,输入到相同的模型中后由于本身的幅值不同导致产生的效果不同,这是不合理的
* 数值型特征处理——离散化
离散化的两种方式:等步长——简单但不一定有效;等频——min -> 25% -> 75% -> max
两种方法对比:
等频的离散化方法很精准,但需要每次都对数据分布进行一遍从新计算,因为昨天用户在淘宝上买东西的价格分布和今天不一定相同,因此昨天做等频的切分点可能并不适用,而线上最需要避免的就是不固定,需要现场计算,所以昨天训练出的模型今天不一定能使用。
等频不固定,但很精准,等步长是固定的,非常简单,因此两者在工业上都有应用。
(3) 类别型特征处理
类别型数据本身没有大小关系,需要将它们编码为数字,但它们之间不能有预先设定的大小关系,因此既要做到公平,又要区分开它们,那么直接开辟多个空间。
One-Hot编码/哑变量:One-Hot编码/哑变量所做的就是将类别型数据平行地展开,也就是说,经过One-Hot编码哑变量后,这个特征的空间会膨胀。
(4) 时间型特征处理
时间型特征既可以做连续值,又可以看做离散值。
连续值:持续时间(网页浏览时长);间隔时间(上一次购买/点击离现在的时间间隔)。
离散值:一天中哪个时间段;一周中的星期几;一年中哪个月/星期;工作日/周末。
(5) 统计型特征处理
加减平均:商品价格高于平均价格多少,用户在某个品类下消费超过多少。
分位线:商品属于售出商品价格的分位线处。
次序性:商品处于热门商品第几位。
比例类:电商中商品的好/中/差评比例。
8、 推荐系统常见反馈数据 :
9、 基于UGC的推荐
用户用标签来描述对物品的看法,所以用户生成标签(UGC)是联系用户和物品的纽带,也是反应用户兴趣的重要数据源。
一个用户标签行为的数据集一般由一个三元组(用户,物品,标签)的集合表示,其中一条记录(u,i,b)表示用户u给物品打上了标签b。
一个最简单的算法:
- 统计每个用户最常用的标签
- 对于每个标签,统计被打过这个标签次数最多的物品
- 对于一个用户,首先找到他常用的标签,然后找到具有这些标签的最热门的物品,推荐给他
- 所以用户u对物品i的兴趣公式为 ,其中 使用户u打过标签b的次数, 是物品i被打过标签b的次数。
简单算法中直接将用户打出标签的次数和物品得到的标签次数相乘,可以简单地表现出用户对物品某个特征的兴趣。
这种方法倾向于给热门标签(谁都会给的标签,如“大片”、“搞笑”等)、热门物品(打标签人数最多)比较大的权重,如果一个热门物品同时对应着热门标签,那它就会“霸榜”,推荐的个性化、新颖度就会降低。
类似的问题,出现在新闻内容的关键字提取中。比如以下新闻中,哪个关键字应该获得更高的权重?
10、 TF-IDF:词频逆文档频率 ( Term Frequency- -Inverse Document Frequency,TF-DF)是一种用于资讯检索与文本挖掘的常用加权技术。
TFDF是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
TFIDF=TF IDF
TF-IDF的主要思想是 :如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF-DF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。
词频( Term Frequency,TF) :指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数的归一化,以防止偏向更长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。) ,其中 表示词语 i 在文档 j 中出现的频率, 表示 i 在 j 中出现的次数, 表示文档 j 的总词数。
逆向文件频率( Inverse Document Frequency,IDF) :是一个词语普遍重要性的度量,某一特定词语的IDF,可以由总文档数目除以包含该词语之文档的数目,再将得到的商取对数得到 ,其中 表示词语 i 在文档集中的逆文档频率,N表示文档集中的文档总数, 表示文档集中包含了词语 i 的文档数。
(11) TF-IDF对基于UGC推荐的改进 : ,为了避免热门标签和热门物品获得更多的权重,我们需要对“热门进行惩罚。
借鉴TF-IDF的思想,以一个物品的所有标签作为“文档”,标签作为“词语”,从而计算标签的“词频”(在物品所有标签中的频率)和“逆文档频率”(在其它物品标签中普遍出现的频率)。
由于“物品i的所有标签” 应该对标签权重没有影响,而 “所有标签总数” N 对于所有标签是一定的,所以这两项可以略去。在简单算法的基础上,直接加入对热门标签和热门物品的惩罚项: ,其中, 记录了标签 b 被多少个不同的用户使用过, 记录了物品 i 被多少个不同的用户打过标签。
(一)协同过滤(Collaborative Filtering, CF)
1、基于协同过滤(CF)的推荐:基于内容( Content based,CB)主要利用的是用户评价过的物品的内容特征,而CF方法还可以利用其他用户评分过的物品内容。
CF可以解决CB的一些局限:
- 物品内容不完全或者难以获得时,依然可以通过其他用户的反馈给出推荐。
- CF基于用户之间对物品的评价质量,避免了CB仅依赖内容可能造成的对物品质量判断的干。
- CF推荐不受内容限制,只要其他类似用户给出了对不同物品的兴趣,CF就可以给用户推荐出内容差异很大的物品(但有某种内在联系)
分为两类:基于近邻和基于模型。
2、基于近邻的推荐系统:根据的是相同“口碑”准则。是否应该给Cary推荐《泰坦尼克号》?
(二)基于近邻的协同过滤
1、 基于用户(User-CF): 基于用户的协同过滤推荐的基本原理是,根据所有用户对物品的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,并推荐近邻所偏好的物品。
在一般的应用中是采用计算“K-近邻”的算法;基于这K个邻居的历史偏好信息,为当前用户进行推荐。
User-CF和基于人口统计学的推荐机制:
- 两者都是计算用户的相似度,并基于相似的“邻居”用户群计算推荐。
- 它们所不同的是如何计算用户的相似度:基于人口统计学的机制只考虑用户本身的特征,而基于用户的协同过滤机制可是在用户的历史偏好的数据上计算用户的相似度,它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好。
2、基于物品(Item-CF):基于项目的协同过滤推荐的基本原理与基于用户的类似,只是使用所有用户对物品的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户。
Item-CF和基于内容(CB)的推荐
- 其实都是基于物品相似度预测推荐,只是相似度计算的方法不一样,前者是从用户历史的偏好推断,而后者是基于物品本身的属性特征信息。
同样是协同过滤,在基于用户和基于项目两个策略中应该如何选择呢?
- 电商、电影、音乐网站,用户数量远大于物品数量。
- 新闻网站,物品(新闻文本)数量可能大于用户数量。
3、 User-CF和Item-CF的比较
同样是协同过滤,在User-CF和ltem-CF两个策略中应该如何选择呢?
Item-CF应用场景
- 基于物品的协同过滤( Item-CF ) 推荐机制是 Amazon在基于用户的机制上改良的一种策略因为在大部分的Web站点中,物品的个数是远远小于用户的数量的,而且物品的个数和相似度相对比较稳定,同时基于物品的机制比基于用户的实时性更好一些,所以 Item-CF 成为了目前推荐策略的主流。
User-CF应用场景
- 设想一下在一些新闻推荐系统中,也许物品一一也就是新闻的个数可能大于用户的个数,而且新闻的更新程度也有很快,所以它的相似度依然不稳定,这时用 User-cf可能效果更好。
所以,推荐策略的选择其实和具体的应用场景有很大的关系。
4、 基于协同过滤的推荐优缺点
(1)基于协同过滤的推荐机制的优点:
它不需要对物品或者用户进行严格的建模,而且不要求对物品特征的描述是机器可理解的,所以这种方法也是领域无关的。
这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好。
(2)存在的问题
方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。
推荐的效果依赖于用户历史好数据的多少和准确性。
在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。
对于一些特殊品味的用户不能给予很好的推荐。
(三)基于模型的协同过滤
1、基本思想
(1)用户具有一定的特征,决定着他的偏好选择
(2)物品具有一定的特征,影响着用户需是否选择它。
(3)用户之所以选择某一个商品,是因为用户特征与物品特征相互匹配。
基于这种思想,模型的建立相当于从行为数据中提取特征,给用户和物品同时打上“标签”;这和基于人口统计学的用户标签、基于内容方法的物品标签本质是一样的,都是特征的提取和匹配。
有显性特征时(比如用户标签、物品分类标签)我们可以直接匹配做出推荐;没有时,可以根据已有的偏好数据,去发据出隐藏的特征,这需要用到隐语义模型(LFM)。
2、基于模型的协同过滤推荐,就是基于样本的用户偏好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测新物品的得分,计算推荐
基于近邻的推荐和基于模型的推荐
- 基于近邻的推荐是在预测时直接使用已有的用户偏好数据,通过近邻数据来预测对新物品的偏好(类似分类)
- 而基于模型的方法,是要使用这些偏好数据来训练模型,找到内在规律,再用模型来做预测(类似回归)
训练模型时,可以基于标签内容来提取物品特征,也可以让模型去发据物品的潜在特征;这样的模型被称为 隐语义模型 ( Latent Factor Model,LFM)。
(1)隐语义模型(LFM):用隐语义模型来进行协同过滤的目标:
- 揭示隐藏的特征,这些特征能够解释为什么给出对应的预测评分
- 这类特征可能是无法直接用语言解释描述的,事实上我们并不需要知道,类似“玄学”
通过矩阵分解进行降维分析
- 协同过滤算法非常依赖历史数据,而一般的推荐系统中,偏好数据又往往是稀疏的;这就需要对原始数据做降维处理。
- 分解之后的矩阵,就代表了用户和物品的隐藏特征
隐语义模型的实例:基于概率的隐语义分析(pLSA)、隐式迪利克雷分布模型(LDA)、矩阵因子分解模型(基于奇异值分解的模型,SVD)
(2)LFM降维方法——矩阵因子分解
(3)LFM的进一步理解
我们可以认为,用户之所以给电影打出这样的分数,是有内在原因的,我们可以挖掘出影响用户打分的隐藏因素,进而根据未评分电影与这些隐藏因素的关联度,决定此未评分电影的预测评分。
应该有一些隐藏的因素,影响用户的打分,比如电影:演员、题材、年代…甚至不定是人直接可以理解的隐藏因子。
找到隐藏因子,可以对user和Iiem进行关联(找到是由于什么使得user喜欢/不喜欢此Item,什么会决定user喜欢/不喜欢此item),就可以推测用户是否会喜欢某一部未看过的电影。
(4)矩阵因子分解
(5)模型的求解——损失函数
(6)模型的求解算法——ALS
现在,矩阵因子分解的问题已经转化成了一个标准的优化问题,需要求解P、Q,使目标损失函数取最小值。
最小化过程的求解,一般采用随机梯度下降算法或者交替最小二乘法来实现交替最小二乘法( Alternating Least Squares,ALS)
ALS的思想是,由于两个矩阵P和Q都未知,且通过矩阵乘法耦合在一起,为了使它们解耦,可以先固定Q,把P当作变量,通过损失函数最小化求出P,这就是一个经典的最小二乘问题;再反过来固定求得的P,把Q当作变量,求解出Q:如此交替执行,直到误差满足阅值条件,或者到达迭代上限。
(7)梯度下降算法
❺ 猜你喜欢是如何猜的——常见推荐算法介绍
自从头条系的产品今日头条和抖音火了之后,个性化推荐就进入了大众的视野,如果我们说搜索时人找信息的话,那么推荐就是信息找人。搜索是通过用户主动输入索引信息告诉机器自己想要的东西,那么推荐的这个索引是什么才能让信息找到人呢?
第一类索引是“你的历史”,即基于你以前在平台上对某物品产生的行为(点赞,转发,评论或者收藏),寻找与你产生过相似行为的用户所喜欢的其他物品或者与你喜欢的物品相似的其他物品来为你推荐。这一基于用户行为相似的算法有:协同过滤算法、基于内容的推荐算法和基于标签的推荐算法。
基于用户的协同过滤算法是寻找与A用户有相似行为的所有B用户所喜欢的而A用户还不知道的物品推荐给A用户 。该算法包括两个步骤:
-根据用户所喜欢的物品计算用户间相似度,找到与目标用户相似的用户集合;
-找到该用户集合所喜欢的而目标用户所不知道的物品。
那么,找出一批物品以后哪个先推荐哪个后推荐?用户间相似程度大的先推荐,用户对物品的感兴趣程度大要先推荐。即假设A用户与B用户的相似程度为0.9,与C用户的相似程度为0.7,用户B喜欢物品a和物品b的程度分别为1和2,用户C喜欢物品a和物品b的程度分别为0.1和0.5,那么先推荐物品b。多个用户多个物品,只要拟定了用户间的相似度和用户对物品的感兴趣程度,即可对物品进行打分并且进行综合排序。
基于物品的协同过滤算法是根据用户行为而不是物品本身的相似度来判断物品的相似度 ,即如果物品A和物品B被很多的用户同时喜欢,那么我们就认为物品A和物品B是相似的。该算法也是包括两个步骤:
-根据用户行为计算物品间的相似度;
-根据物品的相似度和用户的历史行为给用户生成推荐列表。
与UserCF相似的是,同样会遇到推荐的先后顺序问题,那么ItemCF所遵循的原则是:物品间相似程度大的先推荐,用户对物品的感兴趣程度大要先推荐。假设用户对物品a和物品b感兴趣的程度分别为1和0.5,物品a与物品c和物品d的相似度分别为0.5和0.1,物品b与物品c和物品d的相似度分别为0.3和0.4,那么先推荐物品d。用户喜欢多个物品,并且多个物品与其他物品都有相似的情况下,只要拟定了用物品间的相似度和用户对物品的感兴趣程度,即可对物品进行打分并且进行综合排序。
协同过滤算法的核心都是通过用户行为来计算相似度,User-CF是通过用户行为来计算用户间的相似度,Item-CF是通过用户行为来计算物品间的相似度。
推荐算法很重要的一个原理是为用户推荐与用户喜欢的物品相似的用户又不知道的物品。物品的协同过滤算法是通过用户行为来衡量物品间的相似(喜欢物品A的用户中,同时喜欢物品B的用户比例越高,物品A与物品B的相似程度越高),而基于内容的推荐算法衡量则是通过物品本身的内容相似度来衡量物品间的相似。
假如,你看了东野圭吾的《解忧杂货店》,那么下次系统会给你推荐东野圭吾的《白夜行》。假设你看了小李子的《泰坦尼克号》,系统再给你推荐小李子的《荒野猎人》。
该算法与前两种不同的是,将用户和物品之间使用“标签”进行联系,让用户对喜欢的物品做记号(标签),将同样具有这些记号(标签)的其他物品认为很大程度是相似的并推荐给用户。其基本步骤如下:
统计用户最常用的标签
对于每个标签,统计最常被打过这个标签次数最多的物品
将具有这些标签最热门的物品推荐给该用户
目前,国内APP中,豆瓣就是使用基于标签的推荐算法做个性化的推荐。
第二类索引是“你的朋友”,基于你的社交好友来进行推荐,即基于社交网络的推荐。例如,微信看一看中的功能“朋友在看”就是最简单的基于社交网络的推荐,只要用户点击公众号文章的“在看”,就会出现在其好友的“朋友在看”的列表中。
复杂一点的算法会考虑用户之间的熟悉程度和兴趣的相似度来进行推荐。目前,在信息流推荐领域,基于社交网络进行推荐的最流行的算法是Facebook的EdgeRank算法,即为用户推荐其好友最近产生过重要行为(评论点赞转发收藏)的信息。
第三类索引是“你所处的环境”,基于你所处的时间、地点等上下文信息进行推荐。例如,我们看到很APP中的“最近最热门”,就是基于时间上下文的非个性化推荐;以及,美团和饿了么这些基于位置提供服务的APP中,“附近商家”这一功能就是基于用户位置进行推荐。高德地图在为用户推荐驾驶路线时,会考虑不同路线的拥堵程度、红绿灯数量等计算路线用和路程距离再进行综合排序推荐。
很多时候,基于时间上下文的推荐会协同过滤这类个性化推荐算法结合使用。例如,在使用协同过滤推荐策略的时候,会将时间作为其中一个因素考虑进入推荐策略中,最近的信息先推荐。
以上就是常见的推荐算法。作为产品人,我们不需要知道如何实现,但是我们必须知道这些推荐算法的原理,知道在什么场景下如何去做推荐才能提升推荐的效率,这才是产品经理的价值所在。
参考资料:《推荐算法实战》项亮
❻ 如何做好“推荐算法”有哪些常见的错误需要避免
在这里share一下。
1、推荐算法的构成
一套标准的推荐算法,需要四个组成部分
第一:数据源,行为基础数据的筛选;通常,推荐算法来源于用户行为的采集,简单说就是行为数据越丰富,样本覆盖率越全面,结果越准确;如果采样有偏差,那么结果就会有偏差。
举例1:游戏推荐算法,我们之前限于采样技术水平和处理能力,用的是登陆用户玩过的游戏历史,那么推荐结果就会偏重于需要登陆的游戏。而随着技术提升用全部用户玩过的游戏历史,就更全面了。
举例2:在搜索引擎中,对关键词做推荐,有两种方案,一种是基于广告主的竞价记录;另一种是基于网民的搜索行为;前一种专业性更强,噪音小;后一种覆盖面广,噪音大,各有利弊,根据业务诉求选择。
推荐算法,通常来源于用户的行为记录,比如关键词推荐用用户搜索历史,电商推荐用用户购物历史,游戏推荐用玩家玩游戏的历史,然后基于算法给出相关度,再排序展示 ;但这不绝对,也有并非基于用户行为记录的推荐原理,比如基于用户身份特征或其他地区、网络环境等特征,限于篇幅和常见的业务诉求,这里就不展开说明了。
行为基础数据必要时要做一些去除噪音的工作,比如你通过日志分析玩家游戏历史,或用户购物历史,至少知道把各搜索引擎和工具的抓取痕迹过滤出去,否则结果是很难看的。
算法很多种,网上可以搜到很多,就算搜不到,或者搜到了看不懂,自己编也不难的(我就编过,效果自以为还不错,但是的确不如人家专业的算法效果好,所以适合练手,不适合出去吹牛)
不同算法差异还是蛮大的,需要理解一下业务诉求和目标特征来选择。这个我真心不是高手,我们同事讲的算法我都没能理解,就不多说了。微博上的“张栋_机器学习"和"梁斌penny"都是算法高手,大家可以多关心他们的微博。
第三:参数!
绝对不要认为用到了好的算法就可以了!算法往往会基于一些参数来调优,这些参数哪里来?很不好意思的告诉你,大部分是拍脑袋出来的。但是你拍脑袋出来后,要知道去分析结果,去看哪里对,哪里错,哪里可以改,好的算法可以自动调优,机器学习,不断自动调整参数达到最优,但是通常可能需要你不断手工去看,去看badcase,想想是什么参数因素导致的,改一下是否变好?是否引入新的bad case?
第四:校验!
校验一种是人工做盲测,A算法,B算法的结果混淆,选案例集,看哪个效果好;或A参数、B参数混淆,同理测试。通过盲测选择认为更合理的算法、更适宜的参数.
以上是个人认为,做好推荐算法的步骤
下面说一下常见问题
1、以为有了算法就ok了,不对参数优化,不做后续的校验和数据跟踪,效果不好就说算法有问题,这种基本属于工作态度的问题了。
2、对样本数据的筛选有问题,或缺乏必要的噪音筛查,导致结果噪音多。比如你有个推广位天天摆着,导致用户点击多,然后导致后台行为数据里它和谁的关联都高,然后不管用户到哪里都推荐这个玩意,这就是没有足够筛查。
3、热度影响
我说一下最简单的推荐算法
同时选择了A和B的人数作为A与B的关联度。
这个实现最简单,也最容易理解,但是很容易受热度影响
我曾经注意过某个热门图书电商网站,推荐的关联书籍一水的热门书籍,就是这个问题。
这些是非常简单但是又非常容易出现的,关联误区。
4、过于求全
现在也遇到一些朋友,一提到推荐算法或者推荐系统,就说我这个要考虑,那个要考虑,不管是行为记录,还是用户特征,以至于各种节日效应,等等等等,想通过一个推荐系统完全搞定,目标很大,所以动作就极慢,构思洋洋洒洒做了很多,实现起来无从下手,或者难以寸进;我觉得,还是量力而行,从最容易下手的地方开始,先做到比没有强,然后根据不断地数据校验跟踪,逐渐加入其他考虑因素,步步前进,而不要一上来就定一个宏伟的庞大的目标;此外要考虑实现成本和开发周期,对于大部分技术实力没有网络,腾讯,淘宝那么强的公司而言,先把简单的东西搞好,已经足够有效了,然后在运营数据的基础上逐次推进,会越来越好;有些公司是被自己宏大的目标搞的焦头烂额,最后说,哎,没牛人搞不定啊。嗯,反正他们的目标,我显着是搞不定的。就这些,希望有所帮助
❼ 什么叫算法推荐
国家网信办、工信部、公安部、市场监管总局近日印发《互联网信息服务算法推荐管理规定》(以下简称规定),对算法推荐服务提供者作出一系列规定。比如,不得利用算法推荐服务从事危害国家安全和社会公共利益、扰乱经济秩序和社会秩序、侵犯他人合法权益等法律、行政法规禁止的活侍唯动;不得根据消费者的偏好、交易习惯等特征,利用算法在交易价格等交易条件上实施不合理的差别待遇等违法行为;应当保护劳动者取得劳动报酬、休息休假等合法权益,建立完善平台订单分配、报酬构成及支付、工作时间、奖惩等相关算法。
记者调查发现,平台涉嫌侵犯隐私推荐广告、“大数据杀熟”、盘剥劳动者的现象时有发生。
首先是个人隐私被算法利用。记者做了一个实验,将几款社交App放置后台运行,然后在相册里存下跟卷发棒产品相关的照片。
次日,某App在推荐页面里出现了关于卷发棒的短视频。
记者利用手机自带的查看隐私访问功能和第三方软件查看,发现除了位置信息外,该App还访问了手机相蠢大册,一上午就访问了6次,访问时间短则20多秒,长则1分钟。
规定明确提出,算法推荐服务提供者应当以显着方式告知用户其提供算法推荐服务的情况,并以适当方式公示算法推荐服务的基本原理、目的意图和主要运行机制等。在上述案例中,在不告知用户的情况下,访问个人手机相册且推荐广告的行为明显已越界。
其次是“大数据杀熟”老档培。同样的送餐时间、地点、订单、外卖平台,会员却比非会员多付钱;同时同地打同类型车到同一目的地,某打车平台曾被用户发现熟客反而收费更高。以上现象虽已老生常谈,但依旧有App我行我素。
不少App为鼓励新用户,会在用户刚注册后对其发放优惠券,这类做法被不少平台称之为市场促销。但有些平台新老用户的价格差异大,让老用户感觉颇为不公。
❽ 信息流的那点事:3 推荐算法是如何实现的
讲完信息流流行的原因( 信息流的那点事:2 为什么信息流如此流行 ),这一篇,我们来从产品的视角,来看看推荐算法在技术上是如何实现的。
根据需要的技术和运营成本,可以将主流的推荐算法分为三类:基于内容元数据的推荐、基于用户画像的推荐、基于协同过滤算法的推荐。
基于元数据的推荐是比较基础的推荐算法,基本原理是给内容打标签,具体元数据的选取根据的内容有所不同,比较通用的角度有内容的关键词、类型、作者、来源等,打开一款头条类app,选择屏蔽一条内容,就可以看到一些该内容的元数据颤差举。
有了内容的元数据,就可以根据内容间的关联,可以进行相关内容的推荐,喜欢看奇葩说的用户,可能也会喜欢看同是米未传媒出品的饭局的诱惑。根据内容的元数据,也可以记录并逐渐明确用户的内容偏好,进行数据积累,便于结合用户的喜好进行对应的精准推荐,这也就是下面要说的基于用户画像的推荐的内容。
用户画像,类比一下就是给用户打标签,主要由三部分组成:用户的基础数据(年龄、性别等)、应用使用数据(应用使用频率、时长等)和内容偏好数据(喜好的内容分类、种类等)。
对于基础数据,不同年龄的用户的内容偏好有很大差异,年轻人可能更喜欢新歌热歌,而中年人可能更爱听怀旧一些的歌曲;根据应用使用数据,可以进行用户分层,活跃用户可以多推荐内容促进使用,快要流失用户可以推送一些打开率较高的内容来挽回,运营活动也可以更有针对性;基于内容偏好数据,可以记录并逐渐明确用户的内容偏好,从而进行更精准的推荐,从爱看娱乐新闻,到爱看国内明星,再到爱看某个小鲜肉,随着内容偏好数据的逐步积累,头条类产品的推荐也就越精确。
协同过滤算法,简单来说,茄碧就是寻找相近的用户或内容来进行推荐,主要有基于用户的协同过滤推荐和基于项目的协同过滤推荐两种。
(1)基于用户的协同过滤推荐
基于用户的协同过滤推荐算法,就是通过算法分析出与你内容偏好相近的用户,将他喜欢的内容推荐给你,这种推荐给你志同道合的人爱看的内容的思路,更相近于生活中的朋友作为同道中人的推荐。举例来说,如果你喜欢ABC,而其他用户在和你一样喜欢ABC的同时,还都喜欢D,那么就会把D推荐给你。
(2).基于内容的协同过滤推荐
基于内容的协同过滤推荐算法,就是通过算法分析出内容和内容之间的关联度,根据你喜欢的内容推荐最相关庆迹的内容,常见的看了这个内容的用户85%也喜欢xxx,就是这种思路。举例来说,如果你喜欢A,而喜欢A的用户都喜欢B,那么就会把B推荐给你。
相比于纯粹的基于内容元数据的推荐,基于内容的协同过滤推荐更能发现一些内容间深层次的联系,比如罗辑思维经常推荐各种内容,仅仅根据内容元数据来推荐,一集罗辑思维最相关的应该是另外一集,并不能推荐内容元数据相关性不太大的节目里推荐的内容;但由于可能很多用户看完后都会搜索查看节目里推荐的内容,基于内容的协同过滤推荐就会发现两者的相关性,进行推荐。
介绍推荐算法的思路时,我们一直谈到一个词“内容偏好”,这也就是实现推荐算法时一个核心的问题——需要通过怎样的数据,才能判定用户的内容偏好?主流的思路有一下三种:
让用户手动选择,显然是最简单的思路,然而由于选择的空间必然有限,只能让用户从几个大类中间挑选,无法涵盖全部内容的同时,粒度过大推荐也就很难精准。而且刚打开应用就让用户选择,或者是让用户使用一段时间后在去补充选择,这样的操作都太重可能造成用户流失。
既然手动选择很难实现,我们就需要从用户的使用数据中挖掘,主流的思路就是根据用户一些主动操作来判断,点击阅读了就说明喜欢,点了赞或者回复分享就是特别喜欢,如果跳过了内容就减少推荐,点击了不感兴趣,就不再推荐。
根据用户使用的操作来判断内容偏好,在不断地使用中积累与细化数据,对内容偏好的判断也就越来越准确,这就是头条系应用的主要策略,这样的策略对于下沉市场的不愿做出主动选择的沉默用户,是一个非常适合的策略,但这样只看点击与操作,不关注内容实际质量的策略也会造成标题党、内容低俗等问题,在后文会进一步介绍。
既然选择不能完全代表用户的内容偏好,如何使判断更加精准呢?就要从一些更加隐性的数据入手了,比如对于文章,除了点击,阅读时间,阅读完成度,是否查看文章的相关推荐内容,都是可以考虑的角度,相比纯粹的点击判断,可以一定程度上解决标题党的问题。再比如看视频,如果快进次数过多,虽然看完了,可能也不是特别感兴趣,而值得反复回看的内容,命中内容偏好的几率就相对较高。
介绍完了推荐算法的原理与数据来源,让我们来试着还原一下一条内容的完整分发流程。
首先,是内容的初始化与冷启动。可以通过算法对内容进行分析提取或者人工处理,提取内容的来源、分类、关键词等元数据,再根据用户画像计算内容兴趣匹配度,分发给有对应内容偏好的用户,,也可以通过内容原匹配度,向关系链分发,完成内容的冷启动。
然后,可以根据用户阅读时间,阅读完成度,互动数等数据,对该内容的质量进行分析,相应的增加或者减少推荐,实现内容动态分发调节。
最后,就是协同过滤算法发挥作用的时间,对于优质内容,可以通过基于用户的协同过滤推荐,推荐给与该内容受众有类似爱好的用户,也可以基于项目的协同过滤推荐,推荐给爱观看同类内容的用户,让优质内容的传播不在局限于关系链。
在真正的推荐算法实现过程中,除了基础的内容原匹配度,内容匹配度和内容质量,还有很多值得考虑的问题,比如新闻通知等时效性内容就要短时间加权,超时则不推荐;对于用户的内容偏好也不能永远维持,随着时间用户可能会喜欢新的内容,如果一定时间内用户对以前喜欢的内容不感兴趣,就要减少该种类推荐;还有为了不陷入越喜欢越推荐,最后全部是一种内容,让用户厌烦的境地,对于用户的偏好也要设定一个上限;为了保持新鲜度,需要帮助用户发现他可能喜欢的新内容.....
最后,通过数据可以了解我们如何阅读这篇文章,但任何数据都无法准确描述我们阅读后的感受与收获;再高级的算法也只是算法,它虽然可能比我们更了解我们实际的的内容偏好,但无法了解到我们对于内容的追求。
这可能也就是头条系产品虽然收获了巨大成功,但也收到了标题党、低俗化、回音室效应等指责的原因,下一篇,让我们来聊聊,信息流产品的面临的问题与可能的解决方法。
❾ 第十章 数据推荐算法——推荐算法与效果评价
不同应用场景中推荐算法的评估方式不一定相同,主要集中在五个方面:
1、准确率、召回率及覆盖率评价
2、流行度与多样性评价
3、推荐结果序列评价
4、新颖性与创新评价
5、用户满意度
对于推荐算法,很多企业也在不断地通过用户画像的方式刻画用户特征,从而不断改进推荐系统。通过用户画像的方式可以有效地解决基棚如下三个方面的问题:
1、通过各个渠道绘制用户画像,可以较好地解决冷启动问题。
2、通过用户画像可以丰富完整的用户桥搜特征信息,为更广泛的推荐提供信息基础。
3、构建更加丰富完整的用户特征信息,为更广泛的推荐提供信息基础。
推荐算法与关联规则分析在某种程度上相似,都利用了大众用户的行为记录,关联性规则分析也可以用于辅助推荐,它们之间的差异:
1、推荐算法尤其是协同过滤推荐是基于一种间接性的推荐;而关联规则分析则是对直接性的分析。
2、推荐算法的推荐过程比较复杂,不仅与物品本身属性有关,还与个人的喜好兴趣有很大关系;而关联规则分析过程与个人的喜好或者兴趣无关,更多地倾向于基于大敏锋历众用户的行为分析物品之间的潜在关系。