Linux 之父出席、干货分享、圆桌讨论,精彩尽在 OpenCloudOS 社区开放日,报名戳 了解详情
写点什么

多目标推荐场景下的深度学习实践

  • 2021 年 2 月 24 日
  • 本文字数:7336 字

    阅读完需:约 24 分钟

多目标推荐场景下的深度学习实践

58 同城作为一个 UV 千万量级的 APP,覆盖了租房,招聘,二手房,二手车,本地生活,新房,新车等多个业务。在首页这个复杂的业务推荐场景下,我们面临着多业务融合挑战。如何利用从双通道到多通道到多场景适配的深度学习模型,实现涉及连接效率提升,增加商业收入,提高用户体验,优化用户流程,支持运营活动的各种目标的平衡。本文将以 58 同城首页猜你喜欢为例,将具体介绍实践多业务融合推荐场景下的深度学习模型应用,以及相关的工程实践。

多业务融合的挑战

在多业务融合的推荐场景下,召回策略,重台策略,展示样式,排序模型都会面临多业务所带来的挑战:


① 召回策略:会涉及到多个召回通道的业务适配。

② 重排策略:需保证各个业务间流量的均衡分配。

③ 展示样式:展示元素与样式的一些适配问题。

④ 排序模型(传统使用 XGBoost 模型), 面临着两大困难:


  • 特征对齐困难:由于 58 业务多样性, 各类业务贴的属性信息都存在显著的差异,导致了样本中的帖子特征和用户兴趣特征无法对齐。

  • 特征工程复杂度:针对不同的业务需构建相应用户兴趣,各个业务均存在特定的特征工程逻辑, 部分特征包含了复杂的流程和逻辑。同时,需要对不同业务做匹配交叉, 这导致整个特征工程逻辑非常复杂和庞大。

定制化通道和序列化通道的双通道模型

1. 行为序列兴趣模型验证

近两年来,用户序列化兴趣深度模型已经被广泛应用在推荐广告上,取得了显著的效果。它是以用户行为序列作为模型的核心输入,具备比较优秀的兴趣建模能力,同时又较好地解决了特征对齐的困难。由于它输入的是用户的行为序列,显著的降低了特征工程的复杂度。我们早期的用户序列化兴趣深度模型,主要是涉及以下两个方面内容:


① 用户行为序列的构建:我们主要采用用户的点击和转化行为来构成用户行为序列,在具体行为的表征方式上,采用了帖子,类目,地域等关键属性信息来作为序列的表征,而整个序列长度是基于业务周期的。

② 序列模型的选择:在模型的选择上,我们分别验证了 DIN, DIEN 和 Transformer 模型在用户兴趣序列建模中的效果。在整体结构上,Transformer 模型的扩展性会更加好一点。所以我们最终选择 Transformer 作为我们整个序列兴趣建模的基础组件。Transformer 最早是谷歌提出的一个序列建模组件,利用自注意力与多头机制,通过位置的 Embedding 来进行序列化兴趣建模。


我们发现,纯序列兴趣模型的效果并不能超越特征工程比较完善的 XGBoost 模型。对比两边模型发现, 传统的 XGBoost 模型有很多高级特征, 包括匹配交叉特征,以及在特征工程上的最佳实践。虽然纯序列模型通过深度学习提供了比较强的兴趣表达能力,也支持帖子交叉,但是缺乏业务定制能力。因此,我们尝试把 XGBoost 模型中的对业务场景有理解的高级特征引入模型中。通过特征工程模块构建特征,然后把这部分特征作为数据一部分合并到样本中,然后进行模型训练。这种方法的优点比较明显,使我们能够复用现有的特征工程流程,但是相应的工程流程与逻辑的仍然比较复杂。在下一小节中,我们将引入定制化通道。

2. 定制化通道引入

定制化通道引入是指引入特征交叉的定制化结构,把特征工程逻辑引入到模型中。通过对模型结构的定制来代替特定的特征工程逻辑。它的基本思路就是首先引入原始的基础特征,然后通过序列化进行表征。在序列化表征的基础上,基于向量来做定制化特征的交叉。



主要可以分为四层:

① 特征层:输入层包含了基础的特征,包括帖子和用户上下文最原始的基础特征,比如说帖子的 LBS 信息,帖子的关键标签,用户的兴趣标签,用户 LBS 等。

② 向量化层:是我们通过预训练来构建原始特征的 Embedding 的表示,采用预训练好的向量来做构建,帖子的标题我们采用词向量。

③ 交叉层:基于向量,根据场景与业务的特点来构建特定的特征对间的定制化的交叉。简单列了几种常用的方法,比如说 Cosine 相似度,DNN 交叉等。

④ 拼接层:将原始的向量以及交叉后的结果拼接,形成定制化交叉模块的输出。

3. 模型架构



简单来说它具备了两个通道:

① 定制化通道:基于各个特征维度的序列化表示,允许工程师们根据业务特点进行定制化交叉,为业务与场景提供了定制能力,同时也支持融入工程师对业务与场景的理解。

② 序列化通道:利用序列化建模组件。基于用户行为序列自动抽取的用户兴趣,为模型提供了用户信息的抽象表征与交叉能力。

引入定制化通道后,最上层再连接 MLP,这样就形成了下面的双通道模型架构。

4. 总结

双通道模型在提升模型效果的同时,使得特征工程的流程大幅减少,复杂度也明显降低了。主要可以细分为以下四点:


  • 实现了基线最优模型的稳定超越:其中点击率提升了 3%, 曝光转化率提升 5%。

  • 显著降低特征工程复杂度:通过在定制化通道引入特征交叉能力,和基于用户行为序列的建模方式,使得特征工程流程大幅减少,复杂度明显降低。

  • 建立了序列化兴趣模型线上线下的工程架构基础:解决离线在线性能问题,成为主流排序模型。

  • 进一步优化的基础:后续的多通道模型升级以及多场景适配探索都是以双通道模型为基础。

多通道模型探索

1. 探索方向

如何进一步优化双通道模型,更精准地去刻画用户的兴趣。我们总结了两个简单的方向:


① 第一个是在深度上,怎么结合业务特点,在单行为序列上做更深度的优化。列出几个在实践上效果比较好的模型:

lDSIN(深度会话兴趣模型):基于行为序列的会话切分对用户兴趣进行结构化建模;

lMIMN(长序列的用户行为建模):以 NTM 为基础进行长用户行为序列建模;

lSIM(基于搜索的终身行为序列建模):采用两阶段的方式,首先从用户的历史行为中找到推荐商品的相近行为,然后再做更精细化的建模。但是在低频业务场景下,该模型的收益有限。


② 第二在广度上,引入多种异构的用户行为序列,以实现对用户兴趣更全面和立体化的刻画。我们提出了一个“1+N”的多通道深度兴趣模型,“1”代表是的定制化通道,”N”代表用户的点击搜索转化内容浏览等行为的序列通道。通过这样的模型结构,最终能够形成定制兴趣,基础兴趣,表达兴趣,核心兴趣,辅助兴趣等多种形式的兴趣表征。

2. 用户兴趣的全面立体化刻画



我们将整个模型结构分为以下四层:

① 第一层是以用户的行为序列作为核心的,包括点击搜索内容内容浏览等多种的行为序列。

② 第二层是兴趣抽取层,通过五个通道来学习相应的兴趣表征:


  • 定制化通道,是建立用户最近行为以及上下文与待推荐帖子间的序列化交叉,形成的定制化兴趣。

  • 点击行为通道,基于用户在帖子上的点击行为或浏览行为,与待推荐帖子做自注意力的交叉,从而形成基础用户兴趣。

  • 搜索行为通道,强化了核心兴趣。

通过建立搜索行为与待推荐帖子的关联,形成用户的表达兴趣。在输入用户行为序列,建立了 query 和帖子的表征后,再进一步进行序列化的兴趣抽取。搜索行为序列,关键在于如何填平 query 和帖子间的异构表征差异。因为 Query 通常是文本序列,而帖子是结构化的信息体,怎么将其映射到统一的表征空间,保证特征的可交叉性,是亟待我们解决的问题。


目前我们采用了基于词向量的语义表征方式。首先我们训练了字词向量数据,在这个基础上,再对帖子抽取标题和核心标签来表示帖子。其中有两个关键点,一是出示什么样的核心标签。根据业务的特点,我们发现用户在不同的内部上搜索的关注点非常的聚焦,比如说租房主要搜索商圈小区地域信息,二手车以搜索车的品牌车型车系作为主要的搜索。为了简化,我们只把搜索关注点纳入到核心标签中,作为结构化的字段,相对容易抽取。采用基于词向量的语义表征方式,用不同的手段,比如 LSTM 语言模型。目前我们采用比较简单的 Average Pooling,把 query 和帖子文本片段的词向量求和平均。使用该方法一方面是由于标题和 query 间的词顺序对相关性的影响不是很大,另一方面它的工程实践相对比较简单。


  • 转化行为通道:体现用户主动意图。

根据用户的转化行为,与待推荐帖子做 self-attention 交叉,构建了核心的用户兴趣。它以转化行为序列为输入,以 transformer 作为建模组件。在 58 复杂的业务场景下,它能体现用户的进一步的交易意图。相比于点击浏览行为,这类数据更稀疏,但更能体现用户的真实需求。比如说租房,用户打了电话,说明用户对该房子的兴趣度很高。


那么转化行为中帖子具体是怎么表征的?如果继续沿用帖子 ID,数据过于稀疏,模型的效果不是很理想。针对转化行为数据稀疏的特点,我们引入了一个聚类 ID,来代替该帖子 ID。聚类 ID 在泛化能力与宣传度上,能够做到较好的平衡,它的信息强度弱于帖子 ID,但是它泛化性会更好。具体就是把每个帖子的关键业务属性组合起来进行聚类,相应的关键业务属性组合值,就是聚类 ID。


  • 内容行为通道:对兴趣发现与补充。

根据用户在文章内容上的浏览行为,与待推荐帖子关联形成补充的辅助兴趣。多种用户行为序列通道利用序列化建模组件,提供了对用户兴趣的深度抽象表达能力。我们发现越来越多的互联网公司都在针对自己的业务构建自己的内容体系,以提升用户的使用时长忠诚度和留存。在提升用户留存忠诚度的同时,可以辅助用户做决策,包括业务的引流工厂。内容和业务其实是强相关的,如果我们把用户在内容上的浏览行为应用到业务推荐中,可以辅助发现和补充一些用户兴趣。


在用户的行为相对比较稀疏的情况下,常规的做法就是构建用户信息标签,根据用户的内容浏览行为在内容上提示用户在业务上的偏好,然后将其应用到推荐中来。但是这种做法的局限在于,需要进行内容理解,将它映射到相应的业务属性上。在实践中我们考虑了两种方案,第一种方案是语义空间映射,基本的思路是把文本内容进行关键词与类目提取,然后在空间上进行交叉。这种方式的突出问题在于内容体与业务体在语义相关性通常比较弱。而且随着内容呈现的多媒体化,很多内容都以视频形式呈现,给我们的语义表征带来很大的困难。目前,我们最近在研究探索一个新的思路:基于行为窗口的协同表征。


③ 第三层是拼接层,将多个通道进行拼接。


④ 第四层是融合层,通过 MLP 网络对信息进行融合。从用户的点击搜索转化内容浏览等多种行为中来抽出兴趣,有很多优点。一方面比较适合 58 的相对低频的业务场景,能从多种维度上去补齐信息。另一方面能从不同的角度来刻画用户的兴趣。

3. 多通道深度兴趣模型效果



多通道深度兴趣模型,关键在对不同类型的用户行为,采用合适的表征方式建立行为与待推荐帖子的交叉关联。我们在点击行为通道上采用帖子的关键属性和帖子 ID 来进行表征。转化行为通道是根据行为的稀疏程度,权衡表示特征的泛化能力与信号强度的基础上,采用聚类 ID 与关键属性来进行表征。搜索行为通道是基于词向量将搜索词与帖子文本片段表征到统一的语义空间行为通道。利用点击搜索转化内容浏览等多种的行为,聚焦低频需求的业务场景和特点,比较好地补齐低频导致的兴趣刻画的短板,从而形成更全面的兴趣刻画。整体上,多通道深度兴趣模型在曝光的转化率上实现了进一步的提升。目前线上相比基线模型提升幅度超过了 10%。                                           

多场景适配

1. 迁移能力探索

多通道模型在 58 首页猜你喜欢这个场景落地的同时,我们也在探索怎么将多通道的兴趣模型应用到其他的推荐场景下。像首页,是一个典型的多业务融合推荐场景,但也有其他单业务推荐。比如以租房为例,租房详情页的相关推荐业务也是一个性化推荐。目前各个场景分别训练排序模型,模型都基于场景特点,有独有的特征结构。但是这样其实面临两个主要的挑战,一是有些场景的 UV 量比较小,单独的模型优化的收益有限;第二是如果场景的优惠量较小,样本相对也会较小,如果在这个场景下用多通道深入兴趣模型,过滤性拟合现象会比较严重,这也是我们模型的迁移能力需要探索的一个重要方向。

2. 场景适配层引入



为了支持场景适配,我们对多通道深度信息模型做了相应的升级。首先是引入了场景适配层,在原来基础上引入了场景适配层。第二在点击行为中,引入了场景 ID,在训练构建基础兴趣的同时,构建了场景表征。第三是在定制化通道中引入了更丰富的场景特征的交叉逻辑,以覆盖不同场景的需求。


简单来说,我们基于场景的表征,通过注意力机制来对定制兴趣,基础兴趣,表达兴趣这些场景的注意力适配,把相应的通道兴趣与常见表征进行拼接,然后再交叉学习,最终输出相应适配系数。通过点击行为序列通道引入点击行为,在点击行为的表征中,引入场景 ID 信息作为表征的重要的组成部分,从而来学习场景向量化表示。

多通道模型工程化实践落地

接下来简单介绍一下实践落地过程中的工程化的工作。



① 训练性能的优化。刚开始训练时长长达五天。通过持续的优化,目前控制在五个小时内,按天更新。期间的优化涉及到数据格式的改造,存储方式的优化,特征处理前置,还包括采样机制等优化手段。

② 线上性能的优化,刚上线时模型的超时率达到了 10%。通过逐步调优,控制超时率在 0.3%。其中的优化包括请求 batch 大小的优化,通过性能的逐步调试,目前一个 batch 的大小大控制在 15~20 之间。模型的解耦上线与目前平台无法支持大模型的上限,所以我们采用向量化的方式,把向量层剥离出来,将参数存入 Redis 中来支持模型上线。另外还包括用户数据 batch 内共用,以及数据压缩等方式实现性能优化。

③ 模型调优中,行为表征优化也对模型效果提升起了关键作用,包括从帖子 ID,关键属性到聚类 ID 以及基于词向量语义表征方式等。

④ 用户行为序列时效对齐问题



在离线训练时,效果优于基线模型的,但上线效果并不理想。在诊断时发现用户的行为序列在训练阶段与预测阶段时间是未能对齐的,即离线数据和在线数据分布不一致。但机器学习的核心假设,要求训练数据,预测数据是同分布的。我们可以看到训练样本是从样本曝光时间往前回溯历史日志获取到的用户行为序列。而在线预测时,用户的行为序列也是从当前的时间往前推,但是在对实时日志分析时发现,客户日志回流存在一个不确定性。这样的延时,说明预测时我们无法拿到最近的用户行为序列,而训练中使用的是过往数据,不存在日志回流延时的问题。换句话说,训练样本与在线预测数据并不是同分布的。为了解决这个问题,我们统计了日志回流的实验分布,发现 90%以上的行为日志回流都在两分钟左右。

基于此发现,在构建训练样本时,我们将用户行为序列从曝光时间往前推两分钟。整体模型效果有比较明显的一个提升。

⑤ 模型工程化下的特征工程



行为序列中每个行为有不同的表征方式,我们用帖子 ID,类目地域属性信息来综合表征帖子。其中帖子 ID 的信息强度很强,区分度很高,但是数据比较稀疏,尤其是在转化行为上。类目地域属性信息的泛化能力很好,但是区分度又比较欠缺。因此我们在结合业务实践中,构建了一个聚类 ID,作为对帖子重要的表征方式。基本的思路是对业务选择相应的核心属性,将核心属性的组合起来作为聚类 ID,列出了几个主要业务的关键组合属性。以租房为例,我们把地域,价格,户型作为关键组合属性,其中价格会进行一个分层的操作,例如下面展示的帖子,它的关键属性组合就是九星桥 6000~8000 的一个两室一厅的房子,这就是聚类 ID。这种表征方式在泛化能力和区分度上,能够做到比较好的平衡。这可以被我们认为是一种特征工程,虽然深度序列化这样一个模型,能够大幅降低特征工程的代价,把注意力更多地聚焦到模型上。但是特征工程在效果优化过程中仍发挥着不可忽视地作用。在模型中对行为的表征方式以及特征通道中特征交叉,仍然是属于比较广义的特征工程的范畴。

动力与展望

1. 动力:业务结合



关键驱动因素是业务结合。从实践的经历中来看,我们发现模型优化与用户的需求集中度,行为可追溯度,物料的结构化程度,时效特点,用户使用频次与周期等都存在密切的关系。理解这些特点与业务形态特点,非常有助于我们在具体的业务场景下做更好的模型优化。多通兴趣模型提出和优化过程,是不断结合业务与融合业务特点的过程。我们 58 的业务是用户的频次低,没有足够的信息来刻画用户的兴趣,那么多行为序列的引入就成为我们主要探索的一个方向。58 有固定的业务周期,以及明确的用户需求,所以我们并没有做过多的研究在怎么去扩展序列的长度。同时,58 的帖子的信息结构化程度很高,在用户行为表征上,能比较方便去引入聚类 ID 的表征。在内容挖掘上,我们可以直接用核心属性来做表征。

2. 两个方向的规划



① 多目标优化,这也是我们未来重点的探索方向。虽然首页猜你喜欢显出了多目标平衡的特点,但是由于 58 的业务是非闭环的。所以我们无法直接跟踪到用户最终的交易行为,目标定义存在巨大的挑战。这一方面我们还在持续的探索,但是在模型上我们会进一步探索多任务的学习模型和强化学习。

② 多通道深度兴趣模型:包括内容行为序列优化,基于窗口协同方式的持续优化。引入负反馈行为序列,增加曝光未点击行为引入,以及在长期适配上能力的落地。

3. 总结



在效果上来说,整体的大盘效果大概提升了 50%。主要在四个层次上做了优化:

① 召回策略:

  • 引入了特色的召回通道,比如说再营销召回,冷启动召回优化,场景化召回。

  • 向量化召回,逐步从 Word2Vec 过渡到双塔模型。

  • 召回配置化,从手工配置各个通道的额度和优先级,到逐步的是基于数据驱动热加载的方式去进行配置,逐步探索自动调节和动态调节的可能性。

② 排序模型:

  • 模型架构优化:从是双通道到多通道深度兴趣模型, 再到多场景适配。

  • 多目标优化:基于现有的模型架构,采用 ESSM 多目标模型来做训练,

③ 重排:从规则打散到基于相似度的柔性打散策略

④ 展示优化:

  • 样式对齐:我们引入了特色展示元素。例如在招聘帖没有图片展示无法与其他的业务做对齐,那么用户体验就会比较差。所以经过多轮迭代之后,我们在招聘帖上引入图像元素信息来进行补充。最终发现在体验和最终的点击转化效果都有明显的提升。

  • 推荐解释:在推进解释上的生成策略,密度控制,维度优化上做了进一步的优化。


今天的分享就到这里,谢谢大家。


嘉宾介绍:

罗景,58 同城 TEG 推荐技术团队负责人/高级算法架构师。TEG 推荐技术团队以提升连接效率/打磨关键技术能力/服务业务产品为团队愿景,在工程架构/模型算法/产品形态上持续迭代升级。目前,排序模型上,基于序列化模型组件等构建了适配 58 业务特点的多通道深度模型架构,成为了主要场景的主流线上模型,仍在进一步结合业务探索新模型架构/强化学习/迁移学习等的落地应用,期待和大家进一步探讨交流。


本文转载自:DataFunTalk(ID:dataFunTalk)

原文链接:多目标推荐场景下的深度学习实践

2021 年 2 月 24 日 13:001860

评论

发布
暂无评论
发现更多内容

王者荣耀商城异地多活架构设计

feitian

专利分析:数字人民币的“双离线”支付问题

CECBC

HTML字符实体大全

入门小站

工具

架构训练营 模块六

小卷儿

学读代码比学写代码更重要

baiyutang

编程 工程规约 9月日更

🏆【Alibaba工具型技术系列】「EasyExcel技术专题」摒除OOM!让你的Excel操作变得更加优雅和安全

浩宇天尚

EasyExcel Apache POI Alibaba 9月日更

计算机中遇到的单位该怎么换算

耳东@Erdong

计算机 9月日更 单位换算

14. DeepMind--会打游戏的人工智能

数据与智能

人工智能

面试官:为何Redis使用跳表而非红黑树实现SortedSet?

Summer

Java 数据库 redis 学习 程序员

Python——While 循环for循环与 break 语句

在即

9月日更

架构实战营 模块七 作业

脉醉

#架构实战营

王者荣耀商城异地多活架构设计

木云先森

架构训练营

QUIC简介及简单示例

devpoint

QUIC http3 9月日更

架构实战营模块 7 作业

zlz

模块七-游戏商城异地多活架构设计

babos

#架构实战营

网络攻防学习笔记 Day130

穿过生命散发芬芳

数据安全 9月日更

都江堰市建成区块链场景创新实验室!

CECBC

聊聊 Jmeter 如何并发执行 Python 脚本

星安果

Python Jmeter 并发 文件上传

模块七作业

VE

架构实战营

css中塌陷问题指的是什么,margin和padding应该怎么区分

前端史塔克

CSS html css3 大前端

模块7作业

柱林

Java之循环语句

IT蜗壳-Tango

9月日更

模块七 作业

Geek_35a345

[架构实战营]模块七作业

xyu

#架构实战营

数字化转型潮起 金融机构“科技范儿”十足

CECBC

深入了解Spring之ConfigurationClassPostProcessor

邱学喆

@Bean @ComponentScan @PropertySource @Import @ImportResource

模块七作业

Mr.He

架构实战营

模块七作业

河马先生

架构实战营

又一款Nginx 管理可视化神器!通过界面完成配置监控,一条龙

Summer

Java nginx 学习 程序员 IT

架构实战营第一期--模块七作业

clay

架构实战营

linux之tree命令

入门小站

Linux

GPU容器虚拟化:用户态和内核态的技术和实践详解

GPU容器虚拟化:用户态和内核态的技术和实践详解

多目标推荐场景下的深度学习实践_AI_DataFunTalk_InfoQ精选文章