作者:vivo 互联网算法团队- Shen Jiyi

本文根据沈技毅老师在“2022 vivo开发者大会"现场演讲内容整理而成。

混排层负责将多个异构队列的结果如广告、游戏、自然量等进行融合,需要在上下游和业务多重限制下取得最优解,相对复杂和难以控制。本文主要从业务、模型等角度介绍了vivo广告策略团队在信息流和应用商店混排上的一些探索和思考。

一、背景介绍

首先介绍一下什么是混排。所谓混排,如图所示就是需要在保障用户体验前提下,通过对不同队列中的异构内容进行合理混合,实现收益最优,更好的服务广告主和用户。

混排的核心挑战体现在:

  1. 不同队列item建模目标不同,难以直接对比。比如有的队列按照ctr建模,有的队列按照ecpm建模,无法直接对比。
  2. 候选队列常受到大量产品规则约束,常见的有比如间隔位的约束、保量、首位等约束。
  3. 由于候选队列由上游各方精排算法产生,由于业务限制混排时往往不能修改候选队列的序,也就是需要实现保序混排。

本次介绍的主要是vivo信息流和商店场景的混排实践。

vivo的信息流场景,包括像浏览器、i视频、负一屏等,他的特点是场景众多,下拉深度较高,广告形式多样,用户个性化需求较强。而对于商店场景,是一个整体偏垂直的场景,

它涉及到广告、游戏、自然量多方均衡,需要在保量和用户体验等严格要求下,取得综合最优解。后续我们将对这2个场景的特点展开逐一介绍。

二、信息流混排实践

2.1 信息流混排介绍

我们开始介绍下信息流场景的混排实践。

对于信息流场景来说,如下图所示,混排侧所主要解决的问题是内容队列与广告队列的混排问题。也就是如何在平衡好用户体验和广告主利益的情况下,将广告插入到合适的位置。

对于传统信息流媒体来说早期的主要混排方式可能主要是以固定位模板为主。也就是运营人工定下广告与内容的插入关系,简单直接。

但也带来了三个明显的问题

  1. 用户方来说,广告在偏好场景与非偏好场景同等概率出现,有损用户体验。

  2. 业务方的角度出发,流量未精准投放,业务服务效率低,广告主体验差。

  3. 平台方,资源错配导致平台资源浪费。

2.2 业界方案调研

接下来介绍下业界常见的几种解决方案。

以某职场社交平台的方案为例。它将优化目标设定为在用户体验价值大于一定值的前提下最优化营收价值。对于待插入广告,将用户体验货币化,与商业化价值加权衡量整体价值。

如果整体价值大于用户体验价值时投放广告内容,否则投放产品内容。此外在投放时还会根据右图所示考虑间隔等约束。

他的方法简单直接,很多团队采用类似的方案取得较好效果。但该方案只考虑单一item价值,未考虑item间相互影响,缺乏长期收益的考虑。

接下来介绍的是某小视频的方案,他们采用强化学习的方法进行混排。该方案将信息流混排问题抽象为序列插入问题,将不同广告对于不同槽位的插入情况抽象为不同action,通过强化学习进行选择。在考虑奖励设计时融合了广告价值(如收入等)与用户体验价值(比如下滑与离开)。通过调节超参对两者进行平衡。

但是该方案对工程依赖较高且论文中已离线测试为主,缺乏线上的分析。并且该模型只考虑单广告插入,未考虑多广告情况。

具体到vivo信息流场景的迭代,混排迭代包括固定位混排,Qlearning 混排和深度解空间型混排三个阶段。

整体思路是希望在Qlearning阶段通过简单的强化学习方案累积样本,快速探索收益。后续升级为深度学习方案。

2.3 Qlearning 混排

上面是强化学习的基本流程,强化学习最大的特点是在交互中学习。Agent在与环境的交互中根据获得的奖励或惩罚不断的学习知识,更加适应环境。state,reward和action是强化学习中最为关键的三个要素,后续详细展开。

vivo信息流的Qlearning混排机制有什么好处呢?首先它会考虑全页面收益,并考虑长期收益,符合多刷场景诉求。此外Qlearning模型可以小步快跑,积累样本同时,快速验证效果。

当前整体系统架构,混排系统位于adx后,接收到内容队列与广告队列后,通过Qlearning 模型下发调权系数,对广告进行调权,叠加业务策略后,生成融合队列。而用户行为也会触发Qlearning模型更新。

Qlearning模型运行原理如图,首先初始化qtable,然后选择一个action,根据action所得到的reward进行qtable的更新,而在损失函数既考虑短期收益也考虑长期收益。

在vivo的实践中,在奖励设计上,我们综合考虑时长等用户体验指标与广告价值,两者进行平滑后,通过超参进行权衡。在动作设计上,一期采用数值型的方式,生成广告调权系数,作用于广告精排得分,与内容侧进行混合,从而实现混排。

在状态设计上包含用户特征、上下文特征、内容侧特征和广告侧特征四个部分。像统计特征和上下文特征等对Qlearning模型有较大影响。

在vivo信息流场景中,Qlearning混排取得了较好的效果,已经覆盖绝大部分场景。

2.4 深度位置型混排

Qlearning混排存在一定的局限性:

  • Qtable结构简单,信息容量小。

  • Qlearning模型可使用特征有限,难以对如行为序列等细致化建模。

  • 当前Qlearning混排依赖于上游打分,上游打分波动,会引发效果震荡。

为了解决Qlearning的问题,我们研发了深度位置型混排。在混排机制上由原本的数值型升级为直接生成位置的位置型混排,而在模型本身我们由Qlearning升级成了深度学习。

这带来3个好处

  1. 与上游打分解耦,大大提高混排稳定性

  2. 深度网络,可容纳信息量大

  3. 能够考虑页面间item相互作用

我们整体模型架构为业界主流类似双塔dqn的模型架构,左塔主要传入的一些state信息包括用户属性、行为等,右塔传入action信息也就是解空间排列基础信息。

值得一提的是我们会将上一刷的解作为特征融入到当前模型中。

新的解空间模型action空间更大,天花板更高。但稀疏action难以学习充分,易导致预估不准。为了解决这个问题,我们在线上增加小流量随机实验,提高稀疏动作命中率,丰富样本多样性。

序列特征作为模型最为重要的特征之一,也是强化学习模型刻画state的重要特征之一,我们对序列做了一些优化。在序列attention模块,为了解决用户历史兴趣与待插入广告的匹配程度,我们通过transformer刻画用户行为序列信息;之后通过待插入广告与序列attention操作,刻画匹配程度。此外在序列match模块,我们引入先验信息,产生强交叉特征,对attention进行补充;对于match权值通过CTR、是否命中、时间权重、TF-IDF等方式进行信息提取。

三、应用商店混排

3.1 商店混排介绍

接下来我们介绍应用商店混排模块。

商店混排的核心问题是实现广告队列与游戏队列的混排。而就像图中所示广告与游戏排序分定义方式不同,难以直接对比。此外联运游戏回收周期长, LTV难以估准,即使全部按照ecpm排序也较难保证效果。

梳理下应用商店面临的核心挑战

  1. 涉及业务方较多,需在满足用户体验、广告、游戏三方要求情况下实现综合最优。

  2. 商店混排往往有保量等相关诉求,保量无法关联到整体收益,追求整体收益势必改变保量的结果,并产生相互冲突。如何在既满足保量的情况下,又实现整体最优?

  3. 不同于信息流,商店为高成本消费场景,用户行为稀疏。很多用户很长时间内才会有一次下载行为。

  4. 游戏LTV预估是行业的难题,如何在混排侧为游戏LTV提供一定的容错空间?

回到vivo应用商店混排,整体迭代包含固定位混排、PID保量、带约束混排、混排精细化分流4个阶段。

3.2 PID保量

首先介绍PID的方案,PID最开始来源于自动化领域。初期为了相应业务侧诉求,参考业界主流方案,通过对广告和游戏进行保量,初步实现混排能力。但方案较为简单,且PID难以关联到收益目标,难以实现收益最优。

3.3 带约束混排

保量和收益最大化存在一定程度的冲突,满足保量约束下,如何实现业务综合收益最优是最大难点。

vivo商店混排采取流量拆分微调的思路,在PID保量后接重排,综合考虑用户体验、广告收入、游戏价值三者的平衡点。针对重排与PID保量冲突,重排只对部分位置生效,使得在部分流量如首屏下能够进行收益的探索,而又能满足保量需求。

在重排层我们一开始考虑沿用信息流的混排方案,使用强化学习进行混排。但是存在2个问题

  1. 重排只对首刷生效,缺乏常规强化学习的状态转移。

  2. 商店场景对比信息流场景涉及业务方较多,如何考虑用户体验、广告收入、游戏价值三方的权衡 是一个更为复杂的问题。

为了适应商店场景的特点,我们做了一些适配和优化

  1. 首先对于loss。有别于传统强化学习,由于商店场景行为稀疏且只对首屏生效,缺乏状态转移,我们将gamma置为0,整体变为类似监督学习的状态,提高系统稳定性。

  2. 在reward的设计上我们综合考虑了整个页面游戏收入、广告收入和用户体验等多方因素实现收益最优。

  3. 在action设计上一期仍然使用数值型方案。

该版本在vivo商店混排取得较好效果,已经全量。

3.4 混排精细化分流

在带约束重排基础上,我们思考能否进一步进行优化

  1. 首先重排候选集由PID保量产生,非全局最优。

  2. 其次候选集为全广告或全游戏时,当前重排无生效空间(这块线上占比过半)。

那么如何满足保量下更进一步实现收益最优?

我们开始尝试混排精细化分流,对于部分分支去除保量限制,进行约束放开。使得PID聚焦于满足保量等业务诉求,模型聚焦探索更优空间。

当前版本,当一个请求到来时,我们会根据分流模块判断是否为高质量流量,对于高质量流量通过混排模型探索收益,对于低质量流量采用PID进行保量,并将最终结果融合。这样重排策略能在部分流量对全请求生效,整体的保量也在正常范围。

目前我们当前尝试过的分流方式有商业价值分流、游戏偏好分流、广告位分流、体验机制分流等。

具体到重排模型上,我们也做了一些迭代。当前重排层,数值型模型存在一些问题:

  • 数值型混排依赖于上游打分,上游偏差变化影响混排模型准确性。

  • 未考虑上文信息和位置信息等listwise因素的影响。

为了解决问题:

  • 我们采用采用生成式模型替代数值型模型,直接生成混排结果,与上游打分解耦。

  • 借鉴context-dnn思想,我们采用context-aware方式,在生成方式和label设计中融入上下文影响。

该模型在实验流量上收益对比原模型更为明显,且不受上游打分影响,更为稳定。

四、未来展望

关于未来的展望,包括4个方面:

  1. 模型优化:深度优化混排,更精细化建模,融入更多实时反馈信号,提升模型效果,更为个性化建模。

  2. 跨场景联动:尝试跨场景联动混排等方案,实现最优兑换比,与全场景最优。

  3. 统一范式:各场景统一建立序列生成和序列评估的统一混排范式。

  4. 端上混排:尝试端上混排,更为及时捕获用户兴趣,提升用户体验。

异构混排在vivo互联网的探索过程中遇到了较多的挑战,也取得了一定的收益。

欢迎感兴趣的同学留言交流讨论。

异构混排在vivo互联网的技术实践的更多相关文章

  1. vivo直播应用技术实践与探索

    一.概述 2019年vivo直播平台立项,初期与优秀的顶部直播平台进行联运直播开发,进行市场,产品和技术的初步探索:再到后来为了丰富直播的内容和形式,开始自己独立探索:之后,我们结合vivo现阶段的直 ...

  2. ios图文混排

    图文混排的形式 1. 富文本形式 2. core Text(文字排版) 3. TextKit 4. UIWebView 一.富文本 我们可以采用attributeString来进行图文混排.例如一个文 ...

  3. 【iOS】使用CoreText实现图文混排

    iOS没有现成的支持图文混排的控件,而要用多个基础控件组合拼成图文混排这样复杂的排版,是件很苦逼的事情.对此的解决方案有使用CoreText进行绘制,或者使用TextKit.本文主要讲解对于CoreT ...

  4. Android--多线程之图文混排

    前言 本周一直在说Android多线程的那些事儿,本篇博客聊一聊Android开发中一个比较经典的案例,网络数据图文混排,本片博客的案例只涉及关于开启多线程访问网络数据,不涉及缓存的内容.众所周知,从 ...

  5. CoreText实现图文混排

    CoreText的介绍 Core Text 是基于 iOS 3.2+ 和 OSX 10.5+ 的一种能够对文本格式和文本布局进行精细控制的文本引擎.它良好的结合了 UIKit 和 Core Graph ...

  6. XMPP键盘订制实现图文混排

    在现阶段的通信服务中,各种标准都有,因此会出现无法实现相互连通,而XMPP(Extensible Message and presence Protocol)协议的出现,实现了整个及时通信服务协议的互 ...

  7. ios开发--图文混排(富文本)

    最近准备接一个编辑类的app,所以就查了下相关的功能,并自己试验了下: /** iOS 6之前:CoreText,纯C语言,极其蛋疼 iOS 6开始:NSAttributedString,简单易用 i ...

  8. vivo营销自动化技术解密|开篇

    一.营销自动化概览 1.1. 什么是营销自动化 营销自动化是指专门为营销部门或组织设计的软件平台和技术,可以更有效地在线进行多渠道营销并使重复性任务自动化.营销部门和销售人员通过制定任务和流程的操作标 ...

  9. vivo互联网机器学习平台的建设与实践

    vivo 互联网产品团队 - Wang xiao 随着广告和内容等推荐场景的扩展,算法模型也在不断演进迭代中.业务的不断增长,模型的训练.产出迫切需要进行平台化管理.vivo互联网机器学习平台主要业务 ...

  10. [修正] Firemonkey 中英文混排折行问题(移动平台)

    问题:FMX 在移动平台的文字显示并非由该平台的原生 API 来显示,而是由 FMX.TextLayout.GPU 来处理,也许是官方没留意到中文字符的问题,造成在中英文混排折行时,有些问题. 适用: ...

随机推荐

  1. 第二章:视图层 - 5:HttpRequest对象

    每当一个用户请求发送过来,Django将HTTP数据包中的相关内容,打包成为一个HttpRequest对象,并传递给每个视图函数作为第一位置参数,也就是request,供我们调用. HttpReque ...

  2. Git Review + Gerrit 安装及使用完成 Code-Review

    转载自:https://cloud.tencent.com/developer/article/1010615 1.Code Review 介绍 Code Review 代码评审是指在软件开发过程中, ...

  3. 实现fastdfs防盗链功能

    目录 1.背景 2.实现原理 2.1 开启防盗链 2.2 重启 nginx 2.3 Java代码生成token 1.token生成规则 2.java生成token 3.测试 3.1 带正确token访 ...

  4. for循环及range内置方法

    目录 while循环补充说明 流程控制之for循环 range方法 rang实战案例 作业 """ 1.先写注释(思维逻辑和想法) 2.先考虑主体功能 在考虑附加功能 & ...

  5. jsp页面重定向后地址栏controller名重复而导致报404错误

    今天做ssm项目时遇到了这种错误 看看代码: 无关代码省略... 22 <body> 23 <div id="container"> 24 <ifra ...

  6. 创建线程的方式三:实现Callable接口。 --- JDK 5.0新增

    如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大? call()可以有返回值的.call()可以抛出异常,被外面的操作捕获,获取异常的信息Callable是 ...

  7. 11.MongoDB系列之连接副本集

    1. Python连接副本集 from pymongo import MongoClient from bson.codec_options import CodecOptions from retr ...

  8. docker swarm快速部署redis分布式集群

    环境准备 四台虚拟机 192.168.2.38(管理节点) 192.168.2.81(工作节点) 192.168.2.100(工作节点) 192.168.2.102(工作节点) 时间同步 每台机器都执 ...

  9. 【原创】All in One i.MXRT1050/RT1020 SPI Flash Algorithm for J-Flash

    2020年,这个给大家一种很漫长的恍惚感的一年,终于是过去了.这一年我们很多新的人生第一次就这么被发生了,第一次居家办公这么长时间(很多人肥膘都长了不少,我却瘦了2斤,不知是工作太积极了还是被家里小怪 ...

  10. 十四、资源控制器之RS

    RC (ReplicationController )主要的作用就是用来确保容器应用的副本数始终保持在用户定义的副本数 .即如果有容器异常退出,会自动创建新的 Pod 来替代:而如果异常多出来的容器也 ...