融合复杂目的且允许实时调控的重排模型 淘宝介绍场景的利器
一、消息流场景面临的应战与重排模型的共同长处
关于重排很多同窗或许感到生疏,下图是工业界中介绍系对抗个经常出现的 pipeline。当用户到来手淘时,会从亿级的候选池中先召回万级的宝贝,而后把万级的宝贝交给粗排模型打分之后再从中精选出千级的宝贝给精排模型,而后精排模型会交付几十上百的宝贝到重排模型进一步打分。
从打重量和效率角度来讲,前序的模块打重量十分大,对其效率要求也十分高。依次往后打重量缩小,效率也会缓缓降落,这里的效率指的是单个宝贝打分所要求消耗的计算量。正是由于消耗了更多计算量,后续模型的打分精准度也会变高。
重排是由阿里巴巴庄涛在 18 年终次正式提出的概念,从字面意义来说就是从新再排一遍。除了打重量和精准度之外,跟前序模型相比,重排模型的一个清楚的区别是会显示建模宝贝之间的相互影响,称为 context information。
比如把上图的宝贝在手淘上展现给用户时,由于两边的宝贝跟周边的宝贝在色彩、大小上有着清楚差异,用户就会以更高的概率去点击这个宝贝,这就是十分经典的context information 的运行。
下图是目前复杂消息流场景所面对的应战,以及重排的共同长处。
左边两张截图是手机淘宝,在介绍按钮位置稍微往下滑,就可以看到【猜你青睐】的业务,它的产品外形是一个双列流。所谓流就是用户可以不停公开滑,随着流的下滑可以接纳到更多消息,这种产品外形称为消息流。之所以称它复杂,是由于它里边有直播、商品、图文、视频,还会间或的有一些用研相关的内容。在介绍旁边有一个关注按钮,这个流里边展现的是用户在手淘关注的店铺或许达人相关的内容,是一个大卡的单列流,假设是商品通常是以商品列表的方式展出。
后续分享的试验结果均来自“关注”流,这两个场景不像其它一些便捷目的的介绍场景,比如说同店的六宫格宝贝介绍,以促成成交为惟一目的。在这样复杂的消息流场景中,面临着十分多的应战。
Context 消息的感知与控制才干是应答这些应战的杀手锏。以第一个应战打散为例,当想在某个位置放入某个商品时,重排模型会去看周边的内容都是来自哪些店铺,这叫做 context 的感知。在放商品的时刻可以避开这些商家,以确保店铺是不扎堆的,这个称为重排模型对 context 的控制才干。
传统方案通常是用 pipeline 的方案串联一系列内容与性能相对繁多的模块。比如每一路供应精选出了最好的宝贝后,先融合完再做一个店铺打散。假设冷启占比不够会随机性地拔出一些冷启的内容,还会有置顶的环节,依据业务要求把某些内容放在整个介绍结果的最顶部。仅是三个模块就或许牵扯出很多爱恨情仇,前后耦合,很容易相互踩脚。比如打散后店铺是不扎堆的,但拔出的冷启内容或许跟周围的店铺是重复的,就冲破了前序的结果。假设拔出的时刻还要看能否满足店铺打散这个需求,又或许造成冷启内容插不出来了。冷启和置顶之间也是相似状况。
还有一个疑问是这种形式下每个模块性能相对繁多,但在系统层面却缺少联结优化的或许,造成整个系统最后介绍的结果是次优的。有同窗说会不会是模块之间的顺序不对?也有或许,但我的了解是不存在一个真正好的序能够消弭各个模块相互之间的踩脚,当天要分享的就是如何经常使用重排模型彻底颠覆这种 pipeline 介绍范式。
基于复杂目的的重排方案,在每一路供应精选出候选集后,把候选集全扔进重排模型就会间接生成最终的介绍序列。关键长处体如今两点:
二、重排模型的建榜样式总结
重排模型大抵可以分红三种建榜样式,简称为 V1,V2 和 V3。
V1 版的特点是尝试捕捉输入 item 之间的相互影响,即局部捕捉 context 消息,有局部 context 感知才干,单点打分,贪心排序。
比如有 5 个候选宝贝,来自绿色店铺和黄色店铺两家。重排模型 V1 版或许是经过 RNN 或许 Transformer 的结构去捕捉建模它们之间的相互影响和相互相关,给每个 item 独自打一个排序分,依照这个分数从大到小的顺序陈列,再截取 top 宝贝显显露作为最终的结果。
这版模型存在一个疑问就是关于这些宝贝能否来自一家店铺没有控制才干。假构想确保来自不同店铺,就要参与店铺打散的逻辑,反过去看这个重排模型就不是输入最后的结果了。所以 V1 版重排模型缺少对 context 的控制才干。
V2 的特点是在 V1 版的基础上加上了序列选取 item 的形式。详细来说,会经过 encoder 去拿整个 context 的 embedding,之后会一一选取 item。举例来说,在这个 case 中,曾经选取好前 n 个 item,宿愿选取第 n + 1 item。该模型会先计算出一个 state 变量示意这个位置应该怎样选宝贝,而后会拿 state 跟各个候选 item 算 attention,attention 的值跟 item 选取概率高度相似,大体上会依据 attention 值的大小来选择一个宝贝放在这个位置。每选出一个宝贝后 state 都会马上降级,一切的 attention 值会从新计算。这种建榜样式下,就成功了对 context 的控制才干。
中选择第 n +1 个宝贝的时刻,由于前序 n 个宝贝曾经选定了,他们来自哪个店铺也确定了。选 n +1 的时刻,经过看前面的宝贝防止有重复的店铺出现就可以了,所以对 context 有比拟强的控制才干。
但 V2 版重排模型的瓶颈在于要求手动给出每一步的最优选择作为 label,由于该重排模型是基于监视学习的范式来训练的。给定候选集宝贝、用户的实时形态和前序 n 个宝贝的选择,要求通知模型这一步的最优选择是什么才可以让模型训练。
但疑问是给出这么多前序设置怎样知道这一步应该选什么呢?监视训练在介绍系统中用得很多,特意是精排模型。拿到用户特色和商品特色,输入一个 CTR 点击精排模型去启动点击率预估。线上这个宝贝透给用户,能真实知道用户有没有点击,很容易回收一个点击或许不点击的 label,训练时最小化预测值和实践值的距离就可以做好模型训练。
但要把监视训练套用到重排模型就不成立了。比如说有用户特色,有 m 个商品和它们的特色,喂入一个重排模型预估了一个最优序列,比如 12345,要求给出最优序列当作 label,比如这个 case 里边最优的序列应该是 34125,经过最小化这两个变量之间的距离来做模型训练。
但疑问是在复杂情形中,比如有多种内容供应、多种目的、多种业务需求状况下,如何知道最优序列是什么呢?假设已知最优序列,为什么还要求训练一个模型呢?在相关钻研中,大家会提出一些寻觅最优序列的探求方式。比如把购置的宝贝放在第一个,点击的宝贝次之,其余的随意排,这里其实是人为结构出一个最优序列。但在这种训练形式下,结构出来的序列好坏间接选择了重排模型的下限。基于上述要素,提出了重排 V3 的建榜样式,其特点是在 V2 的基础上加了 reward 驱动训练。
首先有一个 actor,给出一个用户和候选商品序列时,它担任生成一个序列。另一个关键模块叫做 evaluator,当一个序列给到它时,它会对这个序列做出评价,reward 分反应给 actor,actor 就会依据 reward 的大小来调理生成序列的战略。
基本的思绪是假设模型看到了一个大 reward 分的序列,当再遇到相似的状况下,模型就会以更大的概率生成这个序列。
reward 有两个十分突出的长处:
三、无机融入多目的的重排模型
在这个建榜样式下的重排模型都可以很优雅地融入各种业务目的。
基于 V3 版的设计如上图。输入是一个 user,m 个 candidate item,区分是 C到 C,一个 reward function R。R是把 w 当做参数,启动线性求和,求和的项是 w 乘以 utility function U。U 可以是点击、冷启内容的占比等各种各样的业务目的,w 是业务目的的融合权重。
宿愿 output 能满足 argmax R条件,给出 user 以及目前的候选集,在候选集里边的宝贝拼出来的恣意序列中,筛选 R最大的标星序列,记为 L*。模型的义务就是在这个序列存在的前提下找到 L*,假设有多个那么前往恣意一个都可以。
成功这个义务的最基本的思维就是训练一个 actor,当给定一个 item candidate 汇合的时刻,actor 跑一遍正向运算,而后会给出一个最优序列。充沛训练之后,就会以为它生成的这个序列趋近于 L*。
序列生成器 actor 自身是一个 encoder 加 decoder 结构。给出 input items 和user,会首先选择一个 DeepSet encoder,拿到整个 context 的 embedding,而后一一选取宝贝,选取宝贝的是一个 PointerNet decoder,整个结构大抵过去说跟 v2 版模型是分歧的。每选取一个宝贝 state 就会立刻降级,attention 值也会所有降级。正因如此,重排模型的计算量比拟大。
序列生成器的 encoder 选择的是 DeepSet,也就是用 deep network 去建模一个set,set 中的元素之间是不存在序的。重排模型只需知道 user 和 candidate item 的相关消息就够了,不要求有一个初始序。由于在复杂状况下,假设生成了一个很蹩脚的初始序,很有或许损伤重排模型的表现,所以最后丢弃了给模型一个初始序,就而是把 user 和 candidate items 间接交给重排模型。
详细的做法是,输入 user 特色和 item 特色。首先会做一个 item 的 feature augmentation,这里新加的特色或许是这个 item 的 price 在一切 item candidates 之间的排序;也有或许是它的店铺在 item candidates 中重复了几次,相似于这样的特色。
之后经过一个 embedding lookup,把一些 ID 类的特色转换成 item embedding 来介入数值计算。把 user 的embedding 和每个 candidate 的 embedding 启动拼接跑几层 MLP。这些 MLP 是几层 DNN,每一个独自跑,再把每一个 item embedding sum 起来,再过几层 MLP。
序列生成器中的 decoder 是一个 PointerNet 的 decoder。拿到了 context 的embedding 后,开局逐渐选取宝贝。首先把 embedding 当做 RNN 的初始 hidden state 喂入 RNN,一开局会喂入一个特意的 TOKEN start,而后 RNN 计算的 output 当作 stage。拿到key 之后,会跟每一个 item 计算 attention,这边用的是 local context enhanced attention。
拿到每个item attention 后,会做 masking 操作,关键有两个要素:一是假设一个宝贝的前序曾经被选择了,就不能被重复选择,所以这样的宝贝的 attention 值会被 mask 成 0;二是假设业务要求把这个宝贝放在这一位,会把除了这个宝贝之外的其它宝贝的 attention 值所有置0,在接上去的 sample 环节中就肯定会选择这个宝贝。
在训练的时刻肯定要有 sample 的环节,由于 sample 环节引入了随机性,让 actor 会去尝试不同的序列生成战略,最终能够找到一个好的战略。图中所示的 case 选择第一个 item ,会把它喂入 RNN,迅速降级 state 或许 context 消息,而后再去选择下一个宝贝。
黄色局部是 local context enhanced attention,除了 item embedding 和 state,还有一个针对 state 和 item 的 local context。左边的 Vector 是手搓出的一系列特色,如第一个特色是目前为止冷启内容的占比是多少,第二个是这个 item 在前序有没有重复,协助重排模型做好店铺打散。全体来说,这一系列加工的特色可以协助模型极速捕捉业务用意。
这里的建模思维是有些变量之间的相关,只能依托数据模型以及训练去捕捉拟合,但这样的相关应该限度在那些复杂且无法表白的变量相关。假设有一些明晰明白的规定,应该尽量明晰表白,而不是靠模型探索。一是没有必要,二是这样做是低效的,所以参与了一个 local context enhance 的参数模块。
序列评价器 evaluator 对模型离线训练时生成的序列启动评价。比如这一整页会不会有用户点击,点击概率的预估只能依托模型。拿到 user 和 item 之后,会跟 actor 里边一样做特色预处置,拿到每个 item 的 embedding,concat 起来作为整个序列的表征。而后用 5 个 channel 区分去从不同角度提取这个 list 当中的特色,包括经常出现的 multihead attention、RNN 等。之后会把这些 channel 捕捉的特色结果 concat 起来,再过 MLP 输入最后的 prediction,比如用户会不会点击这一页上的恣意一个商品或许点击数是多少。其余的 channel 就不详细倒退了。
evaluator 模型用的是规范 loss。比如想训练这一页介绍结果用户会不会有点击这样一个点击率预估模型,会用一个 0,1 的 label,用规范的交叉熵 loss 去训练 evaluator。充沛训练 evaluator,而后锁死,再开局训练 actor。
这边用到强化学习的一些算法。目前用的是 REINFORE based Algorithm,这个 REINFORE 是十分经典的一个 RL 算法,在它的基础上加了一些小而罕用的 trick。
训练 Generator 的 loss 有两局部内容,一局部是 reward 相关的,一局部是模型生成这个 list 的 probability。给定一个 user 和 candidates,generator 会生成一个序列,这个序列喂进 evaluator ,或许是 reward function,可以拿到一个 reward 的评价。而后减去 baseline 也就是减去线上真实曝光的那个 list,由于离线训练的数据是经过 log 失掉的,所以线上真实知道过后的曝光序列是什么,这个序列也进入 reward function 拿到一个 reward 值,对它们启动一个减的操作,宿愿生成高于线上或许优于线上序列的结果。
第二局部是乘一个 probability 项,给定 user 和 candidates,计算 generator 生成这个序列的 probability 。训练的外围现实就是 reward 得分高的序列应该有更大的概率被生成。
比如有 4 个 candidate items,生成一个长度为 4 的序列。第一步计算每个 item 的 attention 值,在这一步的时刻,选择了第一个 item。第二步会降级 context,计算剩下三个 item 的 attention 值大小,比如这一步选择了 0.8 的这一个。接上去走到第三步的时刻,就只剩两个 candidate 了,这一步选择了 0.4,留意这里是有采样的一个举措的,所以不肯定选到 0.6 的这一个。到第四步的时刻,就只要一个 item 可选了,则该 item 的 tension 是 1。
在这个case 里边,generate 模型生成这个序列的概率是 0.5*0.8*0.4*1,就把这个概率值放在这个位置,模型只需去不停地 minimize 这个loss,就可以让高 reward 的序列有高的生成概率。
咱们的论文中对线上的一些业务目的做了总结,分红了四大类,每一类都引见了如何将它无机地融入重排模型,比如说 reward 或许 utility 应该怎样设计。感兴味的同窗可以去看 paper,外面都有比拟详细的论述。这样就设计好了一个重排模型,可以无机的融入多种优化目的。
接上去讨论如何灵敏调理多目的之间的权重。
四、基于超网络的实时可控重排模型
实时可控多目的之间的权重的设计动机是:首先有一个 assumption,reward function 是线性加权求和的方式,把这一局部 term 称为 utility function。一个 utility function 就是从一个维度去评价序列,比如用户点击率、多样性、新颖度和新颖性等。无论这边是要求模型预估的utility,还是可以手写出公式的 utility,当训练 actor 的时刻,都以为 utility 是一个固定的 function,所以整个 reward function 外面可以变的参数就只要 w,而这个 w 又示意了对各个目的之间的一个偏差。
在传统的 preference weights 里这是一个静态的形式,w 在模型训练一开局就要指定。假设出于一些要素肯定要调理 w,则肯定从新训练整个模型,就会十分费时费资源。有一系列上班在尝试协助如何寻觅到最优 w,也有些上班会在训练的环节中不停地去调理w,以到达最好的效果,咱们的上班则跳出了这个框架,全体的思绪不是去寻觅某一个最优的 w,而是恣意给一个 w,都能生成最好的序列,这种方式称为灵活指定 preference weights。
当用户到来手淘时要求给他做介绍,在这个瞬间可以指定一套 w,模型就依据这套 w 生成最优序列。这样的好处:一是可以成功快捷的超参调理,以冷启占比为例,怎样知道其 w 应该写多大,实操中往往是上线始终地尝试,但假设要求从新训练模型即使是增量数据的训练,也或许要求几个小时甚至几天,而假设有了这种快捷的超参调理才干,只需调一调w,看一看线上的实时监控是不是 OK ,假设不 OK 再调一调,或许几十分钟,或许最多半天就可以成功了。
另外这种方式能更极速照应流质变动,做到更精准的流量控制。特意是在大促的时刻,前五分钟跟后五分钟的流量都是不一样的,咱们要对流量的变动极速做出照应,即使是线高端式训练的模型其实都做不到这种 0 delay 的实时照应速度。
第三点也是咱们以为对业务影响最大的一点,就是或许基本不存在一个最优的 w。关于不同的流量,最优的 w 就应该是不一样的。比如关于新用户,最关键的是让用户了解、青睐这个场景,就会散发跟用户相关性更高的一些内容。但关于成熟用户,那或许宿愿更多给他带来惊喜性与发现性,惊喜性与发现性的 w 就会调得更大。
目前这项上班宣布在最新的 KDD2023 上,论文名是《Controllable Multi-Objective Re-ranking with Policy Hypernetworks》,整个技术方案的要点就是 Hypernet 和 conditional training。
下边的框里是恣意一个重排模型,下面的框是新参与的 Hypernet 的局部。线上 serving 局部,当一个用户和他的 candidate item 到来场景时,可以实时指定一个以为正确的 w,交给 Hypernetwork,它会生成一组参数交给重排模型。蓝色加黄色,是重排模型的参数,分为两局部,一局部是 θ,是对 w 敏感的参数,比如重排模型 DNN 最后几层的 w 和 b,也就是最后几层的权重和 bias,是对 w 敏感的。而模型大少数的参数,以为是对 w 不敏感的。比如每个 item 的 embedding 表征对 w 应该是不敏感的。当线上 Hypernet 生成 θ时,重排模型就可以用完整的 θ 去生成一个序列,由于这局部 θ是跟着 w 走的,所以也以为生成的序列就是最接近 L* 的那个结果。这个是 Serving 时,网络正向计算的环节。
当一个训练的 sample 出去时,这里的一个 trick 会随机采样一个 w,采样的范围就是事前指定的一个 distribution,这里要求一些先验常识来指定 w 的采样散布,为每一个 sample 或许每一个训练 batch 指定一个 w。走正向运算,当重排模型生成一个序列时,要求将它交付给 Evaluator 做评价。Evaluator 也会依据采样出来的这个 w 对序列做出评价,这个 reward 可以转化成一个 gradient,这个 gradient 就会流到 Hypernet 来 update 它的参数,同时也可以流到重排模型外面去 update 那些对 w 不敏感的参数。
Conditional training,自创了 Conditional GAN 中的一个技术,用到了重排模型的设计当中。
上图展现了线上的结果。左边的试验是训练好的一个实时可调控的重排模型,线上也随机采样 w 做投放。比如第一张图中,横轴是点击的 utility 的权重,而纵轴是线上真实回收出来的样本的点击平均值。例如图(a)中,横轴上是 0.5,这个点是把线上投放时刻点击的权重是 0.5 的那些 case 搜集起来,统计他们线上真实的点击率是多少,逐一画出这些点来,就失掉了蓝色的折线。橙色的直线是一次性拟合。可以看到,当点击的 utility 权重增大的时刻,全体的点击率或许说点击数量也有着清楚回升的趋向,说明重排模型确实能够依据给定的 w 生成不一样的序列。
基于相反的思绪,图(b)展现的是冷启内容的占比,图(c)是店铺的多样性,图(d)是组间排序的 utility,示意来自不同 group 的内容,大抵要依照 group 的优先级排序。这四幅图说明重排模型确实调得动。左边是 online AB test 的结果,baseline 方案就是一开局提到的 pipeline 形式,试验方案是实时可控的重排模型,用线上超参调理,调到一个比拟好的位置。可以看到在用户点击、用户看到的商家数量、冷启占比、组间的排序、逗留时长以及用户看的内容的数量等方面都有着不同水平的优化。
相关上班是由阿里巴巴以及人民大学协作成功的。咱们来自大淘宝技术私域用户算法团队,担任手机淘宝商家私域产品,包括店铺概略关注的相关算法。经过对海量数据的剖析与学习,协助亿万用户在商家私域高效地买和逛,辅佐千万商家运营好用户。同时咱们也是一支器重翻新、乐于分享的团队,不少成绩曾经整顿宣布在了 AAAI、SIGIR、WWW、KDD 等国内顶会上,这里有海量的数据、短缺的计算资源以及丰盛的运行场景等着你来应战。想进一步了解可以发送邮件到这个地址或许微信扫二维码。
Q1:线上每个用户共性化的权重是怎样失掉的?
A1:只管从技术过去讲可以允许每个用户,甚至是每个用户每次访问的权重都可以是不一样的。然而线上会把这个粒度打到人群,就像我刚才说的新人和老用户是不太一样的,是做到人群层级的。至于每团体群是怎样设置,这个关键取决于一些偏业务的要求,比如说要求多少的翻新性和相关性,这个是业务上定的。而一些比如说冷启的占比是经过算法确定的。
Q2:线上 serving 不同,不同流量权重不同,那离线训练的时刻权重也不同吗?
A2:线上 serving 权重不同,离线训练时的权重也不同。一个重排模型在线上能为一个权新生成好的序列,肯定是由于它在离线训练的时刻就曾经见过这套权重或许相似的权重了。所以在离线训练的时刻,关于每一个 training 的 sample 或许每一个 training 的 batch,都是采样一个 w 做训练的,由于不知道线上真实会遇到什么样的 w,启动采样。
A3:这个确实是被问到比拟多的一个疑问。首先会有一些业务的输入,就是专家的先验常识,假设这个不 ok 再启入手调,比如说冷启的这个权重基本上就是手调的。但在论文中,为了验证这个算法是一个愈加 general,不要求过多先验常识的方案,把 w 的散布设置为从 0 到 1 的一个平均散布,而后线上也是在这个范围之内做调理的。
Q4:重排用这么复杂的模型为什么不在精排做?
A4:由于做不了,各个模块从左到右计算变得越来越复杂,重排的计算复杂度普通是 m 乘以n,m 是输入的 item 数量, n 是要求前往的 item 数量,就是序列的长度,它的计算度是 m 乘以 n。通常来说,重排模型的输入或许是 50,前往的序列或许是 10。然而精排模型的打重量级是千级,是 1000。假设说像重排这样建模,它的复杂度就会变成 1000 乘以100,这个在线上是扛不住的。
Q5:打散规定和冷启战略如何失掉保障,而后有概率出现相反的店铺吗?
A5:这是个好疑问,其实业务需求里边有些是硬规定,有些是软规定。比如说有的时刻某个 item 肯定放在第一位,就是置顶的需求是强需求,肯定要百分百保障明现的,用户或许在其余的中央点了一个宝贝,普通会把这个宝贝称为一个 trigger,这个 trigger 宝贝肯定要做到所见即所得,它肯定得是放在序列第一个的,所以是一个强规定,百分百得保障。但这个事件经过在 reward 里边加 utility 是无法成功的,而经过经常使用 masking 可以成功,假设要求将某个 item 置顶,那会把其余一切的 item 的 attention 值置成 0,这样选择的结果肯定是第一个 item,这是能百分百保障的。
然而其余的像是店铺打散、冷启这些是软规定,只需大略率成功就 OK 了。假设用户真的十分青睐耐克,他就是想去买球鞋,那我给它延续出两个耐克的 case 是可以接受的,没有什么大疑问。打散规定也是一个软规定,绝大略率说是可以打散的。其实线上方案里重排模型后边还有一系列的硬性用户体验规定限度,假设不满足这些用户体验规定,重排模型输入的结果就会被丢弃。假设碰巧生成了一个对这个规定来说特意蹩脚的序列,比如说延续四个店铺都粘在一同,那这个结果会被后续的体验规定卡住,而后这个结果也会被弃置,会用备选的 baseline 方案。
用户关于冷启战略感知并不剧烈,所以冷启没有后续的强迫规定。经过调理权重,看冷启义务成功度的目的调控。当然冷启自身就有闭环调控,形态冷启的占比是有一个实时反应链路的。冷启的信号是有一个 PID 闭环控制信号,即使权重一样,闭环调控的 PID 信号也有强有弱,假设冷启示得不够多,PID 控制信号就会变得更强。重排的 w 以及闭环调控的 PID 信号,两个一同来保障冷启成功度。
Q6:重排全体耗时,P99 目的大略多少?线上特色数量级以及线上处置耗时大略多少?
A6:大抵是 20 多一点,应该不到 25 毫秒。基于精排模型打分,重排模型不要求经常使用太多特色就可以成功不错的表现,所以目前特色经常使用得不多,这是耗时低的一个关键要素。
Q7:淘宝 feed 里不只仅有商品,还有直播,这套框架如何思索到题材分歧性的?
A7:这个其实是整套设计最精髓的中央之一。我的答案就是我不思索。由于很难总结出来视频下边应该放一个宝贝,还是视频下边应该放一个直播?由于真得不知道,所以应该去防止被动确认这个疑问。把这些个视频、直播、宝贝所有都给重排模型,而后重排模型就去看,或许当天这样拼,明日这样拼,然而他会不停地 get 到用户的反应。比如当天这样拼用户点得更多,那就尝试继续这样拼,假设大家不买账,那就防止这样拼,这个事件是靠 Generator,靠 RL 算法自己去探求出来的。
Q8:不同物料的特色怎样一致?例如直播物料和商品物料的特色差异会比拟大,怎样做比拟一致的特色?
A8:我以为这也是重排模型来做混排的一个长处,不要求一致物料特色。作为一个特色来讲,假设这个特色真实蕴含了丰盛的消息量,且是稳固的,就是好特色。比如说视频内容前往了特色 ABC,而后宝贝内容前往的特色叫做 d、e、f,可以用一致表征,比如说特色最后变成每一个 feed 都用 ABCDE 去表征,只不过会有一半是 0,只需把这个拼起来的特色间接喂给重排模型即可。至于两组特色怎样去做一致或许对齐,交给重排模型,交给大数据,交给训练就 OK 了,不要求担忧的。
Q9:重排经常使用精排模型的分数,后续精排模型迭代的疑问怎样处置?
A9:精排模型十分重,或许一个精排模型不经过紧缩就大几百 g 了,这种规模的模型很难做一些相似于采样、loss 设计等操作。所以精排模型的定位就是把外围的预估做准,预估的点击率的散布应该跟真实的点击率十分接近。精排稍稍调整一些模型结构,预估的 CTR 值的散布应该是不会大变的。在这种状况下,前后耦合的疑问没有那么强。
序模型有比拟严重的扭转,比如说从点击率的预估变成了点击数的预估,后续的重排模型是没法间接运行的。而精排模型可以额外预估点击数,但点击率还是要传到下游模型。有时精排假设做采样战略的一些调整,预估的点击率有或许出现清楚的扭转,比如原来不做负采样,如今随机丢弃一半的负样本,这种状况下会让点击率清楚比原来参与一倍。为了处置这个疑问业界常罕用的一个方法是做校准,经过一系列的操作,把预估的点击率锚定到真实点击率含意上的那个物理值去,保障这个预估值抵达重排模型的时刻是稳固的。
Q10:重排要生成的序列长度大于最后的曝光序列,那目前序列中评价器序列长度是最后的显显露序列长度吗?输入的是精排排序长度是多少?没有显显露的商品在生成器 reward 是什么?
A10:C 端用户的体感是一个有限下翻的消息流,但实践从技术侧来看介绍是分页走的。比如说 10 个内容会先推一页,用户差不多把 10 个内容看完,再介绍下一页。所以致少目前的方案里边,评价器输入的序列长度就是 10,这个是跟着每一页的长度走的。
重排模型的 page size 是 10,重排序列生成的序列长度也是 10。目前训练中评价用评价器训练长度是最后显显露序列的长度。重排模型输入的序列长度普通是几十,最多就上百这个量级。
没有在线上真实显显露的商品,也会埋上去再放在那个 candidate set 里边,交给重排模型,重排模型是有或许选出原来没有显显露的内容的。也正是由于会显显露原来线上没有真实显显露的宝贝,一旦出现了这种局面,除了用 Evaluator 之外,没有其余的手腕去判别这个序列用户会不会点击,或许有几次点击,这个是没有方法的。极其状况下或许显显露 10 个宝贝,线上没有一个展现,那这个序列用户究竟会不会点击,log 上去的数据是不会有这个消息的,只能用 Evaluator 做评价。
Q11:请问论文中有没有 RL 训练不稳固疑问?
A11:RL 就是不稳固,数据不变,模型不变,随机种子不一样,或许这一次性行,下一次性不行,这也是 RL 难训练的一个表现。如何能让模型训练得更稳固,是一个值得钻研的疑问,目前用一个便捷粗犷的方法,这次垮掉了,那再试一次性,屡次尝试后通常可以取得较好的效果。它只需效果相差不大,上线之前会有检测,假设垮掉了,那再试一次性。模型目前是用精排的特色,所以整个模型不大,几个钟头就训练完了。
Q12:线上推理时 Generator 一次性发生多少个序列,而后启动打分的。
A12:其实如今 generate 线上和训练的时刻,是两种上班形态,线下训练是采样,推到线上后它会切换成贪心方式,就是说线上肯定会在这一步选择 attention 值最大的 item,所以它只要求输入一条序列。
后续在其余同窗的上班下,上线了多序列重排模型,线上也可以开启采样,Evaluator 也推上线了,Generator 经过采样生成多条序列,而后 Evaluator 再从中选优,显显露最优的一条序列。如今线上全量推的是这个方案,不单是 generate 的输入结果,也尝试用其余手搓的序列,一同丢给 evaluator,从中选最优。
Q13:重排模型的离线目的看什么?
A13:实操当中离线模型的目的看的是失掉到的 evaluator 的 reward,还有一个目的是 better percentage。Better percentage 是雷同的状况下生成的重排序列,从 reward 过去讲优于线上真实投放序列的概率。基本上以为这个数值应该至少得高于 50%。
Q14:中选重排候选内容池 50 条是如何选择的?齐全依照精排分吗?还是会思索一些其余业务需求,比如保量内容进入 50 条重排候选池。
A14:存在一些特意的 case,比如说用户关注物品真实太少了,也会给他做全网介绍的内容。过后在全网介绍遇到过一个 case,介绍前往了 200 个宝贝。靠精排模型分截取的 200 个 feed,有 197 个都是同一种类型的feed,这个事件就很难堪了。比如说业务规定要求一页里边最多只能出一个买家秀,假设有这样的业务规定那 200 个前往的结果就大面积是废的,所以肯定要在前往之前先看 CTR,而后也要做 feed 内容类型的打散和商家的打散,这些操作肯定水平来说是必要的。