Press "Enter" to skip to content

得物交易推荐「DSSM」在各小场景的通用推荐实战

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

得物是一家潮流文化的电商平台,用户在这里能够寻找、发现自己喜爱的潮流商品。 交易推荐负责所有商品的流量分发,在得物商品推荐中发挥着至关重要的作用。 个性化推荐效果不仅影响用户浏览体验,还关系着公司技术和品牌形象。

 

一、前言

 

随着公司业务的不断扩展,交易业务场景也在不断壮大。比较常见交易场景如商品瀑布流、金刚位、分类 tab 和 tab 金刚位,是重点优化的场景;其他一些小交易场景如女性频道、分类ALL、奢品频道、品牌频道因为没有算法同学持续维护和升级,大部分场景推荐策略还是停留在比较基础的策略阶段,并没有从个性化推荐算法中受益。如何设计一个通用的可以应用在多个小场景的个性化推荐算法,是交易推荐业务亟待解决的问题。

 

二、方案选择

 

2.1交易小场景现状

 

 

交易小场景(依次为:分类ALL、女性频道、奢品频道、品牌专区)

 

之前多个交易小场景主要有以下特点:

 

业务形态复杂:需要展示商品、品牌、系列、主题、tab、三级类目等item

 

业务逻辑单一:主要两种策略

 

推荐用户正向行为商品(点击、收藏、购买等)或者其相关信息(品牌、系列、主题、类目)

 

通过正向行为商品和ICF算法倒排数据推荐相似商品

 

维护升级困难:

 

数据维护困难:所有小场景共有近30个业务模块,每个模块平均有3~4个数据表(策略数据和兜底数据),因此有近百张数据表需要维护。

 

人力维护困难

 

场景太多

 

数据表多

 

业务繁杂

 

总结 :之前交易小场景业务展示形态复杂,主要依赖非个性化算法(部分场景有基于策略和 ICF 的个性化算法),难以维护和升级,投入产出比不合理,亟需一套通用解决方案解决以上问题。所以我们制定以下解决方案,目前已经可以很好地解决以上问题。

 

2.2 常见召回算法

 

推荐主要分为召回和排序两部分,当然往往也会加入粗排和重排完善推荐流程;而交易小场景当前只考虑优化最基础的召回和排序。小场景的召回逻辑比较混乱不统一,也是本次项目考虑优化的重点部分。排序模型则暂时使用瀑布流的模型。

 

目前个性化召回常用的有 i2i 算法和 u2i 算法,下面简单介绍这两种方案。

 

2.2.1  i2i 召回算法

 

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后,经过小场景(如奢品频道)商品可推池过滤后,很容易为空,从而大概率走兜底数据。

 

2.2.2   u2i 召回算法

 

u2i算法召回流程为:

 

离线模型训练(拆分出user侧模型,infer出item embedding向量)

 

在线ANN检索

 

u2i经典算法主要有2种:

 

Youtube召回

 

DSSM召回

 

 

u2i 召回整体流程图
(图片来源:参考文献4)

 

优点:

 

用户向量可以在线实时 infer,能够捕捉到用户实时兴趣。

 

不管用户有没有消费过某个场景数据,DSSM 都能召回这个场景下的 item,降低兜底数据量。

 

缺点:

 

整个流程链路比较复杂,包括负样本采样、模型训练、模型拆分、user 模型服务引擎、faiss 数据构建,上线周期长。

 

黑盒模型,推荐结果可解释性略差。

 

2.3 通用推荐方案确定

 

通用召回应当具备以下几点能力

 

能够个性化地推荐商品、品牌、类目、主题、系列等

 

能够区分场景,个性化推荐对应场景下的数据信息

 

能够根据不同维度(类目、系列等)个性化推荐对应维度下商品

 

能够统一各场景逻辑,便于今后扩展和升级算法

 

 

算法用于通用召回——优势用于通用召回——劣势
i2i 

算法相对简单,容易快速上线

 

 

无法只用一张倒排表满足所有小场景个性化推荐需求

 

u2i 

公司对主流向量检索模块的封装能够灵活构建向量检索服务,解决小场景推荐 serving 问题。

 

不管用户有没有消费过某场景数据,都能推荐此场景下 item,通用能力强。

 

 

算法相对复杂,上线工程能力要求高

 

 

基于上述分析,确定了 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 维的 y Q  和 y D  ),并通过余弦相似度计算相关性。

 

DSSM 算法的细节原理,在这里就不详细展开了。感兴趣的同学可以直接看原论文。

 

四、算法实战

 

4.1 双塔模型概述

 

双塔模型思路:把 user 特征(包括 context 特征)和 item 特征拆分,分别传给两个塔,通过 DNN 映射到低维特征空间生成 Embedding。左塔输出 user embedding,表征用户兴趣;右塔输出 item embedding,表征物品。然后两者通过内积 /cosine 计算相似度。

 

目前来说,双塔模型是线上用得最多的模型。它的优、缺点体现如下。

 

 

优点 

简单

 

在线 ANN 检索速度快

 

缺点 

user 侧和 item 侧特征交互太晚

 

 

在实践的时候,往往有3点需要考量

 

 

模型的负样本如何选择?

 

user embedding 和 item embedding 需要做 L2-Norm 吗?

 

模型监控和异常阻断怎幺做?

 

 

 

双塔模型架构

 

4.2 双塔模型-负例挖掘

 

在排序阶段构建负样本,一般都是用曝光未点击数据。但是,在做召回时,不能完全应用这种方法,会存在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 相同方案,如下式)负采样数据,正样本使用点击、收藏和购买数据。

 

 

4.3 双塔模型-Embedding Norm

 

获取user和item embedding后,计算相似度通常有两种选择,一种是用内积:

 

 

一种是cosine相似度:

 

 

可以发现,cosine 可以理解为 user embedding 和 item embedding 先各自做了L2 Norm,然后两者再做内积。于是问题来了,我们是不是应该对 user embedding 和 item embedding 做 L2 Norm?

 

经验结论是应该做,效果会更好一些。因此在模型训练和embedding infer时候我们做了L2 Norm。

 

4.4 模型上线和监控

 

模型训练完成以后,就要考虑如何将模型推送线上服务、并且做好数据和模型的质量监控。对数据和模型的稳定性需要加强监控阻断机制,保证双塔模型的稳定性。模型上线和监控的对象主要包括:

 

模型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

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。