草庐IT

冷启动系统优化与内容潜力预估实践

阅谦、豆苗 2023-03-28 原文

背景

每平每屋是阿里巴巴旗下家居家装平台,涵盖淘宝每平每屋家居频道、每平每屋设计家、每平每屋App、每平每屋制造业等家居全链路服务,为消费者提供了2D短图文、长图文、3D样板间、3D短视频、VR全屋漫游等丰富多元的家居内容,逐渐成为当代年轻人生活灵感与家居装修的向导之一。

淘宝内的每平每屋频道是每平每屋业务获取C端流量并进行内容分发从而建立用户家居、生活方式心智场的主要阵地。在每平每屋频道中,内容主要以场景搭配为主,内容内挂载了多个商品锚点,点击商品锚点可以跳转到商品的详情页完成进一步收藏、购买等行为。

随着业务的快速发展,供给的内容类型  体裁逐渐丰富  内容量级也全面增加,而现有的个性化分发策略难以充分满足内容创作者和内容消费者的诉求。具体地,对于内容消费者而言,希望在平台上获取到优质、实用的内容。对于内容创作者来说,则希望自己发布的内容被更多的人看到和认可。

以效率至上的个性化分发算法虽然能够满足用户的短期诉求,但长期来看会导致平台流量被头部高热内容占据,长尾内容无法得到有效曝光,从而导致部分创作者的内容无法及时获得有效的反馈,生产积极性会大大降低,甚至从平台流失。综上,除了从算法分发的视角来优化平台的流量分配策略外,还需要我们从内容生态的角度来考虑如何激励创作者生产更多优质内容并保证这些内容能够被消费者看到。

在推荐主链路的召回 、排序和机制策略中,我们引入了若干算法策略来提升推荐内容的多样性降低系统的马太效应,但这部分优化主要是在存量内容上生效,对于新发布的内容则依赖于冷启动系统的加速。每平每屋的冷启动链路先后经历了从 基于汤普森采样的 定坑展现到基于Visual EE的动态混排策略迭代。但是,随着内容供给速度的提升,有限的冷启动流量难以满足新发内容的快速透出和潜在优质内容的快速成长诉求。本文将介绍我们在冷启动系统采用两阶段多级流量放大策略和内容潜力预估模型的实践经验。

冷启动系统优化

我们将新内容的冷启动分为了两个阶段:

  1. 均匀保量
  2. 助推放大
均匀保量阶段的目标为缩短新内容首曝时间并确保能够公平地获取曝光机会。而助推放大阶段的目标是帮助内容快速成长,符合条件的新内容从当天分配的固定流量池互相竞争获取流量,潜在的优质内容将会在这个阶段快速获取到一定的曝光数量,加快其成长速度。

由于新内容缺少线上的反馈数据,直接复用主链路的召回排序算法会导致对新内容的预估结果偏差较大,所以我们为冷启动链路设计了一套独立的召回排序链路。为了在缺少反馈数据的条件下尽可能将潜在优质内容排序靠前,我们还设计了一个内容潜力预估模型,并将该模型的预测分用在召回和排序算法中。冷启动链路的推荐结果会结合主链路结果和调控分数进行生成式重排,最终确定冷启动内容是否在当次请求中展示以及展示在第几个坑位。

均匀保量

均匀保量是解决创作者流量确定性的第一个环节。在我们的系统中,最近7日内新发布并且曝光pv < x的内容会进入到均匀保量投放的阶段,当内容投放达到曝光pv上限后则会退出该阶段,该阶段会确保每条新内容都能获得一定的初始曝光,收集到的反馈数据有助于新内容在主链路中的透出。

为了防止一些创作者通过批量生产内容来获取系统流量,我们根据创作者历史生产内容的线上表现计算出了创作流量效率指数,根据该指数约束每个创作者每天在均匀保量阶段可以获得的流量上限 m,当作者创作的新内容在当天累计获得的曝光pv > m时则不再对内容进行保量投放。

助推放大

均匀保量策略有效缓解了新内容首曝周期长和难以获得初始流量的问题,但该链路没有充分考虑到给予潜在优质内容更多的流量,加速其成长为热门内容。我们为新内容引入助推成长的环节,根据内容在线上投放的实时表现动态调整扶持流量,随着效果的提高逐步放大流量,给予优质内容获取更多流量。

助推放大链路会对已经获得过一部分曝光并且点击率大于指定阈值min_ctr的内容执行分级的流量放大策略,在该策略中内容的扶持流量上限会随着内容实时的点击率动态的调整。我们根据大盘的内容效果和可用于扶持的流量比例划分了k个助推等级,根据实时计算的后验点击率确定内容所属的助推级别,当内容在助推链路中的曝光pv > 上限n后内容则会从助推链路中退出。

业务效果

  • 流量新鲜度
  1. 近N天发布内容pvr:每日曝光内容中发布时间在N天内的内容获取总流量占比(该指标越高表明新鲜度越高)
  2. 按pv加权发布天数:每日曝光内容中按内容曝光pv加权计算得到的内容发布天数(该指标越低表明新鲜度越高)
我们在21年5月底启动了冷启系统优化的项目,新系统逐步放量,从时间周期来看,自线上运行以来,  N天发布内容pvr 呈现逐步提高的趋势,而 pv加权发布天数 呈现逐渐下降趋势,表明新系统对于提高整体推荐系统的流量新鲜度具有正向促进作用,近7天发布内容pvr +15.8% ,近14天发布内容pvr +73.3% ,近30天发布内容pvr +17.1% 

  • 流量扶持效率
助推放大阶段引入了分级流量放大机制,将用于冷启扶持的流量更多倾斜到潜在优质内容,加速优质内容成长。我们采用近7天冷启链路曝光的内容在最近1天常规链路分发下的pctr衡量扶持效率。具体公式定义为:

其中  为内容在冷启链路获取的曝光PV, 为内容在常规链路中统计得到的CTR。考虑到CTR的计算依赖曝光量,使用表示仅统计在常规链路下获得>100次曝光的内容,efficiency +30% , efficiency_limit +39.9%。

内容潜力预估模型

模型设计

我们设计内容潜力预估模型来预测新发布的内容在未来成长为热门内容的概率。模型以内容是否能成为热门为目标,将在发布7天内迅速获得高曝光高点击的内容为正样本,其余为负样本。通过模型训练,捕获内容成长为热门的特征,从而挖掘出有潜力的内容。

  • 特征工程
在特征选择上,主要分为2类:内容属性特征和内容封面图特征。其中,内容属性特征包括:内容所属的风格、空间,挂载商品的id、类目、店铺、组合价格等。通过一个预训练的模型提取对应的封面图图像embedding特征。值得注意的是,我们有意识地避开点击率等基于用户交互行为的统计特征,以期更专注于内容本身进行潜力预估。

  • 样本构造
在样本构造上,我们采取两种方案:

方案一:设定曝光PV和点击率阈值,高于阈值的为正样本,否则为负样本;

方案二:首先,根据内容曝光PV对点击率进行校正。其次,将空间x风格维度下,内容发布7天后累计点击率高于维度内平均点击率的内容为正样本,其余为负样本。

方案一在正样本的选择上更为严格,能够确保是热门的内容。方案二考虑了不同空间和风格内容下内容点击率的差异,但是可能会将维度内热门但全局非热门内容的设置为正样本。

  • 模型结构
在Wide & Deep模型基础之上设计潜力预估模型,具体改动有两处:

  1. 内容封面图向量与Sparse feature的embedding进行concat,共同作为deep侧输入;
  2. 训练时,根据曝光PV的大小,给样本赋值不同的置信度,PV值越大,样本越置信。

离线评估

下表展示了基于上述两种方案训练的模型进行潜力预估,P(is_hot)位于top10%的内容在发布7天后在冷启结束后的自然推荐获得曝光PV的分布。

0

1

2

3

4

5

方案一

17.45%

12.97%

11.57%

11.57%

23.53%

28.18%

方案二

19.17%

13.75%

13.97%

24.70%

20.78%

24.30%

第一行的0-5是内容曝光PV的范围划定:数值越大,对应的曝光PV越高。从占比上看,方案二在潜力内容挖掘上准确性更高。

业务效果

潜力预估分主要被应用于干预线上冷启链路内容的召回和排序算法。期望对于P(is_hot)高的内容,给予更高的冷启PV;同时,对于P(is_hot)低的内容,减少其冷启PV,以节省一部分冷启流量。在具体实现上,我们分别将潜力预估分作为冷启链路排序模型的一个特征和召回链路的截断分。

  • 作为排序模型特征
我们统计了线上完整7天的AB实验结果。

uctr

pctr

avg_expo

avg_click

avg_ipv_click

ipv_uctr

ipv_pctr

uctcvr

pctcvr

方案一

+0.18%

+0.19%

-0.89%

-0.71%

+0.21%

+0.33%

+0.86%

+0.51%

+1.05%

方案二

-0.16%

+0.15%

-0.81%

-0.66%

-0.23%

-0.38%

+0.34%

-0.54%

+0.49%

另外,我们统计了线上冷启链路完整AB7天的效果。

ab_id

pctr

uctr

ipv_pctr

ipv_uctr

pctcvr

uctcvr

expo_ratio

方案一

+3.00%

+3.10%

-0.45%

+0.38%

+2.16%

+3.14%

+0.34%

方案二

-0.03

-0.04

-0.06

-0.05

-0.07

-0.07

0.00

相比较于冷启扶持baseline,将基于方案一输出的内容潜力预估分作为冷启链路粗排模型的特征,整体收益为正,二跳相关指标提升显著。而方案二整体收益为负,可能是将维度内热门但全局非热门内容的设置为正样本带来了负向影响。

  • 作为召回截断分
进一步地,我们将方案一的潜力预估分作为冷启链路中叶子类目单链路召回的截断分。下表展示了线上完整7天AB实验结果。

uctr

pctr

avg_expo

avg_click

ipv_uctr

ipv_pctr

uctcvr

pctcvr

avg_ipv

单链路召回分

+0.25%

+0.03%

-0.02%

+0.01%

+0.37%

+0.26%

+0.62%

+0.29%

+0.26%

而在冷启链路上完整AB7天的效果如下所示。

pctr

uctr

ipv_pctr

ipv_uctr

pctcvr

uctcvr

expo_ratio

单链路召回分

+8.06%

+8.31%

+11.10%

+10.40%

+20.38%

19.47%

+13.54%

在冷启链路上提升显著,并在整体指标上也获得了进一步的提升。

总结

每平每屋频道新内容冷启动分发策略先后经历了从基于汤普森采样的定坑展现到基于Visual EE的动态混排策略,在此基础上我们将整个链路进行重新设计,以均匀保量和助推放大两阶段构成的独立算法链路极大的缩减了新发布内容的首曝时间,提升了整体系统的流量新鲜度和冷启动阶段的扶持效率。我们引入的内容潜力预估模型通过预估新内容在未来成长为热门内容的概率来干预冷启链路的召回与排序,有效地帮助潜在热门内容在冷启动阶段获得更多的扶持流量,提升冷启阶段流量的利用率。

冷启动优化项目取得了初步的成果,未来我们会进行更细致的优化:

  1. 不同的内容体裁在展现形式、内容主题和后验效果上具有差异,设计更细致的冷启动策略有助于进一步提升流量公平性和加速潜在优质内容的成长
  2. 冷启动链路需求快速反馈,引入更多的实时特征并将主链路验证有效的ODL进行迁移能够提升整体链路的实时性,有助于新内容更精准的分发

有关冷启动系统优化与内容潜力预估实践的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

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

  2. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  5. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

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

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

  7. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  8. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  9. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  10. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

随机推荐