异构混排在vivo互联网的技术实践 | Q推荐
混排层负责将多个异构队列的结果如广告、游戏、自然量等进行融合,需要在上下游和业务多重限制下取得最优解,相对复杂和难以控制。本文主要从业务、模型等角度介绍了 vivo 广告策略团队在信息流和应用商店混排上的一些探索和思考。
首先介绍一下什么是混排。所谓混排,如图所示就是需要在保障用户体验前提下,通过对不同队列中的异构内容进行合理混合,实现收益最优,更好的服务广告主和用户。
混排的核心挑战体现在:
1.不同队列 item 建模目标不同,难以直接对比。比如有的队列按照 ctr 建模,有的队列按照 ecpm 建模,无法直接对比。
2.候选队列常受到大量产品规则约束,常见的有比如间隔位的约束、保量、首位等约束。
3.由于候选队列由上游各方精排算法产生,由于业务限制混排时往往不能修改候选队列的序,也就是需要实现保序混排。
本次介绍的主要是 vivo 信息流和商店场景的混排实践。
vivo 的信息流场景,包括像浏览器、i 视频、负一屏等,他的特点是场景众多,下拉深度较高,广告形式多样,用户个性化需求较强。而对于商店场景,是一个整体偏垂直的场景,
它涉及到广告、游戏、自然量多方均衡,需要在保量和用户体验等严格要求下,取得综合最优解。后续我们将对这 2 个场景的特点展开逐一介绍。
我们开始介绍下信息流场景的混排实践。
对于信息流场景来说,如下图所示,混排侧所主要解决的问题是内容队列与广告队列的混排问题。也就是如何在平衡好用户体验和广告主利益的情况下,将广告插入到合适的位置。
对于传统信息流媒体来说早期的主要混排方式可能主要是以固定位模板为主。也就是运营人工定下广告与内容的插入关系,简单直接。
但也带来了三个明显的问题:
1.用户方来说,广告在偏好场景与非偏好场景同等概率出现,有损用户体验。
2.业务方的角度出发,流量未精准投放,业务服务效率低,广告主体验差。
3.平台方,资源错配导致平台资源浪费。
2.2 业界方案调研
接下来介绍下业界常见的几种解决方案。
以某职场社交平台的方案为例。它将优化目标设定为在用户体验价值大于一定值的前提下最优化营收价值。对于待插入广告,将用户体验货币化,与商业化价值加权衡量整体价值。
如果整体价值大于用户体验价值时投放广告内容,否则投放产品内容。此外在投放时还会根据右图所示考虑间隔等约束。
他的方法简单直接,很多团队采用类似的方案取得较好效果。但该方案只考虑单一 item 价值,未考虑 item 间相互影响,缺乏长期收益的考虑。
接下来介绍的是某小视频的方案,他们采用强化学习的方法进行混排。该方案将信息流混排问题抽象为序列插入问题,将不同广告对于不同槽位的插入情况抽象为不同 action,通过强化学习进行选择。在考虑奖励设计时融合了广告价值(如收入等)与用户体验价值(比如下滑与离开)。通过调节超参对两者进行平衡。
但是该方案对工程依赖较高且论文中已离线测试为主,缺乏线上的分析。并且该模型只考虑单广告插入,未考虑多广告情况。
具体到 vivo 信息流场景的迭代,混排迭代包括固定位混排,Qlearning 混排和深度解空间型混排三个阶段。
整体思路是希望在 Qlearning 阶段通过简单的强化学习方案累积样本,快速探索收益。后续升级为深度学习方案。
上面是强化学习的基本流程,强化学习最大的特点是在交互中学习。Agent 在与环境的交互中根据获得的奖励或惩罚不断的学习知识,更加适应环境。state,reward 和 action 是强化学习中最为关键的三个要素,后续详细展开。
vivo 信息流的 Qlearning 混排机制有什么好处呢?首先它会考虑全页面收益,并考虑长期收益,符合多刷场景诉求。此外 Qlearning 模型可以小步快跑,积累样本同时,快速验证效果。
当前整体系统架构,混排系统位于 adx 后,接收到内容队列与广告队列后,通过 Qlearning 模型下发调权系数,对广告进行调权,叠加业务策略后,生成融合队列。而用户行为也会触发 Qlearning 模型更新。
Qlearning 模型运行原理如图,首先初始化 qtable,然后选择一个 action,根据 action 所得到的 reward 进行 qtable 的更新,而在损失函数既考虑短期收益也考虑长期收益。
在 vivo 的实践中,在奖励设计上,我们综合考虑时长等用户体验指标与广告价值,两者进行平滑后,通过超参进行权衡。在动作设计上,一期采用数值型的方式,生成广告调权系数,作用于广告精排得分,与内容侧进行混合,从而实现混排。
在状态设计上包含用户特征、上下文特征、内容侧特征和广告侧特征四个部分。像统计特征和上下文特征等对 Qlearning 模型有较大影响。
在 vivo 信息流场景中,Qlearning 混排取得了较好的效果,已经覆盖绝大部分场景。
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 等方式进行信息提取。
接下来我们介绍应用商店混排模块。
商店混排的核心问题是实现广告队列与游戏队列的混排。而就像图中所示广告与游戏排序分定义方式不同,难以直接对比。此外联运游戏回收周期长, LTV 难以估准,即使全部按照 ecpm 排序也较难保证效果。
梳理下应用商店面临的核心挑战:
1.涉及业务方较多,需在满足用户体验、广告、游戏三方要求情况下实现综合最优。
2.商店混排往往有保量等相关诉求,保量无法关联到整体收益,追求整体收益势必改变保量的结果,并产生相互冲突。如何在既满足保量的情况下,又实现整体最优?
3.不同于信息流,商店为高成本消费场景,用户行为稀疏。很多用户很长时间内才会有一次下载行为。
4.游戏 LTV 预估是行业的难题,如何在混排侧为游戏 LTV 提供一定的容错空间?
回到 vivo 应用商店混排,整体迭代包含固定位混排、PID 保量、带约束混排、混排精细化分流 4 个阶段。
首先介绍 PID 的方案,PID 最开始来源于自动化领域。初期为了相应业务侧诉求,参考业界主流方案,通过对广告和游戏进行保量,初步实现混排能力。但方案较为简单,且 PID 难以关联到收益目标,难以实现收益最优。
保量和收益最大化存在一定程度的冲突,满足保量约束下,如何实现业务综合收益最优是最大难点。
vivo 商店混排采取流量拆分微调的思路,在 PID 保量后接重排,综合考虑用户体验、广告收入、游戏价值三者的平衡点。针对重排与 PID 保量冲突,重排只对部分位置生效,使得在部分流量如首屏下能够进行收益的探索,而又能满足保量需求。
在重排层我们一开始考虑沿用信息流的混排方案,使用强化学习进行混排。但是存在 2 个问题:
1.重排只对首刷生效,缺乏常规强化学习的状态转移。
2.商店场景对比信息流场景涉及业务方较多,如何考虑用户体验、广告收入、游戏价值三方的权衡 是一个更为复杂的问题。
为了适应商店场景的特点,我们做了一些适配和优化:
1.首先对于 loss。有别于传统强化学习,由于商店场景行为稀疏且只对首屏生效,缺乏状态转移,我们将 gamma 置为 0,整体变为类似监督学习的状态,提高系统稳定性。
2.在 reward 的设计上我们综合考虑了整个页面游戏收入、广告收入和用户体验等多方因素实现收益最优。
3.在 action 设计上一期仍然使用数值型方案。
该版本在 vivo 商店混排取得较好效果,已经全量。
在带约束重排基础上,我们思考能否进一步进行优化。
1.首先重排候选集由 PID 保量产生,非全局最优。
2.其次候选集为全广告或全游戏时,当前重排无生效空间(这块线上占比过半)。
那么如何满足保量下更进一步实现收益最优?
我们开始尝试混排精细化分流,对于部分分支去除保量限制,进行约束放开。使得 PID 聚焦于满足保量等业务诉求,模型聚焦探索更优空间。
当前版本,当一个请求到来时,我们会根据分流模块判断是否为高质量流量,对于高质量流量通过混排模型探索收益,对于低质量流量采用 PID 进行保量,并将最终结果融合。这样重排策略能在部分流量对全请求生效,整体的保量也在正常范围。
目前我们当前尝试过的分流方式有商业价值分流、游戏偏好分流、广告位分流、体验机制分流等。
具体到重排模型上,我们也做了一些迭代。当前重排层,数值型模型存在一些问题:
数值型混排依赖于上游打分,上游偏差变化影响混排模型准确性。
未考虑上文信息和位置信息等 listwise 因素的影响。
为了解决问题:
我们采用采用生成式模型替代数值型模型,直接生成混排结果,与上游打分解耦。
借鉴 context-dnn 思想,我们采用 context-aware 方式,在生成方式和 label 设计中融入上下文影响。
该模型在实验流量上收益对比原模型更为明显,且不受上游打分影响,更为稳定。
关于未来的展望,包括 4 个方面:
1.模型优化:深度优化混排,更精细化建模,融入更多实时反馈信号,提升模型效果,更为个性化建模。
2.跨场景联动:尝试跨场景联动混排等方案,实现最优兑换比,与全场景最优。
3.统一范式:各场景统一建立序列生成和序列评估的统一混排范式。
4.端上混排:尝试端上混排,更为及时捕获用户兴趣,提升用户体验。
异构混排在 vivo 互联网的探索过程中遇到了较多的挑战,也取得了一定的收益。
欢迎感兴趣的同学留言交流讨论。
微信扫码关注该文公众号作者