Jelajahi Sumber

feat:添加569实验, ros的xgb模型

zhaohaipeng 1 bulan lalu
induk
melakukan
3ea7f59abc

+ 1 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/common/base/RankItem.java

@@ -15,6 +15,7 @@ public class RankItem implements Comparable<RankItem> {
     // featureMap中保存所有的特征
     public Map<String, String> featureMap = new HashMap<>();
     public Map<String, String> norFeatureMap = new HashMap<>();
+    public Map<String, String> rosFeatureMap = new HashMap<>();
     // 所有特征,包括视频、用户等等
     public Map<String, String> allFeatureMap = new HashMap<>();
     public Map<String, Double> featureMapDouble = new HashMap<>();

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

@@ -209,10 +209,6 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
 
             Map<String, String> vidFeatureMap = vid2MapFeature.getOrDefault(String.valueOf(item.getVideoId()), new HashMap<>());
 
-            double originScoreRos = item.getScoreRos();
-            double scoreRos = ExtractorUtils.inverseLog(originScoreRos);
-
-
             double vor24h = Double.parseDouble(vidFeatureMap.getOrDefault("vor_24h", "0"));
             if (calcVorMode == 1d) {
                 vor24h = ExtractorUtils.calLog(vor24h);
@@ -221,6 +217,10 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
                 vor24h = vorCoefficient * vor24h;
             }
 
+            double originScoreRos = item.getScoreRos();
+            double scoreRos = ExtractorUtils.inverseLog(originScoreRos);
+
+
             item.getScoresMap().put("hasReturnRovScore", scoreRos);
             item.getScoresMap().put("vor", vor24h);
             item.getScoresMap().put("calcVorMode", calcVorMode);
@@ -232,7 +232,11 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
             video.setScore(score);
             video.setSortScore(score);
             video.setScoresMap(item.getScoresMap());
-            video.setAllFeatureMap(item.getAllFeatureMap());
+
+            Map<String, String> allFeatureMap = new HashMap<>();
+            item.getFeatureMapDouble().forEach((key, value) -> allFeatureMap.put(key, String.valueOf(value)));
+            video.setAllFeatureMap(allFeatureMap);
+
             if (MapUtils.isNotEmpty(feature.getVideoFeature()) && MapUtils.isNotEmpty(feature.getVideoFeature().get(item.getVideoId() + ""))) {
                 video.getMetaFeatureMap().putAll(feature.getVideoFeature().get(item.getVideoId() + ""));
             }
@@ -245,6 +249,10 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
             if (MapUtils.isNotEmpty(feature.getUserFeature())) {
                 video.getMetaFeatureMap().putAll(feature.getUserFeature());
             }
+
+            // 将空的特征表过滤
+            video.getMetaFeatureMap().entrySet().removeIf(e -> MapUtils.isNotEmpty(e.getValue()));
+
             result.add(video);
         }
         result.sort(Comparator.comparingDouble(o -> -o.getSortScore()));
@@ -261,7 +269,7 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
         List<RankItem> rosRankItems = new ArrayList<>(rankItems.size());
         for (RankItem rankItem : rankItems) {
             RankItem rosRankItem = new RankItem(rankItem.getVideo());
-            rosRankItem.featureMap = FeatureBucketUtils.bucketFeatureV2("20250306_ros_bucket_229.txt", rankItem.featureMapDouble);
+            rosRankItem.rosFeatureMap = FeatureBucketUtils.bucketFeatureV2("20250306_ros_bucket_229.txt", rankItem.featureMapDouble);
             rosRankItems.add(rosRankItem);
         }
         Map<String, String> userFeatureMap = FeatureBucketUtils.bucketFeatureV2("20250306_ros_bucket_229.txt", userFeatureMapDouble);

+ 2 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/RosXGBRegressionScorer.java

@@ -126,8 +126,8 @@ public class RosXGBRegressionScorer extends XGBRegressionModelScorer {
                             final Map<String, String> userFeatureMap,
                             final Map<String, String> sceneFeatureMap) {
         Map<String, String> featureMap = new HashMap<>();
-        if (MapUtils.isNotEmpty(item.getNorFeatureMap())) {
-            featureMap.putAll(item.getNorFeatureMap());
+        if (MapUtils.isNotEmpty(item.getRosFeatureMap())) {
+            featureMap.putAll(item.getRosFeatureMap());
         }
         if (MapUtils.isNotEmpty(userFeatureMap)) {
             featureMap.putAll(userFeatureMap);

+ 9 - 4
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/util/ExtractFeature20250218.java

@@ -192,11 +192,16 @@ public class ExtractFeature20250218 {
         Map<String, Map<String, String>> featureMaps = new HashMap<>();
         featureMaps.put("c7", c7Feature);
         featureMaps.put("c8", c8Feature);
+
         List<String> indexList = Arrays.asList("share", "return");
+
         for (Map.Entry<String, Map<String, String>> entry : featureMaps.entrySet()) {
-            String key = entry.getKey();
             Map<String, String> feature = entry.getValue();
+
             for (String index : indexList) {
+
+                String key = entry.getKey() + "_" + index;
+
                 if (feature.containsKey(index)) {
                     Map<String, String[]> cfMap = new HashMap<>();
                     String[] entries = feature.get(index).split(",");
@@ -223,11 +228,11 @@ public class ExtractFeature20250218 {
         if (StringUtils.isBlank(vid)) {
             return;
         }
-        for (String key : Arrays.asList("c6", "c7")) {
+        for (String key : Arrays.asList("c7", "c8")) {
             for (String action : Arrays.asList("share", "return")) {
                 String featureKey = key + "_" + action;
-                if (map.containsKey(featureKey)) {
-                    Map<String, String[]> cfMap = map.get(featureKey);
+                Map<String, String[]> cfMap = map.getOrDefault(featureKey, new HashMap<>());
+                if (cfMap.containsKey(vid)) {
                     String[] scores = cfMap.get(vid);
                     featureMap.put(featureKey + "_score", Double.parseDouble(scores[0]));
                     featureMap.put(featureKey + "_num", Double.parseDouble(scores[1]));