推荐算法简介目前的推荐算法一般分为四类:协同过滤推荐算法基于内容的推荐算法混合推荐算法人气推荐算法协同过滤推荐算法协同过滤推荐算法应该算是应用最广泛的推荐算法之一。它通过用户的历史数据构建“用户相似度矩阵”和“产品相似度矩阵”,向用户推荐相关商品,从而达到准确满足用户喜好的目的。比如亚马逊等电商网站上的“买了XXX的人也买了XXX”就是协同过滤算法的应用。Content-basedrecommendationalgorithmContent-basedrecommendationalgorithm基于内容的推荐算法是在对物品的名称和介绍进行分词后,提取TF-IDF值较大的词作为特征词,然后在此基础上构建与该物品相关的特征向量基础。根据余弦相似度计算相关性,构建相似度矩阵。混合推荐算法混合推荐算法很容易理解。是对其他算法推荐的结果赋予不同的权重,然后再推荐最终的综合结果的一种方法。比如上面提到的三种方法,协同过滤算法中的基于用户和基于物品的协同过滤推荐,以及基于内容的推荐算法;而混合推荐算法将这三种推荐结果分配给不同的例如基于用户的协同过滤的权重为40%,基于项目的协同过滤的权重为30%,基于内容的过滤技术的权重为30%,然后综合计算得到最终的推荐结果。人气推荐算法很基础,看名字就知道了。该方法是对项目使用某种形式的流行度度量,例如最多下载或购买,然后将这些流行的项目推荐给新用户。类似于我们经常看到的热门商品、热门推荐。推荐算法在实践中的应用分析了解了一般原理后,可以看看推荐算法在实际场景中是如何使用的。(提前声明,这只是我自己看了相关的东西后,根据自己的理解推测出来的,如有不妥,请放下手中的刀……)好了,开始吧,我们来说说协同过滤算法在实践中的应用。协同过滤算法协同过滤算法通常如何工作?我们先来看看图书推荐中的做法:协同过滤(CF)大致可以分为两类:一类是基于邻域的推荐,一类是基于模型的推荐;neighborhood方法是利用用户对现有物品的偏好来推断用户对新物品的偏好。相比之下,基于模型的方法使用历史行为数据来根据学习的预测模型来预测对新项目的喜好。通常的做法是使用机器学习算法来弄清楚用户和物品的交互模型,从而在数据中找到特定的模式。(由于不太了解model-based的方法,所以暂时不解释,有兴趣的可以参考相关资料)【基于邻域的推荐】——即构造一个用户相似度矩阵和产品相似度矩阵。图片被喜欢并相应评分。情况如下:不同的书代表不同的维度,score代表特征向量在这个维度上的投影长度。余弦相似度可以判断用户之间的相似度。基于相似度可以建立用户相似度矩阵:显然,可以根据用户对历史书籍的评分,得到用户对历史书籍的偏好。在此基础上,可以构造用户特征向量来判断两个用户是否对书籍口味的相似程度,进而可以认为如果A和B比较相似,则可以认为A喜欢的书B也喜欢它。在向用户A推荐书籍时,找到与其相似度高的其他用户,然后剔除用户A读过的书籍,结合相似用户对某本书的喜好程度与用户与用户A的相似度来加权,则推荐指数高的书籍优先推荐。这应该也是豆瓣等图书社区使用的推荐算法之一,利用用户之间的相似度来进行推荐。当然,电影推荐也是如此。同理,反过来我们可以根据相似的方向构造以用户为维度的item的特征向量。当我们需要判断两本书是否相似时,需要看评价过两本书的用户构成是否相似,即用评价过一本书的用户向量(或数组)来表示这本书;也就是说,如果用户对两本书的评价重合度很高,就可以认为这两本书相似度很高。其实就是借用了用户相似度的基础。(《白话大数据与机器学习》中也提到了类似的推荐算法,有兴趣的同学可以找找看)。协同过滤算法也用于音乐推荐。比较知名的采用个性化推荐的音乐APP应该是“网易云音乐”比较典型。那么我们再来看看网易云音乐的推荐算法。首先,用户过去有听歌的历史。由于音乐没有相关的评分机制,可以根据用户对音乐的行为建立一个偏好模型,例如:喜欢-5分,加入歌单-4分,单曲循环-3分,分享-5分,听一遍删-0分(本来想说负分很恶心)。这样一来,大概就有了一个喜欢的列表,那么就可以根据用户的收听情况,建立用户的特征向量,接下来的推荐就顺利完成了。当然,基于协同过滤算法的用户相似度矩阵算法应该只是网易云采用的一种推荐方式,接下来会提到另一种方式。值得注意的是,虽然协同过滤推荐算法应用广泛,推荐效果较好,但仍存在一些不足:协同过滤算法(CF)推荐存在流行度偏差,因为协同过滤算法是基于惯性建议基于数据。热门商品由于关注的用户数量多,产生大量数据,可以建立更有效的推荐机制;对于小众或长尾产品(没有人用过或评价过),无法有效推荐;冷启动问题(也称为新用户问题,或推荐新物品的问题),也是由于缺乏惯性数据,导致一开始无法建立推荐算法;此类问题可以通过流行度算法来确定。度的求解,当然也可以使用基于内容的推荐算法来求解(后面会提到)。基于内容过滤算法的介绍中已经提到了基于内容过滤算法的基本原理,这里不再赘述。简单说说它的使用方法吧。基于内容的过滤方法类似于协同过滤中建立用户相似度矩阵的方法。两者都使用特征向量进行余弦相似度计算,以确定项目的相似度。首先,利用分词技术对书名和内容进行处理,去除权重为0的词(如get、place等);然后,将TF-IDF值较大的词作为特征词,提取出来作为标签;然后,根据特征词建立图书的特征向量;最后,计算不同书籍之间的余弦相似度,建立书籍之间的相似度矩阵;基于内容的协同过滤算法,最重要的第一步是将标题和介绍通过分词技术处理,形成特征标签。例如,对于书籍和电影,可以从名称和介绍中提取特征词,构建特征向量;当然在豆瓣上可以找到更省事的方法,就是让用户在评价作品的时候查看相关标签,这样只要有足够的不同类型的标签供用户选择即可(当然这是我的猜测);那么音乐推荐呢?没有相关介绍,歌名指向性不够。在这种情况下,可以将音乐本身的类别作为标签来构造特征向量,例如:民谣、摇滚、怀旧等;我猜这也是网易云音乐采用的推荐方式。至于像36氪这样的资讯网站,用的是什么推荐算法,大家可以有一定的了解,原理也差不多。由于基于内容的推荐不需要太多的惯性数据,可以部分解决冷启动问题和流行度偏差问题,即弥补协同过滤算法的一些不足,所以两者也可以结合使用,比如作为混合推荐算法采用这样的方法;其次需要注意的是,如果单纯使用基于内容的过滤算法,会出现过度专业化的问题,导致推荐列表中出现的大多是同类型的东西,有的小伙伴可能也会有类似的现象被观察到。比如亚马逊买什么书(比如java相关的),你会发现推荐的书都是java相关的,因为过度专业化的现象。结论推荐算法的原理其实是根据数学原理(向量、余弦相似度等)来解决的。贝叶斯算法是将人类能够理解的情感问题转化为基本的概率问题并加以解决,包括自然语言处理(NLP)和语音识别。由此,你才能真正体会到数学的博大精深。作为初级产品王,从算法原理的角度去理解一些实际问题是很有帮助的。当然,具体的入门级还需要开发同学的大力协助。
