图文并茂:推荐算法架构——粗排

2023-11-12

导语 | 粗排是介于召回和精排之间的一个模块,是典型的精度与性能之间trade-off的产物。理解粗排各技术细节,一定要时刻把精度和性能放在心中。

本篇将深入重排这个模块进行阐述。

一、总体架构

粗排是介于召回和精排之间的一个模块。它从召回获取上万的候选item,输出几百上千的item给精排,是典型的精度与性能之间trade-off的产物。对于推荐池不大的场景,粗排是非必选的。粗排整体架构如下:

在这里插入图片描述

二、粗排基本框架:样本、特征、模型

目前粗排一般模型化了,基本框架也是包括数据样本、特征工程、深度模型三部分。

(一)数据样本

目前粗排一般也都模型化了,其训练样本类似于精排,选取曝光点击为正样本,曝光未点击为负样本。但由于粗排一般面向上万的候选集,而精排只有几百上千,其解空间大很多。只使用曝光样本作为训练,但却要对曝光和非曝光同时预测,存在严重的样本选择偏差(SSB问题),导致训练与预测不一致。相比精排,显然粗排的SSB问题更严重。

(二)特征工程

粗排的特征也可以类似于精排,由于其计算延迟要求高,只有10ms~20ms,故一般可以粗分为两类:

普通特征:类似精排,user、context、item三部分。有哪些特征,以及特征如何处理,可以参看精排的特征工程部分。

交叉特征:user和item之间的交叉特征,对提升模型精度很有帮助。但由于交叉特征枚举过多,难以离线计算和存储。实时打分时又不像user特征只用计算一次,延迟较高。故对于交叉特征要谨慎使用。

(三)深度模型

粗排目前已经基本模型化,其发展历程主要分为四个阶段:

第一代:人工规则策略,可以基于后验统计,构建一个人工规则。比如融合item的历史CTR、CVR、类目价格档、销量等比较核心的因子。人工规则准确率低,也没有个性化,也不可能实时更新。

第二代:LR线性模型,有一定的个性化和实时性能力,但模型过于简单,表达能力偏弱。

第三代:DSSM双塔内积深度模型。它将user和item进行解耦合,分别通过两个Tower独立构建。从而可以实现item向量离线存储,降低线上predict延迟。主要有两种范式:

item和user均离线存储。这个方案只需要计算user和item的内积即可,计算延迟低。由于user是离线存储的,故可以使用复杂的模型,提升表达能力。但user侧的实时性较差,对于用户行为不能实时捕捉。

item离线,user实时。item相对user,实时性要求没那么高。由于一次打分是针对同一个用户的,故user侧只需要实时计算一次即可,速度也很快。目前这个方案使用较多。

第四代:item和user隔离,导致二者没有特征交叉能力,模型表达能力弱。故又提出了以COLD为代表的第四代模型,轻量级MLP粗排模型。它通过SE block实现特征裁剪,并配合网络剪枝和工程优化,可以实现精度和性能之间的trade-off。

在这里插入图片描述

三、粗排优化

粗排的几个主要问题:

精度和特征交叉问题:经典的DSSM模型优点很多,目前在粗排上广泛应用,其最核心的缺点就是缺乏特征交叉能力。正所谓成也萧何败萧何,正是由于user和item分离,使得DSSM性能很高。但反过来也是由于二者缺乏交叉,导致模型表达能力不足,精度下降。典型的精度和性能之间的trade-off。
低延迟要求:粗排延迟要求高,一般只有10ms~20ms,远低于精排的要求。
SSB问题:粗排解空间比精排大很多,和精排一样只使用曝光样本,导致严重的样本选择偏差问题。

(一)精度提升

精度提升的方案主要有精排蒸馏和特征交叉,主要还是要优化特征交叉问题。

  • 精排蒸馏

精排模型作为teacher,对粗排模型进行蒸馏学习,从而提升粗排效果,这已经成为了目前粗排训练基本范式

在这里插入图片描述

  • 特征交叉

特征交叉可以在特征层面,也可以在模型层面实现。特征层面就是手工构造交叉特征,作为模型底层输入,仍然可以在独立的Tower中。模型层面则使用FM或者MLP等实现自动交叉。主要方法有:

特征蒸馏:teacher和student使用相同的网络结构,teacher模型使用普通特征和交叉特征,student则只使用普通特征。student从teacher中可以学到交叉特征的高阶信息。

在这里插入图片描述

加入交叉特征:特征层面构建手工交叉特征,独立的Tower中使用。由于交叉特征难以离线存储,实时计算空间也很大,故这个独立的Tower不能过于复杂。那我们第一时间就想到了wide&deep模型。deep部分仍然使用DSSM双塔,wide部分则为交叉特征。

在这里插入图片描述

轻量级MLP:模型层面实现特征交叉,不进行独立分塔。比如COLD,通过特征裁剪、网络剪枝、工程优化等方式降低时延,而不是靠独立分塔。

在这里插入图片描述

(二)延迟降低
精度和性能一直以来都是一个trade-off,很多方案都是在二者之间寻找平衡。粗排的性能要求更高,其延迟必须控制在10ms~20ms以内。性能优化有很多常见方法。

主要有以下方法:

特征裁剪:如COLD,不重要的特征先滤掉,自然就降低了整体延迟。这一层可以做在模型内,从而可以个性化和实时更新。
量化和定点化:比如32bit降低为8bit,可以提升计算和存储性能。
网络剪枝:network pruning,包括突触剪枝、神经元剪枝、权重矩阵剪枝等方法,不展开了。
模型蒸馏:model distillation,上文已经提到了,不展开了。
网络结构搜索NAS:使用更轻量级,效果更好的模型。可以尝试网络结构搜索NAS。

(三)SSB问题
粗排解空间比精排大很多,和精排一样只使用曝光样本,导致严重的样本选择偏差问题。可以把未曝光样本的精排打分给利用起来,缓解SSB问题。

作者简介

谢杨易

腾讯应用算法研究员。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图文并茂:推荐算法架构——粗排 的相关文章

随机推荐

  • [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)

    最近在使用Python爬取网页内容时 总是遇到JS临时加载 动态获取网页信息的困难 例如爬取CSDN下载资源评论 搜狐图片中的 原图 等 此时尝试学习Phantomjs和CasperJS来解决这个问题 这第一篇文章当然就是安装过程及入门介绍
  • SQLite 的简单使用(以Navicat为例)

    一 简介 iOS中的数据存储方式 Plist NSArray NSDictionary Preference 偏好设置 NSUserDefaults NSCoding NSKeyedArchiver NSkeyedUnarchiver SQ
  • Java设计之道——通过UML理解23种设计模式

    文章目录 UML类图 泛化 generalize 与实现 realize 聚合 aggregation 与组合 composition 关联 association 与依赖 dependency 23种设计模式 创建型模式 结构型模式 行为
  • webpack使用CMD、AMD、CommonJS、ES6区别以及运用

    之前在网上浏览器的webpack模块化很乱 而且也没有把CMD模块化使用讲清楚的 终于忍不下去 将几种模块化以一种清晰的方式写出来 这也是我一直想做的事 下面就来讲讲CMD AMD commonJs es6模块化的运用 CMD CMD是se
  • 编译出现:failed to compile bitcode for ***: Debug: SDK path: /Applications/Xcode.app/Contents

    解决方法 MyProjectTarget gt Build Settings gt Enable Bitcode NO
  • Notepad++添加读取十六进制插件HexEditor

    下载地址 https github com chcg NPP HexEdit releases 安装方式 下载压缩包 例如 HexEditor 0 9 5 19 x64 zip 解压到本地目录 将文件夹更名为HexEditor 打开Note
  • Linux基础服务9——Tomcat

    文章目录 一 基本了解 二 安装tomcat 三 常用文件 3 1 bin目录文件 3 2 conf目录文件 3 2 1 server xml文件 3 2 2 tomcat users xml 文件 四 分离部署lamt架构 4 1 安装h
  • 螺旋矩阵的实现

    螺旋矩阵就是形如如下图的矩阵 看到矩阵知道它由四条边组成 这样的话就有这样的n 2个环 但是如果是奇数矩阵的话在最中间需要特殊处理一下 代码如下 include
  • 攻防世界之Web新手练习篇

    前言 天行健 君子以自强不息 地势坤 君子以厚德载物 周易 第一次接触CTF比较晚 学期已过近半 第一次做题就是在攻防世界 这里题目适合刚接触的萌新 写此篇博客 以为纪念 首页 目录 View source robots backup co
  • CentOS 初体验三: Yum 安装、卸载软件

    转载请标明出处 http blog csdn net zhaoyanjun6 article details 78894974 本文出自 赵彦军的博客 一 Yum 简介 Yum 全称为 Yellow dog Updater Modified
  • Unity3D服务器端使用PhysX计算物理

    本文的最终目的 当设计师在Unity3D中制作好游戏场景后 为Gameobject拖好Collider 通过我们写的工具导出这份场景的Collider配置 在服务器端能够生成一份一模一样的物理世界 从而由权威服务器去计算物理 诸如子弹有没有
  • FM/AM收音机原理

    收音机这东西很早就开始用了 但一直都没有了解过它的原理 听说是很简单 下面记录一些笔记 1 基本概念 收音机是一种小型的无线电接收机 主要用于接受无线电广播节目 收听无线电发射台 首先说一下收音机的种类 按解调方式和波长可以分为以下几类 调
  • VSCode加入Anaconda大家庭

    此文章首发于公众号Python for Finance 链接 https mp weixin qq com s rZsopAtS8UZ32aohWuhVBA 问题描述 我安装的是Anaconda 但最近发现VScode编辑ipynb非常好使
  • Ubuntu虚拟机找不到终端

    快捷键 Ctrl Alt T 即可打开终端窗口 或者按 Ctrl Alt F1 F6 均可进入终端 模拟终端 不显示桌面 想要右键打开终端 apt get install nautilus open terminal 注销系统重新登录 即可
  • 局域网场景下Android客户端实现同数据库连接通信

    实现 局域网场景下 Android客户端连接数据库 并可进行增删改查 直接连接 项目工程引入JDBC驱动 直接连接 JDBC是Java Data Base Connectivity的缩写 即 java数据库连接 一组Java语言编写的类和接
  • JXL(JExcelApi)相关资源

    1 主页 2 下载页面 Download JExcelApi 3 JXL API Online 4 全面挖掘Java Excel API 使用方法 1 5 全面挖掘Java Excel API 使用方法 2 6 使用JAVA透過JXL JE
  • 在虚拟机上安装macOS和Xcode

    最近要开发iOS软件 开发软件的操作系统需要是macOS 开发工具是Xcode 虽然实验室有苹果电脑 但是还是想在自己电脑上安装macOS虚拟机和Xcode软件 这样的话在宿舍或者在家都能开发 按照网上的教程成功安装了macOS和Xcode
  • git 提交分支报错(不能提交分支)

    git 提交新分支报错 报错信息如下 Compressing objects 100 100 100 done Writing objects 100 229 229 25 18 KiB 3 15 MiB s done Total 229
  • 淘宝x-sign算法demo示例

    用xposed hook这个方法就可以拿到对应的签名 需要可以留言 public String getMtopApiSign HashMap
  • 图文并茂:推荐算法架构——粗排

    导语 粗排是介于召回和精排之间的一个模块 是典型的精度与性能之间trade off的产物 理解粗排各技术细节 一定要时刻把精度和性能放在心中 本篇将深入重排这个模块进行阐述 一 总体架构 粗排是介于召回和精排之间的一个模块 它从召回获取上万