--- layout: default ---

推荐系统入门

"Foodie背后的核心技术"

Posted by Xz Yao on June 30, 2016

这可能是我新挖的坑里最大的一个了。关于推荐系统的文章我也会努力一直更新下去。挖坑无尽,学习不止。

推荐系统很早就有了。比如在我们使用淘宝、Amazon、京东的时候,背后都有着推荐系统的支持。不夸张地说,推荐系统已经是他们的一个核心组件了。

最近我打算买一个杯子来做水果茶,这是亚马逊推荐给我的结果。 1.png

从推荐的角度上来看,搜索引擎也有一部分推荐的特性,它根据用户搜索的关键字来进行推荐。但与搜索引擎不同的是,推荐引擎试图展示的内容不一定与关键词有着强联系,其返回的结果可能我们都没有听说过。

推荐引擎也往往和个性化联系在一起。以网易云音乐为例,如果能够准确地告诉用户有哪些电影与用户喜欢的某一首音乐类似,就可以方便用户找到更多感兴趣的音乐。这可以极大地提升用户的体验、参与度和app对用户的吸引力。

适用场景

推荐引擎很适用于以下两种情景。

  1. 可选项众多。以京东为例,京东上有数以百万计的商品。如果用户知道他们想要什么,那搜索引擎就可以解决问题。但很多时候用户并不知道他们想要什么,他们只是想“逛一逛,看一看”。这种情况下,推荐引擎可以帮助用户知道一些事先不知道的物品,帮助他们发现新的物品。

  2. 个人喜欢非常重要的情况。例如网易云音乐,这种情形下,用户主要根据个人喜好来选择商品(即音乐),这种时候推荐引擎可以利用集体智慧,根据其他有类似喜好的用户的信息来帮助他们发现所需物品。

分类

推荐引擎的研究很早就开始了。也有很多种设计方法。主要来看有三种:

  1. 基于用户的过滤(协同过滤)
  2. 基于内容的过滤
  3. 混合推荐算法

除此之外,还有一些排名模型等近期也比较火热。在实际的工程中,方案的选取往往是多样性的,即将多种方法的元素合并到一个模型中来。

基于内容的过滤

顾名思义,基于内容的过滤就是考虑物品的内容,换句话说就是物品的属性信息,结合相似度定义,来找出与当前物品相似的产品。这些属性通常使一些文本、数字,如果是多媒体的话,则还有可能是一些从音频或视频中提取出的属性,例如音乐的流派、歌手、风格等。

亚马逊的“可能喜欢的产品”就是比较典型的这样一种推荐,根据我所购买的产品来进行这样一种推荐。

这种推荐方式,我们只需要输入一个物品就好了,不需要用户的相关信息。因此这种类型的产品往往不会出现冷启动的问题。哪怕只有一个用户,也可以实现推荐。但是反过来说,这种推荐方式也非常的单一,比较难出现变化。举个例子,当我在亚马逊上买了杯子之后,我有很大可能不再买杯子了,反而可能买一些茶叶、水果之类的。但是基于物品的推荐就比较难实现这个。

基于用户的过滤(协同过滤)

同样是顾名思义,协同过滤(Collaborative Filtering),也就意味着是利用用户之间的联系来进行过滤的一种方式。它利用大量已有的用户偏好来估计用户对其未接触过的物品的喜好程度。

在这种方法中,如果两个用户表现出相似的偏好(也就是对相同物品的偏好大体相同),就认为他们的兴趣类似。当有一个用户id的时候,就选取若干个与其类似的用户,并根据他们的喜好来综合给各个物体打分,再根据得分的高低来推荐物品。背后的逻辑是:和你相似的用户也偏好这些物品,那么你也很有可能偏好这些物品。

这种推荐方法存在的问题刚好和第一种相反,存在冷启动的问题。当app刚上线,没有那么多用户的时候,这种推荐的算法自然就失效了。但也解决了多样性的问题。举个例子,当我在亚马逊上买了杯子之后,很多和我口味相同的用户买了绿茶,于是给我推荐绿茶。这个时候我就很有可能买账。