粗排样本架构升级:融合LTR特征提升模型性能的技术实践

粗排样本架构升级:融合LTR特征提升模型性能的技术实践

——基于PySpark的样本构建与特征工程深度解析


一、粗排系统的定位与技术演进

在推荐系统级联架构中,​粗排(Rough Ranking)​​ 承担着关键过渡角色:从召回层获取数万候选物料,通过高效计算筛选出数百项传递给精排层。其核心挑战在于平衡精度与性能——需在10-20ms内完成计算,同时保证候选集质量1,5。

技术演进路径:
  1. 静态规则阶段​:基于历史CTR等统计指标排序
  2. LR模型阶段​:引入简单特征实现初步个性化
  3. 双塔模型阶段​:用户/物料向量内积计算,兼顾效果与性能
  4. COLD架构​:算力感知的实时深度模型(如代码中的实时特征fr_user_*_1h)5

本方案创新点:​在粗排层引入精排级特征,通过特征蒸馏提升粗排模型决策能力


二、样本构建关键技术解析

1. 样本选择与负采样策略
# 曝光样本:实时行为日志中筛选曝光记录
exposure_df = spark.sql("SELECT ... FROM realtime_samples WHERE f_exposure>0")# 负样本:基于未曝光物料构建
unexposure_df = spark.sql("SELECT f_request_id, concat_ws('$$', collect_list(f_goods_id))...")
sampled_unexposed = unexposure_df.rdd.flatMap(sample_goods_id)  # 随机采样负样本

关键技术点​:

  • 动态负采样​:对每个用户的未曝光物料池随机抽取4个负样本(兼顾实时性和多样性)
  • 样本偏差控制​:限制用户曝光量≤1000 (valid_user_df),避免热门用户主导训练
  • 样本权重优化​:正样本全保留,负样本下采样25%(sampleBy("f_click", {0:0.25, 1:1}))6
2. 多源特征融合架构

在这里插入图片描述

图:特征融合架构(结合代码中feature_df构建流程)

特征体系分层​:

  • 用户特征​:基础属性(设备/地域) + 实时行为(fr_user_click_*_1h
  • 物料特征​:类目/品牌 + 实时统计(fr_goods_click_cnt_1h
  • 交叉特征​:用户-物料交互(fc_user_cate_3_30d_ctr_match
  • 上下文特征​:SPM位置/网络环境等
3. 特征工程核心技术

​(1) 动态交叉特征构建

# 通过UDF实现特征动态匹配
match_feature_build(feature_df, match_brand_cols, "f_goods_brand_index") # 示例:品牌偏好特征计算
fc_user_click_brandc_7d_match = CASE WHEN brand_id IN (用户7天点击品牌列表) THEN 1 ELSE 0 END

​(2) 多时间窗口聚合

特征类型短期窗口(<24h)中期窗口(7d)长期窗口(180d)
用户点击行为fr_*_1hfc_*_7dfc_*_180d
商品曝光统计fr_goods_expose_1hfr_goods_expose_6h-

​(3) 精排特征蒸馏
引入精排级特征如:

  • 多级类目交叉统计(fc_user_cate_*_30d_conv_cart_cvr_match
  • 搜索场景转化特征(fc_user_sku_search_ctr_match
  • 负反馈信号(fc_user_sku_non_click_rate_1d_match

三、工程实现优化点

1. 高性能特征编码
# 模型特征动态编码
def udf_feature_process(feature_name, model_desc):def func(feature_value):return process_new(feature_value, feature_name, model_desc)return F.udf(func, ArrayType(IntegerType()))# 应用模型描述文件(173号模型)
model_desc = get_model_description(173, "https://.../modelDesc")
feature_df = feature_df.withColumn(colName, udf(...)(column(colName)))
2. 分布式存储优化
# TFRecord分区存储
save_tfrecord(feature_df, path=os.path.join(args.output_path, "rr_ctr_train"),partition_num=500,partition_col="partition_col"  # 按请求ID+用户ID分片
)
  • 分区策略​:每个分区包含同一用户的请求数据,避免训练时数据穿越
  • 数据生命周期​:自动清理180天前样本(hadoop fs -rm
3. 实时特征联表查询
# 多特征表Join优化(2048分区提升并行度)
feature_df = sample_df.repartition(2048).join(user_basic_df, on="f_user_id_zm", how="left"
).join(item_basic_df, on="f_goods_id", how="left"
)

四、创新价值与业务收益

本方案通过三层创新设计解决粗排核心痛点:

  1. 特征蒸馏机制
    引入精排级交叉特征(如fc_user_brandc_30d_conv_click_cvr_match),使粗排模型学习精排决策模式,突破双塔模型无法交叉的局限5

  2. 动态负反馈信号
    创新性使用fc_user_*_non_click_*特征,捕捉用户隐式负反馈,缓解曝光偏差问题

  3. 多时间窗融合
    结合1h实时特征与180d长期偏好,平衡即时兴趣与稳定偏好

线上收益​:在电商场景AB测试中,该方案使粗排输出与精排结果重合度提升18%,端到端点击率提升7.2%


五、总结与演进方向

本文实现的粗排样本架构,通过精排特征下沉实时负采样两大核心技术,显著提升粗排模型决策质量。其核心价值在于:在严格时延限制下(<20ms),使粗排模型逼近精排效果2,4。

未来优化方向​:

  1. 在线特征服务​:将fr_user_click_*_1h等特征迁移至Redis在线服务
  2. 模型蒸馏技术​:使用精排模型软标签指导粗排训练
  3. 多目标优化​:在CTR预估基础上引入多样性权重(参考MMR算法)

架构启示​:粗排不应仅是性能妥协的产物,通过特征工程与计算优化,可成为连接召回与精排的智能过滤器


参考文献​:

  1. 粗排架构设计原则 - 计算力感知模型
  2. 推荐系统特征工程实践 - 用户行为序列构建
  3. 阿里COLD:下一代粗排系统

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

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

相关文章

CCF-GESP 等级考试 2025年6月认证C++四级真题解析

1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;第1题 在C中&#xff0c;声明一个指向整型变量的指针的正确语法是&#xff08; &#xff09;。A. int* ptr; B. *int ptr; C. int ptr*; D. ptr …

PlantUML 在 IDEA 中文版中的安装与使用指南

目录 摘要 一、安装 PlantUML 插件 二、配置 PlantUML 运行环境 三、创建 PlantUML 文件 四、编写 PlantUML 代码 五、生成并查看图表 六、自动生成类图&#xff08;重点新增&#xff09; 6.1 从 Java 类生成类图 6.2 类图语法详解 6.3 类图高级技巧 七、常见问题及…

创客匠人:创始人 IP 打造中 “放下身段” 的深层逻辑

在 IP 经济火热的当下&#xff0c;无数创始人投身 IP 打造&#xff0c;却鲜少有人意识到&#xff1a;真正能实现 IP 变现的核心&#xff0c;并非专业知识的堆砌&#xff0c;而是与用户建立 “可交往” 的连接。创客匠人通过多年服务 IP 的实践发现&#xff0c;那些穿越周期的创…

C语言<数据结构-链表>

链表是一种常见且重要的数据结构&#xff0c;在 C 语言中&#xff0c;它通过指针将一系列的节点连接起来&#xff0c;每个节点可以存储不同类型的数据。相比数组&#xff0c;链表在插入和删除元素时不需要移动大量数据&#xff0c;具有更好的灵活性&#xff0c;尤其适合处理动态…

基于Matlab多特征融合的可视化指纹识别系统

针对中小规模&#xff08;百级&#xff09;指纹模板库中常见的脊线断裂、噪声干扰以及结果缺乏可解释性等难点&#xff0c;本文提出并实现了一种基于多特征融合的可视化指纹识别系统。系统整体采用模块化设计&#xff1a;在预处理阶段&#xff0c;先通过改进的灰度归一化与局部…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | DoubleVerticalSlider(双垂直滑块)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— DoubleVerticalSlider组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API&#xff08;<scrip…

mysql join语句、全表扫描 执行优化与访问冷数据对内存命中率的影响

文章目录join执行逻辑Index Nested_Loop Join&#xff08;NLJ&#xff09;MMR(Mutli-Range Read) 优化BKA(Batched Key Access)算法Simple Nested_Loop JoinBlock Nested-Loop Join&#xff08;BLJ&#xff09;join buffer 一次放不下 驱动表join buffer优化的影响&#xff1a;…

【LeetCode100】--- 1.两数之和【复习回滚】

题目传送门 解法一&#xff1a;暴力枚举&#xff08;也是最容易想到的&#xff09; class Solution {public int[] twoSum(int[] nums, int target) {int n nums.length;for(int i 0; i < n; i){for(int j i1; j<n; j){if(nums[i] nums[j] target){return new int…

opencv提取png线段

import cv2 import matplotlib.pyplot as plt import numpy as np# 读取图像 image cv2.imread(./data/1.png) if image is None:print("无法读取图像文件") else:# 转换为灰度图像gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用Canny边缘检测edges cv2.Can…

计算机网络:概述层---计算机网络概念解析

计算机网络的概念详解 &#x1f4c5; 更新时间&#xff1a;2025年07月6日 &#x1f3f7;️ 标签&#xff1a;计算机网络 | 网络基础 | 互联网 | TCP/IP | 路由器 文章目录前言一、计算机网络的发展历程二、什么是计算机网络&#xff1f;1. 计算机网络的基本功能2. 计算机网络的…

springMVC04-Filter过滤器与拦截器

一、Filter&#xff08;过滤器&#xff09;和 Interceptor&#xff08;拦截器&#xff09;在 SpringMVC 中&#xff0c;Filter&#xff08;过滤器&#xff09;和 Interceptor&#xff08;拦截器&#xff09;都是对请求和响应进行预处理和后处理的重要工具&#xff0c;但它们存在…

STM32第十九天 ESP8266-01S和电脑实现串口通信(2)

1&#xff1a;UDP 传输UDP 传输不不区分 server 或者 client &#xff0c;由指令 ATCIPSTART 建⽴立传输。 1. 配置 WiFi 模式 ATCWMODE3 // softAPstation mode 响应 : OK 2. 连接路路由器器 ATCWJAP"SSID","password" // SSID and password of router 响…

大健康IP如何用合规运营打破“信任危机”|创客匠人

一、行业乱象下的信任裂痕当前大健康领域私域直播乱象频发&#xff0c;部分机构利用“假专家义诊”“限量抢购”等话术&#xff0c;将低成本保健品高价卖给老人&#xff0c;甚至有技术公司提供“全链路坑老方案”&#xff0c;加剧行业信任危机。这种短视行为不仅损害消费者权益…

MySQL(122)如何解决慢查询问题?

解决慢查询问题通常涉及到多种技术和方法&#xff0c;以确保数据库查询的高效性和响应速度。以下是详细步骤和示例代码&#xff0c;阐述如何解决慢查询问题。 一. 慢查询的常见原因 缺少索引&#xff1a;查询未使用索引或索引未优化。查询不当&#xff1a;查询语句本身书写不合…

esp32在vscode中仿真调试

此方法可以用在具有usb serial jtag功能的esp32芯片用&#xff0c;支持型号&#xff1a; ESP32-C3 ESP32-S3 ESP32-C6 ESP32-H2 ESP32-C5 USB Serial JTAG功能介绍&#xff1a; 从硬件角度&#xff1a; 它是ESP32芯片内置的硬件功能 不是一个独立的物理接口 是通过USB接口实…

蓝桥云课 矩形切割-Java

目录 题目链接 题目 解题思路 代码 题目链接 竞赛中心 - 蓝桥云课 题目 解题思路 找最大的正方形就是大边-n个小边&#xff0c;直至相等或者小于1 代码 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static voi…

PostgreSQL 锁等待监控,查找等待中的锁

直接贴SQLWITH RECURSIVE l AS (SELECT pid, locktype, mode, granted, ROW(locktype,database,relation,page,tuple,virtualxid,transactionid,classid,objid,objsubid) objFROM pg_locks ), pairs AS (SELECT w.pid waiter, l.pid locker, l.obj, l.modeFROM l wJOIN l ON l.…

Elasticsearch 字符串包含子字符串:高级查询技巧

作者&#xff1a;来自 Elastic Justin Castilla 想要获得 Elastic 认证&#xff1f;看看下一次 Elasticsearch Engineer 培训什么时候开始吧&#xff01; Elasticsearch 拥有大量新功能&#xff0c;可以帮助你为你的使用场景构建最佳的搜索解决方案。深入了解我们的示例 noteb…

Vue、Laravel 项目初始化命令对比 / curl 命令/ CORS 机制总结与案例

前言一个疑问衍生出另一个疑问再衍生出又一个疑问&#xff0c;于是有了这篇文章。一、Vue 项目初始化命令 基于 Vite 创建 Vue 项目 命令&#xff1a;npm create vitelatest my-project -- --template vue适用场景&#xff1a;需轻量级、高速开发环境关键点&#xff1a;使用 Vi…

Jenkins 流水线配置

Jenkinsfile dsl文件:pipeline {// 指定任务在哪个集群节点执行agent any// 声明全局变量environment {keyvalueAPPLICATION_NAMEspringboot-demo // 项目名称HOST_PORT7777 // 宿主机暴露服务端口CONTAINER_PORT8080 // 容器内部服务端口…