AICon全球人工智能与机器学习技术大会9折特惠中,点击立减¥480>> 了解详情
写点什么

如何提升链路目标一致性?爱奇艺短视频推荐之粗排模型优化历程

2021 年 3 月 06 日

如何提升链路目标一致性?爱奇艺短视频推荐之粗排模型优化历程

工业界的推荐系统通常包括召回、粗排、精排以及重排四个阶段,如图一所示,每个阶段都像是一个漏斗,从海量的物品集合中过滤出用户最有可能感兴趣的物品。其中粗排模型发挥的主要作用是统一计算和过滤召回结果,在尽量保证推荐准确性的前提下减轻精排模型的计算压力。本文主要介绍爱奇艺随刻基础推荐团队在短视频推荐业务的粗排模型优化上落地的一系列实践方案。


图一:推荐整体流程架构图

背景

工业界在做粗排模型选型时,性能通常是一个很重要的考量因素。按照工业界选型粗排模型的发展历程,大致可以将粗排模型分为以下几大类:


1. 最早也是最简单的粗排过滤方法,直接根据召回计算的得分做截断,控制输入给精排模型的物品候选数量,或者根据全局的 ctr 等统计指标做统一截断。


2. 以 LR/决策树为代表的,结构比较简单又有一定个性化表达能力的机器学习模型,统一对召回候选集做打分截断。


3. 当前工业界应用最广泛的粗排模型—基于向量内积的双塔 DNN 模型,两侧分别输入用户特征和物品特征,经过深度网络计算后,分别产出用户向量和物品向量,再通过向量相似度等计算得到排序分数。


爱奇艺短视频推荐业务最初采用的粗排模型可以归为上述第二类选型模型,是一个基于各个纬度统计特征的 GBDT 模型。统计特征维度主要包括下面几个维度:


1. 不同属性的用户群体对不同类型视频(分标签、创作者和视频本身等)的消费统计特征。


2. 视频维度累积的消费统计特征,如视频的点击率、时长消费中位数和均值等;创作者 up 主的消费统计特征以及视频标签的消费统计特征等。


3. 用户历史消费的视频内容统计特征,如用户历史消费的类型标签统计、消费的创作者内容统计等。


在业务的精排模型优化升级为 wide&deep 模型后,我们对粗排模型和精排模型的预估结果做了详细的统计和分析,发现粗排模型预估为 top 的头部视频和精排模型预估的头部视频有很大的差异。归咎原因主要是以下两方面的原因:


1. 特征集合的差异:粗排 GBDT 模型中主要是一些稠密类统计特征,而精排 wide&deep 模型中发挥重要作用的特征主要是用户长短期消费的视频 id、视频 tag、up 主 id 等以及视频本身的 id、tag 和 up 主 id 等稀疏类型特征。


2. 模型结构的差异:树型结构模型和 DNN 模型的优化和拟合数据时的侧重点还是有很大的差异的。

除了预估结果和精排 wide&deep 模型有比较大的差异性外,GBDT 模型在特征处理和挖掘方面还需要投入大量的人力。综合以上分析,为了尽量弥补粗排模型和精排模型的 Gap,缩小粗排模型和精排模型预估结果的差异性,并节省大量特征统计和挖掘的人力成本,我们对粗排模型进行了一系列的升级和优化。

双塔 DNN 粗排模型

综合计算性能和实验效果,我们最终也选择了目前主流的双塔 DNN 模型作为我们最终选型的粗排模型。我们双塔 DNN 模型结构如下图二所示。用户侧和 Item 侧分别构建三层全联接 DNN 模型,最后分别输出一个多维(512)的 embedding 向量,作为用户侧和视频侧的低维表征。

在构建粗排模型特征集合时,为了控制粗排模型参数的复杂度,我们对粗排的特征集合做了大量的裁剪,用户侧和视频侧都只采用了少部分精排模型的特征子集。其中,用户侧特征主要选取了下面几维特征:

1. 用户基础画像特征、上下文特征如手机系统、型号、地域等。


2. 用户的历史行为特征,如用户观看的视频 ID、up 主 ID,以及观看视频的关键词 tag 等,以及用户 session 内的行为特征等。


视频侧特征只保留了三维:


1. 视频 ID

2. up 主 ID

3. 视频标签 

图二:粗排双塔 DNN 模型结构图


从 GBDT 到双塔 DNN,模型的复杂度和参数量级还是有爆炸性增长的,为了不损失粗排模型的精度同时满足上线的性能指标要求,我们从下面几个方面做了很多优化工作:

1. 知识蒸馏

为了弥补特征裁剪带来的损失,保证裁剪后粗排模型的精度,我们在训练粗排模型时,采用了模型压缩常用的方法-知识蒸馏来训练粗排模型。


知识蒸馏是一种模型压缩常见方法,在 teacher-student 框架中,将复杂、学习能力强的网络学到的特征表示“知识蒸馏”出来,传递给参数量小、学习能力弱的网络。从而我们会得到一个速度快,能力强的网络。


将粗排模型和精排模型放到知识蒸馏的 teacher-student 框架中,以蒸馏训练的方式来训练粗排模型,以精排模型为 teacher 来指导粗排模型的训练,从而得到一个结构简单,参数量小,但表达力不弱的粗排模型,蒸馏训练示意图如图三所示。

图三:粗排模型蒸馏训练示意图


在蒸馏训练的过程中,为了使粗排模型输出的 logits 和精排模型输出的 logits 分布尽量对齐,训练优化的目标从原来单一的粗排模型的 logloss 调整为如公式一所示的三部分 loss 的加和,包括 student loss(粗排模型 loss)、teacher loss(精排模型 loss)和蒸馏 loss 三部分组成。


其中蒸馏 loss 我们线上采用的是粗排模型输出和精排模型输出的最小平方误差,为了调节蒸馏 loss 的影响,我们在该项 loss 前又加了一维超参 lamda,我们设置超参 lamda 随着训练步数迭代逐渐增大,增强蒸馏 loss 的影响,在训练后期使得粗排模型预估值尽量向精排模型对齐,lamda 随着训练 step 的变化趋势如图四所示。

图四:Distillation loss 超参 lamda 设定

2. Embedding 参数优化

为了进一步减少参数量级,压缩模型大小,提高模型传输速度,同时减少加载模型时的内存消耗,我们在训练粗排模型时,将模型 embedding 参数的优化器替换为稀疏解优化神器 FTRL,其他层的参数依然还用 AdaGrad。这一步调整不仅离线 Auc 有小幅提升,训练得到的粗排模型的 embedding 参数全为 0 的比率也高达 49.7%之多。我们在做模型导出时,裁剪掉了全为 0 的 embedding 参数,粗排模型大小减小了 46.8%,使得模型的传输速度也有近一倍的提升,同时线上加载模型的内存消耗也降低了 100%

3.线上 Inference 优化

除了离线训练时的一系列优化,我们对双塔粗排模型的线上 inference 计算也做了很多计算去重和优化。首先在计算 user 侧 embedding 时进行了合并计算,对同一个用户+千级别候选视频 pair,在计算 user 侧 embedding 时,将 user 侧的特征独立拆分,只过一次 user 侧 NN 的 inference。这个优化使得粗排模型打分计算服务 p99 的计算耗时减少了 19ms 左右。


此外,基于视频推荐时特别长尾的分布,以及如前文所述,粗排模型视频侧的特征全部是静态特征(视频 id 确定,特征也是确定的),我们对高频视频的 embedding 进行了缓存。视频侧 embedding 优先从缓存里查询,未命中缓存时再进行 inference 计算。优化后的粗排打分服务架构如下图五所示:

图五:粗排打分服务架构图


经过上述一系列的优化,粗排双塔 DNN 模型的线上计算性能对比之前 GBDT 模型基本可以持平,分别应用到了爱奇艺热点频道随刻首页推荐场景中,两边的线上指标都有显著提升,其中随刻首页 feed 推荐的用户人均消费时长涨了 3%点左右;爱奇艺热点频道的人均消费时长也涨了 1%,ctr 和人均消费视频数也都有 2%的涨幅

级联模型

随着后续业务的迭代和逐步深入,精排模型的学习目标也不断做调整,为了方便添加不同的学习目标,我们将线上的精排模型升级为了由 Google 提出的,目前也在工业界广泛使用的 MMOE 多目标模型。为了一劳永逸地解决粗排模型目标和精排模型目标一致性的问题,我们对粗排模型进行了又一次的迭代优化。通过升级为级联模型,使得粗排模型能够自适应地对齐精排模型目标的变化,同时也节省了蒸馏训练的环节,大大地节省了训练资源消耗


从实践的角度,级联模型对模型结构以及模型输入的特征集没有做任何修改,只是调整了粗排模型训练样本的生成方式,升级后的粗排模型从学习线上真实曝光点击/播放样本,调整为直接学习精排模型的预估结果,将精排模型预估 topn 的结果作为粗排模型学习的正样本。级联模型的样本生成方式具体如图六所示。

图六:级联模型训练样本数据流


所以这一次升级粗排模型到级联模型只是简单地调整了模型的训练样本,却取得了很显著的收益,除了去掉了蒸馏学习的环节,大大地缩减了粗排模型训练的资源和时间消耗,实际上线也取得了很显著的收益,视频推荐场景的曝光点击率和人均有效观看视频数都提升了 3%左右。同时各项互动指标也有显著提升,其中人均评论量有 12%的显著提升

未来规划

 以上是我们近期在短视频推荐粗排模型上尝试的一系列优化,实践证明粗排模型和精排模型的一致性对线上效果还是有很大影响的。后续我们会从以下几个方面持续优化粗排模型:


1. 尝试面向下一代的粗排排序系统——COLD。

2. 持续优化粗排模型线上计算的性能,在性能允许的情况下,扩大召回的视频数量,同时添加更多在精排模型验证有效的特征到粗排模型,提升粗排模型的准确性。

3. 优化 user embedding 视频 embedding 的相似度计算,考虑增加一个浅层网络来计算 user 和 item 的相似性,替换目前简单的 cosine 相似度计算。


参考文献

1.https://www.kdd.org/kdd2018/accepted-papers/view/modeling-task-relationships-in-multi-task-learning-with-multi-gate-mixture-

2.H.B.McMahan. Follow-the-regularized-leader and mirror descent: Equivalence theorems and L1 regularization. In AISTATS, 2011 

3.https://arxiv.org/abs/1503.02531

4.https://arxiv.org/abs/2007.16122


本文转载自:爱奇艺技术产品团队(ID:iQIYI-TP)

原文链接:如何提升链路目标一致性?爱奇艺短视频推荐之粗排模型优化历程

2021 年 3 月 06 日 13:001659

评论

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

linux之iftop命令

入门小站

Linux

架构实战课程 模块5作业

Frank

云资源是什么意思?有什么特点?

行云管家

云计算 云服务 多云服务 云资源

企业运维监控管理系统我给推荐行云管家!

行云管家

云计算 运维 运维监控 云管平台

2021年10月4日Facebook史上最严重宕机复盘分析

郑州埃文科技

ip数据 网络波动 网动仪

VNC服务安装配置与使用

耳东@Erdong

10月日更 vnc

这些行业用ERP系统会有很大帮助

低代码小观

企业管理 ERP

字节跳动是如何落地微前端的

字节跳动终端技术

字节跳动 微前端 Web应用开发

爱奇艺数据质量监控的探索和实践

爱奇艺技术产品团队

监控 数据治理 pingback

华为技术官珍藏版:SpringBoot全优笔记,面面俱到,实在太全面了

胧月

Java 架构 面试 微服务 后端

在线2-36任意进制转换工具

入门小站

工具

Golang语言HTTP客户端实践

FunTester

golang 性能测试 HTTP 接口测试 FunTester

KubeVela 1.1 发布,开启混合环境应用交付新里程碑

阿里巴巴云原生

阿里云 云原生 KubeVela

设计微博系统中"微博评论"的高性能高可用计算架构

Rabbit

【Vuex 源码学习】第九篇 - Vuex 响应式数据和缓存的实现

Brave

源码 vuex 10月日更

[ Golang 中的 DDD 实践] 值对象

baiyutang

golang 设计模式 领域驱动设计 DDD 10月日更

100台机器上海量IP如何查找出现频率 Top 100?

秦怀杂货店

IP 海量数据 top

“第三次分配”来了,你会被“分配”吗?

旺链科技

区块链 数字经济 观点分享

细节理解!阿里内部Java高并发系统设计全彩手册曝光!霸榜GitHub

进击的王小二

Java 架构 高并发 Java性能调优

BPM软件是什么?BPM软件跟BPA有关联吗?

低代码小观

企业管理 业务流程管理 信息管理

最长回文子串 -- 三种解答

秦怀杂货店

数据结构 算法 最长回文子串

【Flutter 专题】34 图解自定义 View 之 Canvas (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月日更

Pandas教程:数据处理基石-数据探索

Peter

Python pandas

Pandas教程:数据类型操作

Peter

Python pandas

【优化技术专题】「线程间的高性能消息框架」再次细节领略Disruptor的底层原理和优势分析

李浩宇/Alex

Disruptor 10月日更 异步高性能 高并发处理 性能提升

物理服务器是什么意思?怎么构成?与云服务器有啥区别?

行云管家

云计算 服务器 云服务器 物理服务器

强化学习RL AWS 自动驾驶DeepRacer ROS 架构 易筋 ARTS 打卡 Week 71

John(易筋)

ARTS 打卡计划

【LeetCode】无重复字符的最长子串Java题解

HQ数字卡

算法 LeetCode 10月日更

架构实战课程 模块6作业

Frank

私有云部署系列之动态获取IP(程序执行)

稻草鸟人

Python

新一代容器平台ACK Anywhere,来了

阿里巴巴云原生

阿里云 云原生 ACK Anywhere

数据cool谈(第1期)数据库寻路,开源有态度

数据cool谈(第1期)数据库寻路,开源有态度

如何提升链路目标一致性?爱奇艺短视频推荐之粗排模型优化历程-InfoQ