Ver código fonte

旧label ros-值域校准

jch 2 meses atrás
pai
commit
c3bfd96987

+ 17 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV564.java

@@ -338,8 +338,11 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
         double fmRovWeight = mergeWeight.getOrDefault("fmRovWeight", 1.331);
         double fmRovSquareWeight = mergeWeight.getOrDefault("fmRovSquareWeight", -6.4597);
         double fmRovCubeWeight = mergeWeight.getOrDefault("fmRovCubeWeight", 14.393);
+        double xgbNorScaleType = mergeWeight.getOrDefault("xgbNorScaleType", 0.0);
         double xgbNorBias = mergeWeight.getOrDefault("xgbNorBias", -1.6945);
         double xgbNorWeight = mergeWeight.getOrDefault("xgbNorWeight", 1.8968);
+        double xgbNorPowerWeight = mergeWeight.getOrDefault("xgbNorPowerWeight", 1.2216);
+        double xgbNorPowerExp = mergeWeight.getOrDefault("xgbNorPowerExp", 1.3217);
         Map<String, String> sceneFeatureMap = new HashMap<>(0);
         List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20241209.conf").scoring(sceneFeatureMap, userFeatureMap, norUserFeatureMap, rankItems);
         // 5 排序公式特征
@@ -355,7 +358,7 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
             double hasReturnRovScore = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("rov", "0"));
             item.getScoresMap().put("hasReturnRovScore", hasReturnRovScore);
             double norXGBScore = item.getScoresMap().getOrDefault("NorXGBScore", 0d);
-            double newNorXGBScore = norCalibration(xgbNorBias, xgbNorWeight, norXGBScore);
+            double newNorXGBScore = norCalibration(xgbNorScaleType, xgbNorBias, xgbNorWeight, xgbNorPowerWeight, xgbNorPowerExp, norXGBScore);
             double vor = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("vor", "0"));
             item.getScoresMap().put("vor", vor);
             score = newFmRov * (0.1 + newNorXGBScore) * (0.1 + vor);
@@ -507,11 +510,23 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
         return newScore;
     }
 
-    private double norCalibration(double bias, double weight, double score) {
+    private double norCalibration(double scaleType, double polyBias, double polyWeight, double powerWeight, double powerExp, double score) {
+        if (scaleType < 1) {
+            return norPolyCalibration(polyBias, polyWeight, score);
+        } else {
+            return norPowerCalibration(powerWeight, powerExp, score);
+        }
+    }
+
+    private double norPolyCalibration(double bias, double weight, double score) {
         double newScore = bias + weight * score;
         if (newScore < 1E-8) {
             newScore = 0;
         }
         return newScore;
     }
+
+    private double norPowerCalibration(double weight, double exp, double score) {
+        return weight * Math.pow(score, exp);
+    }
 }

+ 17 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV567.java

@@ -334,8 +334,11 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
             item.norFeatureMap = FeatureBucketUtils.bucketFeature("20241209_nor_bucket.txt", featureMapDouble);
         }
         // 4 排序模型计算
+        double xgbNorScaleType = mergeWeight.getOrDefault("xgbNorScaleType", 0.0);
         double xgbNorBias = mergeWeight.getOrDefault("xgbNorBias", -1.6945);
         double xgbNorWeight = mergeWeight.getOrDefault("xgbNorWeight", 1.8968);
+        double xgbNorPowerWeight = mergeWeight.getOrDefault("xgbNorPowerWeight", 1.2216);
+        double xgbNorPowerExp = mergeWeight.getOrDefault("xgbNorPowerExp", 1.3217);
         Map<String, String> sceneFeatureMap = new HashMap<>(0);
         List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20241209.conf").scoring(sceneFeatureMap, userFeatureMap, norUserFeatureMap, rankItems);
         // 5 排序公式特征
@@ -350,7 +353,7 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
             double hasReturnRovScore = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("rov", "0"));
             item.getScoresMap().put("hasReturnRovScore", hasReturnRovScore);
             double norXGBScore = item.getScoresMap().getOrDefault("NorXGBScore", 0d);
-            double newNorXGBScore = norCalibration(xgbNorBias, xgbNorWeight, norXGBScore);
+            double newNorXGBScore = norCalibration(xgbNorScaleType, xgbNorBias, xgbNorWeight, xgbNorPowerWeight, xgbNorPowerExp, norXGBScore);
             double vor = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("vor", "0"));
             item.getScoresMap().put("vor", vor);
             score = fmRov * (0.1 + newNorXGBScore) * (0.1 + vor);
@@ -488,11 +491,23 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
         }
     }
 
-    private double norCalibration(double bias, double weight, double score) {
+    private double norCalibration(double scaleType, double polyBias, double polyWeight, double powerWeight, double powerExp, double score) {
+        if (scaleType < 1) {
+            return norPolyCalibration(polyBias, polyWeight, score);
+        } else {
+            return norPowerCalibration(powerWeight, powerExp, score);
+        }
+    }
+
+    private double norPolyCalibration(double bias, double weight, double score) {
         double newScore = bias + weight * score;
         if (newScore < 1E-8) {
             newScore = 0;
         }
         return newScore;
     }
+
+    private double norPowerCalibration(double weight, double exp, double score) {
+        return weight * Math.pow(score, exp);
+    }
 }