Forráskód Böngészése

Merge branch 'feature/rank_feature_to_float_v2' of algorithm/recommend-server into master

supeng 23 órája
szülő
commit
6022f00149
24 módosított fájl, 189 hozzáadás és 187 törlés
  1. 4 4
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/common/base/RankItem.java
  2. 5 3
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/ModelService.java
  3. 11 11
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV536.java
  4. 12 12
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV562.java
  5. 11 11
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV563.java
  6. 11 11
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV564.java
  7. 4 4
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV565.java
  8. 11 11
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV566.java
  9. 11 11
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV567.java
  10. 11 11
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV568.java
  11. 4 5
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV569.java
  12. 1 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/PremiumROVRecallStrategy.java
  13. 2 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/AbstractScorer.java
  14. 9 9
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/NorXGBRegressionScorer.java
  15. 9 9
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/RosXGBRegressionScorer.java
  16. 9 9
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/ScorerPipeline.java
  17. 10 10
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/VlogRovFMScorer.java
  18. 13 10
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/VlogShareLRScorer.java
  19. 13 10
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/VlogShareLRScorer4Ros.java
  20. 9 9
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/XGBoostScorer.java
  21. 5 6
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/model/FMModel.java
  22. 2 4
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/model/XGBRegressionModel.java
  23. 2 4
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/model/XGBoostModel.java
  24. 10 10
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/util/FeatureBucketUtils.java

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

@@ -13,11 +13,11 @@ import java.util.Map;
 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, Float> featureMap = new HashMap<>();
+    public Map<String, Float> norFeatureMap = new HashMap<>();
+    public Map<String, Float> rosFeatureMap = new HashMap<>();
     // 所有特征,包括视频、用户等等
-    public Map<String, String> allFeatureMap = new HashMap<>();
+    public Map<String, Float> allFeatureMap = new HashMap<>();
     public Map<String, Double> featureMapDouble = new HashMap<>();
     public String id;
     public Map<String, Double> scoresMap = new HashMap<>();

+ 5 - 3
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/ModelService.java

@@ -115,7 +115,7 @@ public class ModelService {
                             iteratorIn.remove();
                         }
                     }
-                    rankItems.get(i).setFeatureMap(vfMap);
+                    // rankItems.get(i).setFeatureMap(vfMap);
                 } catch (Exception e) {
                     log.error(String.format("parse video json is wrong in {} with {}",
                             this.getClass().getSimpleName(), e));
@@ -123,10 +123,12 @@ public class ModelService {
             }
         }
 
-        Map<String, String> sceneFeatureMap = this.getSceneFeature(request);
+        // Map<String, String> sceneFeatureMap = this.getSceneFeature(request);
+        Map<String, Float> sceneFeatureMap = new HashMap<>(0);
+        Map<String, Float> userMap = new HashMap<>(0);
 
         List<RankItem> result = ScorerUtils.getScorerPipeline(ScorerUtils.VIDEO_SCORE_CONF_FOR_AD)
-                .scoring(sceneFeatureMap, userFeatureMap, rankItems);
+                .scoring(sceneFeatureMap, userMap, rankItems);
 
         if (CollectionUtils.isEmpty(result)) {
             return ScoreResponse.newBuilder()

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

@@ -130,12 +130,12 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
 
         // 3. 特征处理
         List<RankItem> rankItems = CommonCollectionUtils.toList(rovRecallRank, RankItem::new);
-        Map<String, String> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
+        Map<String, Float> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
         batchGetVideoFeature(currentMs, userProfile, headVideoInfo, videoBaseInfoMap,
                 newC7Map, newC8Map, featureOriginUser, userBehaviorVideoMap, featureOriginVideo, rankItems);
 
         // 4. 排序模型计算
-        Map<String, String> sceneFeatureMap = new HashMap<>(0);
+        Map<String, Float> sceneFeatureMap = new HashMap<>(0);
         List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20250317.conf").scoring(sceneFeatureMap, userFeatureMap, userFeatureMap, rankItems);
 
         // 5. 排序公式特征
@@ -256,7 +256,7 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
         return historyVideoMap;
     }
 
-    private Map<String, String> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
+    private Map<String, Float> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // context feature
         String appType = String.valueOf(param.getAppType());
@@ -274,14 +274,14 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
         return FeatureBucketUtils.noBucketFeature(featMap);
     }
 
-    private Map<String, String> getVideoFeature(long currentMs, String vid,
-                                                UserShareReturnProfile userProfile,
-                                                Map<String, String> headInfo, Map<String, String> rankInfo,
-                                                Map<String, Map<String, String[]>> c7Map,
-                                                Map<String, Map<String, String[]>> c8Map,
-                                                Map<String, Map<String, String>> userOriginInfo,
-                                                Map<String, Map<String, String>> historyVideoMap,
-                                                Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
+    private Map<String, Float> getVideoFeature(long currentMs, String vid,
+                                               UserShareReturnProfile userProfile,
+                                               Map<String, String> headInfo, Map<String, String> rankInfo,
+                                               Map<String, Map<String, String[]>> c7Map,
+                                               Map<String, Map<String, String[]>> c8Map,
+                                               Map<String, Map<String, String>> userOriginInfo,
+                                               Map<String, Map<String, String>> historyVideoMap,
+                                               Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // user & video feature
         FeatureV6.getUserTagsCrossVideoFeature("c5", rankInfo, userOriginInfo.get("alg_mid_feature_return_tags"), featMap);

+ 12 - 12
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV562.java

@@ -149,12 +149,12 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
 
         // 3. 特征处理
         List<RankItem> rankItems = CommonCollectionUtils.toList(rovRecallRank, RankItem::new);
-        Map<String, String> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
+        Map<String, Float> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
         batchGetVideoFeature(currentMs, userProfile, headVideoInfo, videoBaseInfoMap,
                 newC7Map, newC8Map, featureOriginUser, userBehaviorVideoMap, featureOriginVideo, rankItems);
 
         // 4. 排序模型计算
-        Map<String, String> sceneFeatureMap = new HashMap<>(0);
+        Map<String, Float> sceneFeatureMap = new HashMap<>(0);
         List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20250317.conf").scoring(sceneFeatureMap, userFeatureMap, userFeatureMap, rankItems);
 
         // 5. 排序公式特征
@@ -210,7 +210,7 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
             video.setScore(score);
             video.setSortScore(score);
             video.setScoresMap(item.getScoresMap());
-            video.setAllFeatureMap(item.getAllFeatureMap());
+            // video.setAllFeatureMap(item.getAllFeatureMap());
 
             String mergeCate2 = ExtractVideoMergeCate.parseMergeCate2(String.valueOf(item.getVideoId()), featureOriginVideo);
             if (StringUtils.isNotBlank(mergeCate2)) {
@@ -277,7 +277,7 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
         return historyVideoMap;
     }
 
-    private Map<String, String> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
+    private Map<String, Float> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // context feature
         String appType = String.valueOf(param.getAppType());
@@ -295,14 +295,14 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
         return FeatureBucketUtils.noBucketFeature(featMap);
     }
 
-    private Map<String, String> getVideoFeature(long currentMs, String vid,
-                                                UserShareReturnProfile userProfile,
-                                                Map<String, String> headInfo, Map<String, String> rankInfo,
-                                                Map<String, Map<String, String[]>> c7Map,
-                                                Map<String, Map<String, String[]>> c8Map,
-                                                Map<String, Map<String, String>> userOriginInfo,
-                                                Map<String, Map<String, String>> historyVideoMap,
-                                                Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
+    private Map<String, Float> getVideoFeature(long currentMs, String vid,
+                                               UserShareReturnProfile userProfile,
+                                               Map<String, String> headInfo, Map<String, String> rankInfo,
+                                               Map<String, Map<String, String[]>> c7Map,
+                                               Map<String, Map<String, String[]>> c8Map,
+                                               Map<String, Map<String, String>> userOriginInfo,
+                                               Map<String, Map<String, String>> historyVideoMap,
+                                               Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // user & video feature
         FeatureV6.getUserTagsCrossVideoFeature("c5", rankInfo, userOriginInfo.get("alg_mid_feature_return_tags"), featMap);

+ 11 - 11
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV563.java

@@ -130,12 +130,12 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
 
         // 3. 特征处理
         List<RankItem> rankItems = CommonCollectionUtils.toList(rovRecallRank, RankItem::new);
-        Map<String, String> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
+        Map<String, Float> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
         batchGetVideoFeature(currentMs, userProfile, headVideoInfo, videoBaseInfoMap,
                 newC7Map, newC8Map, featureOriginUser, userBehaviorVideoMap, featureOriginVideo, rankItems);
 
         // 4. 排序模型计算
-        Map<String, String> sceneFeatureMap = new HashMap<>(0);
+        Map<String, Float> sceneFeatureMap = new HashMap<>(0);
         List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20250317.conf").scoring(sceneFeatureMap, userFeatureMap, userFeatureMap, rankItems);
 
         // 5. 排序公式特征
@@ -254,7 +254,7 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
         return historyVideoMap;
     }
 
-    private Map<String, String> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
+    private Map<String, Float> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // context feature
         String appType = String.valueOf(param.getAppType());
@@ -272,14 +272,14 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
         return FeatureBucketUtils.noBucketFeature(featMap);
     }
 
-    private Map<String, String> getVideoFeature(long currentMs, String vid,
-                                                UserShareReturnProfile userProfile,
-                                                Map<String, String> headInfo, Map<String, String> rankInfo,
-                                                Map<String, Map<String, String[]>> c7Map,
-                                                Map<String, Map<String, String[]>> c8Map,
-                                                Map<String, Map<String, String>> userOriginInfo,
-                                                Map<String, Map<String, String>> historyVideoMap,
-                                                Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
+    private Map<String, Float> getVideoFeature(long currentMs, String vid,
+                                               UserShareReturnProfile userProfile,
+                                               Map<String, String> headInfo, Map<String, String> rankInfo,
+                                               Map<String, Map<String, String[]>> c7Map,
+                                               Map<String, Map<String, String[]>> c8Map,
+                                               Map<String, Map<String, String>> userOriginInfo,
+                                               Map<String, Map<String, String>> historyVideoMap,
+                                               Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // user & video feature
         FeatureV6.getUserTagsCrossVideoFeature("c5", rankInfo, userOriginInfo.get("alg_mid_feature_return_tags"), featMap);

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

@@ -93,12 +93,12 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
 
         // 3. 特征处理
         List<RankItem> rankItems = CommonCollectionUtils.toList(rovRecallRank, RankItem::new);
-        Map<String, String> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
+        Map<String, Float> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
         batchGetVideoFeature(currentMs, userProfile, headVideoInfo, videoBaseInfoMap,
                 newC7Map, newC8Map, featureOriginUser, userBehaviorVideoMap, featureOriginVideo, rankItems);
 
         // 4. 排序模型计算
-        Map<String, String> sceneFeatureMap = new HashMap<>(0);
+        Map<String, Float> sceneFeatureMap = new HashMap<>(0);
         List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20250317.conf").scoring(sceneFeatureMap, userFeatureMap, userFeatureMap, rankItems);
 
         // 5. 排序公式特征
@@ -217,7 +217,7 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
         return historyVideoMap;
     }
 
-    private Map<String, String> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
+    private Map<String, Float> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // context feature
         String appType = String.valueOf(param.getAppType());
@@ -235,14 +235,14 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
         return FeatureBucketUtils.noBucketFeature(featMap);
     }
 
-    private Map<String, String> getVideoFeature(long currentMs, String vid,
-                                                UserShareReturnProfile userProfile,
-                                                Map<String, String> headInfo, Map<String, String> rankInfo,
-                                                Map<String, Map<String, String[]>> c7Map,
-                                                Map<String, Map<String, String[]>> c8Map,
-                                                Map<String, Map<String, String>> userOriginInfo,
-                                                Map<String, Map<String, String>> historyVideoMap,
-                                                Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
+    private Map<String, Float> getVideoFeature(long currentMs, String vid,
+                                               UserShareReturnProfile userProfile,
+                                               Map<String, String> headInfo, Map<String, String> rankInfo,
+                                               Map<String, Map<String, String[]>> c7Map,
+                                               Map<String, Map<String, String[]>> c8Map,
+                                               Map<String, Map<String, String>> userOriginInfo,
+                                               Map<String, Map<String, String>> historyVideoMap,
+                                               Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // user & video feature
         FeatureV6.getUserTagsCrossVideoFeature("c5", rankInfo, userOriginInfo.get("alg_mid_feature_return_tags"), featMap);

+ 4 - 4
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV565.java

@@ -179,7 +179,7 @@ public class RankStrategy4RegionMergeModelV565 extends RankStrategy4RegionMergeM
         }
 
         // 3 连续值特征分桶
-        Map<String, String> userFeatureMap = FeatureBucketUtils.bucketFeatureV2("20250218_bucket_322.txt", userFeatureMapDouble);
+        Map<String, Float> userFeatureMap = FeatureBucketUtils.bucketFeatureV2("20250218_bucket_322.txt", userFeatureMapDouble);
         for (RankItem item : rankItems) {
             Map<String, Double> featureMapDouble = item.featureMapDouble;
             item.featureMap = FeatureBucketUtils.bucketFeatureV2("20250218_bucket_322.txt", featureMapDouble);
@@ -187,7 +187,7 @@ public class RankStrategy4RegionMergeModelV565 extends RankStrategy4RegionMergeM
 
 
         // 4.1 排序模型计算 - str
-        Map<String, String> sceneFeatureMap = new HashMap<>(0);
+        Map<String, Float> sceneFeatureMap = new HashMap<>(0);
         List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_xgb_str_20250228.conf").scoring(sceneFeatureMap, userFeatureMap, rankItems);
         // 4.2 排序模型计算 - ros
         this.addRosScore(rankItems, userFeatureMapDouble, sceneFeatureMap);
@@ -279,7 +279,7 @@ public class RankStrategy4RegionMergeModelV565 extends RankStrategy4RegionMergeM
     /**
      * ros模型打分
      */
-    private void addRosScore(List<RankItem> rankItems, Map<String, Double> userFeatureMapDouble, Map<String, String> sceneFeatureMap) {
+    private void addRosScore(List<RankItem> rankItems, Map<String, Double> userFeatureMapDouble, Map<String, Float> sceneFeatureMap) {
         List<RankItem> rosRankItems = new ArrayList<>(rankItems.size());
         for (RankItem rankItem : rankItems) {
             RankItem rosRankItem = new RankItem(rankItem.getVideo());
@@ -287,7 +287,7 @@ public class RankStrategy4RegionMergeModelV565 extends RankStrategy4RegionMergeM
             rosRankItem.featureMap = FeatureBucketUtils.bucketFeatureV2("20250306_ros_bucket_229.txt", rankItem.featureMapDouble);
             rosRankItems.add(rosRankItem);
         }
-        Map<String, String> userFeatureMap = FeatureBucketUtils.bucketFeatureV2("20250306_ros_bucket_229.txt", userFeatureMapDouble);
+        Map<String, Float> userFeatureMap = FeatureBucketUtils.bucketFeatureV2("20250306_ros_bucket_229.txt", userFeatureMapDouble);
         ScorerUtils.getScorerPipeline("feeds_score_config_xgb_ros_binary_20250319.conf").scoring(sceneFeatureMap, userFeatureMap, rosRankItems);
 
         // 将ros分数补充到之前的列表中

+ 11 - 11
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV566.java

@@ -90,12 +90,12 @@ public class RankStrategy4RegionMergeModelV566 extends RankStrategy4RegionMergeM
 
         // 3. 特征处理
         List<RankItem> rankItems = CommonCollectionUtils.toList(rovRecallRank, RankItem::new);
-        Map<String, String> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
+        Map<String, Float> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
         batchGetVideoFeature(currentMs, userProfile, headVideoInfo, videoBaseInfoMap,
                 newC7Map, newC8Map, featureOriginUser, userBehaviorVideoMap, featureOriginVideo, rankItems);
 
         // 4. 排序模型计算
-        Map<String, String> sceneFeatureMap = new HashMap<>(0);
+        Map<String, Float> sceneFeatureMap = new HashMap<>(0);
         List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20250423.conf").scoring(sceneFeatureMap, userFeatureMap, userFeatureMap, rankItems);
 
         // 5. 排序公式特征
@@ -214,7 +214,7 @@ public class RankStrategy4RegionMergeModelV566 extends RankStrategy4RegionMergeM
         return historyVideoMap;
     }
 
-    private Map<String, String> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
+    private Map<String, Float> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // context feature
         String appType = String.valueOf(param.getAppType());
@@ -232,14 +232,14 @@ public class RankStrategy4RegionMergeModelV566 extends RankStrategy4RegionMergeM
         return FeatureBucketUtils.noBucketFeature(featMap);
     }
 
-    private Map<String, String> getVideoFeature(long currentMs, String vid,
-                                                UserShareReturnProfile userProfile,
-                                                Map<String, String> headInfo, Map<String, String> rankInfo,
-                                                Map<String, Map<String, String[]>> c7Map,
-                                                Map<String, Map<String, String[]>> c8Map,
-                                                Map<String, Map<String, String>> userOriginInfo,
-                                                Map<String, Map<String, String>> historyVideoMap,
-                                                Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
+    private Map<String, Float> getVideoFeature(long currentMs, String vid,
+                                               UserShareReturnProfile userProfile,
+                                               Map<String, String> headInfo, Map<String, String> rankInfo,
+                                               Map<String, Map<String, String[]>> c7Map,
+                                               Map<String, Map<String, String[]>> c8Map,
+                                               Map<String, Map<String, String>> userOriginInfo,
+                                               Map<String, Map<String, String>> historyVideoMap,
+                                               Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // user & video feature
         FeatureV6.getUserTagsCrossVideoFeature("c5", rankInfo, userOriginInfo.get("alg_mid_feature_return_tags"), featMap);

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

@@ -130,12 +130,12 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
 
         // 3. 特征处理
         List<RankItem> rankItems = CommonCollectionUtils.toList(rovRecallRank, RankItem::new);
-        Map<String, String> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
+        Map<String, Float> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
         batchGetVideoFeature(currentMs, userProfile, headVideoInfo, videoBaseInfoMap,
                 newC7Map, newC8Map, featureOriginUser, userBehaviorVideoMap, featureOriginVideo, rankItems);
 
         // 4. 排序模型计算
-        Map<String, String> sceneFeatureMap = new HashMap<>(0);
+        Map<String, Float> sceneFeatureMap = new HashMap<>(0);
         List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20250317.conf").scoring(sceneFeatureMap, userFeatureMap, userFeatureMap, rankItems);
 
         // 5. 排序公式特征
@@ -254,7 +254,7 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
         return historyVideoMap;
     }
 
-    private Map<String, String> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
+    private Map<String, Float> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // context feature
         String appType = String.valueOf(param.getAppType());
@@ -272,14 +272,14 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
         return FeatureBucketUtils.noBucketFeature(featMap);
     }
 
-    private Map<String, String> getVideoFeature(long currentMs, String vid,
-                                                UserShareReturnProfile userProfile,
-                                                Map<String, String> headInfo, Map<String, String> rankInfo,
-                                                Map<String, Map<String, String[]>> c7Map,
-                                                Map<String, Map<String, String[]>> c8Map,
-                                                Map<String, Map<String, String>> userOriginInfo,
-                                                Map<String, Map<String, String>> historyVideoMap,
-                                                Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
+    private Map<String, Float> getVideoFeature(long currentMs, String vid,
+                                               UserShareReturnProfile userProfile,
+                                               Map<String, String> headInfo, Map<String, String> rankInfo,
+                                               Map<String, Map<String, String[]>> c7Map,
+                                               Map<String, Map<String, String[]>> c8Map,
+                                               Map<String, Map<String, String>> userOriginInfo,
+                                               Map<String, Map<String, String>> historyVideoMap,
+                                               Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // user & video feature
         FeatureV6.getUserTagsCrossVideoFeature("c5", rankInfo, userOriginInfo.get("alg_mid_feature_return_tags"), featMap);

+ 11 - 11
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV568.java

@@ -95,12 +95,12 @@ public class RankStrategy4RegionMergeModelV568 extends RankStrategy4RegionMergeM
 
         // 3. 特征处理
         List<RankItem> rankItems = CommonCollectionUtils.toList(rovRecallRank, RankItem::new);
-        Map<String, String> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
+        Map<String, Float> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
         batchGetVideoFeature(currentMs, userProfile, headVideoInfo, videoBaseInfoMap,
                 newC7Map, newC8Map, featureOriginUser, userBehaviorVideoMap, featureOriginVideo, rankItems);
 
         // 4. 排序模型计算
-        Map<String, String> sceneFeatureMap = new HashMap<>(0);
+        Map<String, Float> sceneFeatureMap = new HashMap<>(0);
         List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20250317.conf").scoring(sceneFeatureMap, userFeatureMap, userFeatureMap, rankItems);
 
         // 5. 排序公式特征
@@ -227,7 +227,7 @@ public class RankStrategy4RegionMergeModelV568 extends RankStrategy4RegionMergeM
         return historyVideoMap;
     }
 
-    private Map<String, String> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
+    private Map<String, Float> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // context feature
         String appType = String.valueOf(param.getAppType());
@@ -245,14 +245,14 @@ public class RankStrategy4RegionMergeModelV568 extends RankStrategy4RegionMergeM
         return FeatureBucketUtils.noBucketFeature(featMap);
     }
 
-    private Map<String, String> getVideoFeature(long currentMs, String vid,
-                                                UserShareReturnProfile userProfile,
-                                                Map<String, String> headInfo, Map<String, String> rankInfo,
-                                                Map<String, Map<String, String[]>> c7Map,
-                                                Map<String, Map<String, String[]>> c8Map,
-                                                Map<String, Map<String, String>> userOriginInfo,
-                                                Map<String, Map<String, String>> historyVideoMap,
-                                                Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
+    private Map<String, Float> getVideoFeature(long currentMs, String vid,
+                                               UserShareReturnProfile userProfile,
+                                               Map<String, String> headInfo, Map<String, String> rankInfo,
+                                               Map<String, Map<String, String[]>> c7Map,
+                                               Map<String, Map<String, String[]>> c8Map,
+                                               Map<String, Map<String, String>> userOriginInfo,
+                                               Map<String, Map<String, String>> historyVideoMap,
+                                               Map<String, Map<String, Map<String, String>>> videoOriginInfo) {
         Map<String, Double> featMap = new HashMap<>();
         // user & video feature
         FeatureV6.getUserTagsCrossVideoFeature("c5", rankInfo, userOriginInfo.get("alg_mid_feature_return_tags"), featMap);

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

@@ -6,7 +6,6 @@ import com.tzld.piaoquan.recommend.server.model.Video;
 import com.tzld.piaoquan.recommend.server.service.FeatureService;
 import com.tzld.piaoquan.recommend.server.service.rank.RankParam;
 import com.tzld.piaoquan.recommend.server.service.rank.extractor.ExtractVideoMergeCate;
-import com.tzld.piaoquan.recommend.server.service.rank.extractor.ExtractorUtils;
 import com.tzld.piaoquan.recommend.server.service.recall.strategy.*;
 import com.tzld.piaoquan.recommend.server.service.score.ScorerUtils;
 import com.tzld.piaoquan.recommend.server.util.CommonCollectionUtils;
@@ -180,7 +179,7 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
         }
 
         // 3 连续值特征分桶
-        Map<String, String> userFeatureMap = FeatureBucketUtils.bucketFeatureV2("20250218_bucket_322.txt", userFeatureMapDouble);
+        Map<String, Float> userFeatureMap = FeatureBucketUtils.bucketFeatureV2("20250218_bucket_322.txt", userFeatureMapDouble);
         for (RankItem item : rankItems) {
             Map<String, Double> featureMapDouble = item.featureMapDouble;
             item.featureMap = FeatureBucketUtils.bucketFeatureV2("20250218_bucket_322.txt", featureMapDouble);
@@ -188,7 +187,7 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
 
 
         // 4.1 排序模型计算 - str
-        Map<String, String> sceneFeatureMap = new HashMap<>(0);
+        Map<String, Float> sceneFeatureMap = new HashMap<>(0);
         List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_xgb_str_20250228.conf").scoring(sceneFeatureMap, userFeatureMap, rankItems);
 
         // 4.2 排序模型计算 - ros
@@ -282,14 +281,14 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
     /**
      * ros模型打分
      */
-    private void addRosScore(List<RankItem> rankItems, Map<String, Double> userFeatureMapDouble, Map<String, String> sceneFeatureMap) {
+    private void addRosScore(List<RankItem> rankItems, Map<String, Double> userFeatureMapDouble, Map<String, Float> sceneFeatureMap) {
         List<RankItem> rosRankItems = new ArrayList<>(rankItems.size());
         for (RankItem rankItem : rankItems) {
             RankItem rosRankItem = new RankItem(rankItem.getVideo());
             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);
+        Map<String, Float> userFeatureMap = FeatureBucketUtils.bucketFeatureV2("20250306_ros_bucket_229.txt", userFeatureMapDouble);
         ScorerUtils.getScorerPipeline("feeds_score_config_xgb_ros_20250311.conf").scoring(sceneFeatureMap, userFeatureMap, rosRankItems);
 
         // 将ros分数补充到之前的列表中

+ 1 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/PremiumROVRecallStrategy.java

@@ -67,7 +67,7 @@ public class PremiumROVRecallStrategy implements RecallStrategy {
                     for (int i = 0; i < minSize; ++i) {
                         long id = ids.get(i);
                         double score = scores.get(i);
-                        if (headVid != id && !scoresMap.containsKey(id)) {
+                        if (score > 0.01 && headVid != id && !scoresMap.containsKey(id)) {
                             idsList.add(id);
                             scoresMap.put(id, score);
                         }

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

@@ -68,8 +68,8 @@ public abstract class AbstractScorer {
                                            final UserFeature userFeature,
                                            final List<RankItem> rankItems);
 
-    public abstract List<RankItem> scoring(final Map<String, String> sceneFeatureMap,
-                                           final Map<String, String> userFeatureMap,
+    public abstract List<RankItem> scoring(final Map<String, Float> sceneFeatureMap,
+                                           final Map<String, Float> userFeatureMap,
                                            final List<RankItem> rankItems);
 
 }

+ 9 - 9
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/NorXGBRegressionScorer.java

@@ -30,8 +30,8 @@ public class NorXGBRegressionScorer extends XGBRegressionModelScorer {
     }
 
     @Override
-    public List<RankItem> scoring(final Map<String, String> sceneFeatureMap,
-                                  final Map<String, String> userFeatureMap,
+    public List<RankItem> scoring(final Map<String, Float> sceneFeatureMap,
+                                  final Map<String, Float> userFeatureMap,
                                   final List<RankItem> rankItems) {
         if (CollectionUtils.isEmpty(rankItems)) {
             return rankItems;
@@ -51,8 +51,8 @@ public class NorXGBRegressionScorer extends XGBRegressionModelScorer {
         return result;
     }
 
-    private List<RankItem> rankByJava(final Map<String, String> sceneFeatureMap,
-                                      final Map<String, String> userFeatureMap,
+    private List<RankItem> rankByJava(final Map<String, Float> sceneFeatureMap,
+                                      final Map<String, Float> userFeatureMap,
                                       final List<RankItem> items) {
         long startTime = System.currentTimeMillis();
         XGBRegressionModel model = (XGBRegressionModel) this.getModel();
@@ -76,8 +76,8 @@ public class NorXGBRegressionScorer extends XGBRegressionModelScorer {
     }
 
     private void multipleCtrScore(final List<RankItem> items,
-                                  final Map<String, String> userFeatureMap,
-                                  final Map<String, String> sceneFeatureMap,
+                                  final Map<String, Float> userFeatureMap,
+                                  final Map<String, Float> sceneFeatureMap,
                                   final XGBRegressionModel model) {
 
         List<Callable<Object>> calls = new ArrayList<Callable<Object>>();
@@ -126,9 +126,9 @@ public class NorXGBRegressionScorer extends XGBRegressionModelScorer {
 
     public double calcScore(final XGBRegressionModel model,
                             final RankItem item,
-                            final Map<String, String> userFeatureMap,
-                            final Map<String, String> sceneFeatureMap) {
-        Map<String, String> featureMap = new HashMap<>();
+                            final Map<String, Float> userFeatureMap,
+                            final Map<String, Float> sceneFeatureMap) {
+        Map<String, Float> featureMap = new HashMap<>();
         if (MapUtils.isNotEmpty(item.getNorFeatureMap())) {
             featureMap.putAll(item.getNorFeatureMap());
         }

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

@@ -30,8 +30,8 @@ public class RosXGBRegressionScorer extends XGBRegressionModelScorer {
     }
 
     @Override
-    public List<RankItem> scoring(final Map<String, String> sceneFeatureMap,
-                                  final Map<String, String> userFeatureMap,
+    public List<RankItem> scoring(final Map<String, Float> sceneFeatureMap,
+                                  final Map<String, Float> userFeatureMap,
                                   final List<RankItem> rankItems) {
         if (CollectionUtils.isEmpty(rankItems)) {
             return rankItems;
@@ -51,8 +51,8 @@ public class RosXGBRegressionScorer extends XGBRegressionModelScorer {
         return result;
     }
 
-    private List<RankItem> rankByJava(final Map<String, String> sceneFeatureMap,
-                                      final Map<String, String> userFeatureMap,
+    private List<RankItem> rankByJava(final Map<String, Float> sceneFeatureMap,
+                                      final Map<String, Float> userFeatureMap,
                                       final List<RankItem> items) {
         long startTime = System.currentTimeMillis();
         XGBRegressionModel model = (XGBRegressionModel) this.getModel();
@@ -76,8 +76,8 @@ public class RosXGBRegressionScorer extends XGBRegressionModelScorer {
     }
 
     private void multipleCtrScore(final List<RankItem> items,
-                                  final Map<String, String> userFeatureMap,
-                                  final Map<String, String> sceneFeatureMap,
+                                  final Map<String, Float> userFeatureMap,
+                                  final Map<String, Float> sceneFeatureMap,
                                   final XGBRegressionModel model) {
 
         List<Callable<Object>> calls = new ArrayList<Callable<Object>>();
@@ -126,9 +126,9 @@ public class RosXGBRegressionScorer extends XGBRegressionModelScorer {
 
     public double calcScore(final XGBRegressionModel model,
                             final RankItem item,
-                            final Map<String, String> userFeatureMap,
-                            final Map<String, String> sceneFeatureMap) {
-        Map<String, String> featureMap = new HashMap<>();
+                            final Map<String, Float> userFeatureMap,
+                            final Map<String, Float> sceneFeatureMap) {
+        Map<String, Float> featureMap = new HashMap<>();
         if (MapUtils.isNotEmpty(item.getRosFeatureMap())) {
             featureMap.putAll(item.getRosFeatureMap());
         }

+ 9 - 9
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/ScorerPipeline.java

@@ -1,7 +1,7 @@
 package com.tzld.piaoquan.recommend.server.service.score;
 
-import com.tzld.piaoquan.recommend.server.common.base.RankItem;
 import com.tzld.piaoquan.recommend.feature.domain.video.base.UserFeature;
+import com.tzld.piaoquan.recommend.server.common.base.RankItem;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.exception.ExceptionUtils;
@@ -109,8 +109,8 @@ public class ScorerPipeline {
         return items;
     }
 
-    public List<RankItem> scoring(final Map<String, String> sceneFeatureMap,
-                                  final Map<String, String> userFeatureMap,
+    public List<RankItem> scoring(final Map<String, Float> sceneFeatureMap,
+                                  final Map<String, Float> userFeatureMap,
                                   final List<RankItem> rankItems) {
 
         if (CollectionUtils.isEmpty(scorers)) {
@@ -167,7 +167,7 @@ public class ScorerPipeline {
             int position = 0;
             for (RankItem item : items) {
                 item.getRankerIndex().put(scorerName, position++);
-                if(scorerName.equals("finalScore")) {
+                if (scorerName.equals("finalScore")) {
                     item.getRankerScore().put(scorerName, item.getScore());
                 }
             }
@@ -187,9 +187,9 @@ public class ScorerPipeline {
         return items;
     }
 
-    public List<RankItem> scoring(final Map<String, String> sceneFeatureMap,
-                                  final Map<String, String> userFeatureMap,
-                                  final Map<String, String> norUserFeatureMap,
+    public List<RankItem> scoring(final Map<String, Float> sceneFeatureMap,
+                                  final Map<String, Float> userFeatureMap,
+                                  final Map<String, Float> norUserFeatureMap,
                                   final List<RankItem> rankItems) {
 
         if (CollectionUtils.isEmpty(scorers)) {
@@ -198,7 +198,7 @@ public class ScorerPipeline {
         }
         List<RankItem> items = rankItems;
 
-        Map<String, String> userFeatMap;
+        Map<String, Float> userFeatMap;
         for (final AbstractScorer scorer : scorers) {
             if (!scorer.isEnable()) {
                 continue;
@@ -216,7 +216,7 @@ public class ScorerPipeline {
             final String scorerName = scorerNames.length > 0 ? scorerNames[scorerNames.length - 1] : fullScorerName;
 
             final List<RankItem> scoreRankerItems = items;
-            final Map<String, String> tmpUserFeatMap = userFeatMap;
+            final Map<String, Float> tmpUserFeatMap = userFeatMap;
             Callable<List<RankItem>> callable = () -> scorer.scoring(sceneFeatureMap, tmpUserFeatMap, scoreRankerItems);
 
             // execute score use thread to protected score worst time

+ 10 - 10
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/VlogRovFMScorer.java

@@ -33,8 +33,8 @@ public class VlogRovFMScorer extends BaseFMModelScorer {
     }
 
     @Override
-    public List<RankItem> scoring(final Map<String, String> sceneFeatureMap,
-                                  final Map<String, String> userFeatureMap,
+    public List<RankItem> scoring(final Map<String, Float> sceneFeatureMap,
+                                  final Map<String, Float> userFeatureMap,
                                   final List<RankItem> rankItems) {
         if (CollectionUtils.isEmpty(rankItems)) {
             return rankItems;
@@ -55,8 +55,8 @@ public class VlogRovFMScorer extends BaseFMModelScorer {
         return result;
     }
 
-    private List<RankItem> rankByJava(final Map<String, String> sceneFeatureMap,
-                                      final Map<String, String> userFeatureMap,
+    private List<RankItem> rankByJava(final Map<String, Float> sceneFeatureMap,
+                                      final Map<String, Float> userFeatureMap,
                                       final List<RankItem> items) {
         long startTime = System.currentTimeMillis();
         FMModel model = (FMModel) this.getModel();
@@ -81,8 +81,8 @@ public class VlogRovFMScorer extends BaseFMModelScorer {
     }
 
     private void multipleCtrScore(final List<RankItem> items,
-                                  final Map<String, String> userFeatureMap,
-                                  final Map<String, String> sceneFeatureMap,
+                                  final Map<String, Float> userFeatureMap,
+                                  final Map<String, Float> sceneFeatureMap,
                                   final FMModel model) {
 
         List<Callable<Object>> calls = new ArrayList<Callable<Object>>();
@@ -131,11 +131,11 @@ public class VlogRovFMScorer extends BaseFMModelScorer {
 
     public double calcScore(final FMModel model,
                             final RankItem item,
-                            final Map<String, String> userFeatureMap,
-                            final Map<String, String> sceneFeatureMap) {
+                            final Map<String, Float> userFeatureMap,
+                            final Map<String, Float> sceneFeatureMap) {
 
 
-        Map<String, String> featureMap = new HashMap<>();
+        Map<String, Float> featureMap = new HashMap<>();
         if (MapUtils.isNotEmpty(item.getFeatureMap())) {
             featureMap.putAll(item.getFeatureMap());
         }
@@ -156,7 +156,7 @@ public class VlogRovFMScorer extends BaseFMModelScorer {
             }
         }
         item.setScoreRov(pro);
-        item.getScoresMap().put("RovFMScore", pro);
+        //item.getScoresMap().put("RovFMScore", pro);
         item.setAllFeatureMap(featureMap);
         return pro;
     }

+ 13 - 10
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/VlogShareLRScorer.java

@@ -189,8 +189,8 @@ public class VlogShareLRScorer extends BaseLRModelScorer {
     }
 
     @Override
-    public List<RankItem> scoring(final Map<String, String> sceneFeatureMap,
-                                  final Map<String, String> userFeatureMap,
+    public List<RankItem> scoring(final Map<String, Float> sceneFeatureMap,
+                                  final Map<String, Float> userFeatureMap,
                                   final List<RankItem> rankItems) {
         if (CollectionUtils.isEmpty(rankItems)) {
             return rankItems;
@@ -211,21 +211,23 @@ public class VlogShareLRScorer extends BaseLRModelScorer {
         return result;
     }
 
-    private List<RankItem> rankByJava(final Map<String, String> sceneFeatureMap,
-                                      final Map<String, String> userFeatureMap,
+    private List<RankItem> rankByJava(final Map<String, Float> sceneFeatureMap,
+                                      final Map<String, Float> userFeatureMap,
                                       final List<RankItem> items) {
         long startTime = System.currentTimeMillis();
         LRModel model = (LRModel) this.getModel();
         LOGGER.debug("model size: [{}]", model.getModelSize());
         // userBytes
         Map<String, byte[]> userFeatureMapByte = new HashMap<>();
-        for (Map.Entry<String, String> entry : userFeatureMap.entrySet()) {
-            userFeatureMapByte.put(entry.getKey(), entry.getValue().getBytes());
+        for (Map.Entry<String, Float> entry : userFeatureMap.entrySet()) {
+            String value = String.valueOf(entry.getValue());
+            userFeatureMapByte.put(entry.getKey(), value.getBytes());
         }
         //sceneBytes
         Map<String, byte[]> sceneFeatureMapByte = new HashMap<>();
-        for (Map.Entry<String, String> entry : sceneFeatureMap.entrySet()) {
-            sceneFeatureMapByte.put(entry.getKey(), entry.getValue().getBytes());
+        for (Map.Entry<String, Float> entry : sceneFeatureMap.entrySet()) {
+            String value = String.valueOf(entry.getValue());
+            sceneFeatureMapByte.put(entry.getKey(), value.getBytes());
         }
 
         // 所有都参与打分,按照ctr排序
@@ -309,8 +311,9 @@ public class VlogShareLRScorer extends BaseLRModelScorer {
         try {
 
             Map<String, byte[]> itemFeatureByte = new HashMap<>();
-            for (Map.Entry<String, String> entry : item.getFeatureMap().entrySet()) {
-                itemFeatureByte.put(entry.getKey(), entry.getValue().getBytes());
+            for (Map.Entry<String, Float> entry : item.getFeatureMap().entrySet()) {
+                String value = String.valueOf(entry.getValue());
+                itemFeatureByte.put(entry.getKey(), value.getBytes());
             }
             lrSamples = bytesFeatureExtractor.single(userFeatureMapByte, itemFeatureByte, sceneFeatureMapByte);
         } catch (Exception e) {

+ 13 - 10
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/VlogShareLRScorer4Ros.java

@@ -189,8 +189,8 @@ public class VlogShareLRScorer4Ros extends BaseLRModelScorer {
     }
 
     @Override
-    public List<RankItem> scoring(final Map<String, String> sceneFeatureMap,
-                                  final Map<String, String> userFeatureMap,
+    public List<RankItem> scoring(final Map<String, Float> sceneFeatureMap,
+                                  final Map<String, Float> userFeatureMap,
                                   final List<RankItem> rankItems) {
         if (CollectionUtils.isEmpty(rankItems)) {
             return rankItems;
@@ -211,21 +211,23 @@ public class VlogShareLRScorer4Ros extends BaseLRModelScorer {
         return result;
     }
 
-    private List<RankItem> rankByJava(final Map<String, String> sceneFeatureMap,
-                                      final Map<String, String> userFeatureMap,
+    private List<RankItem> rankByJava(final Map<String, Float> sceneFeatureMap,
+                                      final Map<String, Float> userFeatureMap,
                                       final List<RankItem> items) {
         long startTime = System.currentTimeMillis();
         LRModel model = (LRModel) this.getModel();
         LOGGER.debug("model size: [{}]", model.getModelSize());
         // userBytes
         Map<String, byte[]> userFeatureMapByte = new HashMap<>();
-        for (Map.Entry<String, String> entry : userFeatureMap.entrySet()) {
-            userFeatureMapByte.put(entry.getKey(), entry.getValue().getBytes());
+        for (Map.Entry<String, Float> entry : userFeatureMap.entrySet()) {
+            String value = String.valueOf(entry.getValue());
+            userFeatureMapByte.put(entry.getKey(), value.getBytes());
         }
         //sceneBytes
         Map<String, byte[]> sceneFeatureMapByte = new HashMap<>();
-        for (Map.Entry<String, String> entry : sceneFeatureMap.entrySet()) {
-            sceneFeatureMapByte.put(entry.getKey(), entry.getValue().getBytes());
+        for (Map.Entry<String, Float> entry : sceneFeatureMap.entrySet()) {
+            String value = String.valueOf(entry.getValue());
+            sceneFeatureMapByte.put(entry.getKey(), value.getBytes());
         }
 
         // 所有都参与打分,按照ctr排序
@@ -309,8 +311,9 @@ public class VlogShareLRScorer4Ros extends BaseLRModelScorer {
         try {
 
             Map<String, byte[]> itemFeatureByte = new HashMap<>();
-            for (Map.Entry<String, String> entry : item.getFeatureMap().entrySet()) {
-                itemFeatureByte.put(entry.getKey(), entry.getValue().getBytes());
+            for (Map.Entry<String, Float> entry : item.getFeatureMap().entrySet()) {
+                String value = String.valueOf(entry.getValue());
+                itemFeatureByte.put(entry.getKey(), value.getBytes());
             }
             lrSamples = bytesFeatureExtractor.single(userFeatureMapByte, itemFeatureByte, sceneFeatureMapByte);
         } catch (Exception e) {

+ 9 - 9
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/XGBoostScorer.java

@@ -33,8 +33,8 @@ public class XGBoostScorer extends BaseXGBoostModelScorer {
     }
 
     @Override
-    public List<RankItem> scoring(final Map<String, String> sceneFeatureMap,
-                                  final Map<String, String> userFeatureMap,
+    public List<RankItem> scoring(final Map<String, Float> sceneFeatureMap,
+                                  final Map<String, Float> userFeatureMap,
                                   final List<RankItem> rankItems) {
         if (CollectionUtils.isEmpty(rankItems)) {
             return rankItems;
@@ -55,8 +55,8 @@ public class XGBoostScorer extends BaseXGBoostModelScorer {
         return result;
     }
 
-    private List<RankItem> rankByJava(final Map<String, String> sceneFeatureMap,
-                                      final Map<String, String> userFeatureMap,
+    private List<RankItem> rankByJava(final Map<String, Float> sceneFeatureMap,
+                                      final Map<String, Float> userFeatureMap,
                                       final List<RankItem> items) {
         long startTime = System.currentTimeMillis();
         XGBoostModel model = (XGBoostModel) this.getModel();
@@ -80,8 +80,8 @@ public class XGBoostScorer extends BaseXGBoostModelScorer {
     }
 
     private void multipleCtrScore(final List<RankItem> items,
-                                  final Map<String, String> userFeatureMap,
-                                  final Map<String, String> sceneFeatureMap,
+                                  final Map<String, Float> userFeatureMap,
+                                  final Map<String, Float> sceneFeatureMap,
                                   final XGBoostModel model) {
 
         List<Callable<Object>> calls = new ArrayList<Callable<Object>>();
@@ -130,11 +130,11 @@ public class XGBoostScorer extends BaseXGBoostModelScorer {
 
     public double calcScore(final XGBoostModel model,
                             final RankItem item,
-                            final Map<String, String> userFeatureMap,
-                            final Map<String, String> sceneFeatureMap) {
+                            final Map<String, Float> userFeatureMap,
+                            final Map<String, Float> sceneFeatureMap) {
 
 
-        Map<String, String> featureMap = new HashMap<>();
+        Map<String, Float> featureMap = new HashMap<>();
         if (MapUtils.isNotEmpty(item.getFeatureMap())) {
             featureMap.putAll(item.getFeatureMap());
         }

+ 5 - 6
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/model/FMModel.java

@@ -2,7 +2,6 @@ package com.tzld.piaoquan.recommend.server.service.score.model;
 
 
 import org.apache.commons.collections4.MapUtils;
-import org.apache.commons.lang.math.NumberUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -51,14 +50,14 @@ public class FMModel extends Model {
         this.model = null;
     }
 
-    public Float score(Map<String, String> featureMap) {
+    public Float score(Map<String, Float> featureMap) {
         float sum = 0.0f;
 
         if (MapUtils.isNotEmpty(featureMap)) {
             // 计算 sum w*x
             float sum0 = 0.0f;
-            for (Map.Entry<String, String> e : featureMap.entrySet()) {
-                float x = NumberUtils.toFloat(e.getValue(), 0.0f);
+            for (Map.Entry<String, Float> e : featureMap.entrySet()) {
+                float x = e.getValue();
                 float w = getWeight(this.model, e.getKey(), 0);
                 sum0 += w * x;
             }
@@ -69,8 +68,8 @@ public class FMModel extends Model {
             for (int i = 1; i < 9; i++) {
                 float sum10 = 0.0f;
                 float sum11 = 0.0f;
-                for (Map.Entry<String, String> e : featureMap.entrySet()) {
-                    float x = NumberUtils.toFloat(e.getValue(), 0.0f);
+                for (Map.Entry<String, Float> e : featureMap.entrySet()) {
+                    float x = e.getValue();
                     float v = getWeight(this.model, e.getKey(), i);
                     float d = v * x;
                     sum10 += d;

+ 2 - 4
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/model/XGBRegressionModel.java

@@ -4,7 +4,6 @@ import com.tzld.piaoquan.recommend.server.util.CompressUtil;
 import com.tzld.piaoquan.recommend.server.util.PropertiesUtil;
 import ml.dmlc.xgboost4j.scala.DMatrix;
 import ml.dmlc.xgboost4j.scala.spark.XGBoostRegressionModel;
-import org.apache.commons.lang.math.NumberUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,12 +40,11 @@ public class XGBRegressionModel extends Model {
         this.model = null;
     }
 
-    public Float score(Map<String, String> featureMap) {
-
+    public Float score(Map<String, Float> featureMap) {
         try {
             float[] values = new float[features.length];
             for (int i = 0; i < features.length; i++) {
-                float v = NumberUtils.toFloat(featureMap.getOrDefault(features[i], "0.0"), 0.0f);
+                float v = featureMap.getOrDefault(features[i], 0.0f);
                 values[i] = v;
             }
             DMatrix dm = new DMatrix(values, 1, features.length, 0.0f);

+ 2 - 4
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/model/XGBoostModel.java

@@ -5,7 +5,6 @@ import com.tzld.piaoquan.recommend.server.util.CompressUtil;
 import com.tzld.piaoquan.recommend.server.util.PropertiesUtil;
 import ml.dmlc.xgboost4j.scala.DMatrix;
 import ml.dmlc.xgboost4j.scala.spark.XGBoostClassificationModel;
-import org.apache.commons.lang.math.NumberUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -43,12 +42,11 @@ public class XGBoostModel extends Model {
         this.model = null;
     }
 
-    public Float score(Map<String, String> featureMap) {
-
+    public Float score(Map<String, Float> featureMap) {
         try {
             float[] values = new float[features.length];
             for (int i = 0; i < features.length; i++) {
-                float v = NumberUtils.toFloat(featureMap.getOrDefault(features[i], "0.0"), 0.0f);
+                float v = featureMap.getOrDefault(features[i], 0.0f);
                 values[i] = v;
             }
             DMatrix dm = new DMatrix(values, 1, features.length, 0.0f);

+ 10 - 10
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/util/FeatureBucketUtils.java

@@ -32,16 +32,16 @@ public class FeatureBucketUtils {
         log.info("load {} bucketFile", featureBucketMap.size());
     }
 
-    public static Map<String, String> noBucketFeature(Map<String, Double> srcFeature) {
+    public static Map<String, Float> noBucketFeature(Map<String, Double> srcFeature) {
         if (MapUtils.isEmpty(srcFeature)) {
             return new HashMap<>();
         }
-        Map<String, String> featureMap = new HashMap<>(srcFeature.size());
+        Map<String, Float> featureMap = new HashMap<>(srcFeature.size());
         for (Map.Entry<String, Double> entry : srcFeature.entrySet()) {
             String name = entry.getKey();
-            Double score = entry.getValue();
+            double score = entry.getValue();
             if (score > 1E-8) {
-                featureMap.put(name, String.valueOf(score));
+                featureMap.put(name, (float) score);
             }
         }
         return featureMap;
@@ -73,26 +73,26 @@ public class FeatureBucketUtils {
         return featureMap;
     }
 
-    public static Map<String, String> bucketFeatureV2(String bucketFile, Map<String, Double> srcFeature) {
+    public static Map<String, Float> bucketFeatureV2(String bucketFile, Map<String, Double> srcFeature) {
         if (MapUtils.isEmpty(srcFeature)) {
             return new HashMap<>();
         }
-        Map<String, String> featureMap = new HashMap<>(srcFeature.size());
+        Map<String, Float> featureMap = new HashMap<>(srcFeature.size());
         Pair<Map<String, Double>, Map<String, double[]>> pair = featureBucketMap.get(bucketFile);
         if (null != pair && MapUtils.isNotEmpty(pair.getLeft()) && MapUtils.isNotEmpty(pair.getRight())) {
             Map<String, Double> bucketsLen = pair.getLeft();
             Map<String, double[]> bucketsMap = pair.getRight();
             for (Map.Entry<String, Double> entry : srcFeature.entrySet()) {
                 String name = entry.getKey();
-                Double score = entry.getValue();
+                double score = entry.getValue();
                 // 注意:0值、不在分桶文件中的特征,会被过滤掉。
                 if (score > 1E-8 && bucketsLen.containsKey(name) && bucketsMap.containsKey(name)) {
                     Double bucketNum = bucketsLen.get(name);
                     double[] buckets = bucketsMap.get(name);
-                    Double scoreNew = 1.0 / bucketNum * (ExtractorUtils.findInsertPosition(buckets, score) + 1.0);
-                    featureMap.put(name, String.valueOf(scoreNew));
+                    double scoreNew = 1.0 / bucketNum * (ExtractorUtils.findInsertPosition(buckets, score) + 1.0);
+                    featureMap.put(name, (float) scoreNew);
                 } else if (score > 1E-8) {
-                    featureMap.put(name, String.valueOf(score));
+                    featureMap.put(name, (float) score);
                 }
             }
         } else {