推荐系统学习笔记-召回策略之基于内容的召回

------------恢复内容开始------------

------------恢复内容开始------------

 

1. 基于内容召回

 

 

2. 召回阶段和排序阶段

召回阶段的主要职责是:从千万量级的候选物品里,采取简单模型将推荐物品候选集合快速筛减到千级别甚至百级别,这样将候选集合数量降下来,之后在排序阶段就可以上一些复杂模型,细致地对候选集进行个性化排序。

排序:对多个召回方法的结果进行统一打分并排序,选出最优Top K。筛选:CTR预估的rank模型,相当于精排序:使用一个点击率预估模型(输入用户特征,内容特征,用户内容交叉特征等)对召回出来的内容进行排序

CTR:CTR(Click-Through-Rate)即点击通过率,是互联网广告常用的术语,指网络广告(图片广告/文字广告/关键词广告/排名广告/视频广告等)的点击到达率,即该广告的实际点击次数(严格的来说,可以是到达目标页面的数量)除以广告的展现量(Show content)。

3. 这里可以使用复杂的模型来对少量物品精准排序。对某个用户来说,即使精排推荐结果出来了,一般并不会直接展示给用户,可能还要上一些业务策略,比如去已读,推荐多样化,加入广告等各种业务策略。之后形成最终推荐结果,将结果展示给用户。

4. 整个推荐逻辑

5. 基于内容的推荐(Content Based)

是早期推荐的重要内容,其优点是:很快搭建,很快见效,标签挖掘是内容推荐中的最重要的环节。在产品的冷启动阶段,没有用户行为,另外新的物品也需要被推荐出去,首选内容推荐。然而想做好基于内容的推荐也并非想象中的那么简单,具体做法分为以下几步:

Item Representation:为每个item抽取出一些特征(也就是item的content了)来表示此item;
Profile Learning:利用一个用户过去喜欢(及不喜欢)的item的特征数据,来学习出此用户的喜好特征(profile);
Recommendation Generation:通过比较上一步得到的用户profile与候选item的特征,为此用户推荐一组相关性最大的item。

举个例子说明前面的三个步骤。对于个性化阅读来说,一个item就是一篇文章。根据上面的第一步,我们首先要从文章内容中抽取出代表它们的属性。常用的方法就是利用出现在一篇文章中词来代表这篇文章,而每个词对应的权重往往使用信息检索中的tf-idf算法来计算。比如对于本文来说,词“CB”、“推荐”和“喜好”的权重会比较大,而“烤肉”这个词的权重会比较低。利用这种方法,一篇抽象的文章就可以使用具体的一个向量来表示了。第二步就是根据用户过去喜欢什么文章来产生刻画此用户喜好的 profile了,最简单的方法可以把用户所有喜欢的文章对应的向量的平均值作为此用户的profile。比如某个用户经常关注与推荐系统有关的文章,那么他的profile中“CB”、“CF”和“推荐”对应的权重值就会较高。在获得了一个用户的profile后,CB就可以利用所有item与此用户profile的相关度对他进行推荐文章了。一个常用的相关度计算方法是余弦相似度(cosine)。最终把候选item里与此用户最相关(cosine值最大)的N个item作为推荐返回给此用户。、

下面是一个典型的基于内容的推荐:

 

6. 

介绍一下图2的流程和基本元素。在内容这一端,内容源经过内容分析,得到结构化的内容库和内容模型。在用户这一端,用户看过推荐列表后,会产生用户行为数据,结合内容库并经过用户分析可以得到用户画像。对于那些没有给用户推荐过的新内容,经过相同的内容分析过程就可以通过推荐算法加以匹配,再将计算得到的新的推荐列表推给用户。如此周而复始,永不停息。

其实,基于内容的推荐,最重要的不是推荐算法,而是内容挖掘和分析。只要内容挖掘的足够深入,哪怕早期推荐算法采用非常硬的规则,也能去的不俗的效果。

7. 基于内容推荐的详细介绍

Item Representation
真实应用中的item往往都会有一些可以描述它的属性。这些属性通常可以分为两种:结构化的(structured)属性与非结构化的(unstructured)属性。所谓结构化的属性就是这个属性的意义比较明确,其取值限定在某个范围;而非结构化的属性往往其意义不太明确,取值也没什么限制,不好直接使用。比如在交友网站上,item就是人,一个item会有结构化属性如身高、学历、籍贯等,也会有非结构化属性(如item自己写的交友宣言,博客内容等等)。对于结构化数据,我们自然可以拿来就用;但对于非结构化数据(如文章),我们往往要先把它转化为结构化数据后才能在模型里加以使用。真实场景中碰到最多的非结构化数据可能就是文章了(如个性化阅读中)。下面我们就详细介绍下如何把非结构化的一篇文章结构化。

如何代表一篇文章在信息检索中已经被研究了很多年了,下面介绍的表示技术其来源也是信息检索,其名称为向量空间模型(Vector Space Model,简称VSM)。

 

profile learning

假设用户u已经对一些item给出了他的喜好判断,喜欢其中的一部分item,不喜欢其中的另一部分。那么,这一步要做的就是通过用户u过去的这些喜好判断,为他产生一个模型。有了这个模型,我们就可以根据此模型来判断用户u是否会喜欢一个新的item。所以,我们要解决的是一个典型的有监督分类问题,理论上机器学习里的分类算法都可以照搬进这里。
CB里面的一些常用的学习算法:

(1)最近邻方法(k-Nearest Neighbor,简称kNN)
对于一个新的item,最近邻方法首先找用户u已经评判过并与此新item最相似的k个item,然后依据用户u对这k个item的喜好程度来判断其对此新item的喜好程度。这种做法和CF中的item-based kNN很相似,差别在于这里的item相似度是根据item的属性向量计算得到,而CF中是根据所有用户对item的评分计算得到。

对于这个方法,比较关键的可能就是如何通过item的属性向量计算item之间的两两相似度。建议对于结构化数据,相似度计算使用欧几里得距离;而如果使用向量空间模型(VSM)来表示item的话,则相似度计算可以使用cosine。

Rocchio算法
Rocchio算法是信息检索中处理相关反馈(Relevance Feedback)的一个著名算法。比如你在搜索引擎里搜“苹果”,当你最开始搜这个词时,搜索引擎不知道你到底是要能吃的水果,还是要不能吃的苹果,所以它往往会尽量呈现给你各种结果。当你看到这些结果后,你会点一些你觉得相关的结果(这就是所谓的相关反馈了)。然后如果你翻页查看第二页的结果时,搜索引擎可以通过你刚才给的相关反馈,修改你的查询向量取值,重新计算网页得分,把跟你刚才点击的结果相似的结果排前面。比如你最开始搜索“苹果”时,对应的查询向量是{“苹果” : 1}。而当你点击了一些与Mac、iPhone相关的结果后,搜索引擎会把你的查询向量修改为{“苹果” : 1, “Mac” : 0.8, “iPhone” : 0.7},通过这个新的查询向量,搜索引擎就能比较明确地知道你要找的是不能吃的苹果了。Rocchio算法的作用就是用来修改你的查询向量的:{“苹果” : 1} --> {“苹果” : 1, “Mac” : 0.8, “iPhone” : 0.7}。
CB里,我们可以类似地使用Rocchio算法来获得用户u的Wu:

 来自csdn

posted @ 2021-04-20 15:24  数学之韵  阅读(524)  评论(0编辑  收藏  举报