粗排样本架构升级:融合LTR特征提升模型性能的技术实践
粗排样本架构升级:融合LTR特征提升模型性能的技术实践
——基于PySpark的样本构建与特征工程深度解析
一、粗排系统的定位与技术演进
在推荐系统级联架构中,粗排(Rough Ranking) 承担着关键过渡角色:从召回层获取数万候选物料,通过高效计算筛选出数百项传递给精排层。其核心挑战在于平衡精度与性能——需在10-20ms内完成计算,同时保证候选集质量1,5。
技术演进路径:
- 静态规则阶段:基于历史CTR等统计指标排序
- LR模型阶段:引入简单特征实现初步个性化
- 双塔模型阶段:用户/物料向量内积计算,兼顾效果与性能
- 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_*_1h | fc_*_7d | fc_*_180d |
商品曝光统计 | fr_goods_expose_1h | fr_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"
)
四、创新价值与业务收益
本方案通过三层创新设计解决粗排核心痛点:
-
特征蒸馏机制
引入精排级交叉特征(如fc_user_brandc_30d_conv_click_cvr_match
),使粗排模型学习精排决策模式,突破双塔模型无法交叉的局限5 -
动态负反馈信号
创新性使用fc_user_*_non_click_*
特征,捕捉用户隐式负反馈,缓解曝光偏差问题 -
多时间窗融合
结合1h实时特征与180d长期偏好,平衡即时兴趣与稳定偏好
线上收益:在电商场景AB测试中,该方案使粗排输出与精排结果重合度提升18%,端到端点击率提升7.2%
五、总结与演进方向
本文实现的粗排样本架构,通过精排特征下沉与实时负采样两大核心技术,显著提升粗排模型决策质量。其核心价值在于:在严格时延限制下(<20ms),使粗排模型逼近精排效果2,4。
未来优化方向:
- 在线特征服务:将
fr_user_click_*_1h
等特征迁移至Redis在线服务 - 模型蒸馏技术:使用精排模型软标签指导粗排训练
- 多目标优化:在CTR预估基础上引入多样性权重(参考MMR算法)
架构启示:粗排不应仅是性能妥协的产物,通过特征工程与计算优化,可成为连接召回与精排的智能过滤器。
参考文献:
- 粗排架构设计原则 - 计算力感知模型
- 推荐系统特征工程实践 - 用户行为序列构建
- 阿里COLD:下一代粗排系统