文章地址:爱奇艺短视频推荐:粗排篇

重点掌握:最开始的GBDT->双塔DNN(蒸馏模型 和 精排widedeep模型一起进行训练,得到粗排小模型)->级联模型(精排是mmoe)

蒸馏模型过程重点

粗排模型这边的loss怎么计算student loss(粗排模型loss)、teacher loss(精排模型loss)和蒸馏loss

student loss就是正常的粗排模型链路的预测结果、真实值,求loss

teacher loss是复杂模型的预测结果、真实值,求loss

蒸馏loss是teacher模型的预测结果、student模型的预测结果,求loss(最小平方误差)

然后3部分合起来,再进行反向传播

精排(teacher模型)这边只有teacher模型teacher loss进行反向传播

级联模型重点

因为精排模型常常变化,为了粗排模型能够自适应地对齐精排模型目标的变化,同时也节省了蒸馏训练的环节,采用级联模型

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

这也是线上实时更新模型(online learning),采用的方法

------------------------------------------------------------------------------------------

背景

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

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. AI 加持、打通好看视频和爱奇艺,百度短视频战略升级

    在过去的2019年里,最火的娱乐方式毫无疑问是短视频.随时随地的碎片化娱乐方式,雅俗共赏的综合性内容俘获了各个年龄段的用户,使得刷.拍短视频内容已经成为生活常态,短视频的渗透率与增长速度已经压过传统视 ...

  2. 最前线|爱奇艺低调上线“好多视频”,短视频战场的主动防御

    爱奇艺在短视频领域的布局有些低调. 近日,爱奇艺新推出一款名为"好多视频"的短视频APP,主推爱奇艺热播剧综周边,基于AI技术的智能推荐向用户进行内容分发.目前已在苹果App St ...

  3. 从财报看爱奇艺增长想象 长视频巨头要说“10分钟”新故事

    北京时间2020年2月28日, 爱奇艺公布截至到2019年12月31日的第四季度和全年未经审计的财务报告.财报数据显示,2019财年爱奇艺总营收达到290亿元(约42亿美元),同比增长16%,其中第四 ...

  4. 爱奇艺、腾讯视频等接连涨价 地主家也没有余粮了?

    继爱奇艺.芒果TV后,腾讯视频会员也要涨价了. 4月9日,腾讯视频宣布将于4月20日零点对腾讯视频VIP和超级影视VIP会员价格进行调整.其中,腾讯视频VIP月卡以及超级影视VIP的多项套餐等5种会员 ...

  5. 爱奇艺路香菊:视频人物识别关键技术及其应用|爱奇艺技术沙龙回顾

    主讲人 | 路香菊 爱奇艺科学家 张康 编辑整理 量子位编辑 | 公众号 QbitAI 近日,爱奇艺技术沙龙"多模态视频人物识别的关键技术及应用"成功举办,爱奇艺科学家路香菊出席并 ...

  6. 步爱奇艺与腾讯视频的后尘,B站扬帆出海能否跨海破圈?

    2020年,"出海潮"成为不少互联网企业的动作之一,哔哩哔哩的出海计划也已经提上了日程. 12月28日消息,B站已经登陆东南亚市场.视频平台"出海",在哔哩哔哩 ...

  7. 利用爱奇艺开放平台实现视频托管回调播放(一)——获取授权

    背景: 题库软件的教学视频需要实现在线播放,由于技术水平和服务器配置的限制,如果把视频放在自己服务器上会出现各种问题.访问人数少的时候还可以勉强应付,临近考试时,服务器压力增大,视频访问延迟太大,有时 ...

  8. 爱奇艺知识的音视频通用播放架构实践

    导读 随着经济的发展"衣食住行"等基础消费已不再是消费者首要考量,自我认知的提高便成为现阶段消费的必然选择.尤其是在移动互联网崛起的当下,移动支付和不限流业务的普及,人们为他们感兴 ...

  9. 爱奇艺android投屏,手机爱奇艺APP怎么将视频投屏上笔记本电脑?

    频投屏上笔记本电脑?直接在笔记本电脑就搜索出来了呀~~ 1.确保手机和电视机都连接在同一局域网内.2.打开电视机,进入系统设置界面,找到通用设置选项下的多屏互动功能,按确认键进入,将多屏互动功能打开, ...

最新文章

  1. 倒计时两天丨NeurIPS 2020预讲会:7位智源青年科学家,21场报告
  2. 如何成为一名数据中心运营工程师?
  3. 注意:python flask 里image文件 css文件 html文件都必须有固定存放位置!
  4. 外梯度—lhMorpGradientOut
  5. Windows系统USB转CDC串口驱动限制说明
  6. 前端学习(3307):函数组件usermemo和usercallback三
  7. 【ssh登陆问题】no matching cipher found / no matching key exchange method found
  8. C语言丨求两个正整数的最大公约数
  9. DataFormatString 转
  10. 大华摄像机调试以及保存视频
  11. C# 脚本化实现方式探究
  12. IT经理的个人宣言:做一个好男人!
  13. WINRAR的破解方法
  14. Phoenix重磅 | Phoenix核心功能原理及应用场景介绍
  15. 查看tcp 请求中的各个状态数据
  16. 用MyBatis-Plus连接MySQL数据库
  17. MQTT.fx 模拟 IoT 设备接入阿里云企业物联网平台
  18. Java实验一—创建用于计算身体质量指数的BMI类
  19. DAMA学习笔记1-3
  20. 库卡示教器卡死“正在读取驱动器”

热门文章

  1. UML类图10分钟快速入门 - From 圣杰
  2. sed 编辑器基础(2)——替换字符
  3. 这样好看又有趣的礼物,请给我每样来一套~丨年货系列
  4. JS获取当前时间方法
  5. PTA 7-2 求两个整数的最大公约数和最小公倍数
  6. java stdout_如何正确读取子进程的stdout / stderr输出?
  7. Springboot 上传头像
  8. spring validated 参数校验
  9. 代理IP对于直播人气有多大作用-国内多ip站群
  10. JS中的BOM 详解