任务1:推荐系统基础
1.推荐系统与常见的结构化问题的区别是什么?
推荐系统是用来解决信息过载的手段。
作为信息消费者,如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情;作为信息生产者, 如何让自己生产的信息脱颖而出,受到广大用户的关注,也是一件非常困难的事情。
推荐系统就是来解决这个问题的。
对于信息消费者:它可以主动的把用户可能感兴趣的东西推送到用户面前
对于信息生产者:它可以让信息展现在对它感兴趣的用户面前。
谈到推荐系统很容易联想到搜索引擎:推荐系统和搜索引擎的一个区别就是,在搜索引擎当中用户很清楚的知道自己需要什么,而推荐系统当中用户可能自己都不知道自己需要什么。
2. 如何评价推荐系统的推荐准不准
1. 用户满意度
推荐系统最终是要给用户使用的,要想知道一个推荐系统好不好最直接的方法就是问用户。
用户满意度是评测一个推荐系统好不好的最重要,也是最直接的指标。但是这个指标没办法离线计算来直接获取,只能通过用户调查或者在线实验得到。
比如像B站和知乎,他们会在推荐的视频和文章旁边增加一个不喜欢的选项。这就是一种收集用户满意度的方式。
更一般的情况,其实我们可以通过点击率,用户在某个项目上停留的时间间接的推算出用户的满意度。
2. 预测准确度
预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力。
这个指标是最重要的推荐系统离线评测指标。
计算这个指标我们一般需要一个离线的数据集。这个数据集包括用户的一些历史行为记录。然后通过大概下面几个步骤来计算推荐算法的准确度
- 将数据集按照某种策略划分成训练集和测试集(划分的方法取决于模型)
- 在训练集上训练模型,学习得到模型的参数
- 在测试集上预测用户的行为,然后将预测的行为和真实的行为进行比对,计算出准确度
准确度的计算大致有下面几种算法
2.1 评分预测
RMSE(均方误差)
R
M
S
E
=
∑
u
,
i
∈
T
(
r
u
i
−
r
^
u
i
)
∣
T
∣
RMSE = \frac{\sqrt{\sum_{u, i \in T}(r_{ui} - \hat{r}_{ui})}}{|T|}
RMSE=∣T∣∑u,i∈T(rui−r^ui)
- T T T:表示所有的(用户,物品)的元组的集合,一次交互就是一个元组。比如说用户u给物品i打分,这就可以表示为元素(u, i), ∣ T ∣ |T| ∣T∣表示这个集合当中的元素个数
- u , i u, i u,i:表示用户和物品的id
- r u i r_{ui} rui:表示数据集当中用户u与物品i的真实行为(比如说打分)
- r ^ u i \hat{r}_{ui} r^ui:表示模型预测的值
MAE(绝对值误差)
M
A
E
=
∑
u
,
i
∈
T
∣
r
u
i
−
r
^
u
i
∣
∣
T
∣
MAE =\frac{\sum_{u, i \in T}|r_{ui} - \hat{r}_{ui}|}{|T|}
MAE=∣T∣∑u,i∈T∣rui−r^ui∣
- 具体变量含义和RMSE相似
topN推荐
网站在提供推荐服务时,一般是给用户一个个性化的推荐列表,这种推荐叫做TopN推荐。TopN推荐的预测准确率一般通过准确率/召回率来计算
t
o
p
N
=
p
r
e
c
i
s
i
o
n
r
e
c
a
l
l
topN = \frac{precision}{recall}
topN=recallprecision
其中准确率为
Precision
=
∑
u
∈
U
∣
R
(
u
)
⋂
T
(
u
)
∣
∑
u
∈
U
∣
R
(
u
)
∣
\text { Precision }=\frac{\sum_{u \in U}|R(u) \bigcap T(u)|}{\sum_{u \in U}|R(u)|}
Precision =∑u∈U∣R(u)∣∑u∈U∣R(u)⋂T(u)∣
- U U U:表示所有用户的集合
- u u u:表示用户 u u u
- R(u):模型给用户u做出的推荐列表
- T(u):用户u在测试集上真实的行为列表
通俗来讲我的模型做出的推荐当中,做出的正确的预测是多少。
召回率的定义为:
Recall
=
∑
u
∈
U
∣
R
(
u
)
⋂
T
(
u
)
∣
∑
u
∈
U
∣
T
(
u
)
∣
\text { Recall }=\frac{\sum_{u \in U}|R(u) \bigcap T(u)|}{\sum_{u \in U}|T(u)|}
Recall =∑u∈U∣T(u)∣∑u∈U∣R(u)⋂T(u)∣
- 具体符号和准确率的定义一样
通俗来讲就是真实的行为当中,我的模型猜中了百分之多少。
3 覆盖率
覆盖率(coverage)描述一个推荐系统对物品长尾的发掘能力。
举个例子:以视频网站的推荐为例,如果我们总是推荐那些头部头部UP主的视频,这样对那些没什么名气的视频UP主相当不公平。所以我们还需要考虑到模型的一个覆盖率。
覆盖率的定义有很多,最简单的定义就是:推荐系统能够推荐出来的物品,占总物品集合的比例。
Coverage
=
∣
⋃
u
∈
U
R
(
u
)
∣
∣
I
∣
\text{Coverage}={\frac{\left|\bigcup_{u\in U}R(u)\right|}{\left|I\right|}}
Coverage=∣I∣∣∣⋃u∈UR(u)∣∣
- U:是用户的集合
- R(U):是推荐系统给用户推荐的一个长度为N的物品列表
- ∣ I ∣ |I| ∣I∣:表示的是物品集合当中元素的个数,也就是物品总数
我们可以再回到那个推荐热门物品的例子:
假设物品总数是10000,我们为所有用户推荐的都是最热门的10个物品
那么覆盖率为0.1%
上面的定义是一种十分粗略的定义,同样的覆盖率,但是里面不同的物品出现的频次差别可能很大,我们可以更进一步,考虑推荐列表中不同的物品出现次数的分布
- 如果这个分布比较均匀,那么这个模型的覆盖率就比较好
- 如果这个分布十分陡峭(少数物品被推荐多次),那么这个模型的覆盖率比较差
4. 多样性
用户的兴趣可能是广泛的,推荐列表应该覆盖用户不同的兴趣领域。多样性推荐的好处用一句话表示就是:不在一棵树上吊死。
如何衡量推荐的多样性呢?
一种简单的方法:推荐列表当中的物品的相似度越低,说明多样性越好。
假定
S
(
i
,
j
)
S(i, j)
S(i,j)表示物品i和物品j之间的相似性。那么多样性的定义可以表示如下
Diversity
=
1
−
∑
i
,
j
∈
R
(
u
)
,
i
≠
j
s
(
i
,
j
)
1
2
∣
R
(
u
)
∣
(
∣
R
(
u
)
∣
−
1
)
\text { Diversity }=1-\frac{\sum_{i, j \in R(u), i \neq j} s(i, j)}{\frac{1}{2}|R(u)|(|R(u)|-1)}
Diversity =1−21∣R(u)∣(∣R(u)∣−1)∑i,j∈R(u),i=js(i,j)
- 具体变量定义可以见之前的说明
推荐系统的整体多样性可以定义为所有用户推荐列表多样性的平均值
5. 其他评价标准
下面是一些其他的评价标准,这些标准相较于上面的几个标准用的不是特别的多
5.1 新颖性
新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。
最简单的实现新颖性的方法就是:把用户之前看过,打过分,浏览过的物品过滤掉
评估新颖性的最简单的方法就是利用推荐结果的平均流行度:越冷门的物品越有可能让用户感到新颖。
5.2 惊喜度
如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。
提高推荐惊喜度需要提高推荐结果的用户满意度,同时降低推荐结果和用户历史兴趣的相似度。
5.3 实时性
像新闻,微博等具有很强时效性的物品。我们在推荐的时候还需要考虑时效性。如果把一些很多年前的新闻推荐给用户,很可能是不会满意的。
3. 推荐一般分为召回和排序,为什么这样划分。
将推荐划分为召回和排主要是基于工程上的考虑。
在不考虑计算成本的理想状态下,我们当然是希望对所有的数据都进行搜索一遍找到用户感兴趣的东西。但是,在实际当中应当考虑计算成本的问题,真实情况下用户和物品的数量都是十分庞大的。全部搜索一遍成本巨大。
所以我们要在召回阶段将海量的候选集快速缩小为几万到几千的规模;而排序层则负责对缩小后的候选集进行精准排序。
下面是召回层与排序层的特点
- **召回层:**待计算的候选集合大、计算速度快、模型简单、特征较少,尽量让用户感兴趣的物品在这个阶段能够被快速召回,即保证相关物品的召回率
- **排序层:**首要目标是得到精准的排序结果。需要处理的物品数量少,可以利用较多的特征,使用比较复杂的模型。
通俗来讲就是:先粗略的筛选出一部分数据,然后对筛选出的这部分数据进行更加精细的推荐
在设计召回层时,“计算速度”和“召回率”其实是矛盾的两个指标,为提高“计算速度”,需要使召回策略尽量简单一些;而为了提高“召回率”,要求召回策略尽量选出排序模型所需要的候选集,这也就要求召回策略不能过于简单。在权衡计算速度和召回率后,目前工业界主流的召回方法是采用多个简单策略叠加的“多路召回策略”