草庐IT

异构混排在vivo互联网的技术实践

Shen Jiyi 2023-03-28 原文

混排层负责将多个异构队列的结果如广告、游戏、自然量等进行融合,需要在上下游和业务多重限制下取得最优解,相对复杂和难以控制。本文主要从业务、模型等角度介绍了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. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  5. ruby-on-rails - Rails 中同一个类的多个关联的最佳实践? - 2

    我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来

  6. ruby-on-rails - 向 Rails 3 添加 Ruby 扩展方法的最佳实践? - 2

    我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion

  7. Ruby 最佳实践 : working with classes - 2

    参见下面的示例,我想最好使用第二种方法,但第一种也可以。哪种方法最好,使用另一种的后果是什么?classTestdefstartp"started"endtest=Test.newtest.startendclassTest2defstartp"started"endendtest2=Test2.newtest2.start 最佳答案 我肯定会说第二种变体更有意义。第一个不会导致错误,但对象实例化完全过时且毫无意义。外部变量在类的范围内不可见:var="string"classAvar=A.newendputsvar#=>strin

  8. ruby-on-rails - 用于门户的 Ruby 技术 - 2

    我刚刚看到whitehouse.gov正在使用drupal作为CMS和门户技术。drupal的优点之一似乎是很容易添加插件,而且编程最少,即重新发明轮子最少。这实际上正是Ruby-on-Rails的DRY理念。所以:drupal的缺点是什么?Rails或其他基于Ruby的技术有哪些不符合whitehouse.org(或其他CMS门户)门户技术的资格? 最佳答案 Whatarethedrawbacksofdrupal?对于Ruby和Rails,这确实是一个相当主观的问题。Drupal是一个可靠的内容管理选项,非常适合面向社区的站点。它

  9. ruby - 存储外部 API 的密码 - 最佳实践 - 2

    如果我构建了一个应用程序来访问来自Gmail、Twitter和Facebook的一些数据,并且我希望用户只需输入一次他们的身份验证信息,并且在几天或几周后重置,那会怎样是在Ruby中动态执行此操作的最佳方法吗?我看到很多人只是拥有他们客户/用户凭证的配置文件,如下所示:gmail_account:username:myClientpassword:myClientsPassword这看起来a)非常不安全,b)如果我想为成千上万的用户存储此类信息,它就无法工作。推荐的方法是什么?我希望能够在这些服务之上构建一个界面,因此每次用户进行交易时都必须输入凭据是不可行的。

  10. iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里 - 2

    当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在

随机推荐