得物是一家潮流文化的电商平台,用户在这里能够寻找、发现自己喜爱的潮流商品。交易推荐负责所有商品的流量分发,在得物商品推荐中发挥着至关重要的作用。个性化推荐效果不仅影响用户浏览体验,还关系着公司技术和品牌形象。
随着公司业务的不断扩展,交易业务场景也在不断壮大。比较常见交易场景如商品瀑布流、金刚位、分类 tab 和 tab 金刚位,是重点优化的场景;其他一些小交易场景如女性频道、分类ALL、奢品频道、品牌频道因为没有算法同学持续维护和升级,大部分场景推荐策略还是停留在比较基础的策略阶段,并没有从个性化推荐算法中受益。如何设计一个通用的可以应用在多个小场景的个性化推荐算法,是交易推荐业务亟待解决的问题。
2.1交易小场景现状
交易小场景(依次为:分类ALL、女性频道、奢品频道、品牌专区)
之前多个交易小场景主要有以下特点:
业务形态复杂:需要展示商品、品牌、系列、主题、tab、三级类目等item
业务逻辑单一:主要两种策略
推荐用户正向行为商品(点击、收藏、购买等)或者其相关信息(品牌、系列、主题、类目)
通过正向行为商品和ICF算法倒排数据推荐相似商品
维护升级困难:
数据维护困难:所有小场景共有近30个业务模块,每个模块平均有3~4个数据表(策略数据和兜底数据),因此有近百张数据表需要维护。
人力维护困难
场景太多
数据表多
业务繁杂
总结:之前交易小场景业务展示形态复杂,主要依赖非个性化算法(部分场景有基于策略和 ICF 的个性化算法),难以维护和升级,投入产出比不合理,亟需一套通用解决方案解决以上问题。所以我们制定以下解决方案,目前已经可以很好地解决以上问题。
推荐主要分为召回和排序两部分,当然往往也会加入粗排和重排完善推荐流程;而交易小场景当前只考虑优化最基础的召回和排序。小场景的召回逻辑比较混乱不统一,也是本次项目考虑优化的重点部分。排序模型则暂时使用瀑布流的模型。
目前个性化召回常用的有 i2i 算法和 u2i 算法,下面简单介绍这两种方案。
i2i 召回算法的核心是如何度量 item 间的相似性,其召回思路为:
离线计算 item 之间的相似性,每个 item 计算 Top N 个最相似的 item,并存储为倒排表。
在线服务时,根据User实时行为查找倒排表查找相似商品(如图1所示)
i2i代表的算法主要有:
基于共现计算相似度:ItemCF
基于embedding计算相似度:
静态embedding:Word2Vec、GloVe、FastText算法
动态embedding:ELMo、GPT、BERT
基于graph embedding计算相似度:
浅层图模型:DeepWalk、Node2vec
深层图模型:GCN(基于Spatial Domain)、GraphSAGE(基于spectral domain)
i2i召回整体流程图
(图片来源:参考文献4)
优点:
方法简单,效果明显。非常适合初期上线
有很多成熟的算法,提供了后续算法优化路线
缺点:
用户兴趣item-list召回只用到部分用户信息,信息利用不完整
挖掘用户item-list后,经过小场景(如奢品频道)商品可推池过滤后,很容易为空,从而大概率走兜底数据。
u2i算法召回流程为:
离线模型训练(拆分出user侧模型,infer出item embedding向量)
在线ANN检索
u2i经典算法主要有2种:
Youtube召回
DSSM召回
u2i 召回整体流程图
(图片来源:参考文献4)
优点:
用户向量可以在线实时 infer,能够捕捉到用户实时兴趣。
不管用户有没有消费过某个场景数据,DSSM 都能召回这个场景下的 item,降低兜底数据量。
缺点:
整个流程链路比较复杂,包括负样本采样、模型训练、模型拆分、user 模型服务引擎、faiss 数据构建,上线周期长。
黑盒模型,推荐结果可解释性略差。
通用召回应当具备以下几点能力
能够个性化地推荐商品、品牌、类目、主题、系列等
能够区分场景,个性化推荐对应场景下的数据信息
能够根据不同维度(类目、系列等)个性化推荐对应维度下商品
能够统一各场景逻辑,便于今后扩展和升级算法
算法 | 用于通用召回——优势 | 用于通用召回——劣势 |
i2i |
|
|
u2i |
|
|
基于上述分析,确定了 u2i 模型并选择了 DSSM 模型作为通用召回模型,加上瀑布流的排序模型,来构成通用推荐的主要模块。
各场景不同维度的个性化解决方案(初版)如下:
个性化推荐商品(原功能满足)
个性化推荐品牌、类目、主图、系列——通过个性化商品相关属性获得
分场景(场景id)——根据场景id和向量检索框架,召回对应场景id下商品
分维度(类目、系列)——根据维度id和向量检索框架,召回对应维度id下商品
各场景采样统一的逻辑,后期——1.可以接入更多的小场景,2.升级DSSM算法提升各场景指标
DSSM 模型,也叫双塔模型,应该是每个算法工程师非常熟悉的模型了。是由微软2013年发表的论文《Learning Deep Structured Semantic Models for Web Search using Clickthrough Data》中提出,用于在信息检索中解决文本相似匹配的问题,后被应用于推荐系统中成了经典的双塔模型。
双塔模型架构
DSSM 原来相对简单:通过 Q(Query)和D(Document)的曝光、点击数据,采用 DNN 把 Q 和 D 映射到低维向量空间中(如图中 128 维的 yQ 和 yD ),并通过余弦相似度计算相关性。
DSSM 算法的细节原理,在这里就不详细展开了。感兴趣的同学可以直接看原论文。
双塔模型思路:把 user 特征(包括 context 特征)和 item 特征拆分,分别传给两个塔,通过 DNN 映射到低维特征空间生成 Embedding。左塔输出 user embedding,表征用户兴趣;右塔输出 item embedding,表征物品。然后两者通过内积 /cosine 计算相似度。
目前来说,双塔模型是线上用得最多的模型。它的优、缺点体现如下。
优点 |
|
缺点 |
|
在实践的时候,往往有3点需要考量
模型的负样本如何选择?
user embedding 和 item embedding 需要做 L2-Norm 吗?
模型监控和异常阻断怎么做?
双塔模型架构
在排序阶段构建负样本,一般都是用曝光未点击数据。但是,在做召回时,不能完全应用这种方法,会存在selection bias问题:在线serving时,召回需要处理的是所有的物料集合,离线如果只选择召回数据训练模型,会造成线下和线上模型优化目标不一致问题从而影响在线效果。
双塔一般来说有几种处理负样本方法,这里归纳一下:
a. 第一种就是 in-batch 负例,就是在一个 batch 里面的样本,除了某个用户点击了某个 item 这个正例之外,batch 里面任意一条都可以做负样本。
b. 第二种就是全局随机采样,因为召回面对的是全局的 item,所以可以在全局的 item 随机选择,从而避免 selection bias,但是它的问题就是随机选择的负例和正例非常容易区分,模型未达到最好的状态。这实际是 Youtube DNN 模型的做法。
c. 第三种就是1和2的混合采样,就是说负例一部分来自 in-batch 负例,一部分来自全局随机采样。
d. 第 四种就是全局随机采样和曝光未点击负例两者混合,希望靠全局随机采样负例解决 selection bias,靠曝光未点击负例增强学习难度,增强模型健壮性。
以上的各种做法,说明双塔做召回如何选取负样本还是有不少学问的。我们本次就是采样第四种混合负例的做法,在进行随机负采样的时候,我们还做了一些小调整:随机按照类目维度选择负样本+按照曝光次数 0.75 次方( word2vec 相同方案,如下式)负采样数据,正样本使用点击、收藏和购买数据。
获取user和item embedding后,计算相似度通常有两种选择,一种是用内积:
一种是cosine相似度:
可以发现,cosine 可以理解为 user embedding 和 item embedding 先各自做了L2 Norm,然后两者再做内积。于是问题来了,我们是不是应该对 user embedding 和 item embedding 做 L2 Norm?
经验结论是应该做,效果会更好一些。因此在模型训练和embedding infer时候我们做了L2 Norm。
模型训练完成以后,就要考虑如何将模型推送线上服务、并且做好数据和模型的质量监控。对数据和模型的稳定性需要加强监控阻断机制,保证双塔模型的稳定性。模型上线和监控的对象主要包括:
模型serving:双塔模型拆分用户侧和商品侧模型,将用户侧模型推送在线提供实时serving服务。在线serving时首先获取用户实时特征(包括上下文特征),通过用户模型获取用户embedding。
商品向量服务:所有商品经过商品侧模型infer后,得到商品embedding,后根据商品id和商品属性构建索引ANN在线检索服务。得到用户embedding后,通过ANN检索计算相似度,取Top N商品作为召回结果。
数据监控:整个任务链路目前都增加了监控,通过短信、电话和飞书机器人的方式通知。
异常阻断:任务异常会阻断下游任务执行,保证模型稳定性。
训练样本监控:数据质量监控——监控一天数据量的波动,到达某个阈值阻断。
训练模型监控:3σ准则计算历史7天AUC正常范围,超出范围异常并触发阻断。
模型上线和监控流程图
各小场景在陆续接入 DSSM 通用推荐模型中,已接入的场景 ctr 平均提升 10%+,让我们看到了 DSSM 应用在各小场景的有效性。但在应用过程中,还有一些做的不足的地方:
目前这版DSSM模型还是偏 ctr 模型,优化目标主要是 ctr 指标,以后希望能够提供更多不同的优化目标模型来支持更多的业务。
推荐类目、品牌等维度还是通过推荐商品对应的信息来设计的,后期希望增加不同DSSM模型推荐不同的维度。
1. Huang, Po-Sen, et al. "Learning deep structured semantic models for web search using clickthrough data." Proceedings of the 22nd ACM international conference on Information & Knowledge Management. 2013.
2. Huang, Jui-Ting, et al. "Embedding-based retrieval in facebook search." Proceedings of the 26th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2020.
3. Covington, Paul, Jay Adams, and Emre Sargin. "Deep neural networks for youtube recommendations." Proceedings of the 10th ACM conference on recommender systems. 2016.
4. 「召回层」深度召回中的u2i(https://zhuanlan.zhihu.com/p/165064102
5. 负样本为王:评Facebook的向量化召回算法(https://www.modb.pro/db/103250
*文/Ben