推荐系统能有效帮助用户快速发现感兴趣和高质量的信息,增加用户使用产品的时长。推荐系统越精准,用户的使用体验就越好,产品越容易留住用户。近几年,今日头条、抖音等产品的诞生,也使得基于内容的推荐算法这一古老算法的崛起。本文将简要阐述基于内容的推荐算法的基本原理,enjoy~
基于内容的推荐算法是众多推荐算法中的一种,是一种机器学习算法。可以说推荐系统算法是机器学习算法应用在我们生活中最普及的算法。基于内容的推荐算法(Content-Based Recommendations CB),下文中简称CB。
CB的思想非常简单:根据用户过去喜欢的内容,为用户推荐和他过去喜欢的内容相似的内容。而关键就在于这里的内容相似性的度量,这才是算法运用过程中的核心。
CB的过程一般包括以下三步:
内容表征(Item Representation):为每个item抽取出一些特征来表示此item;
特征学习(Profile Learning):利用一个用户过去喜欢(及不喜欢)的item的特征数据,来学习出此用户的喜好特征(profile);
生成推荐列表(Recommendation Generation):通过比较上一步得到的用户特征(profile)与候选item的特征,为此用户推荐一组相关性最大的item。
我们通过一个例子,来简单体验一下CB的过程。我们以今日头条为例,今日头条利用基于内容的文本推荐算法,在今日头条中,一个item就是一篇文章。
1. 内容表征
首先要从文章内容中抽取出代表它们的属性。常用的方法就是利用出现在一篇文章中的词来代表这篇文章,而每个词对应的权重往往使用加权技术算法来计算。利用这种方法,一篇抽象的文章就可以使用具体的一个向量来表示了。
应用中的item会有一些属性对它进行描述。这些属性通常可以分为两种:结构化的属性与非结构化的属性。
结构化的属性就是这个属性的意义比较明确,其取值限定在某个范围;而非结构化的属性往往其意义不太明确,取值也没什么限制,不好直接使用。
比如在社交网站上,item是人,一个item会有结构化属性如身高、学历、籍贯等,也会有非结构化属性,如item写的个人签名,发布的内容等等。对于结构化数据,可以拿来就用;但对于非结构化数据(如文章),往往要先把它转化为结构化数据后才能在模型里加以使用。
真实场景中碰到最多的非结构化数据可能就是文章了。那么,如何将非结构化的文章结构化呢?
我们要表征的所有文章集合为 D={d1,d2,…,dN},而所有文章中出现的词的集合为T={t1,t2,…,tn}。也就是说,我们有N篇要处理的文章,而这些文章里包含了n个不同的词。
最终要使用一个向量来表示一篇文章,比如第j篇文章被表示为dj={w1j,w2j,…,wnj},其中wij表示第i个词在文章j中的权重,值越大表示越重要。
所以,为了表示第j篇文章,现在关键的就是如何计算dj各分量的值了。全部i个词在文章j中对应的权重可以通过TF-IDF(一种用于信息检索与数据挖掘的常用加权技术)计算获得。
通过以上的方法,我们得到了每个item特征的表示(每篇文章中,全部词的权重向量模型)。
2. 特征学习
假设用户已经对一些item做出了喜好判断,喜欢其中的一部分item,不喜欢其中的另一部分。那么,这一步要做的就是通过用户过去的这些喜好判断,为他形成一个模型。
通过这个模型,就可以判断用户是否会喜欢一个新的item。所以,我们要解决的是一个有监督的分类问题,这里可以采用一些机器学习的分类算法。
2.1 K近邻(KNN)算法
对于一个新的item,KNN算法首先去寻找该用户已经评判过并且与此新item最相似的k个item。
然后依据该用户对这k个item的喜好程度来判断其对此新item的喜好程度。
对于这个方法,比较关键的就是如何通过item的属性向量计算item之间的相似度。对于结构化数据,相似度计算可以使用欧式距离,而如果使用向量空间模型来表示item的话,则相似度计算可以使用cosine(余弦相似度)。
2.2 决策树算法
当item的属性较少而且是结构化属性时,决策树会是个很好的选择。
这种情况下决策树可以产生简单直观、容易让人理解的决策结果。但是如果item的属性较多,且都来源于非结构化数据,例如文章,那么决策树的效果可能并不会很好。
2.3 朴素贝叶斯算法
朴素贝叶斯算法经常被用来做文本分类,假设在给定一篇文章的类别后,其中各个词出现的概率相互独立。
由于朴素贝叶斯算法的代码实现比较简单,所以往往是很多分类问题里最先被尝试的算法。
我们当前的问题中包括两个类别:用户喜欢的item,以及他不喜欢的item。在给定一个item的类别后,其各个属性的取值概率互相独立。我们可以利用该用户的历史喜好数据进行训练,之后再用训练好的贝叶斯分类器对给定的item做分类。
3. 生成推荐列表
如果特征学习中我们使用了分类模型,那么只要把模型预测的用户最可能感兴趣的n个item作为推荐返回给用户即可。
4. CB的缺点
4.1 无法挖掘出用户的潜在兴趣
CB的推荐只依赖于用户过去对某些item的喜好,它产生的推荐也都会和用户过去喜欢的item相似。如果一个用户以前只看与科技有关的文章,那CB只会给他推荐更多与科技相关的文章,它不会知道用户可能还喜欢政治类的文章。
4.2 无法为新用户产生推荐
新用户没有喜好历史,自然无法获得他的特征,所以也就无法为他产生推荐内容了。
5. 总结
由于CB算法的一些缺点,目前大部分的推荐系统都是以其他算法为主(如协同过滤算法),而辅助使用CB来解决主算法在某些情况下的不精确性(如解决新item问题)。
但CB的作用是不可否认的,只要具体应用中有可用的属性,那么基本都能在系统里看到CB的影子。组合CB和其他推荐算法的方式有很多,最常用的可能是就用CB来过滤其他算法的候选集,把一些不太合适的候选去掉。
我们也可以看到,机器学习算法是推荐系统的基石与核心,未来,随着机器学习、深度学习算法的普及,相信也会出现更加优秀的组合推荐算法。