RecSys:粗排模型和精排特征体系

粗排

在推荐系统链路中,排序阶段至关重要,通常分为召回、粗排和精排三个环节。粗排作为精排前的预处理阶段,需要在效果和性能之间取得平衡。
在这里插入图片描述

双塔模型
  • 后期融合:把用户、物品特征分别输入不同的神经网络,不对用户、物品特征做融合
  • 线上计算量小:
    • 用户塔只需要做一次线上推理,计算用户表征a
    • 物品表征b事先储存在向量数据库中,物品塔在线上不做推理。
  • 预估准确性不如精排模型。

在这里插入图片描述

三塔模型

阿里巴巴2020年论文《COLD: Towards the Next Generation of Pre-Ranking System》(Zhe Wang et al., DIP.KDD 2020)的核心思想

在这里插入图片描述

  • 用户塔(很大)

    • 用户特征和场景特征
    • 每次只有一个用户,用户塔只作一次推理,即使用户塔很大,总计算量也不大
  • 物品塔(较大)

    • 物品特征(静态)
    • 有n个物品,理论上物品塔需要做n次推理,PS缓存物品塔的输出向量,避免绝大部分推理,
    • 由于用到缓存,物品塔只需要在遇到新物品的时候才需要计算,粗排给几千个物品打分,粗排只需要给几十个进行推理,物品塔规模可以比较大
  • 交叉塔(较小)

    • 统计特征,交叉特征(用户特征与物品特征做交叉)
    • 统计特征动态变化,比如用户的点击率,物品的被点击量,缓存不可行。
    • 有n个物品,交叉塔必须做n次推理,线上推理避免不掉,所以交叉塔必须足够小,计算够快,通常只有几层,宽度也比较小。,

在这里插入图片描述

  • 粗排上层介绍
  • 有n个物品,模型上层需要做n次推理。
  • 粗排推理的大部分计算都在模型上层

在这里插入图片描述

三塔模型的推理
  • 从多个数据源提取特征:
    • 1个用户的画像、统计特征
    • n个物品的画像、统计特征
  • 用户塔:只做1次推理
  • 物品塔:实现缓存,未命中时需要做推理。实际上缓存命中率非常高
  • 交叉塔:必须做n次推理(统计特征都是动态特征)
  • 上层网络必须做n次推理,给n个物品打分。

精排模型的特征体系

用户画像
  • 用户ID:
  • 人口统计属性:年龄、性别等基本信息
  • 用户账号信息:新老、活跃度等等(模型需要对新用户、低活用户做优化
  • 感兴趣的类目、关键词、品牌(可以用是用户填写,也可以是算法自动提取,用户兴趣的信息对于排序是非常有帮助的)
物品画像

现在业界的推荐系统都会使用用户画像和物品画像

  • 物品ID(在召回、排序做Embedding)
  • 发布时间(或年龄),发布时间越久,价值越低
  • GeoHash(经纬编码)、所在城市
  • 标题、类目、关键词、品牌,通常做法是做Embedding
  • 字数、图片数、视频清晰度、标签数
  • 内容信息量、图片美学(算法打分),事先使用人工标注的数据集训练cv和nlp模型,利用这些模型把内容信息量、图片美学这些分数写入物品画像中
用户统计特征
  • 用户30天(7天、1天、1小时)的曝光数、点击数、点赞数、收藏数等,各种时间粒度反应用户的兴趣,长期、中长期和短期。
  • 按照笔记图文/视频分桶(比如最近7天,该用户对图片的点击率、对视频笔记的点击率)
  • 按照笔记类目分桶。(比如30天。用户对美妆笔记的点击率、对美食笔记的点击率、对数码科技笔记的点击率)。可以反应用户对哪些类目更感兴趣如果一个用户对美食笔记的点击量和点击率等指标都偏高。说明这个用户对美食类目感兴趣
笔记统计特征
  • 笔记 30天(7天、1天、1小时)的曝光数、点赞数、收藏数等指标,反应笔记的受欢迎程度,使用不同的粒度也是有道理的,某些笔记30天的点击率都很高,但是最近一天指标变得很差,说明这些笔记已经过时了,不应该给过多流量
  • 按用户性别分桶、按照用户年龄、地域分桶
  • 作者的统计特征
    • 发布的笔记数量
    • 粉丝数
    • 消费指标(曝光数、点击数、点赞数、收藏数)(反应作者受欢迎程度和平均笔记质量
场景特征
  • 用户定位GeoHash(经纬度编码)、城市(对召回和排序都有用,用户可能对自己周围发生的事情比较感兴趣)
  • 当前时刻(分段做Embedding),一个人在一天不同时刻的兴趣可能有所区别,在上班路上和晚上睡觉
  • 是否周某,是否节假日
  • 设备信息:手机品牌、手机型号、操作系统
特征处理
  • 离散特征做Embedding

    • 用户ID、笔记ID、作者ID。(几千万、几亿级别)

    • 类目、关键词、城市、手机品牌 (笔记的类目也就几百个,关键词就几百万个,给他们做embedding比较容易,消耗内存也不多)

  • 连续特征:分桶变成离散特征

    • 年龄(10个年龄段、one-hot)或者Embedding,笔记长度、视频长度
  • 连续特征:其他变换

    • 曝光数、点击数、点赞数等数值做 log⁡(1+x)\log (1+x)log(1+x)
    • 转化为点击率、点赞率等指标,并做平滑处理
特征覆盖率
  • 很多特征无法覆盖100%样本,存在缺失
    • 很多用户注册的时候不填写年龄,因此用户年龄特征的覆盖率远小于100%
    • 例:很多用户设置隐私权限,APP 不能获得用户地理定位,因此场景特征有缺失。
    • 做特征工程需要提高特征覆盖率,让排序模型更准,需要考虑当特征缺失的时候要用什么作为默认值
数据服务

排序服务器会从是三个数据源取回所需要的数据

  1. 用户画像(User Profile)
  2. 物品画像(Item profile)
  3. 统计数据

用户发送请求给主服务器,主服务器发生召回请求给召回服务器,召回服务器把几千个召回结果发回主服务器,主服务器把物品ID、用户ID、场景特征(用户地点、当前时刻、是否节假日、手机型号,操作系统)发往排序服务器。排序服务器从三个源中获取 用户画像、物品画像、统计数据。排序服务器把特征打包传递给TF serving tensorflow会给笔记打分,把分数返回给排序服务器,排序服务会用排序融合分数,业务规则给笔记做排序。把排名最高的几十篇笔记返回给主服务器

  • 用户画像压力比较小,每次只提取一个用户
  • 物品画像压力比较大,粗排要给几千笔记做排序,读取几千笔记的特征
  • 存用户统计的压力小,存物品统计的压力很大
  • 在工程实现里,用户画像可以存的很长很大,但是尽量不要在物品画像存很大向量,否则物品画像会承受很大的压力
  • 用户画像较为静态,只需要天刷新就好,物品画像则是静态,算法给物品内容打分基本不变,这两类读取需要快,有时候可以把物品画像和用户画像缓存在排序服务器本地
  • 但是不能把统计数据缓存,统计数据是动态变化的,实效性很强 ,用户刷了5篇笔记,用户点击,点赞等统计量都发生了变化,要尽快刷新数据库
    在这里插入图片描述

Reference

王树森 推荐系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93679.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring声明式事务,finally 中return对事务回滚的影响

finally 块中使用 return 是一个常见的编程错误,它会: 跳过正常的事务提交流程。吞掉异常,使错误处理失效 导致不可预测的事务行为Java 中 finally 和 return 的执行机制:1. finally 块的基本特性 在 Java 中,finally …

WPF 打印报告图片大小的自适应(含完整示例与详解)

目标:在 FlowDocument 报告里,根据 1~6 张图片的数量, 自动选择 2 行 3 列 的最佳布局;在只有 1、2、4 张时保持“占满感”,打印清晰且不变形。规则一览:1 张 → 占满 23(大图居中)…

【AI大模型前沿】百度飞桨PaddleOCR 3.0开源发布,支持多语言、手写体识别,赋能智能文档处理

系列篇章💥 No.文章1【AI大模型前沿】深度剖析瑞智病理大模型 RuiPath:如何革新癌症病理诊断技术2【AI大模型前沿】清华大学 CLAMP-3:多模态技术引领音乐检索新潮流3【AI大模型前沿】浙大携手阿里推出HealthGPT:医学视觉语言大模…

迅为RK3588开发板Android12 制作使用系统签名

在 Android 源码 build/make/target/product/security/下存放着签名文件,如下所示:将北京迅为提供的 keytool 工具拷贝到 ubuntu 中,然后将 Android11 或 Android12 源码build/make/target/product/security/下的 platform.pk8 platform.x509…

Day08 Go语言学习

1.安装Go和Goland 2.新建demo项目实践语法并使用git实践版本控制操作 2.1 Goland配置 路径**:** GOPATH workspace GOROOT golang 文件夹: bin 编译后的可执行文件 pkg 编译后的包文件 src 源文件 遇到问题1:运行 ‘go build awesomeProject…

Linux-文件创建拷贝删除剪切

文章目录Linux文件相关命令ls通配符含义touch 创建文件命令示例cp 拷贝文件rm 删除文件mv剪切文件Linux文件相关命令 ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令。 Linux文件或者目…

RabbitMQ:交换机(Exchange)

目录一、概述二、Direct Exchange (直连型交换机)三、Fanout Exchange(扇型交换机)四、Topic Exchange(主题交换机)五、Header Exchange(头交换机)六、Default Exchange(…

【实时Linux实战系列】基于实时Linux的物联网系统设计

随着物联网(IoT)技术的飞速发展,越来越多的设备被连接到互联网,形成了一个庞大而复杂的网络。这些设备从简单的传感器到复杂的工业控制系统,都在实时地产生和交换数据。实时Linux作为一种强大的操作系统,为…

第五天~提取Arxml中描述信息New_CanCluster--Expert

🔍 ARXML描述信息提取:挖掘汽车电子设计的"知识宝藏" 在AUTOSAR工程中,描述信息如同埋藏在ARXML文件中的金矿,而New_CanCluster--Expert正是打开这座宝藏的密钥。本文将带您深度探索ARXML描述信息的提取艺术,解锁汽车电子设计的核心知识资产! 💎 为什么描述…

开源 C++ QT Widget 开发(一)工程文件结构

文章的目的为了记录使用C 进行QT Widget 开发学习的经历。临时学习,完成app的开发。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。 相关链接: 开源 C QT Widget 开发(一)工程文件结构-CSDN博客 开源 C…

手写C++ string类实现详解

类定义cppnamespace ym {class string {private:char* _str; // 字符串数据size_t _size; // 当前字符串长度size_t _capacity; // 当前分配的内存容量static const size_t npos -1; // 特殊值,表示最大可能位置public:// 构造函数和析构函数string(…

C++信息学奥赛一本通-第一部分-基础一-第3章-第2节

C信息学奥赛一本通-第一部分-基础一-第3章-第2节 2057 星期几 #include <iostream>using namespace std;int main() {int day; cin >> day;switch (day) {case 1:cout << "Monday";break;case 2:cout << "Tuesday";break;case 3:c…

【leetcode 3】最长连续序列 (Longest Consecutive Sequence) - 解题思路 + Golang实现

最长连续序列 (Longest Consecutive Sequence) - LeetCode 题解 题目描述 给定一个未排序的整数数组 nums&#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。要求设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#x…

矿物分类系统开发笔记(一):数据预处理

目录 一、数据基础与预处理目标 二、具体预处理步骤及代码解析 2.1 数据加载与初步清洗 2.2 标签编码 2.3 缺失值处理 &#xff08;1&#xff09;删除含缺失值的样本 &#xff08;2&#xff09;按类别均值填充 &#xff08;3&#xff09;按类别中位数填充 &#xff08;…

《UE5_C++多人TPS完整教程》学习笔记43 ——《P44 奔跑混合空间(Running Blending Space)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P44 奔跑混合空间&#xff08;Running Blending Space&#xff09;》 的学习笔记&#xff0c;该系列教学视频为计算机工程师、程序员、游戏开发者、作家&#xff08;Engineer, Programmer, Game Developer, Author&…

TensorRT-LLM.V1.1.0rc1:Dockerfile.multi文件解读

一、TensorRT-LLM有三种安装方式&#xff0c;从简单到难 1.NGC上的预构建发布容器进行部署,见《tensorrt-llm0.20.0离线部署DeepSeek-R1-Distill-Qwen-32B》。 2.通过pip进行部署。 3.从源头构建再部署&#xff0c;《TensorRT-LLM.V1.1.0rc0:在无 GitHub 访问权限的服务器上编…

UniApp 实现pdf上传和预览

一、上传1、html<template><button click"takeFile">pdf上传</button> </template>2、JStakeFile() {// #ifdef H5// H5端使用input方式选择文件const input document.createElement(input);input.type file;input.accept .pdf;input.onc…

《用Proxy解构前端壁垒:跨框架状态共享库的从零到优之路》

一个项目中同时出现React的函数式组件、Vue的模板语法、Angular的依赖注入时,数据在不同框架体系间的流转便成了开发者不得不面对的难题—状态管理,这个本就复杂的命题,在跨框架场景下更显棘手。而Proxy,作为JavaScript语言赋予开发者的“元编程利器”,正为打破这道壁垒提…

MOESI FSM的全路径测试用例

MOESI FSM的全路径测试用例摘要&#xff1a;本文首先提供一个UVM版本的测试序列&#xff08;基于SystemVerilog和UVM框架&#xff09;&#xff0c;设计为覆盖MOESI FSM的全路径&#xff1b;其次详细解释如何使用覆盖组&#xff08;covergroup&#xff09;来量化测试的覆盖率&am…

git仓库和分支的关系

1️⃣ 仓库分支&#xff08;Repository Branch&#xff09;每个 Git 仓库都有自己的分支结构。分支决定你当前仓库看到的代码版本。示例&#xff1a;仓库分支只是局部修改&#xff0c;项目分支才是全局管理所有仓库分支的概念。wifi_camera 仓库&#xff1a; - main - dev - fe…