Bläddra i källkod

feat:复用V536实验,对4路目标召回来源命中的item提权

V536 当前线上无实验占用,改用 V536 承载召回提权改动以避免新建实验流程。
V536 原排序逻辑被覆盖为 V569 同款 + 提权:对命中以下 4 路召回来源的 item,
排序公式 final_score 乘以 mergeWeight[item_recall_weight] (默认 1.0):
  - recall_strategy_user_cate1
  - recall_strategy_user_cate2
  - return_1_cate2_ros
  - return_1_cate2_str

Apollo 配置 rank.score.merge.weightv536 中需新增 item_recall_weight: 1.1。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
yangxiaohui 2 dagar sedan
förälder
incheckning
f8054ca3b4

+ 30 - 28
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV536.java

@@ -24,6 +24,14 @@ import java.util.*;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
+/**
+ * V536 实验:基于 V569,对以下 4 路召回来源命中的 item 在排序公式上提权
+ *   - recall_strategy_user_cate1
+ *   - recall_strategy_user_cate2
+ *   - return_1_cate2_ros
+ *   - return_1_cate2_str
+ * 提权倍数读 mergeWeight[item_recall_weight],默认 1.0。
+ */
 @Service
 @Slf4j
 public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeModelBasic {
@@ -33,6 +41,13 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
     @Autowired
     private FeatureService featureService;
 
+    private static final Set<String> BOOST_PUSH_FORMS = new HashSet<>(Arrays.asList(
+            UserCate1RecallStrategy.PUSH_FORM,
+            UserCate2RecallStrategy.PUSH_FORM,
+            Return1Cate2RosRecallStrategy.PUSH_FORM,
+            Return1Cate2StrRecallStrategy.PUSH_FORM
+    ));
+
     @Override
     public List<Video> mergeAndRankRovRecall(RankParam param) {
         Map<String, Double> mergeWeight = this.mergeWeight != null ? this.mergeWeight : new HashMap<>(0);
@@ -78,6 +93,8 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
         RecallUtils.extractRecall(mergeWeight.getOrDefault("return1Cate2Ros", 5.0).intValue(), param, Return1Cate2RosRecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
         //-------------------return1 cate2 str------------------
         RecallUtils.extractRecall(mergeWeight.getOrDefault("return1Cate2Str", 5.0).intValue(), param, Return1Cate2StrRecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
+        //--------------deconstruction keywords ros-------------
+        RecallUtils.extractRecall(mergeWeight.getOrDefault("deconstructionKeywordsRos", 5.0).intValue(), param, UserDeconstructionKeywordsRecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
 
         // 记录召回源中的视频
         this.rankBeforePostProcessor(rovRecallRank);
@@ -114,7 +131,7 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
 
         // 4. 排序模型计算
         Map<String, Float> sceneFeatureMap = new HashMap<>(0);
-        List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20250729.conf").scoring(sceneFeatureMap, userFeatureMap, userFeatureMap, rankItems);
+        List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_str_and_ros_20260319.conf").scoring(sceneFeatureMap, userFeatureMap, userFeatureMap, rankItems);
 
         // 5. 排序公式特征
         double xgbRovNegRate = mergeWeight.getOrDefault("xgbRovNegRate", 0.059);
@@ -136,12 +153,6 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
         double b0Ror1hW = mergeWeight.getOrDefault("b0_ror_1h_w", 0d);
         double b0Ror24hW = mergeWeight.getOrDefault("b0_ror_24h_w", 0d);
 
-        double cnRovn1hW = mergeWeight.getOrDefault("cn_rovn_1h_w", 0d);
-        double cnRovn24hW = mergeWeight.getOrDefault("cn_rovn_24h_w", 0d);
-
-        double dnRovn1hW = mergeWeight.getOrDefault("dn_rovn_1h_w", 0d);
-        double dnRovn24hW = mergeWeight.getOrDefault("dn_rovn_24h_w", 0d);
-
         Map<String, Map<String, String>> vid2MapFeature = this.getVideoRedisFeature(vids, "redis:vid_hasreturn_vor:");
 
         // 获取权重
@@ -169,7 +180,6 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
             item.getScoresMap().put("vorW", vorW);
 
             Map<String, String> bcData = videoBCData.getOrDefault(String.valueOf(item.getVideoId()), new HashMap<>()).getOrDefault("alg_vid_feature_b_c_data", new HashMap<>());
-            Map<String, String> cdNData = videoBCData.getOrDefault(String.valueOf(item.getVideoId()), new HashMap<>()).getOrDefault("alg_vid_feature_cn_dn_data", new HashMap<>());
 
             double c1Rovn1h = Double.parseDouble(bcData.getOrDefault("c1_rovn_1h", "0"));
             double c1Rovn24h = Double.parseDouble(bcData.getOrDefault("c1_rovn_24h", "0"));
@@ -189,7 +199,6 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
             item.getScoresMap().put("b0Str24hW", b0Str24hW);
             item.getScoresMap().put("b0Str24h", b0Str24h);
 
-
             double b0Ror1h = Double.parseDouble(bcData.getOrDefault("b_ror1_1h", "0"));
             double b0Ror24h = Double.parseDouble(bcData.getOrDefault("b_ror1_24h", "0"));
             double b0RorScore = b0Ror1hW * b0Ror1h + b0Ror24hW * b0Ror24h;
@@ -199,27 +208,20 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
             item.getScoresMap().put("b0Ror24hW", b0Ror24hW);
             item.getScoresMap().put("b0Ror24h", b0Ror24h);
 
-            double cnRovn1h = Double.parseDouble(cdNData.getOrDefault("cn_rovn_1h", "0"));
-            double cnRovn24h = Double.parseDouble(cdNData.getOrDefault("cn_rovn_24h", "0"));
-            double cnRovnScore = cnRovn1hW * cnRovn1h + cnRovn24hW * cnRovn24h;
-            item.getScoresMap().put("cnRovnScore", cnRovnScore);
-            item.getScoresMap().put("cnRovn1hW", cnRovn1hW);
-            item.getScoresMap().put("cnRovn1h", cnRovn1h);
-            item.getScoresMap().put("cnRovn24hW", cnRovn24hW);
-            item.getScoresMap().put("cnRovn24h", cnRovn24h);
-
-            double dnRovn1h = Double.parseDouble(cdNData.getOrDefault("dn_rovn_1h", "0"));
-            double dnRovn24h = Double.parseDouble(cdNData.getOrDefault("dn_rovn_24h", "0"));
-            double dnRovnScore = dnRovn1hW * dnRovn1h + dnRovn24hW * dnRovn24h;
-            item.getScoresMap().put("dnRovnScore", dnRovnScore);
-            item.getScoresMap().put("dnRovn1hW", dnRovn1hW);
-            item.getScoresMap().put("dnRovn1h", dnRovn1h);
-            item.getScoresMap().put("dnRovn24hW", dnRovn24hW);
-            item.getScoresMap().put("dnRovn24h", dnRovn24h);
-
-            score = fmRov * (rosAdd + rosW * newNorXGBScore) * (vorAdd + vorW * vor) + c1RovnScore + b0StrScore + b0RorScore + cnRovnScore + dnRovnScore;
+            score = fmRov * (rosAdd + rosW * newNorXGBScore) * (vorAdd + vorW * vor) + c1RovnScore + b0StrScore + b0RorScore;
 
+            // V536: 命中目标 4 路召回来源的 item 提权
             Video video = item.getVideo();
+            double itemRecallWeight = mergeWeight.getOrDefault("item_recall_weight", 1.0);
+            double itemWeight = 1.0;
+            if (video.getPushFromIndex() != null
+                    && !Collections.disjoint(video.getPushFromIndex().keySet(), BOOST_PUSH_FORMS)) {
+                itemWeight = itemRecallWeight;
+            }
+            item.getScoresMap().put("itemRecallWeight", itemRecallWeight);
+            item.getScoresMap().put("itemWeight", itemWeight);
+            score = score * itemWeight;
+
             video.setScore(score);
             video.setSortScore(score);
             video.setScoresMap(item.getScoresMap());