粗排樣本架構升級:融合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:下一代粗排系統