推荐系统 订阅
推荐系统是利用 [1]  电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。随着电子商务规模的不断扩大,商品个数和种类快速增长,顾客需要花费大量的时间才能找到自己想买的商品。这种浏览大量无关的信息和产品过程无疑会使淹没在信息过载问题中的消费者不断流失。为了解决这些问题,个性化推荐系统应运而生。个性化推荐系统是建立在海量数据挖掘基础上的一种高级商务智能平台,以帮助电子商务网站为其顾客购物提供完全个性化的决策支持和信息服务。 展开全文
推荐系统是利用 [1]  电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。随着电子商务规模的不断扩大,商品个数和种类快速增长,顾客需要花费大量的时间才能找到自己想买的商品。这种浏览大量无关的信息和产品过程无疑会使淹没在信息过载问题中的消费者不断流失。为了解决这些问题,个性化推荐系统应运而生。个性化推荐系统是建立在海量数据挖掘基础上的一种高级商务智能平台,以帮助电子商务网站为其顾客购物提供完全个性化的决策支持和信息服务。
信息
外文名
Recommender system
定    义
电商网站向客户提供商品信息建议
中文名
推荐系统
应    用
电子商务
推荐系统背景简介
互联网的出现和普及给用户带来了大量的信息,满足了用户在信息时代对信息的需求,但随着网络的迅速发展而带来的网上信息量的大幅增长,使得用户在面对大量信息时无法从中获得对自己真正有用的那部分信息,对信息的使用效率反而降低了,这就是所谓的 [2]  信息超载(informationoverload)问题。解决信息超载问题一个非常有潜力的办法是 [3]  推荐系统,它是根据用户的信息需求、兴趣等,将用户感兴趣的信息、产品等推荐给用户的个性化信息推荐系统。和搜索引擎相比推荐系统通过研究用户的兴趣偏好,进行个性化计算,由系统发现用户的兴趣点,从而引导用户发现自己的信息需求。一个好的推荐系统不仅能为用户提供个性化的服务,还能和用户之间建立密切关系,让用户对推荐产生依赖。推荐系统现已广泛应用于很多领域,其中最典型并具有良好的发展和应用前景的领域就是电子商务领域。同时学术界对推荐系统的研究热度一直很高,逐步形成了一门独立的学科。 推荐系统有3个重要的模块:用户建模模块、推荐对象建模模块、推荐算法模块。通用的推荐系统模型流程如图。推荐系统把用户模型中兴趣需求信息和推荐对象模型中的特征信息匹配,同时使用相应的推荐算法进行计算筛选,找到用户可能感兴趣的推荐对象,然后推荐给用户。
收起全文
精华内容
下载资源
问答
  • 推荐系统

    千次阅读 2018-01-22 16:22:19
    - 推荐系统在电子商务领域得到普遍的运用 - 推荐系统本质是销售的一部分 - 在便利店,推荐系统是导购牌,类目货架,是老板娘 - 在超市,推荐系统是导购牌,类目货架,是销售员 在电商,推荐系统是什么? ...

    序言:
    - 推荐系统在电子商务领域得到普遍的运用
    - 推荐系统本质是销售的一部分
    - 在便利店,推荐系统是导购牌,类目货架,是老板娘
    - 在超市,推荐系统是导购牌,类目货架,是销售员

    在电商,推荐系统是什么?
    不管在便利店,还是超市,或者电商网站,本质上解决两个问题:
    1.帮助用户获得想要的商品
    A、用户知道自己想要什么商品,在什么位置 用户主动的行为
    直接到货架区域去挑选商品,直接询问销售员商品在哪里
    B、用户不知道自己想要什么,比如:逛街兴致。 用户被动的行为
    2.帮助商家卖出更多的商品—商品的质量
    所有商家中同质同量的商品比较多,如何让不同商家的利益得到保证。
    在线下,哪个厂家的商品好卖,我就多进点货。在同等质量保证的而前提下,关系户的货物。
    在线上,由于电商网站的利润一般是抽取销售额提成,只有更多的商家参与,才能做大市场和品牌

    推荐系统是什么?
    为了解信息过载和用户无名却需求的问题,找到用户感兴趣的物品,才有个性推荐系统.其实解决信息过载问题,代表性的解决方案是分类目录和搜索引擎.如hao123,电商首页的分类目录以及百度,360搜索等。,不过分类目录设搜索引擎只能解决用户主动查找信息,即用户知道自己想要什么,并不能解决用户没有明确需求很随便的问题.经典语录是:你想吃什么,随便!面对这种很随便又得罪不起的用户(女友和上帝),只能通过分析用户的历史行为给用户的兴趣建模,从而主动给用户推荐能够满足他们兴趣和需求的信息。比如问问女友的闺蜜,她一般什么时候喜欢吃什么。
    这里写图片描述

    推荐系统广泛存在于各类网站中,作为一个应用为用户提供个性化的推荐。它需要一些用户的历史数据,一般由三个部分组成: 基础数据.推荐算法系统,前台展示.**基础数据包括很多维度,包括用户的访问,浏览,下单,收藏,用户的历史订单信息,评价信息等很多信息;推荐算法系统主要根据不同的推荐诉求,由多个算法组成的推荐模型;前台展示主要是对客户端系统进行响应,返回相关的推荐信息以供展示**
    基础数据主要包括:
    

    - 要推荐物品或内容的元数据,例如关键字,基因描述等;
    - 系统用户的基本信息,例如性别,年龄等
    - 用户对物品或者信息的偏好,根据应用本身的不同,可能包括用户对物品的评分,用户查看物品的记录,用户的购买记录等。

    推荐引擎的分类:
    推荐引擎的分类可以根据很多指标进行分区:
    - 根据目标用户进行区分:根据这个指标可以分为基于大众行为的推荐引擎和个性化推荐引擎。
    1. 根据大众行为的推荐引擎,对每个用户都给出同样的推荐,这些推荐可以是静态的由系统管理员人工设定的,或者基于系统所有用户的反馈统计计算出的当下比较流行的物品。
    2. 个性化推荐引擎,对不同的用户,根据他们的口味和喜好给出更加精确的推荐,这时,系统需要了解需推荐内容和用户的特质,或者基于社会化网络,通过找到与当前用户相同喜好的用户,实现推荐。
    这是一个最基本的推荐引擎分类,其实大部分人们讨论的推荐引擎都是将个性化的推荐引擎,因为从根本上说,只有个性化的推荐引擎才是更加智能的信息发现过程。

    • 根据数据源区分: 主要是根据数据之间的相关性进行推荐,因为大部分推荐引擎的工作原理还是基于物品或者游湖的相似进行推荐.
      根据系统用户的基本信息发现用户的相关程度,这种被称为基于人口统计学的推荐(Demographic-based Recommendation)
      根据推荐物品或内容的元数据,发现物品或者内容的相关性,这种被称为基于内容的推荐(Content-based Recommendation)
      根据用户对物品或者信息的偏好,发现物品或者内容本身的相关性,或者是发现用户的相关性,这种被称为基于协同过滤的推荐(Collaborative Filtering-based Recommendation)。
    • 根据推荐模型进行分区: 可以想象在海量物品和用户的系统中,推荐引擎的计算量相当大的,要实现实时的推荐务必需要建立一个推荐系统.关于推荐模型的建立方式可以分为以下几种:
      基于物品和用户本身的,这种推荐引擎将每个用户和每个物品都当作独立的实体,预测每个用户对于每个物品的喜好程度,这些信息往往 是用一个二维矩阵描述的。由于用户感兴趣的物品远远小于总物品的数目,这样的模型导致大量的数据空置,即我们得到的二维矩阵往往是一个很大的稀疏矩阵。同 时为了减小计算量,我们可以对物品和用户进行聚类, 然后记录和计算一类用户对一类物品的喜好程度,但这样的模型又会在推荐的准确性上有损失。
      基于关联规则的推荐(Rule-based Recommendation):关联规则的挖掘已经是数据挖掘中的一个经典的问题,主要是挖掘一些数据的依赖关系,典型的场景就是“购物篮问题”,通过关联规则的挖掘,我们可以找到哪些物品经常被同时购买,或者用户购买了一些物品后通常会购买哪些其他的物品,当我们挖掘出这些关联规则之后,我们可以基于这些规则给用户进行推荐。
      基于模型的推荐(Model-based Recommendation):这是一个典型的机器学习的问题,可以将已有的用户喜好信息作为训练样本,训练出一个预测用户喜好的模型,这样以后用户在 进入系统,可以基于此模型计算推荐。这种方法的问题在于如何将用户实时或者近期的喜好信息反馈给训练好的模型,从而提高推荐的准确度。

    常见的推荐算法:
    迄今为止,在个性化推荐系统中,协同过滤技术是应用最成功的技术.目前国内许多大型网站应用这项技术为用户更加智能的推荐内容:
    1.基于用户的系统过滤算法
    第一代协同过滤技术是基于用户的协同过滤算法,基于用户的系统过虑算法在推荐系统中获得极大的成功,但它有一定的局限性.因为基于用户的协同过滤算法先计算的是用户与用户的相似度,然后将相似度比较的用户A购买的物品推荐给B用户.专业的说法是该算法用最近邻居(nearest-neighbor)算法找出一个用户的邻居集合,该集合的用户和该用户有相似的喜好,算法根据邻居的偏好对该用户进行预测。基于用户的推荐逻辑有两个逻辑问题;冷启动与计算量巨大.基于用户的算法只有已经被用户选择购买的物品才有机会推荐给其它用户.在大型电商网站上来讲,商品的数量实在是太多了,没有被相当数量的用户购买的物品实在是太多了,直接导致没有机会推荐给用户了,这个问题被称之为协同过滤的“冷启动”。
    这里写图片描述
    2. 基于物品的协同过滤算法
    第二代协同过滤技术是基于物品的协同过滤算法,基于物品的协同过滤算法与基于用户的协同过滤算法基本类似。他使用所有用户对武平或者信息的偏好,发现武平的和物品之间的相似度.
    这里写图片描述
    3. 基于人口统计学的推荐
    基于人口统计学的推荐机制(Demographic-based Recommendation)是一种罪易于事项的推荐算法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户。基于人口统计学的推荐机制的好处在于:因为不使用当前用户对物品的喜好历史数据,所以对于新用户来讲没有“冷启动(Cold Start)”的问题。这个方法不依赖于物品本身的数据,所以这个方法在不同物品的领域都可以使用,它是领域独立的
    - 基于内容的推荐:
    基于内容的推荐是在推荐引擎出现之初应用最为广泛的推荐机制,,它的核心思想是根据推荐武平或内容的元数据,发现物品或者内容的相关性,发现物品或者内容的相关性,然后基于用户以往的喜好记录.
    但也存才几个问题:

    • 需要对物品进行分析和建模,推荐的质量依赖于对物品模型的完整和全面的程度.
    • 物品的相似度的分析仅仅依赖物品本身的特征,这里没有考虑人对物品的态度
    • 因为需要基于用户以往的喜好历史做出推荐,所以对于新用户有“冷启动”的问题。

      4.混合的推荐机制:
      在现行的 Web 站点上的推荐往往都不是单纯只采用了某一种推荐的机制和策略,他们往往是将多个方法混合在一起,从而达到更好的推荐效果。关于如何组合各个推荐机制,这里讲几种比较流行的组合方法。

    • 加权的混合:

    • 切换的混合:
    • 分区的混合:
    • 分层的混合:
    • 推荐系统引用场景
      Amazon 利用可以记录的所有用户在站点上的行为,根据不同数据的特点对它们进行处理,并分成不同区为用户推送推荐:

    • 今日推荐:通常是根据用户的近期的历史购买后者查看记录,结合当下流行的武平给出得到一折中的推荐.

    • 新产品推荐:采用了基于内容的推荐机制,将一些的新的武平推荐给用户.在方法选择上由于新物品没有大量的用户喜好信息,所以基于内容的推荐能很好的解决这个“冷启动”的问题。
    • 捆绑销售:采用数据挖掘技术对用户的购买行为进行分析,找到经常被一起或同一个人购买的物品集,进行捆绑销售,这是一种典型的基于项目的协同过滤推荐机制
    • 别人购买 / 浏览的商品 (Customers Who Bought/See This Item Also Bought/See): 这也是一个典型的基于项目的协同过滤推荐的应用,通过社会化机制用户能更快更方便的找到自己感兴趣的物品。

    数据的减噪和归一化:
    收集了用户的行为数据,我们还需要进一步的预处理,其核心的工作就是 减噪和归一化。
    减噪:用户行为数据是用户在使用应用过程中产生的,它可能存在大量的噪音和用户的误操作,我们可以通过经典的数据挖掘算法过滤掉行为数据中的噪音,这样可以是我们的分析更加精确。
    归一化:如前面讲到的,在计算用户对物品的喜好程度时,可能需要对不同的行为数据进行加权。但可以想象,不同行为的数据取值可能相差很 大,比如,用户的查看数据必然比购买数据大的多,如何将各个行为的数据统一在一个相同的取值范围中,从而使得加权求和得到的总体喜好更加精确,就需要我们 进行归一化处理。最简单的归一化处理,就是将各类数据除以此类中的最大值,以保证归一化后的数据取值在 [0,1] 范围中。
    进行的预处理后,根据不同应用的行为分析方法,可以选择分组或者加权处理,之后我们可以得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是 [0,1] 或者 [-1, 1] 的浮点数值。
    找到相似的用户或物品
    当已经对用户行为进行分析得到用户喜好后,我们可以根据用户喜好计算相似用户和物品,然后基于相似用户或者物品进行推荐,这就是最典型的 CF 的两个分支:基于用户的 CF 和基于物品的 CF。这两种方法都需要计算相似度。

    展开全文
  •  最近因为PAC平台自动化的需求,开始探坑推荐系统。这个乍一听去乐趣无穷的课题,对于算法大神们来说是这样的:    而对于刚接触这个领域的我来说,是这样的:    在深坑外围徘徊了一周后,我整理了一些...

      ◆ ◆ ◆

      序言

      最近因为PAC平台自动化的需求,开始探坑推荐系统。这个乍一听去乐趣无穷的课题,对于算法大神们来说是这样的:

      

      而对于刚接触这个领域的我来说,是这样的:

      

      在深坑外围徘徊了一周后,我整理了一些推荐系统的基本概念以及一些有代表性的简单的算法,作为初探总结,也希望能抛砖引玉,给同样想入坑的伙伴们提供一些思路。

      ◆ ◆ ◆

      什么是推荐系统

      1. 什么是推荐系统?

      推荐系统是啥?

      如果你是个多年电商(剁手)党,你会说是这个:

      

      如果你是名充满文艺细胞的音乐发烧友,你会答这个:

      

      如果你是位活跃在各大社交平台的点赞狂魔,你会答这个:

      

      没错,猜你喜欢、个性歌单、热点微博,这些都是推荐系统的输出内容。从这些我们就可以总结出,推荐系统到底是做什么的。

      目的1. 帮助用户找到想要的商品(新闻/音乐/……),发掘长尾

      帮用户找到想要的东西,谈何容易。商品茫茫多,甚至是我们自己,也经常点开淘宝,面对眼花缭乱的打折活动不知道要买啥。在经济学中,有一个著名理论叫长尾理论(The Long Tail)。

      

      套用在互联网领域中,指的就是最热的那一小部分资源将得到绝大部分的关注,而剩下的很大一部分资源却鲜少有人问津。这不仅造成了资源利用上的浪费,也让很多口味偏小众的用户无法找到自己感兴趣的内容。

      目的2. 降低信息过载

      互联网时代信息量已然处于爆炸状态,若是将所有内容都放在网站首页上用户是无从阅读的,信息的利用率将会十分低下。因此我们需要推荐系统来帮助用户过滤掉低价值的信息。

      目的3. 提高站点的点击率/转化率

      好的推荐系统能让用户更频繁地访问一个站点,并且总是能为用户找到他想要购买的商品或者阅读的内容。

      目的4. 加深对用户的了解,为用户提供定制化服务

      可以想见,每当系统成功推荐了一个用户感兴趣的内容后,我们对该用户的兴趣爱好等维度上的形象是越来越清晰的。当我们能够精确描绘出每个用户的形象之后,就可以为他们定制一系列服务,让拥有各种需求的用户都能在我们的平台上得到满足。

      ◆ ◆ ◆

      推荐算法

      算法是什么?我们可以把它简化为一个函数。函数接受若干个参数,输出一个返回值。

      

      算法如上图,输入参数是用户和item的各种属性和特征,包括年龄、性别、地域、商品的类别、发布时间等等。经过推荐算法处理后,返回一个按照用户喜好度排序的item列表。

      推荐算法大致可以分为以下几类[1]:

    • 基于流行度的算法

    • 协同过滤算法

    • 基于内容的算法

    • 基于模型的算法

    • 混合算法

      2.1 基于流行度的算法

      基于流行度的算法非常简单粗暴,类似于各大新闻、微博热榜等,根据PV、UV、日均PV或分享率等数据来按某种热度排序来推荐给用户。

      

      这种算法的优点是简单,适用于刚注册的新用户。缺点也很明显,它无法针对用户提供个性化的推荐。基于这种算法也可做一些优化,比如加入用户分群的流行度排序,例如把热榜上的体育内容优先推荐给体育迷,把政要热文推给热爱谈论政治的用户。

      2.2 协同过滤算法

      协同过滤算法(Collaborative Filtering, CF)是很常用的一种算法,在很多电商网站上都有用到。CF算法包括基于用户的CF(User-based CF)和基于物品的CF(Item-based CF)。

      基于用户的CF原理如下:

    1. 分析各个用户对item的评价(通过浏览记录、购买记录等);

    2. 依据用户对item的评价计算得出所有用户之间的相似度;

    3. 选出与当前用户最相似的N个用户;

    4. 将这N个用户评价最高并且当前用户又没有浏览过的item推荐给当前用户。

      示意图如下:

      

      基于物品的CF原理大同小异,只是主体在于物品:

    1. 分析各个用户对item的浏览记录。

    2. 依据浏览记录分析得出所有item之间的相似度;

    3. 对于当前用户评价高的item,找出与之相似度最高的N个item;

    4. 将这N个item推荐给用户。

      示意图如下:

      

      举个栗子,基于用户的CF算法大致的计算流程如下:

      首先我们根据网站的记录计算出一个用户与item的关联矩阵,如下:

      

      

      图中,行是不同的用户,列是所有物品,(x, y)的值则是x用户对y物品的评分(喜好程度)。我们可以把每一行视为一个用户对物品偏好的向量,然后计算每两个用户之间的向量距离,这里我们用余弦相似度来算:

      

      然后得出用户向量之间相似度如下,其中值越接近1表示这两个用户越相似:

      

      最后,我们要为用户1推荐物品,则找出与用户1相似度最高的N名用户(设N=2)评价的物品,去掉用户1评价过的物品,则是推荐结果。

      基于物品的CF计算方式大致相同,只是关联矩阵变为了item和item之间的关系,若用户同时浏览过item1和item2,则(1,1)的值为1,最后计算出所有item之间的关联关系如下:

      

      我们可以看到,CF算法确实简单,而且很多时候推荐也是很准确的。然而它也存在一些问题:

    1. 依赖于准确的用户评分;

    2. 在计算的过程中,那些大热的物品会有更大的几率被推荐给用户;

    3. 冷启动问题。当有一名新用户或者新物品进入系统时,推荐将无从依据;

    4. 在一些item生存周期短(如新闻、广告)的系统中,由于更新速度快,大量item不会有用户评分,造成评分矩阵稀疏,不利于这些内容的推荐。

      对于矩阵稀疏的问题,有很多方法来改进CF算法。比如通过矩阵因子分解(如LFM),我们可以把一个nm的矩阵分解为一个nk的矩阵乘以一个k*m的矩阵,如下图:

      

      这里的k可以是用户的特征、兴趣爱好与物品属性的一些联系,通过因子分解,可以找到用户和物品之间的一些潜在关联,从而填补之前矩阵中的缺失值。

      2.3 基于内容的算法

      CF算法看起来很好很强大,通过改进也能克服各种缺点。那么问题来了,假如我是个《指环王》的忠实读者,我买过一本《双塔奇兵》,这时库里新进了第三部:《王者归来》,那么显然我会很感兴趣。然而基于之前的算法,无论是用户评分还是书名的检索都不太好使,于是基于内容的推荐算法呼之欲出。

      举个栗子,现在系统里有一个用户和一条新闻。通过分析用户的行为以及新闻的文本内容,我们提取出数个关键字,如下图:

      

      将这些关键字作为属性,把用户和新闻分解成向量,如下图:

      

      之后再计算向量距离,便可以得出该用户和新闻的相似度了。这种方法很简单,如果在为一名热爱观看英超联赛的足球迷推荐新闻时,新闻里同时存在关键字体育、足球、英超,显然匹配前两个词都不如直接匹配英超来得准确,系统该如何体现出关键词的这种“重要性”呢?这时我们便可以引入词权的概念。在大量的语料库中通过计算(比如典型的TF-IDF算法),我们可以算出新闻中每一个关键词的权重,在计算相似度时引入这个权重的影响,就可以达到更精确的效果。

      sim(user, item) = 文本相似度(user, item) * 词权

      然而,经常接触体育新闻方面数据的同学就会要提出问题了:要是用户的兴趣是足球,而新闻的关键词是德甲、英超,按照上面的文本匹配方法显然无法将他们关联到一起。在此,我们可以引用话题聚类:

      

      利用word2vec一类工具,可以将文本的关键词聚类,然后根据topic将文本向量化。如可以将德甲、英超、西甲聚类到“足球”的topic下,将lv、Gucci聚类到“奢侈品”topic下,再根据topic为文本内容与用户作相似度计算。

      综上,基于内容的推荐算法能够很好地解决冷启动问题,并且也不会囿于热度的限制,因为它是直接基于内容匹配的,而与浏览记录无关。然而它也会存在一些弊端,比如过度专业化(over-specialisation)的问题。这种方法会一直推荐给用户内容密切关联的item,而失去了推荐内容的多样性。

      2.4 基于模型的算法

      基于模型的方法有很多,用到的诸如机器学习的方法也可以很深,这里只简单介绍下比较简单的方法——Logistics回归预测。我们通过分析系统中用户的行为和购买记录等数据,得到如下表:

      

      表中的行是一种物品,x1~xn是影响用户行为的各种特征属性,如用户年龄段、性别、地域、物品的价格、类别等等,y则是用户对于该物品的喜好程度,可以是购买记录、浏览、收藏等等。通过大量这类的数据,我们可以回归拟合出一个函数,计算出x1~xn对应的系数,这即是各特征属性对应的权重,权重值越大则表明该属性对于用户选择商品越重要。

      在拟合函数的时候我们会想到,单一的某种属性和另一种属性可能并不存在强关联。比如,年龄与购买护肤品这个行为并不呈强关联,性别与购买护肤品也不强关联,但当我们把年龄与性别综合在一起考虑时,它们便和购买行为产生了强关联。比如(我只是比如),20~30岁的女性用户更倾向于购买护肤品,这就叫交叉属性。通过反复测试和经验,我们可以调整特征属性的组合,拟合出最准确的回归函数。最后得出的属性权重如下:

      

      基于模型的算法由于快速、准确,适用于实时性比较高的业务如新闻、广告等,而若是需要这种算法达到更好的效果,则需要人工干预反复的进行属性的组合和筛选,也就是常说的Feature Engineering。而由于新闻的时效性,系统也需要反复更新线上的数学模型,以适应变化。

      2.5 混合算法

      现实应用中,其实很少有直接用某种算法来做推荐的系统。在一些大的网站如Netflix,就是融合了数十种算法的推荐系统。我们可以通过给不同算法的结果加权重来综合结果,或者是在不同的计算环节中运用不同的算法来混合,达到更贴合自己业务的目的。

      2.6 结果列表

      在算法最后得出推荐结果之后,我们往往还需要对结果进行处理。比如当推荐的内容里包含敏感词汇、涉及用户隐私的内容等等,就需要系统将其筛除;若数次推荐后用户依然对某个item毫无兴趣,我们就需要将这个item降低权重,调整排序;另外,有时系统还要考虑话题多样性的问题,同样要在不同话题中筛选内容。

      ◆ ◆ ◆

      推荐结果评估

      当推荐算法完成后,怎样来评估这个算法的效果?CTR(点击率)、CVR(转化率)、停留时间等都是很直观的数据。在完成算法后,可以通过线下计算算法的RMSE(均方根误差)或者线上进行ABTest来对比效果。

      ◆ ◆ ◆

      改进策略

      用户画像是最近经常被提及的一个名词,引入用户画像可以为推荐系统带来很多改进的余地,比如:

    1. 打通公司各大业务平台,通过获取其他平台的用户数据,彻底解决冷启动问题;

    2. 在不同设备上同步用户数据,包括QQID、设备号、手机号等;

    3. 丰富用户的人口属性,包括年龄、职业、地域等;

    4. 更完善的用户兴趣状态,方便生成用户标签和匹配内容。

      另外,公司的优势——社交平台也是一个很好利用的地方。利用用户的社交网络,可以很方便地通过用户的好友、兴趣群的成员等更快捷地找到相似用户以及用户可能感兴趣的内容,提高推荐的准确度。

      ◆ ◆ ◆

      总结

      随着大数据和机器学习的火热,推荐系统也将愈发成熟,需要学习的地方还有很多,坑还有很深,希望有志的同学共勉~

    展开全文
  • 基于内容的推荐系统、基于知识的推荐系统及基于知识的推荐系统中基于约束的推荐技术和基于样列的推荐技术,推荐系统攻击,以及推荐系统的开发框架。

    1、基于内容的推荐系统

    (1)基于内容的推荐算法概述
    基于内容的推荐算法(Content-based Recommendations, CB)也是一种工业界应用比较广的一种推荐算法。由于协同过滤推荐算法中仅仅基于用户对于商品的评分进行推荐,所以有可能出现冷启动的问题,如果可以根据物品的特性和用户的特殊偏好等特征属性进行比较直观的推荐就可以解决这个冷启动的问题。
    CB算法虽然需要依赖物品和用户偏好的额外信息,但是不需要太多的用户评分或者群体记录,也就是说,就是只有一个用户也可以完成推荐功能,产生一个物品推荐列表。
    CB算法的初始设计的目标是推荐有意思的文本文档,现阶段也会将该算法应用到其它推荐领域中。
    (2)基于内容的推荐算法结构
    CB算法主要包含三个步骤:
    1.  Item Representation: 为每一个item抽取一些特征属性出来,也就是结构化物品的描述操作,对应的处理过程叫做: Content Analyzer(内容分析);
    2.  Profile Learning:利用一个用户过去喜欢(不喜欢)的item特征数据,来学习该用户的喜好特征(profile);对应的处理过程叫做:Profile Learning(特征学习);
    3.  Recommendation Generation:通过比较上一步得到的用户profile于特征item的特征,为此用户推荐一组相关性最大的item即可;对应的处理过程叫做:Filtering Component(过滤组件)。
    1.  CB-Item Representation
    对于物品特征属性的抽取类型机器学习中采用的方式,主要包括对数值型数据的处理和对非数值型数据的处理,主要处理方式如下:
    a.  数值型数据归一化;
    b.  数值型数据二值化;
    c.  非数值型数据词袋法转换为特征向量;
    d.  TF-IDF;
    e.  Word2Vec。
    2.  CB-Profile Learning
    假设用户u对于一些item已经给出了喜好判断,喜欢其中的一部分item,不喜欢其中的另外一部分,那么该过程就是通过用户u过去的这些喜好判断,构建一个判别模型,最后可以根据这个模型判断用户u对于一个新的item是否会喜好。所以说这是一个比较典型的有监督学习问题,理论上可以使用机器学习的分类算法求解出所需要的判别模型。
    常用的算法有:
    a.  最近邻方法(K-Nearest Neighbor, KNN);
    b.  决策树算法(Decision Tree, DT);
    c.  线下分类算法(Linear Classifer, LC);
    d.  朴素贝叶斯算法(Naive Bayes, NB)。
    (3)CB和CF的区别
    CB(基于内容的推荐算法)的推荐系统会试图推荐给给定用户过去喜欢的相似物品。CB不需要用户-物品评分矩阵。
    CF(协同过滤的推荐算法)的推荐系统会试图识别出具有相同爱好的用户,并推荐他们喜欢过的物品。CF算法是基于用户-物品评分矩阵来进行推荐的。
    (4)算法流程

    (5)CB算法的优缺点
    1.  优点:
    用户独立性: 在构建模型的过程中,仅仅只需要考虑当前用户信息即可;
    透明度:通过显示地列出使得物品出现在推荐列表中的内容特征或者描述,可以比较明确的解释推荐系统是如何工作的;
    新物品:在没有任何评分的情况下,也可以进行推荐。
    2.  缺点:
    可分析的内容有限/特征抽取比较难:与推荐对象相关的特征数量和类型上是有限制的,而且依赖于领域知识;
    无法发现用户的潜在兴趣/过度特化:由于CB中的推荐结果是和该用户以前喜欢的item类似的,所以如果一个用户在一个网站仅仅只对一个item表达出喜欢的情绪,那么推荐系统也就无法发现这个人可能还喜欢其它物品;
    无法为新用户产生推荐:由于CB算法需要依赖用户的历史数据,那么对于新用户而已就有可能无法产生一个比较可靠的推荐。

    2、基于知识的推荐系统

    (1)基于知识的推荐系统概述
    传统的推荐算法(CB和CF)适用于推荐特性或者口味相似的物品,比如:书籍、电影或者新闻。但是在对某些产品进行推荐的过程中,就有可能不是特别适合的方法,比如汽车、电脑、房屋、或者理财产品等等。主要是两个原因:很难在一个产品上获取大量的用户评分信息以及获得推荐的用户不会对这些已经过时的产品产生一个满意的回馈。
    基于知识的推荐技术(Knowledge-based Recommendations, KB)是专门解决这类问题的一种新的推荐技术,高度重视知识源,不会存在冷启动的问题,因为推荐的需求都是被直接引出的。缺点是:所谓的知识的获取比较难,需要知识整理工程师将领域专家的知识整理成为规范的、可用的表达形式。
    基于知识的推荐技术需要主动的询问用户的需求,然后返回推荐结果。
    (2)会话式推荐系统交互形式
    一般的交互过程如下:
    a.  用户指定自己的最初偏好,然后一次性问完所有问题,或者逐步问完问题;
    b.  当收集到足够多有关用户需求和偏好的信息后,会提供给用户一组匹配产品;
    c.  用户可能会修改自己的需求;
    d.  类似于搜索过程,只是将搜索过程中给定的参数输入到基于知识的推荐系统中。
    系统开发中需要考虑的问题:
    a.  需要一些比较高精度的推荐结果;
    b.  当没有完全匹配物品的时候,需要给定解决方案,比如主动提供某些的候选结果。
    (3)KB的分类
    基于知识的推荐系统分为两大类:基于样列的推荐和基于约束的推荐;这两种方法非常相似:先收集用户需求,在找不到推荐方案的情况下,自动修复与需求的不一致性,并给出推荐的解释。区别在于:推荐方案是如何被计算出来的。
    1.  基于样列的推荐方法通过相似度衡量标准从目录中检索物品。
    2.  基于约束的推荐方式主要是利用预先定义好的推荐知识库,即一些描述用户需求以及与这些需求相关的产品信息特征的显示关联规则;也就是使用约束求解器解决的约束满足问题或者通过数据库引擎执行并解决的合取查询形式。
    基于知识的推荐系统一般情况下需要依赖物品特征的详细知识;简单来讲,推荐就是从物品特征数量表中挑出能够匹配用户需求、偏好和硬件需求的物品;用户的需求可能会表达成为:价格不超过在2200元的物品或者能够防水等等

    3、基于约束的推荐技术

    (1)基本概念
    基于约束的推荐技术可以使用一组(V,D,C)来描述,其中:
    1.  V:是一组变量集合,主要是:Vc和VPROD;
    2.  D:是一组这些变量的有限域;
    3.  C:是一组约束条件,描述了这些变量能够同时满足的取值的组合条件;主要是CR、CF、CPROD;
    实际上基于约束的推荐技术就是在约束(V=Vc U VPROD, D, C = CR U CF U CPROD)情况下,给定一个需求REQ,给出一个最终的RES推荐结果。
    用户属性(Vc):描述了客户的潜在需求,即用户需求的特征属性实例化。比如:max-price表示用户能够接受的最高价格。
    4.  产品属性(VPROD):描述了一个给定产品种类的特征属性,比如mpix表示分辨率。一致性约束条件(CR):定义了允许范围内的用户实例对象,也就是对客户需求可能的实例化的系统约束,比如:如果要去相机能够大于大尺寸的照片,则最大可接受价格必须高于1500。
    5.  过滤条件(CF):定义了在那种条件下应该选择的哪种产品,也就是定义了用户属性和产品属性之间的关系,比如:大尺寸照片打印功能要求相机的分辨率至少大于5mpix。
    6.  产品约束条件(CPROD):定义了当前有效的产品分类。
    (2)默认值设置
    默认值设置的主要目的是帮助用户说明需求的一种方式,当用户给定一个比较模糊、泛化的需求的时候,系统可以对该属性指标进行解析转换,得到更加丰富的需求条件列表。比如:当一个用户需要的是一个可以打印大尺寸照片的时候,我们可以默认认为他需要的相机的像素必须大于3兆;给定默认的方式如下:
    1.  静态默认设置:每一个属性都具有一个默认值
    2.  条件默认设置:根据用户给定的需求条件,生产一个默认值
    3.  派生默认设置:利用以前所有用户的交互日志和当前用户给定的参数,进行分析建模,得到每一个属性的默认值。最常用的方法为:1最近邻和加权多数投票。
    (3)处理空结果集
    实际上,当用户给定的需求太多的时候,就有可能产生没有任何一个物品是符合给定需求的,也就会产生一个空推荐结果集,基本上所有的推荐系统都不能完全解决这种“无米之炊”的难题,常用的一种解决方案是:
    给定用户需求特征属性的优先级别,按照属性的优先级别删除原始需求中的需求,得到一个新的需求条件列表,重新获取推荐数据,直到有结果产生。
    (4)推荐结果排序
    基于首位效应,用户会更多的关注并选择列表开头的物品,并且这种根据物品对用户的效用进行结果排序的方式会显著提高推荐应用的信任度和用户购买意愿。
    物品排序的根据是多属性效用理论,也就是依据每个物品对用户的效用来评价。每个物品会根据事先定义好的维度来进行评价,比如相机主要考虑的就是:质量和经济实惠;金融领域可能主要考虑的就是:有效性、风险和利润。结合用户对各个维度的偏好数值(百分比),来计算出最终的对于这个商品的偏好程度。

    4、基于样列的推荐技术

    基于样列的推荐技术中主要问题就是求解用户需求和物品之间的距离,也就是物品和需求之间的相似度。一种常用的计算相似度的公式如下:

    5、基于知识的推荐系统总结

    基于知识的推荐系统在协同过滤或者基于内容的推荐技术有明显缺点的时候十分有用,并且能够很好的应用到大型的推荐系统中,但是基于知识的推荐系统还是存在着一系列的问题:
    基于约束的推荐技术构建约束条件需要比较多的一个领域知识,比较难。
    基于样列的推进技术当计算物品和需求之间相似度公式效果不佳的时候,推荐的结构比较不好,而且结构化物品特征数量以及构建特征属性和需求之间的相似度计算规则比较难,需要比较高的一个领域知识。
    未来是一个发展方向,但是在当前推荐领域中实际应用的不多。

    6、混合推荐系统

    我们可以把推荐系统看成一个黑盒子,可以将输入的数据转换成为一个有序的物品列表再进行输出,输入的数据主要包含用户记录、上下文信息、产品特征、知识模型等等,但是没有任何一个推荐算法可以利用到这所有的输入数据,所以可以考虑将多个推荐系统模型的结果混合到一起来作为最终的推荐结果。
    混合推荐系统的设计结构主要分为三大类,分别是:整体式混合设计、并行式混
    合设计、流水线式混合设计。


    7、推荐系统攻击

    在实际应用中,由于推荐系统的建议可能会影响用户的购买行为,带来经济效益的时候,我们并不能假设所有的用户都是诚实公平的,也就是说存在的恶意用户有可能会影响推荐系统的运行效果,让推荐列表经常(或者很少)包含某类商品,这种问题就叫做推荐系统攻击。
    解决方案:
    1.  尽可能的提高“可信”朋友的评分权重;
    2.  过滤异常数据,因为只有大量异常数据的存在才有可能对最终结果产生不好的影响,那么只需要过滤这部分的异常数据就可以解决这个问题。

    8、推荐系统框架

    名称 SVDFeature LibMF LibFM Lenskit GraphLab Mahout SparkMLib EasyRec Waffles Myrrix
    语言 C++ C++ C++ Java C++ Java Java/Scala Java C++ C++
    分布式
    学术界产品

    除了常用的这十种推荐框架外,还有很多其它的框架,比如: Python-recsys(python)、Recommendable(Ruby)、Oryx(Java)、Recommenderlab(R)等等,这些框架除了使用的编程语言不同以外,实现的算法大同小异,主要是:SVD、ALS、CF及其改进算法等等。

    python-recsys Library

    使用Python语言实现的一个推荐系统框架,主要实现基于SVD奇异值矩阵分解的协同过滤算法,参考文档列表如下:
    文档说明:http://ocelma.net/software/python-recsys/build/html/
    源码:https://github.com/ocelma/python-recsys

    python-recsys Library的安装

    python-recsys需要依赖的python模块有(基本模块已有):divisi2、csc-pysparse、networkx、numpy、scipy(python版本2.7或者>=3.4)。

    • 下载python的安装压缩包:python-recsys.tar.gz
    • 解压压缩包:tar xvfz python-recsys.tar.gz
    • 进入解压后的目录:cd python-recsys
    • python命令进行安装(root用户进行安装):sudo python setup.py install
    • 在windows上有可能出现依赖Microsoft Visual的异常信息
    python-recsys Library的案例
    # 导入模块
    from recsys.algorithm.factorize import SVD
    # 创建对象并加载数据
    svd = SVD()
    svd.load_data(filename='./data/movielens/ratings.dat', sep='::', format={'col':0, 'row':1, 'value':2, 'ids': int})
    
    # 给定参数并训练模型
    k = 100
    svd.compute(k=k,
    min_values=10,
    pre_normalize=None,
    mean_center=True,
    post_normalize=True,
    savefile='/tmp/movielens')
    
    # 获取两个对象之间的相似度
    ITEMID1 = 1 							# Toy Story (1995)
    ITEMID2 = 2355 							# A bug's life (1998)
    svd.similarity(ITEMID1, ITEMID2)
    # 0.67706936677315799
    
    # 根据用户id获取推荐物品列表
    svd.recommend(USERID, is_row=False) 	#cols are users and rows are items, thus we set is_row=False
    # Returns: <ITEMID, Predicted Rating>
    [(2905, 5.2133848204673416), 			# Shaggy D.A., The
    (318, 5.2052108435956033), 				# Shawshank Redemption, The
    (2019, 5.1037438278755474), 			# Seven Samurai
    (1178, 5.0962756861447023), 			# Paths of Glory (1957)
    (904, 5.0771405690055724), 				# Rear Window (1954)
    (1250, 5.0744156653222436), 			# Bridge on the River Kwai, The
    (858, 5.0650911066862907), 				# Godfather, The
    (922, 5.0605327279819408), 				# Sunset Blvd.
    (1198, 5.0554543765500419), 			# Raiders of the Lost Ark
    (1148, 5.0548789542105332)] 			# Wrong Trousers, The
    
    # 根据物品id获取推荐用户列表
    svd.recommend(ITEMID)
    # Returns: <USERID, Predicted Rating>
    [(283, 5.716264440514446),
    (3604, 5.6471765418323141),
    (5056, 5.6218800339214496),
    (446, 5.5707524860615738),
    (3902, 5.5494529168484652),
    (4634, 5.51643364021289),
    (3324, 5.5138903299082802),
    (4801, 5.4947999354188548),
    (1131, 5.4941438045650068),
    (2339, 5.4916048051511659)]
    
    SparkMLlib

    SparkMLlib是Spark中的一个模块,主要包含机器学习相关应用领域的API,是在Spark分布式计算框架上运行的一种机器学习算法框架,主要包括常用的分类、聚类、回归和协同过滤算法(ALS),是大数据领域中应用比较多的一种技术。
    文档说明:http://spark.apache.org/docs/1.6.1/mllib-collaborative-filtering.html
    源码下载:https://github.com/apache/spark&SparkMLlib

    SparkMLlib Maven依赖
    <dependency>
    	<groupId>org.apache.spark</groupId>
    	<artifactId>spark-core_${spark.scala.version}</artifactId>
    	<version>${spark.version}</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.spark</groupId>
    	<artifactId>spark-mllib_${spark.scala.version}</artifactId>
    	<version>${spark.version}</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.hadoop</groupId>
    	<artifactId>hadoop-client</artifactId>
    	<version>${hadoop.version}</version>
    </dependency>
    
    SparkMLlib的案例
    • 案例一:基于SparkMLlib中的协同过滤算法对豆瓣网的电影数据进行推荐算法实现
    • 案例二:基于Spark RDD中的相关API对MovieLens中的电影数据进行协同过滤推荐算法实现
    Mahout

    Mahout是Apache Software Foundation(ASF)开发的一个开源项目,目的是创建一些可伸缩的机器学习算法。Mahout是基于MapReduce/Spark的一个分布式机器学习框架,中间主要包含分类、回归、聚类以及推荐算法等。主要有User-Based CF、Item-Based CF、ALS、ALS on Implicit Feedback、Weighted MF、SVD、SGD等算法。
    文档说明:http://mahout.apache.org/
    源码下载:https://github.com/apache/mahout
    Mahout和Spark、MapReduce一样,只是一种提供了机器学习算法的框架,不需要搭建什么环境,可以直接将最终的jar文件运行在yarn上,有时可能需要解决依赖包的问题。

    Mahout Maven依赖
    <dependency>
    	<groupId>org.apache.mahout</groupId>
    	<artifactId>mahout-math-scala_2.10</artifactId>
    	<version>${mahout.version}</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.mahout</groupId>
    	<artifactId>mahout-spark_2.10</artifactId>
    	<version>${mahout.version}</version>
    </dependency>
    
    Mahout的案例

    对MovieLens数据进行Mahout推荐API实验,主要是协同过滤中的常用算法,例如基于用户的近邻算法、基于物品的近邻算法、ASL、SVD等常用算法,并比较这几种算法的推荐模型的效果,如召回率之类的指标。

    展开全文
  • 推荐系统核心精讲

    千人学习 2019-09-20 10:58:54
    本课程是推荐系统的入门课程,主要从推荐系统背景介绍、推荐算法、推荐系统工程、推荐产品形态、实战等五个部分对推荐系统做初略的介绍。在背景介绍部分,会讲解推荐系统的技能要求、推荐系统的价值与应用场景、推荐...
  • 一文入门推荐系统——推荐系统实践读书笔记

    千次阅读 多人点赞 2020-12-20 12:54:25
    1. 推荐系统 1.1. 什么是推荐系统 1.2. 推荐系统评测 1.2.1. 实验方法 1.2.2. 评判指标 1.2.3. 评判维度 2. 数据来源 2.1. 用户行为数据 2.2. 用户标签数据 2.3. 上下文信息 2.3.1. 时间上下文信息 2.3.2. 地点上...

    《推荐系统实践》读书笔记

    1. 推荐系统

    1.1. 什么是推荐系统

    (1)推荐系统的定义
    推荐系统(Recommendation System, RS)是一种自动联系用户和物品的工具,它能够帮助用户在信息过载的环境中发现令他们感兴趣的信息。它通常由前台的展示页面、后台的日志系统、推荐算法系统三个部分组成。

    (2)为什么需要推荐系统
    随着互联网上的数据越来越多,各大应用及平台坐拥海量信息,但用户却难以找到真正对自己有用的信息,用户面对庞大的数据变得毫无头绪。

    目前有三大方法可以解决信息超载的问题:分类目录、搜索引擎和推荐系统:

    • 分类目录
      分类目录是将信息分门别类,从而方便用户根据类别进行查找。例如:优设导航百度更多 等门户网站。但分类目录只适合用在内容少而精的网站上,大多数分类目录网站只能涵盖少数热门信息,应用场景有限。
    • 搜索引擎
      用户通过在搜索引擎上输入关键字,查找自己需要的信息。例如:搜狗Bing 等搜索引擎。但是,用户必须主动提供准确的关键词,才可能找到需要的信息。
    • 推荐系统
      推荐系统通过分析用户的历史行为,对用户的兴趣进行建模,从而主动给用户推荐可能满足他们需求的信息,该方法能够很好的发掘长尾信息。

    我们可以看到,推荐系统相对于分类目录和搜索引擎,在某些方面有着不可替代的优势。通常认为,当一个系统满足以下两个条件时,就可以考虑应用推荐系统:

    1. 存在信息过载(用户难以找到想要的内容);
    2. 用户大多数时候没有明确的需求。

    1.2. 推荐系统评测

    一个完整的推荐系统包括三个参与方:

    • 用户
    • 网站(平台,负责搭载推荐系统)
    • 内容提供方

    在评测一个推荐系统时,需要考虑上述三方的利益,一个好的推荐系统是能够令三方共赢的系统。

    1.2.1. 实验方法

    一般来说,一个新的推荐算法最终上线,需要通过3个实验。

    • 首先,通过离线实验证明它在很多离线指标上优于现有的算法;
    • 其次,通过用户调查确定用户满意度不低于现有的算法;
    • 最后,通过在线AB测试确定它在特定的指标上优于现有的算法;

    (1)离线实验 Offline Experiment
    离线实验的方法的步骤如下:

    • 通过日志系统获得用户行为数据,并生成一个标准数据集;
    • 将数据集分成训练集和测试集;
    • 在训练集上训练用户兴趣模型,在测试集上进行预测;
    • 通过事先定义的离线指标,评测算法在测试集上的预测结果。

    从以上步骤看出,离线实验的都是在标准数据集上完成的。这意味着,它不需要一个实际的系统作为支撑,只需要有一个模拟环境即可。

    离线实验的优缺点:

    优点 缺点
    不需要有对实际系统的控制权 无法计算商业上关心的指标
    不需要用户参与实验 离线实验的指标和商业指标存在差距
    速度快,可以测试大量算法

    (2)用户调查 User Study
    用户调查由真实的用户在需要测试的推荐系统上完成某些任务。在他们完成这些任务时,观察和记录他们的行为,并让他们回答一些问题。最后通过分析他们的行为和答案,了解推荐系统的性能。

    用户调查的优缺点:

    优点 缺点
    可以获得用户主观感受的指标 招募测试用户代价较大
    风险低,出错后容易弥补 无法组织大规模的测试用户,统计意义不足
    双盲实验设计困难,导致收集的测试指标无法在真实环境下重现

    (3)在线实验 Online Experiment
    在线实验是指将系统上线做AB测试,把它和旧算法进行比较。AB测试通过一定的规则将用户随机分成几组,对不同组的用户采用不同的算法,然后通过统计不同组的评测指标,比较不同算法的好坏。

    AB测试的优缺点:

    优点 缺点
    可以准确地获得不同算法的实际性能指标和商业上关注的指标 周期较长,必须进行长期的实验才能得到可靠的结果

    大型网站做AB测试,可能会因为不同团队同时进行各种测试对结果造成干扰,所以切分流量是AB测试中的关键。不同的测试层以及控制这些层的团队,需要从一个统一的流量入口获得自己AB测试的流量,而不同层之间的流量应该是正交的。关于分层实验和流量正交的知识可以参考这篇博客:黄一能:什么是科学的AB测试?谈谈分层实验和流量正交
    在这里插入图片描述

    1.2.2. 评判指标

    评测指标用于评测推荐系统的性能,有些可以定量计算,如预测准确度、覆盖率、多样性、实时性;有些只能定性描述,如用户满意度、新颖性、惊喜度、信任度、健壮性和商业目标。

    有了这些指标,就可以根据需要对推荐系统进行优化,通常的优化目标是在给定覆盖率、多样性、新颖性等限制条件下,尽量提高预测准确度。

    离线实验 问卷调查 在线实验
    用户满意度 ×
    预测准确度 ×
    覆盖率
    多样性
    新颖性
    惊喜度 × ×

    下面我们分别介绍一下这几种评测指标。

    (1) 用户满意度
    用户满意度是评测推荐系统的重要指标,无法离线计算,只能通过用户调查或者在线实验获得。

    • 调查问卷的设计需要考虑周全,用户才能针对特定问题给出准确的回答;
    • 在线系统中用户的满意度通过统计用户行为得到。一般情况,可以用用户点击率、停留时间、转化率等指标度量用户的满意度。

    (2) 预测准确度

    预测准确度是度量一个推荐系统或其中推荐算法预测用户行为的能力。 是推荐系统最重要的离线评测指标。大致可从“评分预测”和“Top-N推荐”两个方面进行评测。

    评分预测
    预测评分的准确度,衡量的是算法预测的评分与用户的实际评分的贴近程度,一般通过以下指标度量:

    设测试集 TT 中有用户 uu 和物品 ii,用 ruir_{ui} 表示用户 uu 对物品 ii 的实际评分;r^ui\hat{r}_{ui} 表示推荐算法给出的预测评分。则

    • 平均绝对误差(MAE)MAE=(u,i)TruiruiTMAE=\frac{\sum_{(u,i)\in T}|r_{ui}-r_{ui}'|}{|T|}
    • 均方根误差(RMSE)RMSE=(u,i)T(ruir^ui)2TRMSE=\sqrt{\frac{\sum_{(u,i)\in T}(r_{ui}-\hat{r}_{ui})^2}{|T|}}一般而言,RMSE的误差会比MAE小

    Top-N推荐
    如果推荐服务会给用户提供个性化的推荐列表,那么这种推荐就叫做Top-N推荐。

    Top-N推荐的预测准确率,一般通过2个指标度量:

    R(u)R(u) 是根据用户在训练集上的行为提供给用户的推荐列表,T(u)T(u) 是用户在测试集上的实际行为列表。

    • 准确率(Precision)Precision=uUR(u)T(u)uUR(u)Precision=\frac{\sum_{u\in U}|R(u)\cap T(u)|}{\sum_{u\in U}|R(u)|}
    • 召回率(Recall)Recall=uUR(u)T(u)uUT(u)Recall=\frac{\sum_{u\in U}|R(u)\cap T(u)|}{\sum_{u\in U}|T(u)|}

    Top-N推荐由于其个性化特性突出,因此相对于评分预测更符合实际的应用需求。

    (3) 覆盖率
    覆盖率(Coverage)是描述一个推荐系统对物品长尾的发掘能力。覆盖率最简单的定义是:推荐系统能够推荐出来的物品占总物品集合的比例。

    假设系统的用户集合为 UU,总物品集合为 II,推荐系统给每个用户推荐一个长度为 NN 的物品推荐列表 R(u)R(u),覆盖率公式表达为:Coverage=uUR(u)ICoverage=\frac{\bigcup_{u\in U}R(u)}{|I|}

    覆盖率是内容提供者关心的指标,覆盖率为100%的推荐系统可以将每个物品都至少推荐给一个用户。

    除了利用推荐物品的占比来定义覆盖率,还可以通过研究物品在推荐列表中出现的次数分布来描述推荐系统的挖掘长尾的能力。如果分布比较平,说明推荐系统的覆盖率很高;如果分布陡峭,说明分布系统的覆盖率较低。

    信息论和经济学中有两个著名指标,可以定义覆盖率:

    • 信息熵H=i=1np(i)logp(i)H=-\sum_{i=1}^{n}p(i)\log p(i)其中p(i)p(i)是物品ii的流行度除以所有物品流行度之和;
    • 基尼系数(Gini Index)G=1n1j=1n(2jn1)p(ij)G=\frac{1}{n-1}\sum_{j=1}^{n}(2j-n-1)p(i_j)其中,iji_j 是按照物品流行度 pp 从小到大排序的物品列表中第 jj 个物品。

    基尼系数的计算原理:首先,我们将物品按照热门程度从低到高排列,那么下图中的黑色曲线表示最不热门的 x%x\% 物品的总流行度占系统的比例 y%y\% 。这条曲线肯定是在 y=xy=x 曲线之下的,而且和 y=xy=x 曲线相交在(0,0)和(1,1)。
    在这里插入图片描述
    SAS_AAA 的面积,SBS_BBB 的面积,那么基尼系数的形象定义就是 SA/(SA+SB)S_A/(S_A+S_B),从定义可知,基尼系数属于区间 [0,1][0,1]
    如果系统的流行度很平均,那么 SAS_A 就会很小,从而基尼系数很小。如果系统物品流行度分配很不均匀,那么 SAS_A 就会很大,从而基尼系数也会很大。

    (4) 多样性
    为了满足用户广泛的兴趣,推荐列表需要能够覆盖用户不同的兴趣领域,即需要具有多样性。

    多样性描述了推荐列表中物品之间的不相似性。假设 s(i,j)[0,1]s(i,j)\in [0,1] 定义了物品 iijj 之间的相似度,那么用户uu的推荐列表 R(u)R(u) 的多样性定义如下:Diversity=1i,jR(u),ijs(i,j)12R(u)(R(u)1)Diversity=1-\frac{\sum_{i,j\in R(u),i\neq j}s(i,j)}{\frac{1}{2}|R(u)|(|R(u)|-1)}

    推荐系统整体多样性可以定义为所有用户推荐列表多样性的均值:Diversity=1UuUDiversity(R(u))Diversity=\frac{1}{|U|}\sum_{u\in U}Diversity(R(u))

    (5) 新颖性
    新颖性也是影响用户体验的重要指标之一。它指的是向用户推荐非热门非流行物品的能力。评测新颖度最简单的方法是利用推荐结果的平均流行度,因为越不热门的物品,越可能让用户觉得新颖。

    但是这种计算方法比较粗糙,因为不同用户不知道的东西是不同的,需要配合用户调查准确统计新颖度。

    (6) 惊喜度
    惊喜度与新颖度相关,它是指推荐结果和用户的历史兴趣不相似,但却让用户满意的程度。

    (7) 信任度
    信任度用于衡量用户对推荐系统的信任程度,这个指标的意义在于,如果用户信任推荐系统就会增多用户和推荐系统的交互。信任度目前只能通过问卷调查的方式来度量。

    提高信任度的方式主要有两种:

    • 增加系统透明度
      即提供推荐解释,让用户了解推荐系统的运行机制。
    • 利用社交网络信息
      即利用用户的好友给用户做推荐。

    (8) 实时性
    许多物品具有很强的时效性,例如新闻、微博等,需要在时效期内推荐给用户,否则物品的价值就可能大打折扣。推荐系统的实时性包括两方面:

    • 实时更新推荐列表满足用户新的行为变化;
    • 将新加入系统的物品推荐给用户;

    前者可以通过推荐列表的更新速率来控制和测评,后者可以通过计算推荐列表中有多大比例的物品是新加入物品来测评。

    (9) 健壮性
    任何能带来利益的算法系统都会被攻击,最典型的案例就是搜索引擎的作弊与反作弊斗争。推荐系统也不例外,健壮性衡量了推荐系统抗击作弊的能力。

    2011年的推荐系统大会专门有一个推荐系统健壮性的教程,作者总结了很多作弊方法,最著名的是行为注入攻击(Profile Injection Attack)。就是注册很多账号,用这些账号同时购买某件商品A和自己的商品。此方法针对一种购物网站的推荐方法:“购买商品A的用户也经常购买的其他商品”。

    一般会利用模拟攻击来评测算法的健壮性:

    • 给定一个数据集和算法,用算法给数据集中的用户生成推荐列表;
    • 用常用的攻击方法向数据集中注入噪声数据;
    • 利用算法在有噪声的数据集上再次生成推荐列表;
    • 通过比较攻击前后推荐列表的相似度评测算法的健壮性。

    提高推荐系统健壮性的方法:

    • 选择健壮性高的算法;
    • 选择代价较高的用户行为,例如收费的用户行为(购物等)、限制用户权限(给用户分级);
    • 在使用数据前进行攻击检测,从而对数据进行清理。

    (10) 商业目标
    设计推荐系统时,需要考虑最终的商业目标。不同网站具有不同的商业目标,它与网站的盈利模式息息相关。

    比如电子商务网站的目标可能是销售额,基于展示广告盈利的网站其商业目标可能是广告展示总数,基于点击广告盈利的网站其商业目标可能是广告点击总数。因此,设计推荐系统时需要考虑最终的商业目标,也就是说网站使用推荐系统的目的除了满足用户发现内容的需求,同时也需要利用推荐系统加快实现商业上的指标。

    1.2.3. 评判维度

    增加评测维度的目的,就是知道一个算法在什么情况下性能最好,这样可以为融合不同推荐算法取得最好的整体性能带来参考。

    一般评测维度分3种:

    • 用户维度:主要包括用户的人口统计学信息、活跃度以及是不是新用户等;
    • 物品维度:包括物品的属性信息、流行度、平均分以及是不是新加入的物品等;
    • 时间维度:包括季节,是工作日还是周末,白天还是晚上等;

    如果推荐系统的评测报告中包含了不同维度下的系统评测结果,就能帮我们全面了解系统性能,甚至找到一个看上去比较弱的算法的优势,或者发现一个看上去比较强的算法的缺点。

    2. 数据来源

    2.1. 用户行为数据

    基于用户行为数据获取数据也就是通过用户曾经进行过的行为来了解用户兴趣和需求。

    用户行为数据一般存于网站的日志中,网站在运行过程中都产生大量原始日志(Raw Log),多种原始日志可以按照用户行为汇总成会话日志(Session Log),其中每个会话表示一次用户行为及其对应的服务。

    下面给出一种用户行为的统一表示,可以作为数据库设计的参考:

    字段 含义
    user id 产生行为的用户的唯一标识
    item id 产生行为的对象的唯一标识
    behavior type 行为的种类(比如是购买还是浏览)
    context 产生行为的上下文,包括时间和地点等
    behavior weight 行为的权重(如果是观看视频的行为,那么这个权重可以是观看时长;如果是打分行为,这个权重可以是分数)
    behavior content 行为的内容(如果是评论行为,那么就是评论的文本;如果是打标签的行为,就是标签)

    用户行为在个性化推荐系统中一般分两种:

    • 显性反馈行为(Explicit Feedback)
      显性反馈行为包括用户明确表示对物品喜好的行为。例如用户评分、点赞之类的用户表态;
    • 隐性反馈行为(Implicit Feedback)
      隐性反馈行为指的是那些不能明确反应用户喜好的行为。最具代表性的隐性反馈行为就是页面浏览行为,用户进行浏览既可能是对该页面的内容感兴趣,也可能是误操作。

    我们从几个不同方面来比较显性反馈数据和隐性反馈数据:

    显性反馈数据 隐性反馈数据
    用户兴趣 明确 不明确
    数量 较少 庞大
    存储 数据库 分布式文件系统
    实时读取 实时 有延迟
    正负反馈 都有 只有正反馈

    下标列举了在各个领域的网站中这显性反馈数据和隐性反馈数据的例子:

    显性反馈数据 隐性反馈数据
    视频网站 用户对视频的评分 用户观看视频的日志、浏览视频页面的日志
    电子商务网站 用户对商品的评分 购买日志、浏览日志
    门户网站 用户对新闻的评分 阅读新闻的日志
    音乐网站 用户对音乐/歌手/专辑的评分 听歌的日志

    在很多时候我们并不使用统一结构表示所有行为,因为使用统一的结构会造成很大的空间浪费。一般来说,会用不同的数据集包含不同的行为,目前比较有代表性的数据集有下面几个:

    • 无上下文信息的隐性反馈数据集
      每一条行为记录仅仅包含用户ID和物品ID,Book-Crossing 就是这种类型的数据集;
    • 无上下文信息的显性反馈数据集
      每一条记录包含用户ID、物品ID和用户对物品的评分;
    • 有上下文信息的隐性反馈数据集
      每一条记录包含用户ID、物品ID和用户对物品产生行为的时间戳。Lastfm数据集 就是这种类型的数据集;
    • 有上下文信息的显性反馈数据集
      每一条记录包含用户ID、物品ID、用户对物品的评分和评分行为发生的时间戳。Netflix Prize 提供的就是这种类型的数据集。

    2.2. 用户标签数据

    标签是一种重要的特征表现方式,用户用标签来描述对物品的看法,可以说标签是联系用户和物品的纽带,也是反应用户兴趣的重要数据源。

    根据给物品打标签的人的不同,标签应用一般分为两种:一种是让作者或者专家给物品打标签;另一种是让普通用户给物品打标签,也就是UGC(User Generated Content,用户生成的内容)的标签应用。

    标签系统中的推荐问题主要有以下两个:

    • 如何利用用户打标签的行为为其推荐物品(基于标签的推荐)
    • 如何在用户给物品打标签时为其推荐适合该物品的标签(推荐标签)

    为了研究上面的两个问题,我们首先需要理解下面三个问题:

    • 用户为什么要打标签
      用户标注的动机一是便于上传者组织自己的信息,同时帮助其他用户找到信息;二是可以更好地组织内容,方便用户将来的查找,同时可以传达某些信息,比如照片的拍摄时间和地点等;
    • 用户是如何打标签的
      用户打标签的行为也具有长尾分布的特点,即只使用少数常用标签、只给少数热门物品打标签;
    • 用户打什么样的标签
      不同的系统有不同的标签系统,通常需要专家去定义一些标签给用户使用,否则用户很可能会给物品打上各种各样奇奇怪怪的标签。Delicious上的一种经典标签系统可以表示如下:
      1. 表明物品是什么。比如是一只鸟,就会有“鸟”这个词的标签;是豆瓣的首页,就有一个标签叫“豆瓣”;是乔布斯的首页,就会有个标签叫“乔布斯”。
      2. 表明物品的种类。比如表示一个网页类别的标签包括 article(文章)、blog(博客)、book(图书)等。
      3. 表明谁拥有物品。比如很多博客的标签中会包括博客的作者等信息。
      4. 表达用户的观点。比如用户认为网页很有趣,就会打上标签funny(有趣),认为很无聊,就会打上标签boring(无聊)。
      5. 用户相关的标签。比如 my favorite(我最喜欢的)、my comment(我的评论)等。
      6. 用户的任务。比如 to read(即将阅读)、job search(找工作)等。

    2.3. 上下文信息

    上下文信息是指用户访问推荐系统的时间、地点、心情等,对于提高推荐系统的推荐准确度是非常重要的。比如,一个卖衣服的推荐系统在冬天和夏天应该给用户推荐不同种类的服装。推荐系统不能因为用户在夏天喜欢过某件T恤,就在冬天也给该用户推荐类似的T恤。因此,准确了解用户的上下文信息,并将该信息应用于推荐算法是设计好的推荐系统的关键。

    总的来说,一般在推荐系统中我们会主要利用用户的时间上下文信息和位置上下文信息。

    2.3.1. 时间上下文信息

    一般认为,时间信息对用户兴趣的影响表现在以下几个方面:

    • 用户兴趣变化
      用户兴趣变化是因为用户自身原因发生的变化。比如随着时间的推移,用户半年前喜欢看番剧,现在喜欢看文艺片。要准确预测用户现在的兴趣,就应该关注用户最近的行为,因为用户最近的行为最能体现他现在的兴趣。当然,考虑用户最近的兴趣只能针对渐变的用户兴趣,而对突变的用户兴趣很难起作用;
    • 物品生命周期
      当我们决定在某个时刻给某个用户推荐某个物品时,需要考虑该物品在该时刻是否已经过时了。典型的短生命周期物品有新闻、直播等;
    • 季节效应
      季节效应主要反映了时间本身对用户兴趣的影响。比如人们夏天吃冰淇淋,冬天吃火锅,夏天穿T恤,冬天穿棉衣,以及不同节假日的商品规律等等。

    在给定时间信息后,推荐系统从一个静态系统变成了一个时变的系统,而用户行为数据也变成了时间序列。包含时间信息的用户行为数据集由一系列三元组构成,其中每个三元组 (u,i,t)(u,i,t) 代表了用户 uu 在时刻 tt 对物品 ii 产生过行为。在给定数据集后,通过统计如下信息研究系统的时间特性:

    • 数据集每天独立用户数的增长情况
      有些网站处于快速增长期,它们每天的独立用户数都在线性(甚至呈指数级)增加。而有些网站处于平稳期,每天的独立用户数都比较平稳。还有一些网站处于衰落期,每天的用户都在流失。在3种不同的系统中用户行为是不一样的;
    • 系统的物品变化情况
      比如新闻网站,每天都会出现大量新的新闻,而每条热门的新闻其时间周期都不会太长,今天热门的新闻也许明天就被人忘记了;
    • 用户访问情况
      有些网站用户来一次就永远不来了,有些网站用户每周来一次,而有些网站用户每天都来。为了度量这些特性,我们可以统计用户的平均活跃天数,同时也可以统计相隔TT天来系统的用户的重合度。

    2.3.2. 地点上下文信息

    除了时间,地点作为一种重要的空间特征,也是一种重要的上下文信息。不同地区的用户兴趣有所不同,用户到了不同的地方,兴趣也会有所不同。

    用户兴趣和地点相关的特征主要有两个:

    • 兴趣本地化
      不同地方的用户兴趣存在着很大的差别,不同国家和地区用户的兴趣存在着一定的差异。
    • 活动本地化
      一个用户在一段时间内往往只能在附近的地区活动。因此,在基于位置的推荐中我们需要考虑推荐地点和用户当前地点的距离,不能给用户推荐太远的地方。

    2.4. 社交网络数据

    社交网络可以很好地模拟现实社会,在社交网络中的用户通常相互认识,这大大提高了推荐的信任度,同时也缓解了推荐系统冷启动的问题。

    不过,社会化推荐有一些明显的缺点,其中最主要的就是很多时候并不一定能提高推荐算法的离线精度(准确率和召回率)。特别是在基于社交图谱数据的推荐系统中,因为用户的好友关系不是基于共同兴趣产生的,所以用户好友的兴趣往往和用户的兴趣并不一致。比如,我们和自己父母的兴趣往往就差别很大。

    现在互联网上充斥着各种各样带有社交性质的网站。那么,从什么方面可以获得社交网络数据呢?一般来说,有如下渠道:

    • 电子邮件
      电子邮件其实也是一个社交网络,可以通过分析用户的联系人列表了解用户的好友信息,进一步通过研究两个用户之间的邮件往来频繁程度度量两个用户的熟悉程度。
    • 用户注册信息
      在注册时引导用户填写一些诸如公司、学校等信息,就样就可以知道哪些用户曾经在同一家公司工作过,哪些用户曾经在同一个学校学习过。
    • 用户的位置数据
      位置信息也是一种反映用户社交关系的数据。在同一地点的用户更容易有相似的兴趣,甚至这些用户相互之间就认识。
    • 论坛和讨论组
      每个群聊或小组都包含一些有相同兴趣的人。如果两个用户同时加入了很多相同的小组,我们可以认为这两个用户很可能互相了解或者具有相似的兴趣。如果两个用户在讨论组中曾经就某一个帖子共同进行过讨论,那就更加说明他们之间的熟悉程度或兴趣相似度很高。
    • 即时聊天工具
      和电子邮件系统一样,用户在即时聊天工具上也会有一个联系人列表,而且往往还会给联系人进行分组。通过这个列表和分组信息,我们就可以知道用户的社交网络关系,而通过统计用户之间聊天的频繁程度,可以度量出用户之间的熟悉程度。
    • 社交网站
      社交网站是研究用户关系的绝佳地点,例如Facebook中的绝大多数用户联系基于社交图谱:由人们之间的亲属关系、工作关系而形成;Twitter中的绝大多数用户联系基于兴趣图谱:通过人们之间的共同兴趣和信念形成。

    社交网络定义了用户之间的联系,我们通常用图描述社交网络。一般来说,有3种不同的社交网络数据:

    • 双向确认的社交网络数据
      以Facebook和人人网为代表,用户之间形成好友关系需要通过双方的确认;
    • 单向关注的社交网络数据
      以Twitter和新浪微博为代表,用户A可以关注用户B,而不用得到用户B的允许;
    • 基于社区的社交网络数据
      用户之间并没有明确的关系,但同在一个社区。比如豆瓣小组,属于同一个小组可能代表了用户兴趣的相似性;

    3. 通用推荐模型

    3.1. 协同过滤推荐

    3.1.1. 基于邻域的模型

    基于邻域的算法分为两大类,一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法。

    (1)基于用户的协同过滤算法 UserCF

    在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和A有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有关注过的物品推荐给A。这种方法称为基于用户的协同过滤算法(UserCF)。

    基于用户的协同过滤算法主要包括两个步骤:

    • 找到和目标用户兴趣相似的用户集合
    • 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品,推荐给目标用户

    算法的关键是计算两个用户的兴趣相似度。协同过滤算法主要利用用户兴趣列表的相似度计算用户兴趣的相似度,给定用户 uuvv,令 N(u)N(u) 表示用户 uu 曾经有过兴趣的物品集合,N(v)N(v) 表示用户 vv 曾经有过兴趣的物品集合。

    计算用户兴趣相似度的方法有3种:

    • Jaccard公式wuv=N(u)N(v)N(u)N(v)w_{uv}=\frac{|N(u)\cap N(v)|}{|N(u)\cup N(v)|}
    • 余弦相似性wuv=N(u)N(v)N(u)N(v)w_{uv}=\frac{|N(u)\cap N(v)|}{\sqrt{|N(u)||N(v)|}}
    • 改进的余弦相似性wuv=iN(u)N(v)1log(1+N(i))N(u)N(v)w_{uv}=\frac{\sum_{i\in N(u)\cap N(v)}\frac{1}{\log(1+|N(i)|)}}{\sqrt{|N(u)||N(v)|}}其中1log(1+N(i))\frac{1}{\log(1+|N(i)|)}降低了用户uu和用户vv的共同兴趣列表中热门物品对用户相似度的影响

    得到了用户之间的兴趣相似度之后,就要将用户兴趣列表转换为“物品-用户”倒排表,即对每个物品建立一个喜欢它的用户的列表,以此来给用户推荐与他兴趣最相似的KK个用户喜欢的物品。如下的公式度量了UserCF算法中用户uu对物品ii的感兴趣程度:p(u,i)=vS(u,K)N(i)wuvrvip(u,i)=\sum_{v\in S(u,K)\cap N(i)}w_{uv}r_{vi}其中S(u,K)S(u,K)包含和用户uu兴趣最接近的KK个用户,N(i)N(i)是对物品ii有过行为的用户集合,wuvw_{uv}是用户uu和用户vv的兴趣相似度,rvir_{vi}代表用户vv对物品ii的兴趣。一般情况下,如果使用的是单一行为的隐反馈数据,那所有的rvi=1r_{vi}=1

    例如用户AABBCCDD和物品aabbccddee有如下用户兴趣列表:

    用户 兴趣物品列表
    AA aabbdd
    BB aacc
    CC bbee
    DD ccddee

    用余弦相似度计算用户兴趣相似度:
    wAB={a,b,d}{a,c}{a,b,d}{a,c}=16w_{AB}=\frac{|\{a,b,d\}\cap \{a,c\}|}{\sqrt{|\{a,b,d\}||\{a,c\}|}}=\frac{1}{\sqrt{6}}

    wAC={a,b,d}{b,e}{a,b,d}{b,e}=16w_{AC}=\frac{|\{a,b,d\}\cap \{b,e\}|}{\sqrt{|\{a,b,d\}||\{b,e\}|}}=\frac{1}{\sqrt{6}}

    wAD={a,b,d}{c,d,e}{a,b,d}{c,d,e}=13w_{AD}=\frac{|\{a,b,d\}\cap \{c,d,e\}|}{\sqrt{|\{a,b,d\}||\{c,d,e\}|}}=\frac{1}{3}

    通过比较我们可以知道用户AA与用户DD的兴趣相似度最高,所以我们从用户DD的兴趣列表中选取物品推荐给用户AA。此时我们需要计算用户AA与用户DD兴趣列表中的物品的感兴趣程度。首先建立“物品-用户”倒排表:

    物品 喜欢该物品的用户
    aa AABB
    bb AACC
    bb BBDD
    dd AADD
    ee CCDD

    从倒排表我们可以看出,用户AA的兴趣物品 aabbdd 在用户 BBCCDD 中分别有分布,所以可以计算用户 AA 与用户 BBCCDD 的兴趣列表中物品的感兴趣程度,所以这里取K=3K=3p(A,c)=wAB+wAD=0.7416p(A,c)=w_{AB}+w_{AD}=0.7416

    p(A,e)=wAC+wAD=0.7416p(A,e)=w_{AC}+w_{AD}=0.7416

    根据计算结果,我们可以知道用户 AA 对物品 ccee 的兴趣一致,因此我们可以任意推荐他们其中一个,或者一起推荐给用户 AA。需要注意的是我们没有计算 p(A,a)p(A,a)p(A,b)p(A,b)p(A,d)p(A,d),这是因为物品 aabbdd 已经在用户 AA 的兴趣列表中了,所以没必要再推荐。

    (2)基于物品的协同过滤算法 ItemCF

    基于物品的协同过滤算法用于给用户推荐那些与他们之前喜欢的物品相似的物品。

    ItemCF算法主要通过分析用户的行为记录来计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。

    基于物品的协同过滤算法主要分为两步:

    1. 计算物品之间的相似度;
    2. 根据物品的相似度和用户的历史行为给用户生成推荐列表。

    我们给定物品iijj,设N(i)N(i)为喜欢物品ii的用户数,N(j)N(j)为喜欢物品jj的用户数,则物品iijj的相似度可以表达为:

    • Jaccard公式wij=N(i)N(j)N(i)w_{ij}=\frac{|N(i)\cap N(j)|}{|N(i)|}上述公式可以理解为喜欢物品 ii 的用户中有多少比例的用户也喜欢物品 jj
    • 余弦相似性wij=N(i)N(j)N(i)N(j)w_{ij}=\frac{|N(i)\cap N(j)|}{\sqrt{|N(i)||N(j)|}}该公式降低了热门物品会和很多物品相似的可能性,可以避免推荐出热门的物品。
    • 改进的余弦相似性wij=uN(i)N(j)1log(1+N(u))N(i)N(j)w_{ij}=\frac{\sum_{u\in N(i)\cap N(j)}\frac{1}{\log(1+|N(u)|)}}{\sqrt{|N(i)||N(j)|}}其中1log(1+N(i))\frac{1}{\log(1+|N(i)|)}对余弦相似性进行了修正,使得活跃用户对物品相似度的贡献大于不活跃的用户。

    提一句,如果将ItemCF的相似度矩阵 ww 按最大值归一化,可以提高推荐的准确率,归一化公式如下:wij=wijmaxjwijw_{ij}'=\frac{w_{ij}}{\max_{j}w_{ij}}

    在ItemCF中,两个物品之所以产生相似度是因为它们共同被很多用户喜欢,即每个用户都可以通过他们的历史兴趣列表给物品“贡献”相似度。也就是说,在得到物品之间的相似度后,我们可以建立一个“用户-物品”倒排表,即对每个用户建立一个包含他喜欢的物品的列表。

    然后通过如下公式计算用户uu对一个物品jj的兴趣度:puj=iN(u)S(j,K)wjiruip_{uj}=\sum_{i\in N(u)\cap S(j,K)}w_{ji}r_{ui}

    这里N(u)N(u)是用户喜欢的物品的集合,S(j,K)S(j,K)是和物品jj最相似的KK个物品的集合,wjiw_{ji}是物品jjii的相似度,ruir_{ui}是用户uu对物品i的兴趣(如果用户uu对物品ii有过行为,即可令rui=1r_{ui}=1)。该公式的含义是,与用户历史上感兴趣的物品越相似的物品,越有可能是用户感兴趣的物品。

    ItemCF的推荐过程可以用如下例子来表示:
    假设已知用户对两个物品A1A_1A2A_2的兴趣度分别为1.3、0.9,现有5个用户未曾见过的新物品,它们与物品A1A_1A2A_2的相似度可以表示为:

    物品 与物品A1A_1的相似度 与物品A2A_2的相似度
    B1B_1 0.7 0
    B2B_2 0.4 0.5
    B3B_3 0 0.5
    B4B_4 0.6 0
    B5B_5 0 0.6

    可得,用户对B1B_1B2B_2B3B_3B4B_4B5B_5的兴趣度分别为:
    puB1=1.30.7=0.91p_{uB_1}=1.3*0.7=0.91

    puB2=1.30.4+0.90.5=0.97p_{uB_2}=1.3*0.4+0.9*0.5=0.97

    puB3=0.90.5=0.45p_{uB_3}=0.9*0.5=0.45

    puB4=1.30.6=0.78p_{uB_4}=1.3*0.6=0.78

    puB5=0.90.6=0.54p_{uB_5}=0.9*0.6=0.54

    由此我们可知,用户可能对物品B2B_2的兴趣度最高,应该向用户推荐物品B2B_2

    (3)UserCF 与 ItemCF 的区别

    特性 UserCF ItemCF
    性能 适用于用户数少于物品数的场合,如果用户很多,计算用户相似度矩阵代价很大 适用于物品数少于用户数的场合,如果物品很多,计算物品相似度矩阵代价很大
    领域 适用于时效性较强,用户个性化兴趣不太明显的领域 适用于长尾物品丰富,用户个性化需求强烈的领域
    实时性 用户有新行为,不一定造成推荐结果的立即变化 用户有新行为,一定会导致推荐结果的实时变化
    冷启动 无法给新用户和物品进行准确推荐 新用户只要对一个物品产生行为,就可以给他推荐和该物品相关的其他物品
    推荐解释 很难提供令用户信服的推荐解释 可以利用用户的历史行为给用户做推荐解释

    3.1.2. 隐语义模型

    LFM(Latent Factor Model)隐语义模型的核心思想是通过隐含特征(Latent Factor)联系用户兴趣和物品,它采取基于用户行为统计的自动聚类,让用户和物品的分类自动化。

    LFM通过如下公式计算用户u对物品i的兴趣:Preference(u,i)=rui=puTqi=f=1Fpu,kqi,kPreference(u,i)=r_{ui}=p_u^Tq_i=\sum_{f=1}^{F}p_{u,k}q_{i,k}

    其中 , pu,kp_{u,k}度量了用户uu的兴趣和第kk个隐类的关系,而qi,kq_{i,k}度量了物品ii和第kk个隐类之间的关系。

    推荐系统的用户行为样本分为正样本(用户喜欢什么物品)和负样本(用户对什么物品不感兴趣)。经过对正负样本的采样,可以得到一个用户—物品集K={(u,i)}K=\{(u,i)\},其中如果(u,i)(u,i)是正样本,则有rui=1r_{ui}=1,否则rui=0r_{ui}=0,然后,通过随机梯度下降法优化如下的损失函数来找到最合适的参数 ppqqC=(u,i)K(ruir^ui)=(u,i)K(ruik=1Kpu,kqi,k)+λpu2+λqi2C=\sum_{(u,i)\in K}(r_{ui}-\hat{r}_{ui})=\sum_{(u,i)\in K}\Bigl(r_{ui}-\sum_{k=1}^{K}p_{u,k}q_{i,k}\Bigr)+\lambda\Vert p_u\Vert^2+\lambda\Vert q_i\Vert^2其中,λpu2+λqi2\lambda\Vert p_u\Vert^2+\lambda\Vert q_i\Vert^2是用来防止过拟合的正则化项,λ\lambda可以通过实验获得。

    随机梯度下降法需要首先对参数 pu,kp_{u,k}qi,kq_{i,k} 分别求偏导数:
    Cpu,k=2qi,k+2λpu,k\frac{\partial C}{\partial p_{u,k}}=-2q_{i,k}+2\lambda p_{u,k}

    Cqi,k=2pu,k+2λqi,k\frac{\partial C}{\partial q_{i,k}}=-2p_{u,k}+2\lambda q_{i,k}

    然后这两个参数沿着方向导数前进,得到如下递推公式:
    pu,k=pu,k+α(qi,kλpu,k)p_{u,k}=p_{u,k}+\alpha(q_{i,k}-\lambda p_{u,k})

    qi,k=qi,k+α(pu,kλqi,k)q_{i,k}=q_{i,k}+\alpha(p_{u,k}-\lambda q_{i,k})其中,α\alpha指学习速率(Learning Rate),是一个可调参数。

    LFM和基于领域的方法区别大致如下:

    特性 LFM 基于邻域
    理论基础 基于机器学习,理论基础好,可以优化参数建立最优模型 基于统计的方法,没有学习过程
    离线计算的空间复杂度 O(F(M+N))O(F*(M+N)),其中FF指隐类的个数,MM指用户数,NN指物品数 UserCF:O(MM)O(M*M),ItemCF:O(NN)O(N*N)。其中MM指用户数,NN指物品数
    离线计算的时间复杂度 O(KFS)O(K*F*S),其中FF指隐类的个数,SS指迭代次数 UserCF:O(N(K/N)2)O(N*(K/N)^2),ItemCF:O(M(K/M)2)O(M*(K/M)^2)。其中MM指用户数,NN指物品数,KK指用户对物品行为记录的总数
    在线实时推荐 不能实时推荐,不适用于物品数量庞大的系统 可以实时推荐
    推荐解释 解释性不强 解释性好

    3.1.3. 基于图的模型

    用户对物品的行为很容易用二分图表示,已知用户行为数据是由一系列二元组组成的,其中每个二元组(u,i)(u, i)表示用户uu对物品ii产生过行为,这样的数据可以用二分图G(V,E)G(V,E)表示,其中 V=VUVIV=V_U\cup V_I 由用户顶点集合VUV_U和物品顶点集合VIV_I组成。

    对于数据集中的每一个二元组(u,i)(u,i),都有一套对应的边e(vu,vi)e(v_u,v_i),其中vuVUv_u\in V_U是用户uu对应的顶点,viVIv_i\in V_I是物品ii对应的顶点,如下表和图所示:

    用户 兴趣物品列表
    AA aabbdd
    BB aacc
    CC bbee
    DD ccddee

    表示为二分图:

    A
    a
    b
    d
    B
    c
    C
    e
    D

    可以看到在上图中,圆形结点为一个分割,矩形结点为另一个分割。

    要将个性化推荐算法放到二分图模型上,那么给用户uu推荐物品的任务就可以转化为度量用户顶点vuv_uvuv_u没有边直接相连的物品节点在图上的相关性,相关性越高的物品在推荐列表中的权重就越高。

    相关性高的一对顶点,一般具有以下特征:

    • 两个顶点之间有很多路径相连;
    • 链接两个顶点之间的路径长度都比较短;
    • 链接两个顶点之间的路径不会经过出度比较大的顶点。

    基于上面3个主要因素,研究人员设计了很多计算图中顶点之间相关性的方法,这里讲解基于随机游走的PageRank和PersonalRank算法。

    (1)PageRank算法

    PageRank是用来衡量特定网页相对于搜索引擎中其他网页的重要性的算法,其计算结果作为Google搜索结果中网页排名的重要指标。

    网页之间通过超链接相互连接,互联网上不计其数的网页就构成了一张超大的图。PageRank假设用户从所有网页中随机选择一个网页进行浏览,然后通过超链接在网页直接不断跳转。到达每个网页后,用户有两种选择:到此结束或者继续选择一个链接浏览。

    设用户继续浏览的概率为α\alpha,用户以相等的概率在当前页面的所有超链接中随机选择一个继续浏览。当经过很多次这样的随机游走之后,每个网页被访问用户访问到的概率就会收敛到一个稳定值。

    算法迭代关系式如下所示:PR(v)=1αN+αvin(v)PR(v)out(v)PR(v)=\frac{1-\alpha}{N}+\alpha\sum_{v'\in in(v)}\frac{PR(v')}{|out(v')|}

    其中PR(v)PR(v)是网页vv被访问的概率(也就是重要性程度),α\alpha是用户继续访问网页的概率,NN是网页总数。in(v)in(v)表示指向网页vv的网页集合(入度),out(v)out(v')表示网页vv'指向的网页集合(出度)。

    将网页替换为其他物品同理。

    (2)PersonalRank算法

    PersonalRank跟PageRank的区别只在于每一步概率的取值不一样,PersonalRank用rvr_v替换了1/N1/N,也就是说PersonalRank走到任意的下一个节点的概率服从均匀分布。

    公式表达为:PR(v)=(1α)rv+αvin(v)PR(v)out(v)PR(v)=(1-\alpha)r_v+\alpha\sum_{v'\in in(v)}\frac{PR(v')}{|out(v')|}其中rv={1,v=vu0,vvur_v = \begin{cases} 1, & v=v_u \\ 0, & v\neq v_u \end{cases}vuv_u是指用户uu对应的节点

    为了PersonalRank的时间复杂度,可以从矩阵论出发重新设计算法。

    MM为用户物品二分图的转移概率矩阵,即:M(v,v)=1out(v)M(v,v')=\frac{1}{|out(v)|}那么,迭代公式可以转化为:r=(1α)rv+αMTr=(1α)(1αMT)1rv\begin{aligned} r & = (1-\alpha)r_v+\alpha M^Tr \\ & = (1-\alpha)(1-\alpha M^T)^{-1}r_v \\ \end{aligned}

    用PersonalRank算法对上面的示例中的用户AA进行推荐,可得如下结果:

    用户 AA 和物品 ccee 没有边相连,但是用户 AA 和物品 cc 有三条长度为 33 的路径相连,用户 AA 和物品 ee 有两条长度为 33 的路径相连。那么,顶点 AAee 之间的相关性就要高于顶点 AAcc,因而物品 ee 在用户 AA 的推荐列表中应该排在物品 cc 之前。最终得出的推荐列表为{c,e}\{c,e\}

    用户AA与物品cc的路径:

    A
    a
    b
    d
    B
    c
    C
    e
    D
    A
    a
    b
    d
    B
    c
    C
    e
    D
    A
    a
    b
    d
    B
    c
    C
    e
    D

    用户AA与物品ee的路径:

    A
    a
    b
    d
    B
    c
    C
    e
    D
    A
    a
    b
    d
    B
    c
    C
    e
    D

    3.2. 基于内容的推荐

    基于内容推荐的原理是根据用户感兴趣的物品A,找到和A内容信息相近的物品B。内容信息是指用户和物品本身的内容特征,如用户的地理位置、性别、年龄,电影物品的导演、演员、发布时间等。比如用户喜欢看《神探夏洛克第一季》,那么就给他推荐《神探夏洛克第二季》。

    基于内容推荐的优点如下:

    • 简单、有效,推荐结果直观,容易理解,不需要领域知识;
    • 不需要用户的历史数据,如对对象的评价等;
    • 没有物品冷启动的问题;
    • 没有稀疏问题;
    • 算法成熟,如数据挖掘、聚类分析等。

    基于内容的推荐的缺点如下:

    • 特征提取能力有限
      比如图像、视频,没有有效的特征提取方法。即便是文本资源,特征提取也只能反应一部分内容,难以提取内容质量,会影响用户满意度。
    • 很难出现新的推荐结果
      根据用户兴趣的喜好进行推荐,很难出现惊喜。对于时间敏感的内容,如新闻,推荐内容基本相同,体验度较差。
    • 存在用户冷启动的问题
      当新用户出现时, 系统较难获得该用户的兴趣偏好,无法进行有效推荐。
    • 推荐对象内容分类方法需要的数据量较大

    3.3. 基于关联规则的推荐

    关联规则是反映一个事物与其他事物之间的相互依存性和关联性,常用于实体商店或在线电商的推荐系统:通过对顾客的购买记录数据库进行关联规则挖掘,最终目的是发现顾客群体的购买习惯的内在共性。

    关联规则分析中的关键概念包括:支持度(Support)、置信度(Confidence)与提升度(Lift):

    • 支持度 Support
      支持度是两件商品AABB在总销售笔数NN中出现的概率,即AABB同时被购买的概率Support(AB)=Freq(AB)NSupport(A\cap B)=\frac{Freq(A\cap B)}{N}

    • 置信度 Confidence
      置信度是购买AA后再购买BB的条件概率。简单来说就是交集部分CCAA中比例,如果比例大说明购买AA的客户很大可能会购买BB商品Confidence=Freq(AB)Freq(A)Confidence=\frac{Freq(A\cap B)}{Freq(A)}

    • 提升度 Lift
      提升度表示先购买A对购买B的概率的提升作用,用来判断规则是否有实际价值,即使用规则后商品在购物车中出现的次数是否高于商品单独出现在购物车中的频率。如果大于1说明规则有效,小于1则无效Lift=Support(AB)Support(A)Support(B)Lift=\frac{Support(A\cap B)}{Support(A)*Support (B)}

    例如在某电商平台上,可乐和薯片的关联规则的支持度是20%,购买可乐的支持度是3%,购买薯片的支持度是5%,则提升度为:Lift=0.20.030.05=1.33Lift=\frac{0.2}{0.03*0.05}=1.33这说明购买可乐对购买薯片有提升效果。

    该提升效果的置信度为:Confidence=Freq(AB)Freq(A)=0.2N0.03N=6.67Confidence=\frac{Freq(A\cap B)}{Freq(A)}=\frac{0.2N}{0.03N}=6.67

    3.4. 基于知识的推荐

    基于知识的推荐(Knowledge-based Recommendation),主要应用于知识型的产品中,主要解决的问题是,为用户定制个性化的进阶路线图。

    比如用户想学习钢琴,如果该用户是刚入门的小白,那最好从简单的谱子学起。但这样带来一个问题,由于用户的历史行为都在初级范围之内,根据兴趣偏好,推荐给用户的信息也都在初级范围,无法满足用户的进阶需求。

    这个时候就需要基于知识的推荐。推荐系统知道用户现在所处的知识级别(用户知识),也知道学习钢琴所有的级别(产品知识),然后根据用户当前的情况为用户推荐合适的进阶信息。

    精确的定义表达为:基于知识的推荐使用用户知识和产品知识, 通过推理什么产品能满足用户需求来产生推荐。这种推荐系统不依赖于用户评分等关于用户偏好的历史数据, 故其不存在冷启动方面的问题。基于知识的推荐系统响应用户的即时需求, 当用户偏好发生变化时不需要任何训练。

    例如某论文针对海量习题带来的信息过载导致学习针对性不强、效率不高等问题,提出了基于知识点层次图的个性化习题推荐算法。

    该算法首先根据课程知识点体系结构的特点,构建了表征知识点层次关系的权重图,该权重图有效反映知识点间的层次关系。然后,根据学生对知识点的掌握情况,在知识点层次图的基础上提出了一种个性化习题推荐算法。该算法通过更新学生-知识点失分率矩阵,获取学生掌握薄弱的知识点,以此实现习题推荐。

    3.5. 基于标签的推荐

    3.5.1. 基于标签推荐物品

    拿到了用户标签行为数据之后,可以通过如下步骤设计一个推荐算法:

    • 统计每个用户最常用的标签;
    • 对于每个标签,统计被打过这个标签次数最多的物品;
    • 找到一个用户常用的标签,然后找到具有这些标签的最热门物品推荐给这个用户。

    在第三步中,就是要找到用户所标记标签中有哪些物品是他最感兴趣的,可以通过以下兴趣公式计算:

    • 简单标签算法p(u,i)=bnu,bnb,ip(u,i)=\sum_{b}n_{u,b}n_{b,i}其中,nu,bn_{u,b}是用户uu打过标签bb的次数,nb,in_{b,i}是物品ii被打过标签bb的次数
    • TF-IDF标签算法p(u,i)=bnu,blog(1+nb(u))nb,ip(u,i)=\sum_{b}\frac{n_{u,b}}{\log(1+n_b^{(u)})}n_{b,i}其中,nb(u)n_b^{(u)}记录了标签bb被多少个不同的用户使用过。这个公式可以给热门标签更小的权重,从而反应用户个性化的兴趣
    • 改进的TF-IDF标签算法p(u,i)=bnu,blog(1+nb(u))nb,ilog(1+ni(u))p(u,i)=\sum_{b}\frac{n_{u,b}}{\log(1+n_b^{(u)})}\frac{n_{b,i}}{\log(1+n_i^{(u)})}其中,ni(u)n_i^{(u)}记录了物品ii被多少个不同的用户打过标签。这个公式可以给热门物品更小的权重,从而反应用户个性化的兴趣。

    TF-IDF 公式(Term Frequency-Inverse Document Frequency, 词频-逆文件频率)是文本分析领域的著名公式,它用于计算词的权重:wi=TF(ei)log(IDF(ei))w_i=\frac{TF(e_i)}{\log(IDF(e_i))}其中,(TF)=ei词频(TF)=\frac{e_i在文本中出现的次数}{该文本中出现次数最多的词的出现次数}(IDF)=log(+1)逆文档频率(IDF)=\log(\frac{文本总数}{包含该关键词的文本数+1})

    众多的标签并不是一个个标签孤岛,实际上,大多数标签之间都有一定的联系,例如“强化学习”和“多臂老虎机算法”、“Q学习”三个不一样的标签相交于同一领域,为了衡量不同标签之间的相关性,我们这里介绍一种基于邻域的标签扩展方法,即对每个标签找到和它相似的标签,也就是计算标签之间的相似度。

    如果认为同一个物品上的不同标签具有某种相似度,那么当两个标签同时出现在很多物品的标签集合中时,我们就可以认为这两个标签具有较大的相似度。对于标签bb,令N(b)N(b)为被打上标签bb的物品的集合,nb,in_{b,i}为给物品ii打上标签bb的用户数,我们可以通过如下余弦相似度公式计算标签bb和标签bb'的相似度:sim(b,b)=iN(b)N(b)nb,inb,iiN(b)nb,i2iN(b)nb,i2sim(b,b')=\frac{\sum_{i\in N(b)\cap N(b')}n_{b,i}n_{b',i}}{\sqrt{\sum_{i\in N(b)}n_{b,i}^2\sum_{i\in N(b')}n_{b',i}^2}}这样的话就可以让那些含义相同的标签相互关联起来。

    同时我们必须注意到,不是所有标签都能反应用户的兴趣。比如,在一个视频网站中,用户可能对一个视频打了一个表示情绪的标签,比如“不好笑”,但我们不能因此认为用户对“不好笑”有兴趣。因此我们需要进行标签清理

    标签清理的另一个重要意义在于将标签作为推荐解释。如果我们要把标签呈现给用户,将其作为给用户推荐某一个物品的解释,对标签的质量要求就很高。一般来说,标签清理有如下几种方法:

    • 去除词频很高的停止词
    • 去除因(词根、翻译、叫法)不同造成的同义词。
    • 去除因分隔符造成的同义词

    此外,为了控制标签的质量,很多网站也采用了让用户进行反馈的思想,即让用户告诉系统某个标签是否合适。

    为了得到更好的推荐效果,我们利用图模型做基于标签数据的个性化推荐,即基于图的标签推荐算法

    该方法首先需要将用户打标签的行为表示到一张图上。在用户标签数据集上,有3种不同的元素,即用户、物品和标签,因此,我们需要定义3种不同的顶点,即用户顶点、物品顶点和标签顶点。这样就得到了一个表示用户uu给物品ii打了标签bb的用户标签行为(u,i,b)(u,i,b)

    如下所示用户—物品—标签图包含3个用户(AABBCC)、3个物品(aabbcc)和3个标签(112233

    在这里插入图片描述
    对应的用户标签行为列表为:

    用户 标签 物品
    AA 22 bb
    AA 22 cc
    BB 11 aa
    CC 33 bb

    在定义出用户—物品—标签图后,就可以利用PersonalRank算法计算所有物品节点相对于当前用户节点在图上的相关性,然后按照相关性从大到小的排序,给用户推荐排名最高的NN个物品。

    3.5.2. 给用户推荐标签

    一般认为,给用户推荐标签有以下好处:

    • 方便用户输入标签
      让用户从键盘输入标签无疑会增加用户打标签的难度,这样很多用户不愿意给物品打标签,因此我们需要一个辅助工具来减小用户打标签的难度,从而提高用户打标签的参与度。
    • 提高标签质量
      同一个语义不同的用户可能用不同的词语来表示。这些同义词会使标签的词表变得很庞大,而且会使计算相似度不太准确。而使用推荐标签时,我们可以对词表进行选择,首先保证词表不出现太多的同义词,同时保证出现的词都是一些比较热门的、有代表性的词

    用户uu给物品ii打标签时,我们有四种简单方法可以给用户推荐和物品ii相关的标签:

    • PopularTags
      给用户uu推荐整个系统里最热门的标签
    • ItemPopularTags
      给用户uu推荐物品ii上最热门的标签
    • UserPopularTags
      用户uu推荐他自己经常使用的标签
    • HybridPopularTags
      给用户推荐物品ii上最热门的标签,且他自己经常使用的标签,通过一个系数将两种方法的推荐结果进行线性加权,然后生成最终的推荐结果。

    同样的,图模型也可以应用于标签推荐,在根据用户打标签的行为生成图之后,再利用PersonalRank算法进行排名。此时顶点的启动概率定义如下rv(k)={α,v(k)=v(u)1α,v(k)=v(i)0,otherwiser_{v(k)} = \begin{cases} \alpha, & v(k)=v(u) \\ 1-\alpha, & v(k)=v(i) \\ 0,& \text{otherwise} \end{cases}

    也就是说,只有用户uu和物品ii对应的顶点有非0的启动概率,而其他顶点的启动概率都为0。

    3.6. 基于社交网络的推荐

    3.6.1. 给用户推荐内容

    社会化推荐受到很多网站的重视,因为其有如下优点:

    • 好友推荐可以增加推荐的信任度
      好友往往是用户最信任的。用户往往不一定信任计算机的智能,但会信任好朋友的推荐;
    • 社交网络可以缓解冷启动问题
      当一个新用户通过微博或者Facebook账号登录网站时,我们可以从社交网站中获取用户的好友列表,然后给用户推荐好友在网站上喜欢的物品。从而我们可以在没有用户行为记录时就给用户提供较高质量的推荐结果。

    (1)基于邻域的社会化推荐算法

    最简单算法是给用户推荐好友喜欢的物品集合,设用户 uu 对物品 ii 的兴趣 puip_{ui},则有如下公式:pui=vout(u)rvip_{ui}=\sum_{v\in out(u)}r_{vi}其中 out(u)out(u) 是用户 uu 的好友集合,如果用户 vv 喜欢物品 ii,则 rvi=1r_{vi}=1,否则 rvi=0r_{vi}=0

    不过显然的,不同的好友和用户uu的熟悉程度和兴趣相似度是不同的。因此,我们应该在推荐算法中应该考虑好友和用户的熟悉程度以及兴趣相似度:pui=vout(u)wuvrvip_{ui}=\sum_{v\in out(u)}w_{uv}r_{vi}其中wuvw_{uv}由两部分相似度构成,一部分是用户uu和用户vv的熟悉程度,另一部分是用户uu和用户vv的兴趣相似度,两者按照一定权重组合成wuvw_{uv}

    用户 uu 和用户 vv 的熟悉程度(familiarity)描述了两个用户在现实社会中的熟悉程度,如果用户 uu 和用户 vv 很熟悉,那么一般来说他们应该有很多共同的好友:familiarity=out(u)out(v)out(u)out(v)familiarity=\frac{|out(u)\cap out(v)|}{|out(u)\cup out(v)|}

    用户uu和用户vv的兴趣相似度(similarity)描述了两个用户喜欢的物品集合重合度:similarity=N(u)N(v)N(u)N(v)similarity=\frac{|N(u)\cap N(v)|}{|N(u)\cup N(v)|}其中N(u)N(u)是用户uu喜欢的物品集合

    (2)基于图的社会化推荐算法
    图模型的优点是可以将各种数据和关系都表示到图上去,应用到社交网站中,可以找出两种关系,一种是用户对物品的兴趣关系,一种是用户之间的社交网络关系。

    用户的社交网络可以表示为社交网络图,用户对物品的行为可以表示为用户物品二分图,而这两种图可以结合成一个图,例如下图中的用户顶点(圆圈)和物品顶点(方块)
    在这里插入图片描述
    在定义完图中的顶点和边后,需要定义边的权重。其中用户和用户之间边的权重可以定义为用户之间相似度的α\alpha倍(包括熟悉程度和兴趣相似度),而用户和物品之间的权重可以定义为用户对物品喜欢程度的 β\beta倍。之后就可以利用PersonalRank图排序算法给每个用户生成推荐结果。

    在社交网络中,除了常见的、用户和用户之间直接的社交网络关系,还有一种关系,即两个用户属于同一个社群

    为了表达这种社群关系,可以加入一种节点表示社群(下图最左边一列的节点),而如果用户属于某一社群,图中就有一条边联系用户对应的节点和社群对应的节点。在建立完图模型后,我们就可以通过前面提到的基于图的推荐算法(比如PersonalRank)给用户推荐物品。
    在这里插入图片描述

    (3)信息流推荐
    在大多数社交软件中,我们都可以通过信息流看到好友最近的言论,但信息流里面夹杂了很多用户并不关心的信息。基于信息流的推荐就是进一步帮助用户从信息流中挑选有用的信息。

    目前最流行的信息流推荐算法是Facebook的EdgeRank,该算法综合考虑了信息流中每个会话的时间、长度与用户兴趣的相似度,它的主要思想为:

    将其他用户对当前用户信息流中的会话产生过行为的行为称为edge,而一条会话的权重定义为:edges euewede\sum_{\text{edges } e}u_ew_ed_e其中:ueu_e 指产生行为的用户和当前用户的相似度,这里的相似度主要是在社交网络图中的熟悉度;wew_e 指行为的权重,这里的行为包括创建、评论、like(喜欢)、打标签等。ded_e 指时间衰减参数,越早的行为对权重的影响越低。

    从上面的算法描述中可以得出看出在该算法中:如果一个会话被你熟悉的好友最近产生过重要的行为,它就会有比较高的权重。

    3.6.2. 给用户推荐好友

    好友推荐系统的目的是根据用户现有的好友、用户的行为记录给用户推荐新的好友,从而增加整个社交网络的稠密程度和社交网站用户的活跃度。好友推荐算法在社交网络上被称为链接预测(Link Prediction),主要包括以下几种场景:

    (1)基于内容的匹配
    可以给用户推荐和他们有相似内容属性的用户作为好友。下面给出了常用的内容属性:

    • 用户人口统计学属性,包括年龄、性别、职业、毕业学校和工作单位等
    • 用户的兴趣,包括用户喜欢的物品和发布过的言论等
    • 用户的位置信息,包括用户的住址、IP地址和邮编等

    计算用户在上述内容信息上的相似度就可以找出相似的用户,然后相互推荐。

    (2)基于共同兴趣的好友推荐
    在Twitter和微博为代表的以兴趣图谱为主的社交网络中,用户往往不关心对于一个人是否在现实社会中认识,而只关心是否和他们有共同的兴趣爱好。因此,在这种网站中需要给用户推荐和他有共同兴趣的其他用户作为好友。

    因此可以基于用户的利用协同过滤算法(UserCF)计算用户之间的兴趣相似度,其主要思想就是如果用户喜欢相同的信息和内容,则说明他们具有相似的兴趣。此外,也可以根据用户在社交网络中的发言提取用户的兴趣标签,来计算用户的兴趣相似度。

    (3)基于社交网络图的好友推荐
    基于好友的好友推荐算法可以用来给用户推荐他们在现实社会中互相熟悉,而在当前社交网络中没有联系的其他用户。

    介绍3种基于社交网络的好友推荐算法:

    • 指出相似度wout(u,v)=out(u)out(v)out(u)out(v)w_{out}(u,v)=\frac{|out(u)\cap out(v)|}{\sqrt{|out(u)||out(v)|}}其中out(u)out(u)是在社交网络图中用户uu指向的其他好友的集合
    • 指入相似度win(u,v)=in(u)in(v)in(u)in(v)w_{in}(u,v)=\frac{|in(u)\cap in(v)|}{\sqrt{|in(u)||in(v)|}}其中in(u)in(u)是指在社交网络图中指向用户uu的其他好友的集合
    • 互指相似度wout,in(u,v)=out(u)in(v)out(u)w_{out,in}(u,v)=\frac{|out(u)\cap in(v)|}{|out(u)|}这个相似度的含义是用户uu指向的用户中,有多大比例也指向了用户vv
    • 改进的互指相似度wout,in(u,v)=out(u)in(v)out(u)in(v)w_{out,in}(u,v)=\frac{|out(u)\cap in(v)|}{\sqrt{|out(u)||in(v)|}}这个公式考虑了指入的因素,可以避免出现网红被当做好友被推荐过来的现象。

    4. 冷启动问题

    推荐系统需要根据用户的历史行为和兴趣预测用户未来的行为和兴趣,因此大量的用户行为数据就成为推荐系统的重要组成部分和先决条件。因此很多在开始阶段就希望有个性化推荐应用的网站来说,如何在没有大量用户数据的情况下设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统,就是冷启动(Cold Start)的问题。

    冷启动主要分3类:

    • 用户冷启动
      用户冷启动主要解决如何给新用户做个性化推荐的问题。当新用户到来时,我们没有他的行为数据,所以也无法根据他的历史行为预测其兴趣,从而无法借此给他做个性化推荐。
    • 物品冷启动
      物品冷启动主要解决如何将新的物品推荐给可能对它感兴趣的用户这一问题。
    • 系统冷启动
      系统冷启动主要解决如何在一个新开发的网站上(物品信息远多于用户行为信息)设计个性化推荐系统,从而在网站刚发布时就让用户体验到个性化推荐服务这一问题。

    对于这3类不同的冷启动问题,有不同的解决方案。一般来说,可以参考如下解决方案:

    4.1. 利用用户注册信息

    显而易见,利用用户的注册信息可以很好地缓解注册用户的冷启动问题。用户的注册信息分3种:

    • 人口统计学信息
      包括用户的年龄、性别、职业、民族、学历和居住地;
    • 用户兴趣的描述
      有一些网站会让用户用文字描述他们的兴趣;
    • 站外行为数据
      比如用户通过豆瓣、新浪微博的账号登录,就可以在得到用户同意的情况下获取用户在豆瓣或者新浪微博的一些行为数据和社交网络数据

    基于注册信息的个性化推荐流程基本如下:

    1. 获取用户的注册信息
    2. 根据用户的注册信息对用户分类
    3. 给用户推荐他所属分类中用户喜欢的物品

    如图所示新用户,资料显示他是一位28岁的男性,是一位物理学家。然后,查询3张离线计算好的相关表:

    • 性别-电视剧相关表。从中可以查询男性最喜欢的电视剧;
    • 年龄-电视剧相关表,从中可以查询到28岁用户最喜欢的电视剧;
    • 职业-电视剧相关表,可以查询到物理学家最喜欢的电视剧。

    然后,我们可以将用这3张相关表查询出的电视剧列表按照一定权重相加,得到给用户的最终推荐列表。
    在这里插入图片描述

    基于用户注册信息的推荐算法其核心问题是计算每种特征的用户喜欢的物品。也就是说,对于每种特征ff,计算具有这种特征的用户对各个物品的兴趣程度p(f,i)p(f,i)。有计算两种方法:

    • 物品 ii 在具有 ff 特征的用户中的热门程度p(f,i)=N(i)U(f)p(f,i)=|N(i)\cap U(f)|其中 N(i)N(i) 是喜欢物品 ii 的用户集合,U(f)U(f) 是具有特征 ff 的用户集合
    • 喜欢物品 ii 的用户中具有特征 ff 的比例p(f,i)=N(i)U(f)N(i)+αp(f,i)=\frac{|N(i)\cap U(f)|}{|N(i)|+\alpha}其中,参数 α\alpha 用于解决数据稀疏问题。比如有一个物品只被1个用户喜欢过,而这个用户刚好就有特征 ff,那么就有 p(f,i)=1p(f,i)=1 。但是,这种情况并没有统计意义,因此我们为分母加上一个比较大的数,可以避免这样的物品产生比较大的权重。

    通过p(f,i)p(f,i)我们就可以知道什么样的用户适合推荐什么样的物品,从而可以进行粗粒度推荐,在一定程度上缓解冷启动问题。

    4.2. 提供非个性化推荐启动用户需求

    解决用户冷启动问题的另一个方法是在新用户第一次访问推荐系统时,不立即给用户展示推荐结果,而是给用户提供一些物品,让用户反馈他们对这些物品的兴趣,用这些反馈启动用户兴趣,然后根据用户兴趣给提供个性化推荐。

    一般来说,能够用来启动用户兴趣的物品需要具有以下特点:

    • 比较热门
      如果要让用户对一个物品进行反馈,就需要选用用户知晓的物品;
    • 具有代表性和区分性
      启动用户兴趣的物品不能是大众化或老少皆宜的,因为这样的物品对用户的兴趣没有区分性。;
    • 具有多样性
      在冷启动时,我们不知道用户的兴趣,而用户兴趣的可能性非常多,为了匹配多样的兴趣,我们需要提供具有很高覆盖率的启动物品集合,这些物品能覆盖几乎所有主流的用户兴趣。

    上面这些因素都是选择启动物品时需要考虑的,但如何设计一个选择启动物品集合的系统呢?首先,给定一群用户,可以用这群用户对物品评分的方差来度量这群用户兴趣的一致程度。如果方差很大,说明这一群用户的兴趣不太一致,反之则说明这群用户的兴趣比较一致。令σuU\sigma_{u\in U'}为用户集合UU'中所有评分的方差,可以通过如下方式度量一个物品的区分度D(i)D(i)D(i)=σuN+(i)+σuN(i)+σuN(i)D(i)=\sigma_{u\in N^+(i)}+\sigma_{u\in N^-(i)}+\sigma_{u\in \overline N(i)}

    其中,N+(i)N^+(i)是喜欢物品ii的用户集合, N(i)N^-(i)是不喜欢物品ii的用户集合,N(i)\overline N(i)是没有对物品ii评分的用户集合。

    应用上述公式计算所有物品,就可以从中找到具有最高区分度的物品ii,然后将用户分成3类:喜欢该物品、不喜欢该物品、未评价该物品的用户。然后对每类用户再找到最具区分度的物品,然后将每一类用户又各自分为3类,如此反复组织成一颗树。

    而在用户冷启动时,我们从根节点开始询问用户对该节点物品的看法,然后根据用户的选择将用户放到不同的分枝,直到进入最后的叶子节点,此时我们就已经对用户的兴趣有了比较清楚的了解,从而可以开始对用户进行比较准确地个性化推荐。

    4.3. 利用物品内容信息

    物品冷启动需要解决的问题是如何将新加入的物品推荐给对它感兴趣的用户。物品冷启动在新闻网站等时效性很强的网站中非常重要,因为那些网站中时时刻刻都有新加入的物品,而且每个物品必须能够在第一时间展现给用户,否则经过一段时间后,物品的价值就大大降低了。

    一般来说,物品的内容可以通过向量空间模型表示,例如对于物品dd,由于物品的内容信息中通常包含一些关键词,所以该模型会将物品表示成一个关键词向量di={(e1,w1),(e2,w2),...,(en,wn)}d_i=\{(e_1,w_1),(e_2,w_2),...,(e_n,w_n)\}

    其中, eie_i 就是关键词, wiw_i 是关键词对应的权重。

    在给定物品内容的关键词向量后,物品的内容相似度可以通过向量之间的余弦相似度计算:csij=didjdidjcs_{ij}=\frac{d_i\cdot d_j}{\sqrt{\Vert d_i\Vert\Vert d_j \Vert}}得到物品的相似度之后,就可以利用ItemCF算法的思想,给用户推荐和他历史上喜欢的物品内容相似的物品。

    不过需要注意的是,如果内容信息不足,关键词很少或者不同,向量空间模型就很难计算出准确的相似度。例如有两篇论文,它们的标题分别是“推荐系统的动态特性”和“基于时间的协同过滤算法研究”,这两篇文章的研究方向是类似的,但是它们标题中没有一样的关键词。换句话说,这两篇文章的关键词虽然不同,但关键词所属的话题是相同的。

    在这种情况下,首先需要知道文章的话题分布,然后才能准确地计算文章的相似度。如何建立文章、话题和关键词的关系是话题模型(Topic Model)研究的重点。一种成熟的话题模型是LDA(Latent Dirichlet Allocation)模型

    该模型对一篇文档产生的过程进行了建模,它的基本思想是,一个人在写一篇文档的时候,会首先想这篇文章要讨论哪些话题,然后思考这些话题应该用什么词描述,从而最终用词写成一篇文章。因此,文章和词之间是通过话题联系的。

    在使用LDA计算物品的内容相似度时,我们可以先计算出物品在话题上的分布,然后利用两个物品的话题分布计算物品的相似度。比如,如果两个物品的话题分布相似,则认为两个物品具有较高的相似度,反之则认为两个物品的相似度较低。计算话题分布的相似度可以利用KL散度:DKL(pq)=ip(i)lnp(i)q(i)D_{KL}(p\Vert q)=\sum_{i}^{}p(i)\ln\frac{p(i)}{q(i)}其中ii是指某个物品,ppqq是两个分布,DKLD_{KL}越大说明分布的相似度越低。

    4.4. 发挥专家的作用

    为了在推荐系统建立时就让用户得到比较好的体验,很多系统都利用专家进行标注。例如让专家给电影进行标注,可以得到以下标注分类:

    分类 描述
    心情(Mood) 表示用户观看电影的心情,比如对于《功夫熊猫》观众会觉得很幽默,很兴奋
    剧情(Plot) 包括电影剧情的标签
    类别(Genres) 表示电影的类别,主要包括动画片、喜剧片、动作片等分类
    时间(Time/Period) 电影故事发生的时间
    地点(Place) 电影故事发生的地点
    观众(Audience) 电影的主要观众群
    获奖(Praise) 电影的获奖和评价情况
    风格(Style) 功夫片、全明星阵容等
    态度(Attitudes) 电影描述故事的态度
    画面(Look) 电脑拍摄的画面技术,比如《功夫熊猫》是用电脑动画制作的
    标记(Flag) 主要表示电影有没有暴力和色情内容

    5. 推荐系统实例

    5.1. 外围架构

    推荐系统要发挥强大的作用,除了推荐系统本身,主要还依赖于两个条件——界面展示和用户行为数据,统称为外围架构。目前流行的推荐系统界面大致都包含如下共性:

    • 通过一定方式展示物品
      主要展示物品的标题、缩略图和介绍等
    • 提供了推荐理由
      向用户展示推荐理由可以增加用户对推荐结果的信任度
    • 提供渠道让用户进行反馈
      不断的反馈让推荐算法持续改善用户的个性化推荐体验

    在这里插入图片描述

    按照所收集用户行为数据的规模和是否需要实时存取,不同的行为数据将被存储在不同的媒介中。一般来说,需要实时存取的数据存储在数据库和缓存中,而大规模的非实时地存取数据存储在分布式文件系统(如HDFS)中。

    5.2. 推荐系统架构

    推荐系统联系用户和物品的方式主要有如下图所示的3种。
    在这里插入图片描述

    在第三种方法中,推荐系统需要为用户生成特征,然后对每个特征找到和特征相关的物品,从而最终生成用户的推荐列表。因而,推荐系统的核心任务就被拆解成两部分,一个是如何为给定用户生成特征,另一个是如何根据特征找到物品。

    同时要考虑到,如果要在一个系统中把所有特征和任务都统筹考虑,那么系统将会非常复杂,而且很难通过配置文件方便地配置不同特征和任务的权重。因此,推荐系统需要由多个推荐引擎组成,每个推荐引擎负责一种任务,而推荐系统的任务只是将推荐引擎的结果按照一定权重或者优先级合并、排序然后返回,如下图:
    在这里插入图片描述

    这种做法有两个好处:

    • 方便增删引擎
      控制不同引擎对推荐结果的影响。
    • 可以实现推荐引擎级别的用户反馈
      每一个推荐引擎都代表了一种推荐策略,而不同的用户可能喜欢不同的推荐策略。

    5.3. 推荐引擎架构

    具体到每一种推荐引擎到架构,推荐引擎架构主要包括下图中到三部分:
    在这里插入图片描述

    • 图中A部分负责从数据库或缓存中拿到用户行为数据,通过分析不同行为,生成当前用户的特征向量,如果使用非行为特征,就不需要行为提取和分析模块了,该模块的输出就是用户特征向量。
    • 图中B部分负责将用户的特征向量通过特征-物品相关矩阵转化为初始推荐物品列表。
    • 图中C部分负责对初始的推荐列表进行过滤、排名等处理,从而生成该引擎的最终推荐结果。

    A部分输出的特征向量一般有两种类型,一种是用户的注册信息中可以提取出来的,主要包括用户的人口统计学特征。另一种特征则主要是从用户的行为中计算出来的。

    一个特征向量由特征及其权重组成,在利用用户行为计算特征向量时需要考虑以下因素

    • 用户行为的种类
      在一个网站中,用户可以对物品产生很多不同种类的行为,不同行为对物品特征的权重产生到影响不同,大多时候很难确定什么行为更加重要,一般的标准就是用户付出代价越大的行为权重越高。
    • 用户行为产生的时间
      一般来说,用户近期的行为比较重要,而用户很久之前的行为相对比较次要。
    • 用户行为的次数
      有时用户对一个物品会产生很多次行为。因此用户对同一个物品的同一种行为发生的次数也反映了用户对物品的兴趣,行为次数多的物品对应的特征权重越高。
    • 物品的热门程度
      如果用户对一个很热门的物品产生了行为,反之,如果用户对一个不热门的物品产生了行为,就说明了用户的个性需求。

    对于B部分到特征-物品相关推荐而言。在得到用户的特征向量后,可以根据事先训练好的相关表候选物品集合得到初始推荐列表

    离线相关表存储在数据库中,其存储格式如下:

    src_id dst_id weight
    特征ID 物品ID 权重

    候选物品集合用于保证推荐结果只包含候选物品集合中的物品,即进行筛选。另外,特征—物品相关推荐模块除了给用户返回物品推荐列表,还需要给推荐列表中的每个推荐结果产生一个解释列表,表明这个物品是因为哪些特征推荐出来的。

    在得到初步的推荐列表后,接着按照产品需求对结果进行过滤,过滤掉那些不符合要求的物品。

    候选物品集合与过滤都可以对推荐物品进行筛选,那么应该如何选用呢?
    一般来说,如果可供推荐的物品较少,那么可以考虑候选物品集合的方法。但是如果可供推荐的物品非常多,那么可以考虑在初始推荐列表中加上过滤模块筛选掉一些不满足条件的物品。
    它们最主要的区别在于候选物集合会影响初始推荐列表的生成,而过滤模块是在初始推荐列表上进行操作的。过滤模块可以对推荐结果进行比候选物集合更加精细的控制。

    一般来说,过滤模块会过滤掉以下物品:

    • 用户已经产生过行为的物品
      因为推荐系统的目的是帮助用户发现物品,因此没必要给用户推荐他已经知道的物品;
    • 候选物品以外的物品
      候选物品集合一般有两个来源,一个是产品需求,另一个是用户的选择,过滤模块需要过滤掉不满足这两个条件的物品
    • 某些质量很差的物品
      为了提高用户的体验,推荐系统需要给用户推荐质量好的物品,那么对于一些绝大多数用户反馈都很差的物品,推荐系统需要过滤掉。

    经过过滤后的推荐结果可以在进行排名,一般排名模块需要包括很多不同的子模块,例如:

    • 新颖性排名
      新颖性排名模块的目的是给用户尽量推荐他们不知道的、长尾中的物品。例如通过使用如下公式对推荐结果中热门的物品进行降权:pui=puilog(1+αpopularity(i))p_{ui}=\frac{p_{ui}}{\log(1+\alpha\cdot popularity(i))}此外,也可以引入内容相似度矩阵,因为内容相似度矩阵中与每个物品都相似的物品可以看作不热门物品;
    • 内容多样性
      一是可以将推荐结果按照某种物品的内容属性分成几类,然后在每个类中都选择该类中排名最高的物品进行组合;二是可以让推荐结果尽量来自不同的特征。
    • 时间多样性
      提高时间多样性最关键的地方在于保证推荐系统对用户行为响应的实时性;其次是要在用户没有新的行为时,保证推荐结果每天都有变化,一种实现方法是:记录用户曾经看过的推荐结果,然后对当前推荐结果中将已经看过的推荐结果进行降权。
    • 用户反馈
      用户反馈模块主要通过分析用户之前和推荐结果的交互日志,预测用户会对什么样的推荐结果比较感兴趣
    展开全文
  • 推荐系统源码

    千次下载 热门讨论 2015-07-01 15:12:11
    推荐系统源码
  • 本文主要介绍基于用户/项目的协同过滤推荐算法在音乐推荐系统、图书推荐系统、电影推荐系统、新闻推荐系统、电子商务网站、购物系统中的应用 和实现。 基于用户/项目的协同过滤推荐算法在推荐系统中的应用 目前商用...
  • 推荐系统热门研究方向

    万次阅读 2019-05-12 11:02:22
    推荐系统热门研究方向 1. 大方向 个性化推荐 群组推荐 2. 近期热门研究方向 利用图神经网络来提供可解释性 利用评论来提供可解释性 利用多模态(文本、图像)信息进行融合 利用多个算法进行综合推荐 利用强化学习...
  • 推荐系统系列一:推荐系统介绍

    千次阅读 2019-04-07 20:04:21
    下面内容转自大数据与人工智能微信公众号,由于网络上推荐系统的相关学习资料太多太杂,东拼西凑学习很难摸出门道,同时我也在学习推荐系统,因此我将该系列内容摘录到我的博客,方便大家直接在博客中查看,大家一起...
  • 机器学习推荐系统视频教程

    千人学习 2017-07-09 10:34:40
    机器学习推荐系统视频培训教程概况:课程从推荐系统在机器学习概述开始,详解推荐系统中两大核心算法:协同过滤与隐语义模型。使用Surprise库对电影数据集进行建模推荐,后使用深度学习框架Tensorflow实现一个简易...
  • 推荐系统实战 --- 基于音乐播放推荐

    千次阅读 多人点赞 2020-11-19 19:36:09
    推荐系统每个人都很熟悉这个名词,但是有多少人真正了解过推荐系统的概念。 这期博客将以基于网易云音乐的推荐系统进行一个简单的介绍。 (读到这里不要喷我,我不是网易公司的人但是每个人都有朋友的对吧) 学习此...
  • 推荐系统在我们的生活中无处不在,比如购物网站,视频音乐网站,新闻网站等,那么推荐系统是如何工作的,他是基于什么方式实现的?可以在《推荐系统开发实战》这本书中进行系统的了解和学习,本篇文章是该系列文章的...
  • 本次项目是基于大数据过滤引擎的电影推荐系统–“懂你”电影网站,包含了爬虫、电影网站(前端和后端)、后台管理系统以及推荐系统(Spark)。 项目代码托管于github,大家可以自行下载。 一、爬虫 开发环境...
  • 推荐系统架构

    千次阅读 2018-09-14 15:17:57
     我们从宏观上可以感受到的推荐系统架构如下:通过数据分析得到用户画像,然后通过推荐系统给用户推荐数据。从此图中,我们也可以窥知一个完整的推荐系统至少应该有如下的子系统:用户画像子系统,内容子系统,存储...
  • 推荐系统】基于协同过滤的图书推荐系统

    千次阅读 多人点赞 2018-09-11 10:13:58
    推荐系统一直让我的思绪占据了一段时间,由于我倾向于阅读书籍,因此探索Book Crossing数据集非常吸引人。 在线推荐系统是许多电子商务网站的事情。推荐系统广泛地向最适合其口味和特征的顾客推荐产品。有关推荐...
  • 4:基于标签的推荐系统 5:算法的改进 6:标签推荐 源代码查看地址:github查看 一:联系用户兴趣和物品的方式 推荐系统的目的是联系用户的兴趣和物品,这种联系方式需要依赖不同的媒介。目前流行的推荐系统...
  • 淘宝推荐系统

    千次阅读 2018-11-30 15:52:57
    一、推荐系统概念 1、推荐系统定义 维基百科:推荐系统属于资讯过滤的一种应用。推荐系统能够将可能受喜好的资讯或实物(例如:电影、电视节目、音乐、书籍、新闻、图片、网页)推荐给使用者。 推荐系...
  • 推荐系统介绍

    千次阅读 2018-12-16 11:21:35
    推荐系统 推荐系统是一种信息过滤系统,为了解决信息过载问题 系统组成一般包括日志系统,推荐算法和内容展示UI 其中推荐算法为核心,它一般又可以分为三层:基础层,推荐(召回)层,排序层。基础层为召回层提供...
  • 推荐系统的召回

    千次阅读 2018-08-28 17:16:08
    所谓召回,在刚接触推荐系统的时候可能只看字面意思无法理解召回的意思,召回可以理解为向用户粗选一批待推荐的商品,相当于粗排序。之后会加一层CTR预估的rank模型,相当于精排序 推荐系统的主要模块即为:召回 =&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,135
精华内容 33,254
关键字:

推荐系统