【推荐系统】一、推荐系统简介

1. 推荐系统的作用和意义

​ 在这个时代,无论信息消费者还是信息生产者都面临巨大的挑战。

​     信息消费者:在大量信息中找到自己感兴趣的信息很困难。

​     信息生产者:将自己生产的信息让广大消费者关注很困难。

​ 推荐系统将用户与信息联系起来。

1.1 用户角度

​    推荐系统解决在“信息过载[1]的情况下,用户如何高效获取感兴趣的信息。

    比如:在大量电影、电视剧中无法选择出自己喜欢的,或者不知道自己喜欢的;在购物网站,不知道哪些商品适合自己等。

​    另外,用户大部分时候没有特别明确的需求,因为如果有明确的需求,在搜索框找自己想要的东西就行。

搜索引擎和推荐系统区别:

  • 搜索引擎需要用户主动提供准确的关键词来寻找信息。

  • 推荐系统可以通过分析用户的历史行为给用户的兴趣建模,从而主动给用户推荐能够满足他们兴趣和需求的信息。

  • 两者互补

1.2 公司角度

​    推荐系统解决产品能够最大限度地吸引用户、留存用户、增加用户黏性、提高用户转化率的问题,从而达到公司商业目的。

1.3 物品角度

​    推荐系统可以更好地发掘物品的长尾(Long Tail)[2]

​    主流商品往往代表了绝大多数用户的需求,而长尾商品往往代表了一小部分用户的个性化需求

2. 推荐系统的逻辑架构

推荐系统的本质其实就是要处理 “人”“信息” 之间的关系问题

2.1 信息(Item)

数字时代,信息是关键

​    这种信息,实际上是多种多样的。在商品推荐中是指“商品信息”,在视频推荐中是指“视频信息”,我们将其统称为物品信息

​    物品信息包含了物品的属性、特点等等。

2.2 人(User)

人 才是一切服务的对象

​    从“人”的角度出发,为了更可靠地推测出“人”的兴趣点,推荐系统希望可以利用大量与“人”有关的信息,我们将其统称为用户信息

​    用户信息包含了用户的历史行为、人口属性、关系网等等。

2.3 场景(Context)

环境千差万别,情况也瞬息万变

​    在具体的推荐场景中,用户还会受到不同环境信息的影响,我们将其统称为场景信息上下文信息

​    场景信息包含了例如时间、地点、用户此时的状态的等等。

2.4 推荐系统的形式化定义

​    对于某个用户U(User),在特定的场景 C(Context) 下,针对海量的物品信息构建一个函数,预测用户对于特定候选物品 I(Item) 的喜好程度,再根据喜好程度对所有候选物品进行排序,生成推荐列表的问题。

IMG_0234

3. 推荐系统的技术架构

3.1 两类问题

​     深度学习推荐系统架构和经典的推荐系统架构是一脉相承的,其本质是对经典的推荐系统架构中某些特定的模块进行改进,使之能够支持深度学习的应用,因此经典推荐系统框架仍然具有举足轻重的作用。

​ 实际的推荐系统中,需要着重解决的两类问题:

  1. 数据和信息:用户信息、物品信息、场景信息分别是什么?如何存储、更新和处理这些数据呢?
  2. 算法和模型:推荐系统模型如何训练、预测以及如何达成更好的推荐效果?

“数据和信息”部分逐渐发展为推荐系统中融合了数据离线批处理、实时流处理的数据流框架;

“算法和模型”部分则进一步细化为推荐系统中,集训练(Training)、评估(Evaluation)、部署(Deployment)、线上推断(Online Inference)为一体的模型框架。

IMG_0235

3.2 数据部分

​    数据部分主要负责用户、物品、场景信息的收集和处理。

​    对数据处理实时性由强到弱排序依次为:客户端与服务器端实时数据处理、流处理平台准实时数据处理、大数据平台离线数据处理。

​    即 在得到原始数据信息后,推荐系统的数据处理系统会将原始数据进一步加工。

3.3 模型部分

模型部分是推荐系统的主体

​    模型的结构一般由 召回层排序层 以及 补充策略与算法层 组成。

3.3.1 召回层[3]

​    利用高效的召回规则、算法或简单的模型,快速从海量候选集中召回用户可能感兴趣的物品。

3.3.2 排序层[4]

​    利用排序模型对初筛的候选集进行精排序

1

3.3.3 补充策略与算法层

​    也称为再排序层

​    在将推荐列表返回给用户之前,针对多样性流行度新鲜度 等指标,结合一些补充的策略以及算法对推荐列表进行适当调整,最终形成用户可见的推荐列表。

3.3.4 总结

​    以上模块共同组成了推荐系统模型部分的框架。

​    排序层 模型是推荐系统产生效果的重点,也是研究的重心!

​    召回层就好比歌唱比赛的海选,对于所有数据快速进行筛选。

​    排序层就好比歌唱比赛的晋级赛,从海选通过的选手中选出最好的一部分。

​    最后的补充层就好比决赛,对于本来已经很好的选手,进行最后地选择。

4. 深度学习与推荐系统

深度学习到底给推荐系统带来了什么革命性的影响呢?

​    在逻辑架构中我们知道,居于中心位置的抽象函数 \(f(U,I,C)\) ,负责对用户的内心想法进行“猜测”,为用户可能感兴趣的产品进行打分,最终得到推荐物品列表,这个函数一般称为“推荐系统模型”

​    深度学习应用在推荐系统中,极大地增强了推荐模型的 拟合能力[5]表达能力[6]

​    什么意思呢?

​     如果我们说 \(f(U,I,C)\) 这个函数具有最优的表达形式,那么传统模型只能够拟合出此函数的近似形式,而深度学习模型则可以极大程度地接近这个最优的表达形式。

​     另外,深度学习模型还具备一个无法替代的优势:我们可以让深度学习模型的神经网络模拟很多用户兴趣的变迁过程,甚至用户做出决定的思考过程。(这也是深度学习模型的恐怖之处)

5. 推荐系统评测

什么是好的推荐系统?

​     最开始很多人认为,好的推荐系统就是能够准确预测的推荐系统。实则不然,比如一件商品,某用户早就有想买的打算,不管推荐给他与否他都会买,这样的推荐结果并没有增加此商品的潜在购买人数,因此准确率看起来是很好的指标,但其实是一个很失败的推荐。

​     举一个极端例子:某系统预测明天太阳将在东方升起,虽然准确率可以达到100%,但是这样的预测却没有任何意义。

​     好的推荐系统不仅能够准确预测用户的行为,还可以帮助用户找到自己感兴趣但是却不容易发现的东西。

5.1 推荐系统实验方法

分为 离线实验用户调查在线实验

5.1.1 离线实验

5.1.1.1 步骤

  1. 获得用户行为数据,生成数据集
  2. 将数据集分成训练集和测试集
  3. 在训练集上训练用户兴趣模型,在测试集上进行预测
  4. 通过事先定义的指标评测算法在测试集上的预测结果。

​ 和传统机器学习训练模型过程类似

5.1.1.2 优缺点

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

5.1.2 用户调查

离线实验的指标和商业指标有差距,即高预测准确率并不代表高用户满意度。

​     需要一个较为真实的环境测试算法,最好的办法就是上线测试,但是具有较高的风险,因此上线测试前一般需要做一次用户调查。

5.1.2.1 注意事项

控制成本

​    用户调查的成本很高,需要用户大量时间完成任务并回答问题,有时候甚至需要花钱雇用测试用户。一般大量测试用户耗费成本,而少量测试用户得出的结论往往没有统计意义。因此需要一方面控制成本,一方面保证测试结果。

双盲实验

​    不要让实验人员和用户事先知道测试的目标,以免用户的回答和实验人员的测试受主观成分的影响。

相同分布

​    测试用户需要尽量保证测试用户的分布和真实用户的分布相同,比如男女各半,以及年龄、活跃度的分布都和真实用户分布尽量相同。

5.1.2.2 优缺点

优点 缺点
可以获得很多体现用户主观感受的指标 招募测试用户代价较大、成本较高
相对于在线实验风险较低,容易弥补错误 设计双盲实验困难

5.1.3 在线实验

​     当完成离线测试和用户调查后,可以将推荐系统上线做AB测试[7],将它和旧的算法进行比较。

5.1.3.1 优缺点

优点 缺点
可以公平获得不同算法实际在线是的性能指标 周期较长,需要长期实验才能得到可靠的结果

​     一般不会用AB测试测试所有的算法,只会测试在离线实验和用户调查中表现很好的算法。 一个大型网站的AB测试系统的设计也是一项复杂的工程。

5.1.4 总结

​     一个新的推荐系统最终上线,需要完成如上的三个实验

  1. 需要通过离线实验证明它在很多指标上优于现有算法
  2. 需要通过用户调查确定它的用户满意度不低于现有算法
  3. 需要通过AB测试确定它在我们关心的指标优于现有算法

5.2 评测指标

在以上三种测试中,使用各种评测指标来评价推荐系统各方面的性能。

5.2.1 用户满意度

​     用户作为推荐系统的重要参与者,用户满意度是最重要的指标,但是其无法离线计算,只能在用户调查或在线测试中获得。

​     在在线系统中,用户满意度主要由一些对用户行为的统计得到。比如:

  1. 使用购买率度量用户满意度
  2. 使用用户反馈界面收集用户满意度
  3. 更一般的情况,使用点击率、用户停留时间、转化率等指标度量用户满意度

5.2.2 预测准确度

​     预测准确度度量了一个推荐系统或算法预测用户行为的能力,是最重要的推荐系统离线评测指标

5.2.2.1 评分预测

预测用户对物品的评分

均方根误差(RMSE)

\[\mathrm{RMSE} = \frac{\sqrt{\sum_{u,i\in T}(r_{ui}-\hat{r}_{ui})^2}}{\big|T\big|} \]

平均绝对误差(MAE)

\[\mathrm{MAE} = \frac{\sum_{u,i\in T}\big|r_{ui}-\hat{r}_{ui}\big|}{\big|T\big|} \]

​    其中,\(r_{ui}\) 表示用户u对物品i的实际评分,\(\hat{r}_{ui}\) 代表推荐算法给出的预测评分。

两个指标优缺点

​     RMSE加大了对预测不准的用户评分的惩罚(平方项),因此对系统评测更苛刻。

​     如果评分系统是基于整数建立,对预测结果取整会降低MAE的误差。

5.2.2.2 TopN推荐

给用户一个个性化推荐列表,就是TopN推荐

召回率(Recall)

\[\mathrm{Recall} = \frac{\sum_{u\in U}\big|R(u)\cap T(u)\big|}{\sum_{u\in U}\big|T(u)\big|} \]

准确率(Precision)

\[\mathrm{Precision} =\frac{\sum_{u\in U}\big|R(u)\cap T(u)\big|}{\sum_{u\in U}\big|R(u)\big|} \]

​     有时,为了全面评测两个指标,一般选取不同推荐列表长度N,计算一组准确率/召回率,画出PR曲线[8]

5.2.2.3 关于评分预测和TopN的问题

​     虽然评分预测一直是推荐系统的研究热点,且绝大多数的推荐系统研究都是基于用户评分数据的评分预测。

​     但是有一个十分显而易见的问题,比如:电影推荐的目的是找到用户可能感兴趣的电影,而不是预测用户看了某个电影后会给电影什么样的评分。即预测用户想看什么电影更重要。

​     所以TopN推荐往往比评分预测更有现实意义。

5.2.3 覆盖率

描述一个推荐系统对物品长尾的发掘能力。

​     定义方法不同,一般使用推荐系统能够推荐出的物品占总物品集合的比例来代表覆盖率。

\[\mathrm{Coverage} =\frac{{\Large |} \bigcup_{u \in U} R(u){\Large|}}{\big|I\big| } \]

​     覆盖率是内容提供商较为关心的指标。

​     热门排行榜的推荐覆盖率很低,因为它只会推荐那些热门物品,而这些物品占总物品比例很小。

​     但是以上覆盖率定义过于粗糙,为了更细致地描述推荐系统发掘长尾的能力,需统计推荐列表中不同物品出现次数的分布,如果所有物品都出现在推荐列表中,那么证明发掘长尾的能力较好,即这个分布越平缓,推荐系统的覆盖率越高;这个分布越陡峭,推荐系统的覆盖率越低。

​     使用两种指标定义覆盖率。

信息熵(Information Entropy)

\[H = -\sum_{i=1}^n p(i)\log p(i) \]

​     其中,\(p(i)\) 是物品 \(i\) 的流行度除以所有物品流行度之和。

基尼系数(Gini Index)

\[G = \frac{1}{n-1} \sum_{j=1}^n (2j-n-1)p(i_j) \]

​     其中,\(i_j\) 是按照物品流行度 \(p()\) 从小到大排序的物品列表中第 \(j\) 个物品。

基尼系数计算原理:

IMG_0251

​     我们将物品按照热门程度进行从低到高排序,如上图所示,黑色曲线表示最不热门的 \(x\%\) 物品的总流行度占系统的比例 \(y\%\) 。这条曲线在 \(y=x\) 之下,与 \(y=x\) 相交在 \((0,0)\)\((1,0)\)

​     令 \(S_A\) 表示 A 的面积,\(S_B\) 表示 B 的面积,那么基尼系数为 \(\frac{S_A}{S_A+S_B}\) ,即 基尼系数在区间 \([0,1]\)

​     若系统的流行度很平均,那么 \(S_A\) 就会很小,从而基尼系数会很小,若系统的流行度不平均,那么 \(S_A\) 就会很大,从而基尼系数也会很大。

马太效应

强者更强,弱者更弱

​     热门排行榜就有马太效应,因为越热门的东西曝光机会就越高,就越有人知道,就会越流行。

​     推荐系统的初衷就是希望消除马太效应,使得各种物品都可以展现给对它们感兴趣的用户,但是一些主流算法是具有马太效应的。

​     看推荐系统是否有马太效应的办法就是使用基尼系数。若 \(G_1\) 表示从初始用户行为中计算出的物品流行度的基尼系数,\(G_2\) 表示从推荐列表中计算出物品流行度的基尼系数,若 \(G_2 \gt G_1\) ,就说明推荐算法具有马太效应。

5.2.4 多样性

用户的兴趣是广泛的,推荐系统需要能覆盖用户不同的兴趣领域。

​     多样性描述了推荐列表中物品两两之间的不相似性。

\[\mathrm{Diversity} = 1-\frac{\sum_{i,j\in R(u),i\ne j}s(i,j)}{\frac{1}{2}|R(u)|(|R(u)|-1)} \]

​     其中,\(s(i,j)\) 代表物品 \(i\) 和物品 \(j\) 之间的相似度。

​     推荐系统整体的多样性可以表示为所有推荐列表多样性的平均值

\[\mathrm{Diversity} = \frac{1}{|U|}\sum_{u\in U} \mathrm{Diversity(R(u))} \]

多样性推荐也要兼顾主次。比如:

​     某用户 \(80\%\) 的时间在看武打片,\(20\%\) 的时间在看动画片,那么如果按照比例进行推荐,既考虑了多样性又没有忽略用户的主要兴趣。

5.2.5 新颖性

推荐给用户他们从来没有听说过的物品。

​     新颖的推荐不应该给用户推荐他们已经使用过或评价过的物品。

​     或许越不热门的物品可能会让用户更觉得新颖,因此有考虑使用平均流行度度量新颖性的想法,但这种方法较为粗略,因为不同用户不知道的东西是不一样的,可能有些人就是很熟知冷门物品。

​     要准确度量新颖性,需要进行用户调查。

​     通过牺牲推荐精度来提高多样性和新颖性很容易,比较困难的是如何在不牺牲精度的情况下提高多样性和新颖性。

5.2.6 惊喜度

如果推荐结果与用户历史兴趣不相似,但是却让用户感觉很满意

​     注意与新颖性不同,因为新颖性仅仅取决于用户是否听说过这个推荐结果。

5.2.7 信任度

如果用户信任推荐系统,那么就会增加用户与推荐系统之间的交互

​     度量信任度只能通过用户调查的方式。

​     提升信任度两个方法:

  • 增加推荐系统的透明度
  • 考虑用户社交网络信息,利用好友信息给用户做推荐

5.2.8 实时性

许多物品具有较强的时效性(新闻,微博等),因此需要在物品还有时效性时推荐给用户

  • 推荐系统需要实时地更新推荐列表满足用户新的行为变化
  • 推荐系统需要能够将新加入系统的物品推荐给用户(冷启动)

5.2.9 健壮性

能够带来利益的算法就会被人攻击

​     推荐系统也会遇到作弊的问题,比如行为注入攻击

​     水军、刷分等等都是攻击的体现。

​     提高健壮性的方法

  • 选择健壮性高的算法。
  • 设计推荐系统时尽量使用代价较高的用户行为,比如用户购买行为和用户浏览行为,显然购买行为的权重更高。
  • 在使用数据前,进行攻击检测,从而对数据进行清理。

5.2.10 商业目标

不同网站具有不同的商业目标

5.2.11 总结

IMG_0252

​     对于可以离线优化的指标,在给定覆盖率、多样性、新颖性等限制条件下,尽可能优化预测准确度。


  1. 信息时代,信息过于丰富产生的副作用,大量有用无用的信息充斥在我们的生活中,让我们无法正常处理。 ↩︎

  2. 指那些原来不受到重视的销量小但种类多的产品或服务由于总量巨大,累积起来的总收益超过主流产品的现象 ↩︎

  3. 实际上就是快速粗选,在巨大数量级的数据集中迅速找到合适的少部分信息用以备选。 ↩︎

  4. 主要以提高推荐效果为目标,对推荐列表进行精准排序。 ↩︎

  5. 深度学习模型具备理论上拟合任何函数的能力。 ↩︎

  6. 让模型更丰富,预测地更准。 ↩︎

  7. 通过一定规则将用户随机分为几组,每组采用不同的算法,通过统计不同组用户的各个不同评测指标比较不同算法。 ↩︎

  8. 准确率和召回率曲线。 ↩︎

posted @ 2022-01-26 11:07  灰灰不吃鱼  阅读(858)  评论(0编辑  收藏  举报