今天也要加油鸭~

  • 这是一份总结的学习笔记
  • 路漫漫其修远兮,吾将上下而求索
  • 可阅读可评论可分享可转载,希望向优秀的人学习

推荐系统流程

海量 Item——召回(粗排)——候选集合——排序(精排)——排序列表—— 规则(多样化推荐)—— 推荐结果

embedding召回策略_大数据

召回策略

所谓召回,是指从上百千万的商品中,粗排出几百上千的商品,供打分模型精排。

embedding召回策略_大数据_02


目前工业界的推荐系统,在召回阶段,一般都采取多路召回策略。比如典型的召回路有:基于用户兴趣标签的召回;基于协同过滤的召回;基于热点的召回;基于地域的召回;基于Topic的召回;基于命名实体的召回等。下面具体介绍几种。

基于标签的召回

要求:有个能准确且详细描绘用户和item的标签体系。主要有两种方式如下:

单标签召回

单标签是直接筛选一些分类或细分标签作为召回的有效标签(如内容形式_案例、风格_中式等),这种方式简单、粗暴,且召回结果丰富,不存在召回结果为空的情况。当然,具体用哪些标签是是一个关键点。一方面是因为部分单标签会存在包含关系,所以不加筛选的话召回结果的重复占比会很高,对召回的性能也有影响;另一方面,为了帮助用户更精准的筛选候选集,不同类型的用户(如冷启动用户与活跃用户,会员用户与普通用户等)所用的召回标签肯定也存在差异。

组合标签召回 (比单标签好,优先考虑)

上面说的单标签召回存在召回结果重复率高、不精准的问题,虽然召回结果丰富,但做了过滤后,有效的结果是有限的。
组合标签召回可以是同级标签组合(如风格_中式_AND_家庭结构_一家三口)、多级标签顺序组合(如内容形式_案例_AND_种类_图片),也可以跨分类多级组合(如性别_女_AND_需求_开放式厨房 _AND_内容形式_图片),还可以将静态标签与动态标签进行组合、固有属性标签与用户行为进行组合等,具体组合类型及组合的深度可通过产品特性和业务特点去发现和探索。即使不做太多优化,组合标签召回的效果也比单标签好很多。

基于热门召回

具体实现流程
1、统计出指定时间窗口的商品的曝光量,点击量,从而计算出曝光点击比,即CTR,根据CTR大小作为热门程度的量化指标;当然也可以参考其它指标,如下载展示比,播放展示比等等;
2、可以从所有商品中,按照CTR排序,选出topK个,作为召回结果;
3、也可以根据商品的标签信息,按标签groupBy,统计出该标签下所有商品,并按照CTR排序,得出召回结果。
例子:QQ看点日报内容优化——基于BERT的热点召回系统

基于协同过滤召回

基于用户的协同过滤

User-based CF :基于用户的协同过滤算法,多用于挖掘那些有共同兴趣的小团体,通常新颖性比较好,准确性稍差;

基于物品的协同过滤

Item-based CF:基于物品的协同过滤算法,多用于挖掘物品之间的关系,然后根据用户的历史行为来为用户生成推荐列表;

具体实现流程

  • 1、收集用户偏好及标准化处理
    要从用户的行为和偏好中发现规律,并基于此给予推荐,如何收集用户的偏好信息成为系统推荐效果最基础的决定因素;
    如何组合这些不同的用户行为:
    (1) 将不同的行为分组:一般可以分为“查看”和“购买”等等,然后基于不同的行为,计算不同的用户 / 物品相似度。比如: “查看了房源案例的人还查看了 …”
    (2) 根据不同行为反映用户喜好的程度将它们进行加权,得到用户对于物品的总体喜好。
  • 2、数据减噪和归一化
    进行的预处理后,根据不同应用的行为分析方法,可以选择分组或者加权处理,之后我们可以得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是 [0,1] 或者 [-1, 1] 的浮点数值。
  • 3、找到相似的用户或物品
    当已经对用户行为进行分析得到用户喜好后,我们可以根据用户喜好计算相似用户和物品,然后基于相似用户或者物品进行推荐。基于用户的 CF 和基于物品的 CF这两种方法都需要计算相似度。
    3.1 常用的相似度计算方法
    • 欧几里德距离
    • 皮尔逊相关系数
    • Tanimoto 系数
    3.2 相似邻居的计算
    • 固定数量的邻居:K-neighborhoods 或者 Fix-size neighborhoods
    • 基于相似度门槛的邻居:Threshold-based neighborhoods
  • 4、计算相似度并进行排序。根据相似度为用户/物品进行推荐

基于模型的协同过滤

  • FM模型
    FM是一种LR基础上扩展的线性模型,在特征上做了两两组合上的信息挖掘,因为其高效性,既可以作为召回模型,也可以作为排序模型,并且在数据量非常大时,其相对于lightGBM这样的模型,可以做流式训练,能承载更大数据量的训练。
    可以利用FM模型将传统的多路召回策略,改为单模型单召回的策略,传统的新增一路召回,可以转换为给FM召回模型新增特征的方式;
    其次,理论上,我们貌似可以用一个FM召回模型,来做掉传统的“多路召回+排序”的两项工作
    参考:FM模型
  • 隐语义模型(LFM)
    模型的建立相当于从行为数据中提取特征,给用户和物品同时打上“标签”
    有显性特征时,我们可以直接匹配做出推荐。没有时,可以根据已有的偏好数据,去发掘出隐藏的特征,这需要用到隐语义模型。
    基于样本的用户偏好信息,训练一个推荐模型,然后根据实时的用户喜好信息进行预测新物品的得分,计算推荐
    目标:揭示隐藏特征(使用偏好数据训练模型,找到内在规律,再用模型来做预测(类似回归))
    方法:矩阵分解进行降维分析(分解之后的矩阵代表了用户和物品的隐藏特征)

倒排索引

tag倒排召回

今日头条用的召回策略主要是倒排,离线维护一个倒排,key可以是分类、主题、来源等,按照热度排序。线上召回可以快速根据用户兴趣做内容截断,筛选出较少一部分的高质量内容,进入storm在线模型进行排序。

基于内容匹配

基于内容标签TF-IDF

1.向量空间模型VSM:

向量空间模型是一个文本文档空间表示方法。给定文档词汇表是一个词典,通过一些自然语言处理方法从所有文档中获取,词典中词的数为n。每个文档被表示成一个n维空间中的向量,每一维对应给定文档词汇表中的一个词在该文档中的权重,文档dj和词tk权重w(k,j)的计算方法如下:

TF-IDF(tk,dj)=(词在文档中频率/最常出现词在文档中频率)*log(文档数/出现过词汇tk的文档数)

W(k,j)=TF-IDF(tk,dj)/sqrt(j文档中各词TF-IDF平方的和)

2.度量两个文档的接近程度

常使用余弦相似度:Sim(di,dj)=两向量点积/两向量模的积

基于标签的模型

(1)UGC(用户生成的内容)标签系统

1.用户会给物品打标签,内容包括物品是什么、物品种类、谁拥有物品、用户观点(例:有趣)、用户相关的标签(我最喜欢的)、用户的任务(即将阅读)。

2.标签的流行度的log和标签的数量的log几乎是一条斜率为负的直线。

(2)简单的基于标签推荐

p(u,i)=sum[n(u,b)*n(b,i)],其中n(u,b)为用户u打过标签b的次数,n(b,i)为物品i被打过b标签的次数。

1.算法的改进

2…P(u,i)=sum[n(u,b)*n(b,i)/(log(1+nb(u)))],增加了分母项(为了惩罚热门标签),其中nb(u)记录了标签b被多少各不同用户使用过,借鉴了TF-IDF的思想。

3…P(u,i)=sum[n(u,b)*n(b,i)/(log(1+nb(u)*log(1+ni(u))))],进一步扩展了分母项(为了惩罚热门物品),其中ni(u)记录了物品i被多少各不同用户打过标签。

(3)解决数据稀疏性(相似标签的聚合)

现实中用户和物品的交集标签会很少,所以应将相似标签聚合,计算标签的余弦相似度:

Sim(b,b’)=[sum(nbi*nb’i)/sqrt[sum(nbi2)*sum(nb’i2)]],nbi为给各物品打标签b的用户数,nb’i为给各物品打标签b’的用户数。

(4)标签清理

1.去除词频很高的停止词和表情绪的词;2.去除因词根、分隔符不同造成的同义词。

3.也可采用让用户进行反馈的方式。

(5)如何给用户推荐标签

1.给用户推荐标签的目的:(1)方便用户输入标签;(2)提高标签质量。

2.方法:将用户u最常使用的标签和物品i最常被打的标签线性加权。

当然还有,基于知识图谱(后续补充)

时间排序

在新用户的冷启动中,按照时间和热度做内容召回;从内容角度考虑,根据新闻的时效性,对热点新闻加大权重。

人工规则

在一些强关联的推荐业务中,比如OTA行业,如果用户定了机票,那么机场附近的酒店就有比较大的推荐权重。