精华内容
下载资源
问答
  • 重排
    千次阅读
    2022-02-23 17:56:36

    系列文章,请多关注

    推荐算法架构1:召回

    推荐算法架构2:粗排

    推荐算法架构3:精排

    推荐算法架构4:重排

    1 总体架构

    精排打分完成后,就到了重排阶段,之后可能还会有混排。召回、精排、重排三个模块中,重排离最终的用户展现最近,所以也十分关键。重排的技术点也十分多,总结下来,个人认为重排主要是为了解决三大方面的问题:用户体验算法效率流量调控。下图是重排总体架构

    2 用户体验

    重排模块是推荐系统最后一个模块(可能还会有混排),离用户最近。作为最后一层兜底,用户体验十分重要。主要包括打散、多样性等内容。曝光过滤有时候也会放在重排中,但本质上完全可以在召回链路,对已充分曝光的短视频,或者刚刚已经购买过的商品,进行过滤,从而防止用户抵触。

    2.1 打散

    同类目、同作者、相似封面图的item进行打散,可以有效防止用户疲劳和系统过度个性化,同时有利于探索和捕捉用户的潜在兴趣,对用户体验和长期目标都很关键。

    打散问题一般可以定义为,输入一个item有序序列,每个item有几个需要隔离开的属性,输出一个相似属性分离开的item序列。打散可以基于规则,也可以基于embedding。基于规则比较简单可控,但由于item属性枚举值较多,可能需要频繁更新,扩展性不强。基于embedding的打散,泛化能力强,但容易出现bad case。目前主流方法仍然是基于规则的打散。

    基于规则的打散主要有如下几种:

    1. 分桶打散法:将不同属性的item放入不同的桶中,依次从各桶中取出item即可。这种方法实现简单,打散效果好。但末尾容易扎堆。对原始序列改变较大,可能带来指标的下降。多属性叠加困难,扩展性也较差。
    2. 权重分配法:对每个item定义一个分数,计算公式如下:
      1. 其中W为每个属性的权重,代表属性打散需求的优先级。Count为同属性item已经出现的次数。f(x)即为打散加权分数,按照它从低到高对item进行排序,即可完成打散。这种方法实现也比较容易,而且可以充分考虑多种属性的叠加,扩展性也很强。但仍然容易出现末尾扎堆。
    3. 滑动窗口法:在一个长度可控的滑动窗口(session)内,同属性item超过一定次数后,就交换出session。这种方法只用考虑局部,不需要全局计算,因此计算量较低。同时对原序的破坏也比较低,最大限度保留相关性。但也会出现末尾扎堆的现象。

    2.2 多样性

    多样性是一个很大的话题,后面我们会作为专项来梳理。多样性会对用户体验、长期目标有比较关键的影响。召回、精排、重排全链路都要考虑多样性问题,但确实一般重排中考虑比较多一些,我们这儿也一起分析下。

    2.2.1 评价指标

    多样性评价可以使用两种方法:

    1. 数据指标分析:可以从user和item两个角度评估,比如平均每个用户的曝光一二级类目数,曝光item同属一个类目的概率等。可以从类目、作者、标签等多个维度进行数据分析和评价。
    2. 人工评估:抽样进行人工体验,评估多样性。

    两种方法各有所长,一般还是需要结合一起使用。特别是人工体验评估,千万不可忽略。算法工程师也要经常去体验和对比自己的实际业务场景。

    2.2.2 发展进程

    个人认为多样性算法经历了三个阶段

    1. 规则约束:基本都是基于规则,没有结合相关性来考虑多样性问题。主要有三种

      1. 硬规则约束:比如类目打散、作者打散、同图打散等。一般业务初期都会采用这种方法,开发简单快速,没有实现配置化,所以扩展性不高。新的打散需求一般要重新开发和部署。
      2. 规则引擎:规则抽象化和配置化,上线速度快,新增需求只需要新增一个规则即可。
      3. 个性化约束:不同类目、不同时段、不同活跃度用户配置不同。比如手机和抽纸,他们的打散窗口可能会不同。不同活跃度人群,其耐受度也会不一样。
    2. 启发式方法多样性和相关性相结合的方法,充分保留相关性。主要有

      1. MMR:最大边缘相关模型。1998年发表,比较老。参见 The Use of MMR, Diversity-Based Reranking for Reordering Documents and Producing Summarieshttps://www.cs.cmu.edu/~jgc/publication/The_Use_MMR_Diversity_Based_LTMIR_1998.pdf
      2. DPP:点行列式矩阵。NIPS2018。参见Fast Greedy MAP Inference for Determinantal Point Process to Improve Recommendation Diversityhttps://proceedings.neurips.cc/paper/2018/file/dbbf603ff0e99629dda5d75b6f75f966-Paper.pdf
      3. Deep-DPP:结合深度神经网络的DPP,CIKM2018,youtube。参见 Practical Diversified Recommendations on YouTube with Determinantal Point Processeshttps://jgillenw.com/cikm2018.pdf

    3. 深度模型:主要是加入了上下文感知,从而可以结合规则引擎实现多样性。这部分在与下一章节的上下文感知模块比较类似,放在那边统一梳理。

    3 算法效率

    重排对于提升算法准确率和效率,从而提升业务指标也十分关键。重排提升算法效率,主要分为三个方向:

    1. 多任务融合。精排输出的多个任务的分数,在重排阶段进行融合。可以基于人工调权、grid search、LTR或者强化学习
    2. 上下文感知。精排由于计算性能因素,目前是基于point-wise的单点打分,没有考虑上下文因素。但其实序列中item的前后其他item,都对最终是否点击和转化有很大影响。context-aware的实现方式有pairwise、listwise、generative等多种方式。
    3. 实时性提升。重排比精排模型轻量化很多,也可以只对精排的topK重排,因此较容易实现在线学习(目前有一些团队甚至实现了精排在线学习)。实时性提升对于快速捕捉用户实时兴趣十分重要,能大大提升模型准确率和用户体验。通过ODL在线学习,实现重排模型实时更新,可以提升整体链路实时性。另外在端上部署模型,实现端上重排,也可以实现推荐的实时响应和特征的实时捕获。

    3.1 多任务融合

    当前大多数业务场景需要优化多个任务,算法模型也已经实现了多任务学习,比如MMOE和PLE等。那模型输出的多个任务分数怎么融合呢?我们可以在精排阶段融合,也可以在重排阶段融合。由于重排模型相对精排要轻量级一些,容易实现在线学习,所以有不少场景放在重排阶段进行多任务融合。

    目前多任务融合主要有以下几种方式:

    1. 人工调权:通过专家先验知识,设置多任务融合的超参数。这种方式比较简单,业务发展初期通常采用。缺点也比较明显:
      1. 超参组合的选择依赖专家经验,准确率有限,有一定的效率浪费。
      2. 固定的超参不能快速自动适应业务和模型迭代,对整体链路算法效率有比较大的影响,甚至负向。
    2. Grid search:将各参数可能的取值进行排列组合,穷举搜索所有的可能,再逐步输入系统中进行评估,选择效果最好的参数组合。相比人工调权,grid search显然更有可能找到最优的参数组合。但它缺点同样明显:
      1. 超参排列组合多,搜索空间大,十分耗时。超过4个超参后,计算量就要爆炸了。
      2. 难以进行在线AB,不能准确拿到用户反馈。这也是超参搜索空间大导致的。
      3. 同样不能自动适应业务和模型迭代,会成为整个链路的优化瓶颈
    3. 模型法:将精排各任务的打分结果,采用线性模型或者比较轻量级的深度模型,构建监督学习。一般也可以将其他比较重要的特征,比如商品价格、销量、近期CTR、近期CVR,一起融合在重排模型中。由于精排的打分结果已经相当置信了,重排模型可以尽量轻量级一些,所以比较容易实现在线学习,实时更新特征和模型,提高重排模型的实时能力。模型法优点很多,在目前各业务场景中广泛使用。其缺点主要有:
      1. 仍然是基于point-wise的,没有上下文感知能力
      2. 业务场景最终指标必须单一。重排模型做多任务融合,其监督目标必须是一个单一的任务,否则谁来融合重排呢?比如电商场景下订单量指标,一般会在精排构建CTR(曝光到点击)和CVR(点击到转化)两个任务,重排则统一成CTCVR(曝光到转化)即可。但如果还想把用户互动指标(比如收藏、分享、评论)也加入进来,则较难建模了
    4. 强化学习:根据用户在不同状态下的行为,利用强化学习建模状态转移过程,从而提升业务核心目标。state为用户特征,比如用户静态特征、统计特征等。Action为当前各任务的融合参数。reward可以根据业务场景定义,比如内容推荐场景中,一般为用户打开APP到退出的总时长。可以采用DQN、DDPG、A3C等方法。后面开专题讲解,这儿先不赘述了。

    3.2 上下文感知

    由于精排模型一般比较复杂,基于系统时延考虑,一般采用point-wise方式,并行对每个item进行打分。这就使得打分时缺少了上下文感知能力。用户最终是否会点击购买一个商品,除了和它自身有关外,和它周围其他的item也息息相关。重排一般比较轻量,可以加入上下文感知能力,提升推荐整体算法效率。

    context-wise建模的方法主要有:pairwise和listwise两大类。

    3.2.1 Pairwise

    通过对比两个商品之间相对关系来构建,有一定的上下文感知能力,但仍然忽略了全局信息,而且造成了极大的计算和性能开销。这种方法有RankSVM 、GBRank 、RankNet、LambdaRank等经典的pairwise LTR方法。

    3.2.2 Listwise

    建模item序列整体信息,通过listwise损失函数来对比商品之间序列关系。可以通过DNN、RNN、self-attention等多种方式建模和提取item序列信息,再通过beam-search等贪婪搜索方法得到最终的序列。主要有五种建模方法:

    1. 树模型:LambdaMart等
    2. RNN:DLCM、seq2slate等,分别利用RNN+attention,和pointer-network来构建seq2seq模型
    3. 两段式:PRS等,构建PMatch和PRank两个链路,通过两段式结构得到最终输出
    4. self-attention:PRM、SetRank等,和RNN模型比较像,将RNN替换成了self-attention,客服长程建模梯度弥散问题,以及串行计算耗时过大等。
    5. 强化学习:京东LIRD、阿里GRN等。

    这儿简单介绍下阿里PRM,它构建了input layer、encoding layer、output layer三层,通过self-attention使得序列内item充分交互,提取序列信息,通过贪婪搜索得到最终序列:

    1. input layer输入层:得到排序阶段输出的有序序列,输入包括三部分:
      1. 每个item对应一个特征向量E
      2. user和item之间计算一个个性化向量PV,通过预训练模型得到
      3. item的位置编码PE
    2. encoding layer编码层:通过self-attention建模,每个位置输出一个编码后的向量
    3. output layer输出层:编码层输出的每个位置的向量,通过一层线性层和softmax后,得到每个item的概率。通过beam-search等贪婪搜索方法,得到最终的序列。

    整个过程和机器翻译等NLP场景任务很像,同样可以结合pointer-network来优化。paper地址 Personalized Re-ranking for Recommendationhttps://arxiv.org/pdf/1904.06813.pdf

    3.3 实时性提升

    推荐系统的实时性也是一个比较大的话题。实时性对于提升用户体验,优化算法效率,都十分重要。实时性主要包括3方面:

    1. 系统响应实时性:考虑到推荐系统QPS压力,用户一次请求会下发多个item,浏览完后重新请求才会触发系统新的响应。系统响应实时性,对于用户实时行为捕捉十分关键。基于端上重排的系统,可以实现响应的实时性。
    2. 特征实时性:用户行为特征实时性、item统计特征实时性等。相对来说特征实时性是最容易做到的,也是对推荐效果影响最大的。特征实时性要考虑系统链路数据回收延迟,和用户本身行为延迟反馈问题。
    3. 模型实时性:在线学习,实时更新模型等。重排模型比较轻量,容易做到实时更新。精排相对来说困难一些,但也有一些团队实现了精排的在线深度学习ODL。

    重排阶段提升实时性主要方法有,在线学习ODL和端上重排,下面详细讲解。

    3.3.1 在线学习ODL

    深度模型由于需要的训练数据和时间都比较大,资源消耗也比较多,故一般以离线训练为主。小时级或者天级更新。对于用户的实时行为pattern,或者冷启item都不是特别友好。特别在大促期间和秒杀场景,用户兴趣和需求转瞬即逝,商品也随时可能会被售空。我们这儿就不谈数据链路和推荐工程方面的工作了,算法方面主要的问题有

    1. 延迟反馈:用户点击完商品后,可能大数据系统中需要几分钟甚至数小时后才收集到他的购买行为。延迟反馈显然对于label置信度是个很大的挑战。主要原因有数据链路延迟和用户行为延迟。flink收集数据有一定的链路delay,用户也可能犹豫几小时后才真正购买。延迟反馈需要平衡样本置信度模型新鲜度。优化方法有:
      1. 负例校正法:先标记为负样本,等真正转化后再重新插入正样本。这种方法可以保证模型新鲜度,但假负例会对模型有一定的副作用。Addressing Delayed Feedback for Continuous Training with Neural Networks in CTR predictionhttps://dl.acm.org/doi/abs/10.1145/3298689.3347002
      2. 等待法:一定时间内等待真实的成交转化,如果没等到,不管后续有没有,都不校正了。这种方法label置信度有一定提升,但模型新鲜度会有折损。A Feedback Shift Correction in Predicting Conversion Rates under Delayed Feedbackhttps://arxiv.org/pdf/2002.02068.pdf
      3. 纠偏法,例如阿里的ES-DFM,对观测转化分布和真实转化分布之间的关系建模,降低假负例的权重和增加真正例的权重,来纠正样本不置信问题。Capturing Delayed Feedback in Conversion Rate Prediction via Elapsed-Time Samplinghttps://arxiv.org/pdf/2012.03245.pdf
    2. 数据稳定性:数据随时间波动大,比如电商CVR。很多用户习惯白天浏览点击,晚上真正下单。所以CVR在晚上明显比白天高。这时候需要做一定的修正。也可以在线学习和离线增量学习相结合。每天固定一个时间点,对模型做一次天级离线增量更新。从而修正在线学习中积累的误差。

    3.3.2 边缘计算与端上重排

    边缘计算和端上重排这两年一直都很火,它可以有效降低云端负载,保证数据安全隐私性。同时也可以提升算法效率,算法侧的优点主要有:

    1. 推荐响应实时性:不用请求下一页,实现即时更新
    2. 行为特征实时性:端上即时计算,不用回传云端
    3. 行为特征丰富度:负反馈、滚动速度、曝光时长等多种用户行为都可以在模型中使用,基于云端的方式受限于数据传输和存储,一般只会选择点击等关键的用户行为。

    端上重排需要将一个轻量级的模型,部署在端侧,实现端上推理。目前比较知名的端上推理引擎有TF-lite、阿里MNN、腾讯TNN等。这个偏向工程侧,就不展开了。

    端上重排经典的实现方式是基于双塔内积模型,流程主要为:

    1. 服务端一次下发几十个item,包括item的embedding
    2. 端上基于本地存储的user静态特征、统计特征,和实时行为特征,实时计算user embedding
    3. user和item embedding进行内积计算,对list中未展现的剩余item做重排
    4. 下次请求时,将更新后的user特征回传云端,方便云端模型实时更新。

    目前端上重排也越来越复杂,充分挖掘端上潜力。除了云端训练 + 端上推理外,目前也出现了端上训练 + 端上推理,实现真正意义的千人千模。参考阿里的DCCL,KDD2021, Device-Cloud Collaborative Learning for Recommendationhttps://arxiv.org/abs/2104.06624

    4 流量调控

    流量调控在推荐系统中也十分重要,重排在最后一环,责无旁贷。流量调控要兼顾实时性准确性,二者之间需要达到平衡。流量调控的作用和方式主要有:

    1. 保量类:通过流量扶持,刺激生态建设。比如对冷启item,新热item,大V的新发布item,均可以给予一定的保量流量,让他们能够顺利透出和正循环。保量的实时性也十分重要,作者能第一时间看到自己item得到的点赞、评论等,有利于刺激他们持续创作。保量常见的方法有
      1. 规则引擎:制订一定的策略规则,实现保量。这种方法简单易行,item也肯定能获得一定流量。但准确度较低,也较难实现个性化。流量容易不够或者超发。
      2. 探索和利用:通过e-greedy、Thompson sampling、UCB等EE类的方法,可以有效探索冷启item,同时利用已有item,保障效率折损最低。
    2. 调权类:一般是业务运营需求,需要快速实时干预。比如三八妇女节需要临时对美妆类item做加权,增加其流量。过了这一天可能效果就会大打折扣了。常见方法有
      1. 规则引擎:直接在重排结果上,对于命中属性规则的item,加入一定的分数,使得最后可以透出,增加其流量。这种方法简单易行,实时性好。但调权准确率低,也较难个性化,可能造成较大的流量浪费和效率折损。适合某些时效要求高的场景。比如大促期间加权等。
      2. 样本加权:对于命中调权规则的样本,增加其在loss中的权重,迫使模型偏向于对它们精准预估。这种方法可以实现个性化,对效率折损较低。但由于需要训练模型并重新上线,故实时性不高。适合某些长期性的调权场景。比如对大店、大V的加权等。

    系列文章,请多关注

    推荐算法架构1:召回

    推荐算法架构2:粗排

    推荐算法架构3:精排

    推荐算法架构4:重排

    更多相关内容
  • 【题目】495数学黑洞:任何一个数字不全相同的三位数,经过有限次“重排求差”操作,总会得495。“重排求差”操作:是将一个数的各位数字重排得到最大数减去最小数。请编程进行验证。 如:数107,“重排求差”操作...
  • 重排

    2021-02-11 06:40:04
    排程器通过graphql查找未完成的计划时间,如果有新的约会可用,则尝试重新计划。 也使用twilio发送警报消息。建立.env 将credentails填写到starting.env文件中,然后另存为新文件: .env无服务器在其应用程序上创建...
  • 这是通过MATLAB平台的重排时频分析实现
  • 不同搜索算法解决九宫重排问题,JAVA语言实现广度优先,全局择优算法解九宫重排问题,输出路径。。。。。。
  • 火车车厢重排问题

    2018-08-02 18:38:53
    运货的各节车厢在入轨上时是随机的顺序,火车头在出轨处,现在要将各节车厢按编号从大到小挂到车头上,其中在入轨与出轨之间有k条缓冲铁轨,将通过缓冲铁轨完成本次的火车车厢的重排。 功能要求:能够应用面向对象...
  • 实验要求设计一个队列结果来解决车厢重排问题。车厢重排问题为:一列货车共有n节车厢,每个车厢都有自己的编号,编号范围从1~n。给定任意次序的车厢,通过转轨站将车厢编号按顺序重新排成1~n。转轨站共有k个缓冲轨,...
  • 主要原因是这些效果通常会产生一系列的浏览器重绘和重排,需要付出高昂的性能代价。那么,什么是浏览器的重绘和重排呢?二者何时发生以及如何权衡?如何在具体的开发过程中将重绘和重排引发的性能问题考虑进去?本文...
  • 报道不同路易斯酸性催化剂作用下二苯甲酮肟的Beckmann重排反应的结果,即分别以PCl5、H2SO4、HCl-Ac2O、H2SO4-Ac2O、H3PO4-Ac2O、PPA、HCl-Ac2O-AcOH为催化剂进行比较实验。发现H3PO4-Ac2O是二苯甲酮肟进行Beckmann...
  • 九宫重排九宫排序

    2018-01-05 12:59:00
    重排九宫问题进行求解,演示了“广度优先搜索”、“深度优先搜索”、“有界深度优先搜索”、 “最好优先搜索”和“局部择优搜索”五种基本的图图搜索策略。 整个程序使用了动画技术,界面设计美观友好,使用方便。 ...
  • 1、暗黑模式2、AppleID登录应用3、AVFoundation相关3.1、AVFoundation ...重排优化启动速度6.8、iOS APM应用性能监控管理(doing)6.9、ipa瘦身之扫描无用资源7、iOS Crash防护8、WKWebView相关8.1、WKWebView的使用8.2...
  • 重排九宫的广度优先算法 有代价函数实现局部优先 用哈希表来看是否已经在open表中
  • 有经验的大佬对这个概念一定不会陌生,“浏览器输入URL发生了什么”。...切回正题,我们继续探讨何为重排。浏览器下载完页面所有的资源后,就要开始构建DOM树,于此同时还会构建渲染树(Render Tree)。
  • 易语言access数据库删除记录ID自动重排源码
  • 重排方法通过将代表信号局部能量分布的几何中心重排到其质量中心,从而提高时频表示的聚集性和可读性,但是并没有完全消除交叉项。在此,将经验模式分解算法引入重排方法中,用于抑制重排方法在分析多分量信号时出现的...
  • 阐述了时频分析技术中重排算法的基本思想,给出了部分重排算法的局部能量重心表达式;设计了两个数值实验,利用几种重排算法对单道地震信号进行了计算和分析比较。结果表明:重排算法不仅能有效抑制交叉项,同时也能提高...
  • 为了揭示激光喷丸(LP)强化IN718合金疲劳寿命增益的机制,研究了合金喷丸前后晶粒重排与疲劳特性的关系。结果表明,LP后试样表层的塑性形变深度最大可达33.7 μm,合金的最大疲劳寿命增益可达188%;激光冲击波诱导产生...
  •  2、防止指令重排  此外需注意volatile并不保证操作的原子性。  (一)内存可见性  1 概念  JVM内存模型:主内存和线程独立的工作内存  Java内存模型规定,对于多个线程共享的变量,存储在主内存当中,...
  • css重绘与重排的方法

    2020-09-27 21:20:59
    主要介绍了css重绘与重排的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 了解重排与重绘

    2020-10-16 22:04:17
    重绘和重排操作都是代价昂贵的操作,它们会导致web应用程序的UI反应迟钝,所以应该尽可能减少这类过程的发生。下面我们来简单了解一下
  • 对己内酰胺生产中环己酮肟重排工艺进行了动态模拟,建立了重排反应器和中和反应器的数学模型?通过对反应装置物料流动方式的分析,结合反应动力学?物料衡算和能量衡算,建立了重排反应器和中和反应器的全混流动态数学...
  • 通过对环己酮肟贝克曼重排反应机理的分析和简化,提出了一个反应动力学模型同时考虑了SO3和H+在反应过程中的作用。根据文献数据对模型进行了参数估计,计算结果不仅与高SO3浓度下的文献数据吻合良好,也能较好地解释...
  • 在浅水混响限条件下,为提高水下小尺度目标检测性能,结合宽带线性调频(LFM)信号回波目标信息量大、混响背景相关性弱的特点,提出对目标宽带回波进行时频谱重排压制混响,再进行匹配检测的方法。通过比较目标回波的短时...
  • 时频重排同步压缩matlab,好用
  • 序号重排.txt

    2019-06-29 08:43:30
    表格行数动态添加,及删除一行序号重排,点击添加行数,可在table表下动态添加行数;删除行,行中单元格name属性序号重排
  • 主要介绍了JavaScript对数组进行随机重排的方法,实例分析了javascript实现数组随机重新排序的两种实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 本文采mabinitio RHF 4-31 G和ST0-3G基组对由亚胺硅到次甲硅氮的重排反应进行了从头计算研究,用能量梯度法优化出两种分子及其重排反应过渡态的几何结构.用数值方法对过渡态做了正则振动分析,得到其力常数矩阵.求得...
  • 资源介绍:。易语言access数据库删除记录ID自动重排源码。资源作者:。@易语言自学网。资源界面:。资源下载:。
  • ios-拖拽重排.zip

    2019-07-11 19:00:53
    拖拽排序: 今日头条,网易新闻,订阅频道的拖拽排序功能简单实现。 支持标签长度不同。 [gitHub源码地址] (https://github.com/HelloYeah/DraggingSort)
  • 克莱森重排是[3,3]-σ重排,这是有机合成中新的CC键形成的重要方法。 该反应是典型的热反应,需要高温和较长的反应时间。 本文报道了烯丙氧基芳烃衍生物在克莱森重排反应过程中氯化铁(III)催化剂和微波辐射的加速...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,820
精华内容 32,328
关键字:

重排