亚马逊AWS官方博客
推荐系统系列之推荐系统概览(下)
在推荐系统概览的第一讲中,我们介绍了推荐系统的常见概念,常用的评价指标以及首页推荐场景的通用召回策略。本文我们将继续介绍推荐系统概览的其余内容,包括详情页推荐场景中的通用召回策略,排序阶段常用的排序模型,推荐系统的冷启动问题和推荐系统架构,更多细节以及更详细的内容可以参考我的Github repo。
详情页推荐场景中的通用召回策略
详情页推荐场景中的通用召回策略包括(最常用的是前两种):基于item表示向量的相似度的召回;基于item关联规则的召回;基于item表示向量聚类的召回。
- 基于item表示向量的相似度的召回,常见的item表示方法如下:物品item的显式画像的表示;物品item的整个embedding向量的表示;用户-物品交互矩阵中item对应列向量的表示(假设用户是行,物品是列)
- 基于item关联规则的召回(常用在电商中的购物车页面推荐或者购买页面推荐中),找出所有用户购买的所有物品数据里频繁出现的Item序列,来做频繁集挖掘,找到满足支持度(即两个商品被同时购买的概率)阈值的关联物品。关联规则分析中的关键概念包括:支持度(Support),它是两件商品(A∩B)在总销售笔数(N)中出现的概率,即A与B同时被购买的概率;置信度(Confidence),它是购买A后再购买B的条件概率;提升度(Lift),它表示先购买A对购买B的概率的提升作用,用来判断规则是否有实际价值,即使用规则后商品在购物车中出现的次数是否高于商品单独出现在购物车中的频率。
在进行召回的时候,经常需要构建索引。对所有的用户进行索引是非常耗存储和费时的,所以在构建索引的时候,可能选择月活用户来构建索引是合适的。在做实时召回的时候,用户的行为序列特征除了可以考虑推荐业务相关的行为,还可以考虑同一个应用的其他形态比如用户在搜索业务中的行为。比如YoutubeDNN召回模型的特征,除了有用户最近观看过的video id序列/video embedding,还有该用户最近搜索过的word序列或者word的embedding。作者提到加入搜索业务的用户行为对整个效果提升不错。有意思的地方是YoutubeDNN排序模型并没有把用户最近搜索过的word序列或者embedding建模进来。
排序阶段常用的排序模型
排序阶段目前主流的都是基于传统机器学习或者深度学习的模型,排序模型的研究一直都是推荐系统领域的热点,国内外大厂都在这个领域大展拳脚。当前的排序模型有如下趋势:引入行为序列特征;引入注意力机制(比如DIN,DIEN等);引入多任务/多目标(比如ESMM,MMOE,ESMM2,PLE等);引入多模态。下面我们介绍几个常见的简单排序模型。
- LR逻辑回归模型,它是CTR预估排序任务早期使用最多的模型。LR的预测函数如下:
LR模型的优点是简单方便,易解释。LR模型的缺点是使用LR的时候,一般会把离散特征变成one-hot向量,这样就容易导致整个特征向量变成高维稀疏向量,从而使学习难度增大。LR本质上是线性的,如果需要建模与目标变量非线性的关系,需要人工引入特征交叉来表示,因而相对于其他模型,需要更多的人工特征工程。目前为止,LR在排序阶段的主要使用场景有两个地方:排序阶段的第一个模型;把LR模型作为排序阶段的benchmark或者AB test中的某个分桶。
- GBDT+LR级联模型(具体可以参考Facebook的论文),思路是用GBDT对所有的原始特征进行编码,然后把得到的编码结果送入级联的LR做分类。本质上是利用GBDT自动进行特征筛选和组合,它的一个变体是GBDT+FM模型,利用FM来替换LR。
- FM因子分解机模型(参考博客),它是在深度排序模型流行之前,使用的比较多的排序模型。FM一般需要把category特征包括ID类特征都要变成one-hot向量,因此维度会很高(下图中的例子是针对3个user,3个item的情况) 。爱奇艺使用用户的观看历史以及兴趣标签代替user id,降低了特征维度,并且因为用户兴趣是可以复用的,同时也提高了对应特征的泛化能力。
FM可以看作是Matrix Factorization(MF,矩阵分解)的进一步拓展,除了User ID和Item ID这两类特征外,很多其它类型的特征都可以进一步引入FM。FM自动计算特征二阶交叉,它将所有这些特征转化为embedding低维向量表达,并计算任意两个特征embedding的内积,作为这两个特征组合的权重。
- Wide & Deep networking Learning (WDL)模型,它本质是上结合LR和MLP,当前在业界用的比较多。Wide 部分即LR体现的是记忆功能,Deep部分即MLP体现的是泛化功能,二者互补能提供更好的性能。区别于GBDT+LR/FM(需要分别独立训练GBDT和LR/FM),WDL是端到端联合训练。WDL能方便的建模用户的行为序列作为一个单独的特征。WDL开创了在深度排序模型中结合wide部分和deep部分联合建模的热潮。WDL中的wide部分是需要做手工的交叉特征的,这个是它的缺点(WDL模型之后,出了很多变体比如DeepFM,Deep & Cross networking learning等,它们的核心目的都是通过设计网络结构自动进行特征交叉)。他的网络结构如下:
- DeepFM模型,它是结合FM部分和MLP部分,不需要人工做特征二阶交叉组合(这个模型在国内客户中使用挺多的)。它的网络结构如下图所示:
重排阶段
重排阶段主要就是业务运营人员用各种策略/规则进行干预。从对终端用户的推荐效果来讲,这个阶段我认为比排序阶段还要重要。重排主要从以下几个方面来进行干预(参考博客):
干预方式 | 简介 |
优选物品的曝光 | 目的是给优质的物品更多的曝光机会。(首页推荐一般会考虑) |
探索与利用 | 探索的目的是为了发现用户可能更多的兴趣点以及给长尾物品和冷启动物品更多的曝光机会。需要确定探索和利用的比例,这个比例可能会随着时间来动态变化。(详情页推荐一般不考虑探索) |
曝光位置的编排 | 考虑是否做分区混合推荐以及每个分区曝光位置安排;是否给长尾物品和冷启动物品固定曝光位置;是否有其他形式比如广告和推荐列表的混排。 首页推荐场景下,尤其要仔细考虑曝光位置如何编排,这个的效果可能比优化模型以及数据本身更好。 |
结果的多样性 | 为了满足用户广泛的已知兴趣,推荐列表需要能够覆盖用户不同的兴趣领域,即推荐结果需要具有多样性,不能简单的返回topN结果给用户。(首页推荐一般会考虑) |
结果的新颖性 | 指的是向用户推荐非热门非流行物品的能力 。评测新颖度最简单的方法是利用推荐结果的平均流行度,因为越不热门的物品,越可能让用户觉得新颖。(首页推荐一般会考虑) |
结果的信任度 | 增加系统透明度,提供推荐解释,让用户了解推荐系统的运行机制。可以利用社交网络,通过好友信息给用户做推荐即通过好友进行推荐解释。 |
结果的时效性 | 在很多网站中,物品(新闻、微博等)具有很强的时效性,需要在物品还具有时效性时就将它们推给用户。 比如,给用户推荐昨天的新闻显然不如给用户推荐今天的新闻。另外,新加入系统的物品应该尽快推荐给用户。 |
过滤 | 为了更好的用户体验,过滤这个操作很重要。过滤操作在重排阶段和召回阶段都需要(由于重排阶段可能会加入一些优选item和长尾/冷启动item,因此需要在召回阶段过滤后,在重排阶段仍然做过滤)。 举例: 比如把用户最近刚买过的商品以及类似的商品从推荐列表中去掉(注意同样的商品可能同一个用户过一段时间也可能会再买,所以这个过滤时间段的设置要根据不同的业务场景来决定); 比如把用户一个小时前点击过的文章从推荐列表中去掉; 比如把用户一分钟前点击过的商品从推荐列表中去掉(注意对于购物网站的同一个商品,即使用户之前点击过该商品,也可能需要多次曝光给他,他才可能下单购买,所以这个过滤的时间间隔不能太长); 比如把用户加入黑名单,选择“不喜欢”或者点“踩”的物品从推荐列表中去掉等等(这里用户已经给出了负反馈)。 |
推荐系统的冷启动问题
推荐系统冷启动问题分为如下三类:
分类 | 介绍 |
用户冷启动 | 即如何给第一次使用该应用的用户做推荐 |
物品冷启动 | 即如何将新上线的物品推荐给可能对它感兴趣的用户 |
系统冷启动 | 即如何在一个新开发的网站(没有用户,没有用户行为,只有部分物品信息)上设计推荐系统,从而在网站刚发布时就让用户有不错的体验。 |
针对冷启动问题,可能走专门的推荐链路效果更好,具体的方法参考如下(参考知乎博客):
方法 | 介绍 | 适用情况 |
提供非个性化的推荐 | 比如给冷启动的用户推荐热门物品,等到该用户数据积累到一定的时候,再为该用户切换为个性化推荐。 | 适用于用户冷启动 |
利用用户注册信息 | 人口统计学信息:包括年龄、性别、职业、民族、学历和居住地等; 用户兴趣的描述:有些网站可能会让新注册的用户用文字或者下拉菜单来描述或者选择兴趣; 从其他网站导入的用户站外行为:比如用户利用社交网站账号登录,就可以在获得用户授权的情况下导入用户在该社交网站的部分行为数据和社交网络数据或者其他用户画像数据。 |
适用于用户冷启动 |
选择合适的物品启动用户的兴趣 | 启动物品集合需要有多样性:在冷启动时,我们不知道用户的兴趣,而用户兴趣的可能性非常多,为了匹配多样的兴趣,我们需要提供具有很高覆盖率的启动物品集合,这些物品能覆盖几乎所有主流的用户兴趣; 具有代表性和区分性:启动用户兴趣的物品不能是大众化或老少咸宜的,因为这样的物品对用户的兴趣没有区分性; 启动的物品是比较热门的。 |
适用于用户冷启动 |
利用物品的内容信息 | 将新的物品先投放给曾经喜欢过和它内容相似的其他物品的用户。 | 适用于物品冷启动 |
开设新品专区 | 很多内容消费类网站使用这个方法。 | 适用于物品冷启动 |
采用专家知识 | 利用专家知识库来提供条件搜索; 建立物品标签体系,从而提供类目导航(本质上是利用搜索和类目导航) |
适用于系统冷启动 |
推荐系统架构
一个好的推荐系统架构应该具有下面这些特点:实时响应请求;及时、准确、全面记录用户反馈(包括显示反馈和隐式反馈);可以优雅降级;快速实验多种策略和多种模型。
线上推荐的架构的两种模式:All in one process方式,即所有逻辑包括召回,排序,重排都在一个Recommendation server中处理;解耦方式,即把逻辑中的两个部分召回和排序分别用一个服务来处理, Recommendation server分别与这两个服务交互。
工业级推荐系统架构(参考自知乎博客):
上图中的常规模型指的是周期离线训练并更新为线上的模型;上图中的实时模型指的是实时收集用户行为反馈,并选择训练实例,实时抽取拼接特征,并近乎实时地比如分钟级别更新在线推荐模型。这样做的好处是用户的最新兴趣能够近乎实时地体现到推荐结果里。这里的常规模型和实时模型共存的原因可能是某路召回模型或者排序模型没有办法做增量训练或当前常规模型和实时模型处于A/B Test部署中,或者常规模型作为fallback选择。
Netflix的个性化推荐系统架构(2013年)如下图(参考自Netflix官方博客):
Netflix的推荐系统分为离线,近在线,在线三个部分。在线部分要尽可能满足低延迟的 SLA以响应实时的客户端请求。线上的召回,排序阶段的预测以及业务策略处理也属于online部分。离线部分是作为在线部分的一个fallback选项(即一种优雅降级的方法),同时它能提供一部分最终或者中间的推荐结果(比如作为一路召回或者分区混合推荐的一个分区),另外它能提供部分字段的预计算(比如用户画像和物品画像)。当然模型的离线训练也属于这个部分。近在线部分除了可以增量训练并近实时(比如分钟级别)的更新在线模型,还可以根据最新事件补充离线召回结果,以及根据用户最新浏览记录提取的兴趣标签补充到用户画像中。
总结
推荐系统系列之推荐系统概览到此就讲完了。本文介绍了推荐系统的常见概念,常用评价指标,首页推荐和详情页推荐两个场景下的通用召回策略,排序阶段常用的模型,重排阶段,冷启动问题以及推荐系统的架构。相信大家现在已经对推荐系统有了更深刻的理解,我们接下来深入探讨推荐系统的召回阶段。感谢大家的耐心的阅读。