Quellcode durchsuchen

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

zhaohaipeng vor 4 Wochen
Ursprung
Commit
f147e062dc

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

@@ -53,7 +53,7 @@ public abstract class RankStrategy4RegionMergeModelBasic extends RankService {
     @Override
     public RankResult mergeAndSort(RankParam param, List<Video> rovVideos, List<Video> flowVideos) {
 
-        //1 兜底策略,rov池子不足时,用冷启池填补。直接返回。
+        // 1 兜底策略,rov池子不足时,用冷启池填补。直接返回。
         if (CollectionUtils.isEmpty(rovVideos)) {
             if (param.getSize() < flowVideos.size()) {
                 return new RankResult(flowVideos.subList(0, param.getSize()));
@@ -62,7 +62,7 @@ public abstract class RankStrategy4RegionMergeModelBasic extends RankService {
             }
         }
 
-        //2 根据实验号解析阿波罗参数。
+        // 2 根据实验号解析阿波罗参数。
         Set<String> abExpCodes = param.getAbExpCodes();
         Map<String, Map<String, String>> rulesMap = Collections.emptyMap();
         if (CollectionUtils.isNotEmpty(abExpCodes)) {
@@ -75,23 +75,23 @@ public abstract class RankStrategy4RegionMergeModelBasic extends RankService {
         }
 
 
-        //3 标签读取
+        // 3 标签读取
         if (rulesMap != null && !rulesMap.isEmpty()) {
             RankExtractorItemTags extractorItemTags = new RankExtractorItemTags(this.redisTemplate);
             extractorItemTags.processor(rovVideos, flowVideos);
         }
-        //6 合并结果时间卡控
+        // 6 合并结果时间卡控
         if (rulesMap != null && !rulesMap.isEmpty()) {
             RankProcessorTagFilter.processor(rovVideos, flowVideos, rulesMap);
         }
 
-        //4 rov池提权功能
+        // 4 rov池提权功能
         RankProcessorBoost.boostByTag(rovVideos, rulesMap);
 
-        //5 rov池强插功能
+        // 5 rov池强插功能
         RankProcessorInsert.insertByTag(param, rovVideos, rulesMap);
 
-        //7 流量池按比例强插
+        // 7 流量池按比例强插
         List<Video> result = new ArrayList<>();
         for (int i = 0; i < param.getTopK() && i < rovVideos.size(); i++) {
             result.add(rovVideos.get(i));
@@ -126,7 +126,7 @@ public abstract class RankStrategy4RegionMergeModelBasic extends RankService {
             }
         }
 
-        //8 合并结果密度控制
+        // 8 合并结果密度控制
         Map<String, Integer> densityRules = new HashMap<>();
         if (rulesMap != null && !rulesMap.isEmpty()) {
             for (Map.Entry<String, Map<String, String>> entry : rulesMap.entrySet()) {
@@ -255,4 +255,83 @@ public abstract class RankStrategy4RegionMergeModelBasic extends RankService {
         }
     }
 
+    //------------------- 对str、ros和vor做处理,通过参数控制处理方式 -------------------
+    protected double handleStr(double originStr, double calcStrMode, RankItem item, Map<String, Double> mergeWeight) {
+        if (originStr == 0) {
+            return 0d;
+        }
+
+        double str = originStr;
+        if (calcStrMode == 1d) {
+            double strPower = mergeWeight.getOrDefault("str_power", 0d);
+            item.getScoresMap().put("strPower", strPower);
+            str = Math.pow(originStr, strPower);
+        } else if (calcStrMode == 2d) {
+            double modelStrCoefficient = mergeWeight.getOrDefault("model_str_coefficient", 8d);
+            item.getScoresMap().put("modelStrCoefficient", modelStrCoefficient);
+            str = originStr * modelStrCoefficient;
+        } else if (calcStrMode == 3d) {
+            double minVal = mergeWeight.getOrDefault("min", 0d);
+            double maxVal = mergeWeight.getOrDefault("max", 1d);
+
+            double newMinVal = mergeWeight.getOrDefault("newMin", 0.99);
+            double newMaxVal = mergeWeight.getOrDefault("newMin", 1d);
+
+            str = (originStr - minVal) / (maxVal - minVal) * (newMaxVal - newMinVal) + newMinVal;
+
+            item.getScoresMap().put("minVal", minVal);
+            item.getScoresMap().put("maxVal", maxVal);
+            item.getScoresMap().put("newMinVal", newMinVal);
+            item.getScoresMap().put("newMaxVal", newMaxVal);
+        }
+
+        return str;
+    }
+
+    protected double handleRos(double originScoreRos, double calcRosMode, RankItem item, Map<String, Double> mergeWeight) {
+        if (originScoreRos == 0) {
+            return 0;
+        }
+
+        double scoreRos = originScoreRos;
+        if (calcRosMode == 1d) {
+            double rosPower = mergeWeight.getOrDefault("le_1_ros_power", 5d);
+            if (scoreRos > 1) {
+                rosPower = mergeWeight.getOrDefault("gt_1_ros_poewr", 1.5d);
+            }
+            item.getScoresMap().put("rosPower", rosPower);
+            scoreRos = Math.pow(ExtractorUtils.inverseLog(originScoreRos), 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(ExtractorUtils.inverseLog(originScoreRos), rosPower);
+        }
+
+        return scoreRos;
+    }
+
+    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);
+        } else if (calcVorMode == 2d) {
+            double vorCoefficient = mergeWeight.getOrDefault("vor_coefficient", 1d);
+            item.getScoresMap().put("vorCoefficient", vorCoefficient);
+            vor = vorCoefficient * originVor;
+        } else if (calcVorMode == 3d) {
+            double vorPower = mergeWeight.getOrDefault("vor_power", 1d);
+            item.getScoresMap().put("vorPower", vorPower);
+            vor = Math.pow(originVor, vorPower);
+        }
+
+        return vor;
+    }
+
 }

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

@@ -5,7 +5,6 @@ import com.tzld.piaoquan.recommend.server.common.base.RankItem;
 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.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;
@@ -196,7 +195,7 @@ public class RankStrategy4RegionMergeModelV565 extends RankStrategy4RegionMergeM
 
         double calcVorMode = mergeWeight.getOrDefault("calcVorMode", 3d);
         double calcRosMode = mergeWeight.getOrDefault("calcRosMode", 0d);
-        double calcStrMode = mergeWeight.getOrDefault("calcStrMode", 1d);
+        double calcStrMode = mergeWeight.getOrDefault("calcStrMode", 3d);
 
 
         double rosAdd = mergeWeight.getOrDefault("ros_add", 0d);
@@ -217,12 +216,6 @@ public class RankStrategy4RegionMergeModelV565 extends RankStrategy4RegionMergeM
 
             Map<String, String> vidFeatureMap = vid2MapFeature.getOrDefault(String.valueOf(item.getVideoId()), new HashMap<>());
 
-            double vor24h = Double.parseDouble(vidFeatureMap.getOrDefault("vor_24h", "0"));
-            double vor = this.handleVor(vor24h, calcVorMode, item, mergeWeight);
-
-            item.getScoresMap().put("originVor", vor24h);
-            item.getScoresMap().put("vor", vor);
-            item.getScoresMap().put("calcVorMode", calcVorMode);
 
             double originScoreRos = item.getScoreRos();
             double ros = this.handleRos(originScoreRos, calcRosMode, item, mergeWeight);
@@ -231,6 +224,15 @@ public class RankStrategy4RegionMergeModelV565 extends RankStrategy4RegionMergeM
             item.getScoresMap().put("hasReturnRovScore", ros);
             item.getScoresMap().put("calcRosMode", calcRosMode);
 
+
+            double vor24h = Double.parseDouble(vidFeatureMap.getOrDefault("vor_24h", "0"));
+            double vor = this.handleVor(vor24h, calcVorMode, item, mergeWeight);
+
+            item.getScoresMap().put("originVor", vor24h);
+            item.getScoresMap().put("vor", vor);
+            item.getScoresMap().put("calcVorMode", calcVorMode);
+
+
             item.getScoresMap().put("rosAdd", rosAdd);
             item.getScoresMap().put("vorAdd", vorAdd);
             score = fmRov * (rosAdd + ros) * (vorAdd + vor);
@@ -269,68 +271,6 @@ public class RankStrategy4RegionMergeModelV565 extends RankStrategy4RegionMergeM
         return result;
     }
 
-    private double handleStr(double originStr, double calcStrMode, RankItem item, Map<String, Double> mergeWeight) {
-        if (originStr == 0) {
-            return 0d;
-        }
-
-        double str = originStr;
-        if (calcStrMode == 1d) {
-            double strPower = mergeWeight.getOrDefault("str_power", 0d);
-            item.getScoresMap().put("strPower", strPower);
-            str = Math.pow(originStr, strPower);
-        } else if (calcStrMode == 2d) {
-            double modelStrCoefficient = mergeWeight.getOrDefault("model_str_coefficient", 8d);
-            item.getScoresMap().put("modelStrCoefficient", modelStrCoefficient);
-            str = originStr * modelStrCoefficient;
-        }
-
-        return str;
-    }
-
-    private double handleRos(double originScoreRos, double calcRosMode, RankItem item, Map<String, Double> mergeWeight) {
-        if (originScoreRos == 0) {
-            return 0;
-        }
-
-        double scoreRos = 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(ExtractorUtils.inverseLog(originScoreRos), 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(ExtractorUtils.inverseLog(originScoreRos), rosPower);
-        }
-
-        return scoreRos;
-    }
-
-    private double handleVor(double originVor, double calcVorMode, RankItem item, Map<String, Double> mergeWeight) {
-        double vor = originVor;
-        if (calcVorMode == 1d) {
-            vor = ExtractorUtils.calLog(originVor);
-        } else if (calcVorMode == 2d) {
-            double vorCoefficient = mergeWeight.getOrDefault("vor_coefficient", 1d);
-            item.getScoresMap().put("vorCoefficient", vorCoefficient);
-            vor = vorCoefficient * originVor;
-        } else if (calcVorMode == 3d) {
-            double vorPower = mergeWeight.getOrDefault("vor_power", 0d);
-            item.getScoresMap().put("vorPower", vorPower);
-            vor = Math.pow(originVor, vorPower);
-        }
-
-        return vor;
-    }
-
     /**
      * ros模型打分
      */

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

@@ -1,21 +1,15 @@
 package com.tzld.piaoquan.recommend.server.service.rank.strategy;
 
-import com.alibaba.fastjson.JSON;
 import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.tzld.piaoquan.recommend.server.common.ThreadPoolFactory;
 import com.tzld.piaoquan.recommend.server.common.base.RankItem;
 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.bo.UserSRBO;
-import com.tzld.piaoquan.recommend.server.service.rank.bo.UserShareReturnProfile;
 import com.tzld.piaoquan.recommend.server.service.rank.extractor.ExtractorUtils;
-import com.tzld.piaoquan.recommend.server.service.rank.tansform.NORFeature;
 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;
-import com.tzld.piaoquan.recommend.server.util.FeatureBucketUtils;
-import com.tzld.piaoquan.recommend.server.util.JSONUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.math3.util.Pair;
@@ -44,7 +38,6 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
         //-------------------逻-------------------
         //-------------------辑-------------------
 
-        long currentMs = System.currentTimeMillis();
         List<Video> oldRovs = new ArrayList<>();
         oldRovs.addAll(extractAndSort(param, RegionHRecallStrategy.PUSH_FORM));
         oldRovs.addAll(extractAndSort(param, RegionHDupRecallStrategy.PUSH_FORM));
@@ -84,18 +77,6 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
         sceneCFRosn = sceneCFRosn.subList(0, Math.min(mergeWeight.getOrDefault("sceneCFRosn", 5.0).intValue(), sceneCFRosn.size()));
         rovRecallRank.addAll(sceneCFRosn);
         setVideo.addAll(sceneCFRosn.stream().map(Video::getVideoId).collect(Collectors.toSet()));
-        // -------------------cate1------------------
-        int cate1RecallN = mergeWeight.getOrDefault("cate1RecallN", 5.0).intValue();
-        addRecall(param, cate1RecallN, UserCate1RecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
-        // -------------------cate2------------------
-        int cate2RecallN = mergeWeight.getOrDefault("cate2RecallN", 5.0).intValue();
-        addRecall(param, cate2RecallN, UserCate2RecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
-        // -------------------head province cate1------------------
-        int headCate1RecallN = mergeWeight.getOrDefault("headCate1RecallN", 5.0).intValue();
-        addRecall(param, headCate1RecallN, HeadProvinceCate1RecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
-        // -------------------head province cate2------------------
-        int headCate2RecallN = mergeWeight.getOrDefault("headCate2RecallN", 5.0).intValue();
-        addRecall(param, headCate2RecallN, HeadProvinceCate2RecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
 
         //-------------------排-------------------
         //-------------------序-------------------
@@ -106,18 +87,13 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
         List<String> vids = CommonCollectionUtils.toListDistinct(rovRecallRank, v -> String.valueOf(v.getVideoId()));
 
         // k1:视频、k2:表、k3:特征、v:特征值
+        String provinceCn = param.getProvince().replaceAll("省$", "");
         String headVid = String.valueOf(param.getHeadVid());
-        Map<String, Map<String, Map<String, String>>> videoBaseInfoMap = featureService.getVideoBaseInfo(headVid, vids);
-        FeatureService.Feature feature = featureService.getFeatureV3(param, videoBaseInfoMap, vids);
+        FeatureService.Feature feature = featureService.getFeature(param.getMid(), vids,
+                String.valueOf(param.getAppType()), provinceCn, headVid);
         Map<String, Map<String, String>> featureOriginUser = feature.getUserFeature();
         Map<String, Map<String, Map<String, String>>> featureOriginVideo = feature.getVideoFeature();
-        Map<String, String> headVideoInfo = videoBaseInfoMap.getOrDefault(headVid, new HashMap<>()).getOrDefault("alg_vid_feature_basic_info", new HashMap<>());
 
-        // 用户信息预处理
-        Map<String, Map<String, String[]>> newC7Map = NORFeature.parseUCFScore(featureOriginUser.getOrDefault("alg_mid_feature_sharecf", new HashMap<>()));
-        Map<String, Map<String, String[]>> newC8Map = NORFeature.parseUCFScore(featureOriginUser.getOrDefault("alg_mid_feature_returncf", new HashMap<>()));
-        UserShareReturnProfile userProfile = parseUserProfile(featureOriginUser);
-        Map<String, Map<String, String>> userBehaviorVideoMap = getUserBehaviorVideoMap(userProfile);
 
         // 2 特征处理
         Map<String, Double> userFeatureMapDouble = new HashMap<>();
@@ -248,7 +224,7 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
                 }
             }
 
-            Map<String, String> videoInfo = videoBaseInfoMap.getOrDefault(vid, new HashMap<>()).getOrDefault("alg_vid_feature_basic_info", new HashMap<>());
+            Map<String, String> videoInfo = featureOriginVideo.getOrDefault(vid, new HashMap<>()).getOrDefault("alg_vid_feature_basic_info", new HashMap<>());
             featureMap.put("total_time", Double.parseDouble(videoInfo.getOrDefault("total_time", "0")));
             featureMap.put("bit_rate", Double.parseDouble(videoInfo.getOrDefault("bit_rate", "0")));
 
@@ -305,11 +281,6 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
             item.featureMapDouble = featureMap;
         }
 
-        // get nor feature
-        Map<String, String> norUserFeatureMap = getNorUserFeature(currentMs, headVideoInfo, userProfile, featureOriginUser);
-        batchGetNorVideoFeature(currentMs, userProfile, headVideoInfo, videoBaseInfoMap,
-                newC7Map, newC8Map, featureOriginUser, userBehaviorVideoMap, featureOriginVideo, rankItems);
-
         // 3 连续值特征分桶
         readBucketFile();
         Map<String, String> userFeatureMap = new HashMap<>(userFeatureMapDouble.size());
@@ -342,27 +313,67 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
             item.featureMap = featureMap;
         }
         // 4 排序模型计算
-        double xgbNorPowerWeight = mergeWeight.getOrDefault("xgbNorPowerWeight", 1.22);
-        double xgbNorPowerExp = mergeWeight.getOrDefault("xgbNorPowerExp", 1.24);
         Map<String, String> sceneFeatureMap = new HashMap<>(0);
-        List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20250303.conf").scoring(sceneFeatureMap, userFeatureMap, norUserFeatureMap, rankItems);
+        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:");
+
         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", 2d);
+        String spreadDivisorKey = this.indexCoverKey(rosSpreadDivisorIndex);
+        log.info("567 spreadDivisorKey is: {}", spreadDivisorKey);
+
         for (RankItem item : items) {
             double score;
             double fmRovOrigin = item.getScoreRov();
             item.getScoresMap().put("fmRovOrigin", fmRovOrigin);
-            double fmRov = restoreScore(fmRovOrigin);
-            item.getScoresMap().put("fmRov", fmRov);
-            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 = norPowerCalibration(xgbNorPowerWeight, xgbNorPowerExp, norXGBScore);
-            double vor = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("vor", "0"));
+            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);
             item.getScoresMap().put("vor", vor);
-            score = fmRov * (0.1 + newNorXGBScore) * (0.1 + vor);
+            item.getScoresMap().put("calcVorMode", calcVorMode);
+
+
+            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);
+
             Video video = item.getVideo();
+            video.setScoreStr(str);
+            video.setScoreRos(rosAdd + ros + ros2Multi * rosSpreadDiv);
             video.setScore(score);
             video.setSortScore(score);
             video.setScoresMap(item.getScoresMap());
@@ -370,12 +381,6 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
             if (MapUtils.isNotEmpty(feature.getVideoFeature()) && MapUtils.isNotEmpty(feature.getVideoFeature().get(item.getVideoId() + ""))) {
                 video.getMetaFeatureMap().putAll(feature.getVideoFeature().get(item.getVideoId() + ""));
             }
-            if (MapUtils.isNotEmpty(videoBaseInfoMap) && MapUtils.isNotEmpty(videoBaseInfoMap.get(item.getVideoId() + ""))) {
-                video.getMetaFeatureMap().putAll(videoBaseInfoMap.get(item.getVideoId() + ""));
-            }
-            if (MapUtils.isNotEmpty(headVideoInfo)) {
-                video.getMetaFeatureMap().put("head_video", headVideoInfo);
-            }
             if (MapUtils.isNotEmpty(feature.getUserFeature())) {
                 video.getMetaFeatureMap().putAll(feature.getUserFeature());
             }
@@ -385,145 +390,17 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
         return result;
     }
 
-    private UserShareReturnProfile parseUserProfile(Map<String, Map<String, String>> userOriginInfo) {
-        if (null != userOriginInfo) {
-            Map<String, String> c9 = userOriginInfo.get("alg_recsys_feature_user_share_return_stat");
-            if (null != c9 && !c9.isEmpty()) {
-                String c9Str = JSONUtils.toJson(c9);
-                if (!c9Str.isEmpty()) {
-                    try {
-                        return JSON.parseObject(c9Str, UserShareReturnProfile.class);
-                    } catch (Exception e) {
-                        log.error("parseObject user profile error! value=[{}]", c9Str, e);
-                    }
-                }
-            }
-        }
-        return null;
-    }
-
-    private Map<String, Map<String, String>> getUserBehaviorVideoMap(UserShareReturnProfile userProfile) {
-        Set<String> vidSet = new HashSet<>();
-        if (null != userProfile) {
-            for (List<UserSRBO> list : Arrays.asList(userProfile.getM_s_s(), userProfile.getM_r_s(), userProfile.getL_s_s(), userProfile.getL_r_s())) {
-                if (null != list) {
-                    for (UserSRBO u : list) {
-                        if (null != u) {
-                            vidSet.add(u.getId() + "");
-                        }
-                    }
-                }
-            }
-        }
-
-        Map<String, Map<String, String>> historyVideoMap = new HashMap<>();
-        if (!vidSet.isEmpty()) {
-            Map<String, Map<String, Map<String, String>>> videoMap = featureService.getVideoBaseInfo("", new ArrayList<>(vidSet));
-            if (null != videoMap && !videoMap.isEmpty()) {
-                for (Map.Entry<String, Map<String, Map<String, String>>> entry : videoMap.entrySet()) {
-                    String vid = entry.getKey();
-                    Map<String, Map<String, String>> map = entry.getValue();
-                    if (null != map && map.containsKey("alg_vid_feature_basic_info")) {
-                        historyVideoMap.put(vid, map.get("alg_vid_feature_basic_info"));
-                    }
-                }
-            }
-        }
-        return historyVideoMap;
-    }
-
-    private Map<String, String> getNorUserFeature(long currentMs, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
-        Map<String, Double> featMap = new HashMap<>();
-        // context feature
-        NORFeature.getContextFeature(currentMs, featMap);
-
-        // head video feature
-        NORFeature.getVideoBaseFeature("h", currentMs, headInfo, featMap);
-
-        // user feature
-        NORFeature.getUserFeature(userOriginInfo, featMap);
-        NORFeature.getUserProfileFeature(userProfile, featMap);
-
-        return FeatureBucketUtils.noBucketFeature(featMap);
-    }
-
-    private Map<String, String> getNorVideoFeature(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
-        NORFeature.getUserTagsCrossVideoFeature("c5", rankInfo, userOriginInfo.get("alg_mid_feature_return_tags"), featMap);
-        NORFeature.getUserTagsCrossVideoFeature("c6", rankInfo, userOriginInfo.get("alg_mid_feature_share_tags"), featMap);
-        NORFeature.getUserCFFeature("c7", vid, c7Map, featMap);
-        NORFeature.getUserCFFeature("c8", vid, c8Map, featMap);
-
-        // rank video feature
-        NORFeature.getVideoBaseFeature("r", currentMs, rankInfo, featMap);
-        NORFeature.getVideoFeature(vid, videoOriginInfo, featMap);
-
-        // head&rank cross feature
-        NORFeature.getHeadRankVideoCrossFeature(headInfo, rankInfo, featMap);
-
-        // user profile & rank cross
-        NORFeature.getProfileVideoCrossFeature(currentMs, userProfile, rankInfo, historyVideoMap, featMap);
-
-        return FeatureBucketUtils.noBucketFeature(featMap);
-    }
-
-    private void batchGetNorVideoFeature(long currentMs,
-                                         UserShareReturnProfile userProfile,
-                                         Map<String, String> headInfo,
-                                         Map<String, Map<String, Map<String, String>>> videoBaseInfoMap,
-                                         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,
-                                         List<RankItem> rankItems) {
-        if (null != rankItems && !rankItems.isEmpty()) {
-            List<Future<Integer>> futures = new ArrayList<>();
-            for (RankItem item : rankItems) {
-                String vid = item.getVideoId() + "";
-                Map<String, String> rankInfo = videoBaseInfoMap.getOrDefault(vid, new HashMap<>()).getOrDefault("alg_vid_feature_basic_info", new HashMap<>());
-                Future<Integer> future = ThreadPoolFactory.defaultPool().submit(() -> {
-                    item.norFeatureMap = getNorVideoFeature(currentMs, vid, userProfile, headInfo, rankInfo, c7Map, c8Map, userOriginInfo, historyVideoMap, videoOriginInfo);
-                    return 1;
-                });
-                futures.add(future);
-            }
-
-            try {
-                for (Future<Integer> future : futures) {
-                    future.get(1000, TimeUnit.MILLISECONDS);
-                }
-            } catch (Exception e) {
-                log.error("get nor feature error", e);
-            }
+    private String indexCoverKey(double index) {
+        switch (String.valueOf(index)) {
+            case "1":
+                return "head_video_rov1";
+            case "3":
+                return "head_video_recommend_rovn";
+            case "4":
+                return "head_video_recommend_fission_rate";
+            default:
+                return "recommend_123_depth_fission_rate";
         }
     }
 
-    private double norPowerCalibration(double weight, double exp, double score) {
-        double newScore = weight * Math.pow(score, exp);
-        if (newScore > 100) {
-            newScore = 100;
-        } else if (newScore < score) {
-            newScore = score;
-        }
-        return newScore;
-    }
-
-    private void addRecall(RankParam param, int recallNum, String recallName, Set<Long> setVideo, List<Video> rovRecallRank) {
-        if (recallNum > 0) {
-            List<Video> list = extractAndSort(param, recallName);
-            list = list.stream().filter(r -> !setVideo.contains(r.getVideoId())).collect(Collectors.toList());
-            list = list.subList(0, Math.min(recallNum, list.size()));
-            rovRecallRank.addAll(list);
-            setVideo.addAll(list.stream().map(Video::getVideoId).collect(Collectors.toSet()));
-        }
-    }
 }

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

@@ -271,71 +271,6 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
         return result;
     }
 
-    private double handleStr(double originStr, double calcStrMode, RankItem item, Map<String, Double> mergeWeight) {
-        if (originStr == 0) {
-            return 0d;
-        }
-
-        double str = originStr;
-        if (calcStrMode == 1d) {
-            double strPower = mergeWeight.getOrDefault("str_power", 0d);
-            item.getScoresMap().put("strPower", strPower);
-            str = Math.pow(originStr, strPower);
-        } else if (calcStrMode == 2d) {
-            double modelStrCoefficient = mergeWeight.getOrDefault("model_str_coefficient", 8d);
-            item.getScoresMap().put("modelStrCoefficient", modelStrCoefficient);
-            str = originStr * modelStrCoefficient;
-        }
-
-        return str;
-    }
-
-    private double handleRos(double originScoreRos, double calcRosMode, RankItem item, Map<String, Double> mergeWeight) {
-        if (originScoreRos == 0) {
-            return 0;
-        }
-
-        double scoreRos = 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(ExtractorUtils.inverseLog(originScoreRos), 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(ExtractorUtils.inverseLog(originScoreRos), rosPower);
-        }
-
-        return scoreRos;
-    }
-
-    private 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);
-        } else if (calcVorMode == 2d) {
-            double vorCoefficient = mergeWeight.getOrDefault("vor_coefficient", 1d);
-            item.getScoresMap().put("vorCoefficient", vorCoefficient);
-            vor = vorCoefficient * originVor;
-        } else if (calcVorMode == 3d) {
-            double vorPower = mergeWeight.getOrDefault("vor_power", 1d);
-            item.getScoresMap().put("vorPower", vorPower);
-            vor = Math.pow(originVor, vorPower);
-        }
-
-        return vor;
-    }
-
     /**
      * ros模型打分
      */