Content Based Filtering推荐算法概述
CBF算法是一种个性化推荐算法,其基本思想是根据用户的长期、稳定的偏好来推荐Item给用户,如当用户买衣服时,他喜欢棉的、蓝色的、便宜的等等,这些偏好都是长期稳定的。因此,CBF必须解决以下两个问题:
- 用户偏好的获取与表示
- Item的匹配
当然,同样存在着大量需要个性化推荐,但无法获取长期、稳定偏好的情况。比如,我要购买电脑或者照相机,我可能只有在买的时才会去网站上寻求推荐,在这种情况下,是不可能获取到长期稳定的偏好的。为了解决这个问题,可以使用Case Based Recommendation或者Knowledge Based Recommendation 算法。其主要思想是用户通过设定筛选条件,或者指定某个特征来进行搜索。如在买电脑的情况下,我们可以指定价格、CPU、内存等筛选条件,然后让系统过滤并按照指定方式排序。这里重点讨论CBF,对CBR不做过多的讨论。
用户偏好的获取、表示与预测
预备知识
TF-IDF
TF-IDF全称是Term Frequency-Inverse Document Frequency,是信息检索领域的一个算法。考虑这样一种情况:当我们进行多关键字搜索时,搜索引擎应该如何返回结果?直观地来考虑,搜索引擎需要做这两件事:
- 返回所有含有待搜索关键字的页面
- 将页面按照关键字出现的频率来排序
这种思想非常符合直观的理解。搜索引擎就是来搜索包含关键字的文档的,关键字出现的次数越多,文档越符合我们需求。但这明显忽视了一个问题,是不是所有关键字的重要程度都是相同的?比如,我们搜索“The Civil War”和“中国的景点”,其中的“The”和“的”在英文和中文文档中都大量的出现,如果按照上面的方法,可能返回的是一堆不相关的文档。因此,我们的思想是,对常见的关键字进行惩罚,以凸显不常见关键字的作用。我们可以把上述思想归纳为两点:
- 关键字出现频率是重要的
- 不是所有关键字都一样相关
现在我们就可以一窥TF-IDF的全貌了。给定关键字
k
,文档集合
- 自动对常见的停止词进行惩罚
- 相对于经常出现的词,提升了核心关键字的作用
Vector Space Model
向量空间模型是用来表示文档的一种线性代数的模型,它将文档表示成为一个向量,其中,向量的每一个维度表示一个关键字。每个维度可以由多种方法来确定,如可以根据某个关键字是否出现、根据某个关键字出现的次数,或者是用上文提到的TF-IDF算法。
当进行文档匹配时,我们计算用户的查询向量
q
与每一个文档向量
用户偏好的获取与表示
用户偏好的获取可用以下伪代码表示
初始化用户 u 的偏好向量
p=[0,0,…,0] ;
forall Item i in UserRatedItemCollectionuric :
根据特定算法calcuVSM(u,i,c)计算 i 的向量空间模型di,u ;
更新偏好向量 p +=di,u ;
end for;
返回 p
其中
- 是否应该考虑凸显不常见的关键字?
- 如何将用户评分算进去?
考虑第一个问题。正如上文所述,计算向量空间模型时,我们通常采用是否出现某个关键字、关键字出现的频数或者TF-IDF方法。其中,前两个算法无法凸显不常见关键字的作用,TF-IDF可以起到该作用。现给出calcuVSM(u,i,c)部分伪代码。
calcuVSM(u,i,c):
index=0 ;
初始化 i 的关键字向量为di,u=[0,0,…,0] ;
forall Keyword w in KeywordListkl :
di,u[index++]=tf−idf(w,i,c)×factorRating(u,i) ;
end for;
返回 di,u ;
对于第二个问题,实际上就是要在算法中凸显用户的喜好和厌恶程度,一般而言,有如下四种方式(以下公式中的 ru,i∈[1,5] ):
- 不考虑用户具体评分,即只要用户评分了,权重就为
1
,否则权重为
0 ,如:factorRating(u,i)=1u rated i+0u didn′t rate i - 阈值加权方式。即只有当用户的评分超过一定阈值,才算到用户的偏好向量中。如:
factorRating(u,i)=1ru,i>3.5+0ru,i≤3.5
- 不带惩罚的正加权方式。即用户评分越高,权重越高,但不会对低评分的项给予负权的惩罚,如:
factorRating(u,i)=ru,i
- 带惩罚的加权方式。即用户评分高,权重高;用户评分越低,惩罚越高,如:
factorRating(u,i)=ru,i−3
用户偏好的更新
用户的偏好虽然是长期稳定的,但也存在着随着年龄增长而逐渐演变的可能。如何自动更新用户偏好成了一个待解决的问题。对于这个问题,一个很直观的思路是重新计算该用户的偏好向量,这种方法虽然可行,但计算量较大,且比较浪费。我们可以基于旧的偏好向量来进行动态更新,如:
这样就可以节省大量的计算成本。
利用用户偏好进行预测
预测就是指对于一个用户
u
没有接触过的Item
总结
CBF算法是一种优秀的完全基于内容的算法,它易于实现,计算简单,同时可扩展性极高,但同时,它无法解决互相依赖的关系。如,我喜欢历史纪录片和战争电影。如果我们按照上述算法来进行推荐,我可能收到诸如古装电影和战争纪录片,这显然不是我想要的。