Переглянути джерело

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

zhaohaipeng 2 тижнів тому
батько
коміт
757ea7e9ab

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

@@ -311,9 +311,6 @@ public abstract class RankStrategy4RegionMergeModelBasic extends RankService {
     }
 
     protected double handleVor(double originVor, double calcVorMode, RankItem item, Map<String, Double> mergeWeight) {
-        if (originVor == 0) {
-            return 0;
-        }
         double vor = originVor;
         if (calcVorMode == 1d) {
             vor = ExtractorUtils.calLog(originVor);
@@ -325,6 +322,8 @@ public abstract class RankStrategy4RegionMergeModelBasic extends RankService {
             double vorPower = mergeWeight.getOrDefault("vor_power", 0d);
             item.getScoresMap().put("vorPower", vorPower);
             vor = Math.pow(originVor, vorPower);
+        }else if (calcVorMode == 4d){
+            vor = 1.0;
         }
 
         return vor;

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

@@ -38,6 +38,7 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
         //-------------------逻-------------------
         //-------------------辑-------------------
 
+        //-------------------老地域召回------------------
         List<Video> oldRovs = new ArrayList<>();
         oldRovs.addAll(extractAndSort(param, RegionHRecallStrategy.PUSH_FORM));
         oldRovs.addAll(extractAndSort(param, RegionHDupRecallStrategy.PUSH_FORM));
@@ -46,36 +47,34 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
         oldRovs.addAll(extractAndSort(param, RegionRelative24HDupRecallStrategy.PUSH_FORM));
         removeDuplicate(oldRovs);
         int sizeReturn = param.getSize();
-        List<Video> v0 = oldRovs.size() <= sizeReturn
-                ? oldRovs
-                : oldRovs.subList(0, sizeReturn);
+        List<Video> v0 = oldRovs.size() <= sizeReturn ? oldRovs : oldRovs.subList(0, sizeReturn);
         Set<Long> setVideo = new HashSet<>();
         this.duplicate(setVideo, v0);
         setVideo.addAll(v0.stream().map(Video::getVideoId).collect(Collectors.toSet()));
-        List<Video> rovRecallRank = new ArrayList<>(v0);
+        List<Video> recallVideos4Rank = new ArrayList<>(v0);
         //-------------------return相似召回------------------
         List<Video> v6 = extractAndSort(param, ReturnVideoRecallStrategy.PUSH_FORM);
         v6 = v6.stream().filter(r -> !setVideo.contains(r.getVideoId())).collect(Collectors.toList());
         v6 = v6.subList(0, Math.min(mergeWeight.getOrDefault("v6", 5.0).intValue(), v6.size()));
-        rovRecallRank.addAll(v6);
+        recallVideos4Rank.addAll(v6);
         setVideo.addAll(v6.stream().map(Video::getVideoId).collect(Collectors.toSet()));
         //-------------------新地域召回------------------
         List<Video> v1 = extractAndSort(param, RegionRealtimeRecallStrategyV1.PUSH_FORM);
         v1 = v1.stream().filter(r -> !setVideo.contains(r.getVideoId())).collect(Collectors.toList());
         v1 = v1.subList(0, Math.min(mergeWeight.getOrDefault("v1", 5.0).intValue(), v1.size()));
-        rovRecallRank.addAll(v1);
+        recallVideos4Rank.addAll(v1);
         setVideo.addAll(v1.stream().map(Video::getVideoId).collect(Collectors.toSet()));
         //-------------------scene cf rovn------------------
         List<Video> sceneCFRovn = extractAndSort(param, SceneCFRovnRecallStrategy.PUSH_FORM);
         sceneCFRovn = sceneCFRovn.stream().filter(r -> !setVideo.contains(r.getVideoId())).collect(Collectors.toList());
         sceneCFRovn = sceneCFRovn.subList(0, Math.min(mergeWeight.getOrDefault("sceneCFRovn", 5.0).intValue(), sceneCFRovn.size()));
-        rovRecallRank.addAll(sceneCFRovn);
+        recallVideos4Rank.addAll(sceneCFRovn);
         setVideo.addAll(sceneCFRovn.stream().map(Video::getVideoId).collect(Collectors.toSet()));
         //-------------------scene cf rosn------------------
         List<Video> sceneCFRosn = extractAndSort(param, SceneCFRosnRecallStrategy.PUSH_FORM);
         sceneCFRosn = sceneCFRosn.stream().filter(r -> !setVideo.contains(r.getVideoId())).collect(Collectors.toList());
         sceneCFRosn = sceneCFRosn.subList(0, Math.min(mergeWeight.getOrDefault("sceneCFRosn", 5.0).intValue(), sceneCFRosn.size()));
-        rovRecallRank.addAll(sceneCFRosn);
+        recallVideos4Rank.addAll(sceneCFRosn);
         setVideo.addAll(sceneCFRosn.stream().map(Video::getVideoId).collect(Collectors.toSet()));
 
         //-------------------排-------------------
@@ -84,7 +83,7 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
         //-------------------辑-------------------
 
         // 1 批量获取特征  省份参数要对齐  headvid  要传递过来!
-        List<String> vids = CommonCollectionUtils.toListDistinct(rovRecallRank, v -> String.valueOf(v.getVideoId()));
+        List<String> vids = CommonCollectionUtils.toListDistinct(recallVideos4Rank, v -> String.valueOf(v.getVideoId()));
 
         // k1:视频、k2:表、k3:特征、v:特征值
         String provinceCn = param.getProvince().replaceAll("省$", "");
@@ -97,7 +96,7 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
 
         // 2 特征处理
         Map<String, Double> userFeatureMapDouble = new HashMap<>();
-        String mid = param.getMid();
+        // String mid = param.getMid();
         Map<String, String> c1 = featureOriginUser.getOrDefault("alg_mid_feature_play", new HashMap<>());
         Map<String, String> c2 = featureOriginUser.getOrDefault("alg_mid_feature_share_and_return", new HashMap<>());
         Map<String, String> c3 = featureOriginUser.getOrDefault("alg_mid_feature_play_tags", new HashMap<>());
@@ -170,7 +169,7 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
         }
 
 
-        List<RankItem> rankItems = CommonCollectionUtils.toList(rovRecallRank, RankItem::new);
+        List<RankItem> rankItems = CommonCollectionUtils.toList(recallVideos4Rank, RankItem::new);
         for (RankItem item : rankItems) {
             Map<String, Double> featureMap = new HashMap<>();
             String vid = item.getVideoId() + "";
@@ -317,63 +316,45 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
         List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_20240807.conf").scoring(sceneFeatureMap, userFeatureMap, rankItems);
         // 5 排序公式特征
         Map<String, Map<String, String>> vid2MapFeature = this.getVideoRedisFeature(vids, "redis:vid_hasreturn_vor:");
-
         // Ros增强传播因子
         Map<String, Map<String, String>> rosSpreadDivMap = this.getVideoRedisFeature(vids, "vid_for_spread:");
-
+        double alpha = mergeWeight.getOrDefault("alpha", 0.1);
+        double beta = mergeWeight.getOrDefault("beta", 0.0);
+        double gamma = mergeWeight.getOrDefault("gamma", 0.5);
+        double vorMod =  mergeWeight.getOrDefault("vorMod", 4.0);
         List<Video> result = new ArrayList<>();
-
-        double calcVorMode = mergeWeight.getOrDefault("calcVorMode", 3d);
-        double calcRosMode = mergeWeight.getOrDefault("calcRosMode", 0d);
-        double calcStrMode = mergeWeight.getOrDefault("calcStrMode", 3d);
-
-        double rosAdd = mergeWeight.getOrDefault("ros_add", 0.1d);
-        double ros2Multi = mergeWeight.getOrDefault("ros2_multi", 1d);
-        double vorAdd = mergeWeight.getOrDefault("vor_add", 0d);
-
-        double rosSpreadDivisorIndex = mergeWeight.getOrDefault("rosSpreadDivisorIndex", 4d);
-        String spreadDivisorKey = this.indexCoverKey(rosSpreadDivisorIndex);
-        log.info("562 spreadDivisorKey is: {}", spreadDivisorKey);
-
         for (RankItem item : items) {
-            double score;
             double fmRovOrigin = item.getScoreRov();
             item.getScoresMap().put("fmRovOrigin", fmRovOrigin);
-            double str = restoreScore(fmRovOrigin);
-            item.getScoresMap().put("originStr", str);
-            str = this.handleStr(str, calcStrMode, item, mergeWeight);
-            item.getScoresMap().put("xgbRovNegRate", 0.9d);
-            item.getScoresMap().put("fmRov", str);
-            item.getScoresMap().put("str", str);
-            item.getScoresMap().put("calcStrMode", calcStrMode);
-
-            double originRos = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("rov", "0"));
-            double ros = this.handleRos(originRos, calcRosMode, item, mergeWeight);
-            item.getScoresMap().put("hasReturnRovScore", ros);
-            item.getScoresMap().put("ros", ros);
-            item.getScoresMap().put("originRos", originRos);
-            item.getScoresMap().put("calcRosMode", calcRosMode);
-
-            String spreadDivStr = rosSpreadDivMap.getOrDefault(String.valueOf(item.getVideoId()), new HashMap<>()).getOrDefault(spreadDivisorKey, "0");
-            double rosSpreadDiv = Double.parseDouble(spreadDivStr);
-            item.getScoresMap().put("rosSpreadDiv", rosSpreadDiv);
-
-            double originVor = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("vor", "0"));
-            double vor = this.handleVor(originVor, calcVorMode, item, mergeWeight);
-            item.getScoresMap().put("originVor", originVor);
+            double fmRov = restoreScore(fmRovOrigin);
+            item.getScoresMap().put("fmRov", fmRov);
+            double strTransfor = fmRov;
+            item.getScoresMap().put("strTransfor", strTransfor);
+            double originRos = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>(0)).getOrDefault("rov", "0"));
+            item.getScoresMap().put("hasReturnRovScore", originRos);
+            double rosTransfor = originRos;
+            item.getScoresMap().put("rosTransfor", rosTransfor);
+            double vor = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("vor", "0"));
             item.getScoresMap().put("vor", vor);
-            item.getScoresMap().put("calcVorMode", calcVorMode);
+            double vorTransfor = this.handleVor(vor, vorMod, item, mergeWeight);
+            item.getScoresMap().put("vorTransfor", vorTransfor);
+            double spreadRate = Double.parseDouble(rosSpreadDivMap.getOrDefault(String.valueOf(item.getVideoId()), new HashMap<>(0)).getOrDefault("head_video_recommend_fission_rate", "0.01"));
+            item.getScoresMap().put("spreadRate", spreadRate);
+
+            // 最终融合公式计算
+            double scoreRov = strTransfor * (alpha + rosTransfor);
+            double scoreVov = scoreRov * (beta + vorTransfor);
+            double score = scoreVov + gamma * spreadRate;
 
+            item.getScoresMap().put("scoreRov", scoreRov);
+            item.getScoresMap().put("scoreVov", scoreVov);
+            item.getScoresMap().put("score", score);
 
-            item.getScoresMap().put("rosAdd", rosAdd);
-            item.getScoresMap().put("vorAdd", vorAdd);
-            item.getScoresMap().put("ros2Multi", ros2Multi);
-            item.getScoresMap().put("rosSpreadDivisorIndex", rosSpreadDivisorIndex);
-            score = str * (rosAdd + ros + ros2Multi * rosSpreadDiv) * (vorAdd + vor);
+            item.getScoresMap().put("alpha", alpha);
+            item.getScoresMap().put("beta", beta);
+            item.getScoresMap().put("gamma", gamma);
 
             Video video = item.getVideo();
-            video.setScoreStr(str);
-            video.setScoreRos(rosAdd + ros + ros2Multi * rosSpreadDiv);
             video.setScore(score);
             video.setSortScore(score);
             video.setScoresMap(item.getScoresMap());

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

@@ -112,7 +112,7 @@ public class RecallService implements ApplicationContextAware {
         strategies.add(strategyMap.get(SceneCFRovnRecallStrategy.class.getSimpleName()));
         strategies.add(strategyMap.get(SceneCFRosnRecallStrategy.class.getSimpleName()));
         Set<String> abExpCodes = param.getAbExpCodes();
-        if (CollectionUtils.isNotEmpty(abExpCodes) && abExpCodes.contains("567")) {
+        if (CollectionUtils.isNotEmpty(abExpCodes) && abExpCodes.contains("564")) {
             strategies.add(strategyMap.get(UserCate1RecallStrategy.class.getSimpleName()));
             strategies.add(strategyMap.get(UserCate2RecallStrategy.class.getSimpleName()));
             strategies.add(strategyMap.get(HeadProvinceCate1RecallStrategy.class.getSimpleName()));