Browse Source

在564中添加562&567 score 日志

jch 5 months ago
parent
commit
90b9fb2039

+ 0 - 6
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/AbstractFilterService.java

@@ -126,12 +126,6 @@ public abstract class AbstractFilterService {
                 strategies.add(ServiceBeanFactory.getBean(TagStrategy.class));
                 break;
         }
-
-        // VOV过滤实验
-        if (CollectionUtils.isNotEmpty(param.getAbExpCodes()) && param.getAbExpCodes().contains("564")) {
-            strategies.add(ServiceBeanFactory.getBean(VovLowerStrategy.class));
-        }
-
         if (CollectionUtils.isNotEmpty(param.getAbExpCodes()) && param.getAbExpCodes().contains("697")) {
             strategies.add(ServiceBeanFactory.getBean(VideoSourceTypeStrategy.class));
         }

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

@@ -9,6 +9,7 @@ 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.service.score.VovH24Weight562Scorer;
 import com.tzld.piaoquan.recommend.server.util.CommonCollectionUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
@@ -28,6 +29,12 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
     @ApolloJsonValue("${rank.score.merge.weightv564:}")
     private Map<String, Double> mergeWeight;
 
+    @ApolloJsonValue("${rank.score.merge.weightv562:}")
+    private Map<String, Double> mergeWeight562;
+
+    @ApolloJsonValue("${rank.score.merge.weightv567:}")
+    private Map<String, Double> mergeWeight567;
+
     @Autowired
     private FeatureService featureService;
 
@@ -37,6 +44,8 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
     @Override
     public List<Video> mergeAndRankRovRecall(RankParam param) {
         Map<String, Double> mergeWeight = this.mergeWeight != null ? this.mergeWeight : new HashMap<>(0);
+        Map<String, Double> mergeWeight562 = this.mergeWeight562 != null ? this.mergeWeight562 : new HashMap<>(0);
+        Map<String, Double> mergeWeight567 = this.mergeWeight567 != null ? this.mergeWeight567 : new HashMap<>(0);
         //-------------------融-------------------
         //-------------------合-------------------
         //-------------------逻-------------------
@@ -346,9 +355,16 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
             sceneFeatureMap.put("weightKey", partition.substring(partition.length() - 2));
         }
         List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_20241119.conf").scoring(sceneFeatureMap, userFeatureMap, rankItems);
+
+        // 562 vovScore
+        Map<String, Map<String, String>> vov562FeatureMap = this.getVideoRedisFeature(vids, "redis:vid_vovhour4rank:");
+        VovH24Weight562Scorer.scoring(mergeWeight562, vov562FeatureMap, items);
+
         // 5 排序公式特征
         Map<String, Map<String, String>> vid2MapFeature = this.getVideoRedisFeature(vids, "redis:vid_hasreturn_rov:");
         double alpha_vov = mergeWeight.getOrDefault("alpha_vov", 0.2);
+        double alpha_vov_562 = mergeWeight562.getOrDefault("alpha_vov", 1.0);
+        double alpha_vov_567 = mergeWeight567.getOrDefault("alpha_vov", 0.05);
         double func = mergeWeight.getOrDefault("func", 1.0);
         List<Video> result = new ArrayList<>();
         for (RankItem item : items) {
@@ -368,6 +384,12 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
                 score = fmRov * (1 + hasReturnRovScore) * (1.0 + alpha_vov * vovScore);
             }
 
+            // 562 && 567
+            double score562 = fmRov * (1 + hasReturnRovScore) * (1.0 + alpha_vov_562 * item.getScoresMap().getOrDefault("vovScore562", 0d));
+            double score567 = fmRov * (1 + hasReturnRovScore) + alpha_vov_567 * item.getScoresMap().getOrDefault("vovScore567", 0d);
+            item.getScoresMap().put("score562", score562);
+            item.getScoresMap().put("score567", score567);
+
             Video video = item.getVideo();
             video.setScore(score);
             video.setSortScore(score);

+ 120 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/VovH24Weight562Scorer.java

@@ -0,0 +1,120 @@
+package com.tzld.piaoquan.recommend.server.service.score;
+
+import com.tzld.piaoquan.recommend.server.common.base.RankItem;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+public class VovH24Weight562Scorer {
+    public static void scoring(Map<String, Double> mergeWeight, Map<String, Map<String, String>> vid2VovFeatureMap, final List<RankItem> items) {
+        try {
+            if (MapUtils.isEmpty(mergeWeight) || MapUtils.isEmpty(vid2VovFeatureMap) || CollectionUtils.isEmpty(items)) {
+                return;
+            }
+
+            // 融合权重
+            double vov_thresh = mergeWeight.getOrDefault("vov_thresh", 0.1);
+            double view_thresh = mergeWeight.getOrDefault("view_thresh", 1535.0);
+            double level50_vov = mergeWeight.getOrDefault("level50_vov", 0.123);
+            double level_95_vov = mergeWeight.getOrDefault("level_95_vov", 0.178);
+            double beta_vov = mergeWeight.getOrDefault("beta_vov", 100.0);
+
+            List<Double> weightList = new ArrayList<>(7);
+            weightList.add(mergeWeight.getOrDefault("d2_ago_vov_w", 0.0));
+            weightList.add(mergeWeight.getOrDefault("d1_ago_vov_w", 0.0));
+            weightList.add(mergeWeight.getOrDefault("h48_ago_vov_w", 0.0));
+            weightList.add(mergeWeight.getOrDefault("h24_ago_vov_w", 0.0));
+            weightList.add(mergeWeight.getOrDefault("h3_ago_vov_w", 0.0));
+            weightList.add(mergeWeight.getOrDefault("h2_ago_vov_w", 0.0));
+            weightList.add(mergeWeight.getOrDefault("h1_ago_vov_w", 0.0));
+
+            for (RankItem item : items) {
+                // 获取VoV输入特征
+                double h1_ago_vov = Double.parseDouble(vid2VovFeatureMap.getOrDefault(item.getVideoId() + "", new HashMap<>())
+                        .getOrDefault("h1_ago_vov", "-2")); // 如果没有时,默认为多少?? 需要考虑
+                double h2_ago_vov = Double.parseDouble(vid2VovFeatureMap.getOrDefault(item.getVideoId() + "", new HashMap<>())
+                        .getOrDefault("h2_ago_vov", "-2")); // 如果没有时,默认为多少?? 需要考虑
+                double h3_ago_vov = Double.parseDouble(vid2VovFeatureMap.getOrDefault(item.getVideoId() + "", new HashMap<>())
+                        .getOrDefault("h3_ago_vov", "-2")); // 如果没有时,默认为多少?? 需要考虑
+                double h24_ago_vov = Double.parseDouble(vid2VovFeatureMap.getOrDefault(item.getVideoId() + "", new HashMap<>())
+                        .getOrDefault("h24_ago_vov", "-2")); // 如果没有时,默认为多少?? 需要考虑
+                double h48_ago_vov = Double.parseDouble(vid2VovFeatureMap.getOrDefault(item.getVideoId() + "", new HashMap<>())
+                        .getOrDefault("h48_ago_vov", "-2")); // 如果没有时,默认为多少?? 需要考虑
+                double d1_ago_vov = Double.parseDouble(vid2VovFeatureMap.getOrDefault(item.getVideoId() + "", new HashMap<>())
+                        .getOrDefault("d1_ago_vov", "-2")); // 如果没有时,默认为多少?? 需要考虑
+                double d2_ago_vov = Double.parseDouble(vid2VovFeatureMap.getOrDefault(item.getVideoId() + "", new HashMap<>())
+                        .getOrDefault("d2_ago_vov", "-2")); // 如果没有时,默认为多少?? 需要考虑
+                double h1_ago_view = Double.parseDouble(vid2VovFeatureMap.getOrDefault(item.getVideoId() + "", new HashMap<>())
+                        .getOrDefault("h1_ago_view", "-2")); // 如果没有时,默认为多少?? 需要考虑
+
+                // log feature
+                item.getScoresMap().put("h1_ago_vov", h1_ago_vov);
+                item.getScoresMap().put("h2_ago_vov", h2_ago_vov);
+                item.getScoresMap().put("h3_ago_vov", h3_ago_vov);
+                item.getScoresMap().put("h24_ago_vov", h24_ago_vov);
+                item.getScoresMap().put("h48_ago_vov", h48_ago_vov);
+                item.getScoresMap().put("d1_ago_vov", d1_ago_vov);
+                item.getScoresMap().put("d2_ago_vov", d2_ago_vov);
+                item.getScoresMap().put("h1_ago_view", h1_ago_view);
+
+                List<Double> featureList = new ArrayList<>(7);
+                featureList.add(d2_ago_vov);
+                featureList.add(d1_ago_vov);
+                featureList.add(h48_ago_vov);
+                featureList.add(h24_ago_vov);
+                featureList.add(h3_ago_vov);
+                featureList.add(h2_ago_vov);
+                featureList.add(h1_ago_vov);
+                double vovScore562 = calcScore(featureList, weightList, item, vov_thresh, view_thresh, h1_ago_view, level50_vov, level_95_vov, beta_vov);
+                item.getScoresMap().put("vovScore562", vovScore562);
+            }
+        } catch (Exception e) {
+            log.error(String.format("something is wrong in VovH24Weight562Scorer with {}", e));
+        }
+    }
+
+
+    private static double calcScore(List<Double> featureList, List<Double> weightList, RankItem rankItem,
+                                    double vov_thresh, double view_thresh, double h1_ago_view, double level50_vov, double level_95_vov, double beta_vov) {
+        // 检查 h1_ago_view 条件
+        if (h1_ago_view == -2 || h1_ago_view == -1 || h1_ago_view < view_thresh) {
+            return 0;
+        }
+
+        // 计算有效特征的总权重和得分
+        double score = 0;
+        List<Integer> validIndices = new ArrayList<>();
+        for (int i = 0; i < featureList.size(); i++) {
+            if (featureList.get(i) != -1) {
+                validIndices.add(i);
+            }
+        }
+
+        // 如果没有有效特征,返回 0
+        if (validIndices.isEmpty()) {
+            return 0;
+        }
+
+        // 计算得分,动态调整权重
+        for (int index : validIndices) {
+            double weight = weightList.get(index);
+            score += featureList.get(index) * weight;
+        }
+
+        // 调整vov
+        if (score < vov_thresh) {
+            score = 0;
+        } else {
+            double term1 = 1 / (1 + Math.exp(-1 * beta_vov * (score - level50_vov)));
+            double term2 = 1 + Math.exp(-1 * beta_vov * (level_95_vov - level50_vov));
+            score = term1 * term2;
+        }
+        return score;
+    }
+}

+ 47 - 63
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/VovH24WeightV2Scorer.java

@@ -16,69 +16,41 @@ public class VovH24WeightV2Scorer extends AbstractScorer {
     private static final int LOCAL_TIME_OUT = 150;
     private final static Logger LOGGER = LoggerFactory.getLogger(VlogRovFMScorer.class);
     private static final ExecutorService executorService = Executors.newFixedThreadPool(128);
-    private static final Set<String> rateFeatureSet = new HashSet<String>() {{
-        add("1_vovh0");
-        add("2_vovh0");
-        add("2_vovh1");
-        add("3_vovh0");
-        add("3_vovh1");
-        add("3_vovh2");
-        add("4_vovh0");
-        add("4_vovh1");
-        add("4_vovh3");
-        add("7_vovh0");
-        add("7_vovh1");
-        add("7_vovh6");
-        add("13_vovh0");
-        add("13_vovh1");
-        add("13_vovh12");
-        add("25_vovh0");
-        add("25_vovh1");
-        add("25_vovh24");
-        add("1_vovd0");
-        add("2_vovd0");
-        add("2_vovd1");
-        add("3_vovd0");
-        add("3_vovd1");
-        add("3_vovd2");
-    }};
-
-    private static final Set<String> integerFeatureSet = new HashSet<String>() {{
-        add("1_vovh0分子");
-        add("1_vovh分母");
-        add("2_vovh0分子");
-        add("2_vovh1分子");
-        add("2_vovh分母");
-        add("3_vovh0分子");
-        add("3_vovh1分子");
-        add("3_vovh2分子");
-        add("3_vovh分母");
-        add("4_vovh0分子");
-        add("4_vovh1分子");
-        add("4_vovh3分子");
-        add("4_vovh分母");
-        add("7_vovh0分子");
-        add("7_vovh1分子");
-        add("7_vovh6分子");
-        add("7_vovh分母");
-        add("13_vovh0分子");
-        add("13_vovh1分子");
-        add("13_vovh12分子");
-        add("13_vovh分母");
-        add("25_vovh0分子");
-        add("25_vovh1分子");
-        add("25_vovh24分子");
-        add("25_vovh分母");
-        add("1_vovd0分子");
-        add("1_vovd分母");
-        add("2_vovd0分子");
-        add("2_vovd1分子");
-        add("2_vovd分母");
-        add("3_vovd0分子");
-        add("3_vovd1分子");
-        add("3_vovd2分子");
-        add("3_vovd分母");
-    }};
+    private static final Set<String> rateFeatureSet = new HashSet<>(Arrays.asList(
+            "1_vovh0",
+            "2_vovh0", "2_vovh1",
+            "3_vovh0", "3_vovh1", "3_vovh2",
+            "4_vovh0", "4_vovh1", "4_vovh3",
+            "7_vovh0", "7_vovh1", "7_vovh6",
+            "13_vovh0", "13_vovh1", "13_vovh12",
+            "25_vovh0", "25_vovh1", "25_vovh24",
+            "1_vovd0",
+            "2_vovd0", "2_vovd1",
+            "3_vovd0", "3_vovd1", "3_vovd2"
+    ));
+
+    private static final Set<String> integerFeatureSet = new HashSet<>(Arrays.asList(
+            "1_vovh0分子", "1_vovh分母",
+            "2_vovh0分子", "2_vovh1分子", "2_vovh分母",
+            "3_vovh0分子", "3_vovh1分子", "3_vovh2分子", "3_vovh分母",
+            "4_vovh0分子", "4_vovh1分子", "4_vovh3分子", "4_vovh分母",
+            "7_vovh0分子", "7_vovh1分子", "7_vovh6分子", "7_vovh分母",
+            "13_vovh0分子", "13_vovh1分子", "13_vovh12分子", "13_vovh分母",
+            "25_vovh0分子", "25_vovh1分子", "25_vovh24分子", "25_vovh分母",
+            "1_vovd0分子", "1_vovd分母",
+            "2_vovd0分子", "2_vovd1分子", "2_vovd分母",
+            "3_vovd0分子", "3_vovd1分子", "3_vovd2分子", "3_vovd分母"
+    ));
+
+    private static final Set<String> numerator567Set = new HashSet<>(Arrays.asList(
+            "1_vovh0分子", "2_vovh1分子", "3_vovh2分子", "4_vovh3分子",
+            "7_vovh6分子", "13_vovh12分子", "25_vovh24分子", "2_vovd1分子"
+    ));
+
+    private static final Set<String> denominator567Set = new HashSet<>(Arrays.asList(
+            "1_vovh分母", "2_vovh分母", "3_vovh分母", "4_vovh分母",
+            "7_vovh分母", "13_vovh分母", "25_vovh分母", "2_vovd分母"
+    ));
 
 
     public VovH24WeightV2Scorer(ScorerConfigInfo scorerConfigInfo) {
@@ -191,6 +163,9 @@ public class VovH24WeightV2Scorer extends AbstractScorer {
                             final Map<String, String> sceneFeatureMap) {
 
         double vovScore = 0.0;
+        double vovScore567 = 0.0;
+        double numerator567 = 0D;
+        double denominator567 = 0D;
         Map<String, String> featureMap = item.getFeatureMap();
         String weightKey = sceneFeatureMap.getOrDefault("weightKey", "");
         Map<String, Double> weightMap = model.getWeight(weightKey);
@@ -206,13 +181,22 @@ public class VovH24WeightV2Scorer extends AbstractScorer {
                     double val = Double.parseDouble(featureMap.getOrDefault(key, "0d"));
                     double weight = weightMap.getOrDefault(key, 0d);
                     vovScore += Math.log(val + 1) * weight;
+
+                    // 567
+                    if (numerator567Set.contains(key)) {
+                        numerator567 += val;
+                    } else if (denominator567Set.contains(key)) {
+                        denominator567 += val;
+                    }
                 }
                 vovScore = Math.max(0, vovScore);
+                vovScore567 = denominator567 != 0.0 ? numerator567 / denominator567 : 0.0;
             } catch (Exception e) {
                 LOGGER.error("vovh24 scorer error for doc={} exception={}", item.getVideoId(), ExceptionUtils.getFullStackTrace(e));
             }
         }
         item.getScoresMap().put("vovScore", vovScore);
+        item.getScoresMap().put("vovScore567", vovScore567);
         item.setVovScore(vovScore);
         return vovScore;
     }