Prechádzať zdrojové kódy

Merge branch 'feature_20250311_zhaohaipeng_ros_reg_model' of algorithm/recommend-server into master

zhaohaipeng 1 mesiac pred
rodič
commit
3811abe59e

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

@@ -194,7 +194,9 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
 
         // 5 排序公式特征
         double xgbRovNegRate = mergeWeight.getOrDefault("xgbRovNegRate", 0.05);
-        double calcVorMode = mergeWeight.getOrDefault("calc_vor_mode", 1d);
+        double calcVorMode = mergeWeight.getOrDefault("calcVorMode", 1d);
+        double calcRosMode = mergeWeight.getOrDefault("calcRosMode", 1d);
+
 
         Map<String, Map<String, String>> vid2MapFeature = this.getVideoRedisFeature(vids, "redis:vid_hasreturn_vor_4share:");
         List<Video> result = new ArrayList<>();
@@ -214,16 +216,22 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
                 vor24h = ExtractorUtils.calLog(vor24h);
             } else if (calcVorMode == 2d) {
                 double vorCoefficient = mergeWeight.getOrDefault("vor_coefficient", 1d);
+                item.getScoresMap().put("vorCoefficient", vorCoefficient);
                 vor24h = vorCoefficient * vor24h;
+            } else if (calcVorMode == 3d) {
+                double vorPower = mergeWeight.getOrDefault("vor_power", 1d);
+                item.getScoresMap().put("vorPower", vorPower);
+                vor24h = Math.pow(vor24h, vorPower);
             }
 
             double originScoreRos = item.getScoreRos();
-            double scoreRos = ExtractorUtils.inverseLog(originScoreRos);
+            double scoreRos = this.handleRos(originScoreRos, calcRosMode, item, mergeWeight);
 
 
             item.getScoresMap().put("hasReturnRovScore", scoreRos);
             item.getScoresMap().put("vor", vor24h);
             item.getScoresMap().put("calcVorMode", calcVorMode);
+            item.getScoresMap().put("calcRosMode", calcRosMode);
             item.getScoresMap().put("RosXGBScore", originScoreRos);
             score = fmRov * (0.1 + scoreRos) * (0.1 + vor24h);
 
@@ -262,6 +270,32 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
         return result;
     }
 
+    private double handleRos(double originScoreRos, double calcRosMode, RankItem item, Map<String, Double> mergeWeight) {
+        if (originScoreRos == 0) {
+            return 0;
+        }
+
+        double scoreRos = ExtractorUtils.inverseLog(originScoreRos);
+        if (calcRosMode == 1d) {
+            double rosPower = mergeWeight.getOrDefault("le_ros_power", 5d);
+            if (scoreRos > 1) {
+                rosPower = mergeWeight.getOrDefault("gt_1_ros_poewr", 1.5d);
+            }
+            item.getScoresMap().put("rosPower", rosPower);
+            scoreRos = Math.pow(scoreRos, rosPower);
+        } else if (calcRosMode == 2d) {
+            double modelRosCoefficient = mergeWeight.getOrDefault("model_ros_coefficient", 8d);
+            item.getScoresMap().put("modelRosCoefficient", modelRosCoefficient);
+            scoreRos = ExtractorUtils.inverseLog(originScoreRos * modelRosCoefficient);
+        } else if (calcRosMode == 3d) {
+            double rosPower = mergeWeight.getOrDefault("ros_power", 5d);
+            item.getScoresMap().put("rosPower", rosPower);
+            scoreRos = Math.pow(scoreRos, rosPower);
+        }
+
+        return scoreRos;
+    }
+
     /**
      * ros模型打分
      */