Ver código fonte

536 修改ros分子为全部回流 增加一路高价值回捞召回

zhangbo 1 ano atrás
pai
commit
550c4ae835

+ 2 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/RankRouter.java

@@ -19,7 +19,7 @@ public class RankRouter {
     @Autowired
     private RankStrategy4Density rankStrategy4Density;
     @Autowired
-    private RankStrategy4RegionMergeModelV1 rankStrategy4RegionMergeModelV1;
+    private RankStrategy4RegionMergeModelV536 rankStrategy4RegionMergeModelV536;
     @Autowired
     private RankStrategy4RegionMergeModelV2 rankStrategy4RegionMergeModelV2;
     @Autowired
@@ -71,7 +71,7 @@ public class RankRouter {
             case "60120": // 576
                 return rankStrategy4RegionMerge.rank(param);
             case "60121": // 536
-                return rankStrategy4RegionMergeModelV1.rank(param);
+                return rankStrategy4RegionMergeModelV536.rank(param);
             case "60122": // 537
                 return rankStrategy4RegionMergeModelV2.rank(param);
             case "60123": // 541

+ 20 - 16
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV1.java → recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV536.java

@@ -45,8 +45,8 @@ import java.util.stream.Collectors;
  */
 @Service
 @Slf4j
-public class RankStrategy4RegionMergeModelV1 extends RankService {
-    @ApolloJsonValue("${rank.score.merge.weightv1:}")
+public class RankStrategy4RegionMergeModelV536 extends RankService {
+    @ApolloJsonValue("${rank.score.merge.weightv536:}")
     private Map<String, Double> mergeWeight;
     @ApolloJsonValue("${RankStrategy4DensityFilterV2:}")
     private final Map<String, Map<String, Map<String, String>>> filterRules = new HashMap<>();
@@ -131,9 +131,9 @@ public class RankStrategy4RegionMergeModelV1 extends RankService {
 
         //-------------------地域相关召回 融合+去重-------------------
         List<Video> rovRecallRank = new ArrayList<>();
-        List<Video> v1 = extractAndSort(param, RegionRealtimeRecallStrategyV1_default.PUSH_FORM);
+        List<Video> v1 = extractAndSort(param, RegionRealtimeRecallStrategyV1.PUSH_FORM);
         List<Video> v2 = extractAndSort(param, RegionRealtimeRecallStrategyV2.PUSH_FORM);
-        List<Video> v3 = extractAndSort(param, RegionRealtimeRecallStrategyV3_default.PUSH_FORM);
+        List<Video> v3 = extractAndSort(param, RegionRealtimeRecallStrategyV3.PUSH_FORM);
         List<Video> v4 = extractAndSort(param, RegionRealtimeRecallStrategyV4.PUSH_FORM);
         this.duplicate(setVideo, v1);
         this.duplicate(setVideo, v2);
@@ -147,6 +147,9 @@ public class RankStrategy4RegionMergeModelV1 extends RankService {
         //-------------------节日扶持召回 融合+去重-------------------
         List<Video> v7 = extractAndSort(param, FestivalRecallStrategyV1.PUSH_FORM);
         this.duplicate(setVideo, v7);
+        //-------------------同期高价值 融合+去重-------------------
+        List<Video> v8 = extractAndSort(param, RegionRealtimeRecallStrategyV5HighValue.PUSH_FORM);
+        this.duplicate(setVideo, v8);
 
         rovRecallRank.addAll(oldRovs);
         rovRecallRank.addAll(v1.subList(0, Math.min(mergeWeight.getOrDefault("v1", 20.0).intValue(), v1.size())));
@@ -156,6 +159,7 @@ public class RankStrategy4RegionMergeModelV1 extends RankService {
         rovRecallRank.addAll(v5.subList(0, Math.min(mergeWeight.getOrDefault("v5", 10.0).intValue(), v5.size())));
         rovRecallRank.addAll(v6.subList(0, Math.min(mergeWeight.getOrDefault("v6", 10.0).intValue(), v6.size())));
         rovRecallRank.addAll(v7.subList(0, Math.min(mergeWeight.getOrDefault("v7", 10.0).intValue(), v7.size())));
+        rovRecallRank.addAll(v8.subList(0, Math.min(mergeWeight.getOrDefault("v8", 10.0).intValue(), v8.size())));
 
 
 
@@ -191,12 +195,12 @@ public class RankStrategy4RegionMergeModelV1 extends RankService {
             List<Double> views = getStaticData(itemRealMap, datehours, "view_pv_list_1h");
             List<Double> plays = getStaticData(itemRealMap, datehours, "play_pv_list_1h");
             List<Double> shares = getStaticData(itemRealMap, datehours, "share_pv_list_1h");
-            List<Double> returns = getStaticData(itemRealMap, datehours, "p_return_uv_list_1h");
+            List<Double> preturns = getStaticData(itemRealMap, datehours, "p_return_uv_list_1h");
             List<Double> allreturns = getStaticData(itemRealMap, datehours, "return_uv_list_1h");
 
-            List<Double> share2return = getRateData(returns, shares, 1.0, 1000.0);
+            List<Double> share2return = getRateData(preturns, shares, 1.0, 1000.0);
             Double share2returnScore = calScoreWeight(share2return);
-            List<Double> view2return = getRateData(returns, views, 1.0, 1000.0);
+            List<Double> view2return = getRateData(preturns, views, 1.0, 1000.0);
             Double view2returnScore = calScoreWeight(view2return);
             List<Double> view2play = getRateData(plays, views, 1.0, 1000.0);
             Double view2playScore = calScoreWeight(view2play);
@@ -208,9 +212,9 @@ public class RankStrategy4RegionMergeModelV1 extends RankService {
             item.scoresMap.put("play2shareScore", play2shareScore);
 
             // 全部回流的rov和ros
-            List<Double> share2allreturn = getRateData(returns, shares, 1.0, 10.0);
+            List<Double> share2allreturn = getRateData(allreturns, shares, 1.0, 10.0);
             Double share2allreturnScore = calScoreWeight(share2allreturn);
-            List<Double> view2allreturn = getRateData(returns, views, 0.0, 0.0);
+            List<Double> view2allreturn = getRateData(allreturns, views, 0.0, 0.0);
             Double view2allreturnScore = calScoreWeight(view2allreturn);
             item.scoresMap.put("share2allreturnScore", share2allreturnScore);
             item.scoresMap.put("view2allreturnScore", view2allreturnScore);
@@ -220,7 +224,7 @@ public class RankStrategy4RegionMergeModelV1 extends RankService {
             item.scoresMap.put("allreturnsScore", allreturnsScore);
 
             // 平台回流
-            Double preturnsScore = calScoreWeight(returns);
+            Double preturnsScore = calScoreWeight(preturns);
             item.scoresMap.put("preturnsScore", preturnsScore);
 
             // rov的趋势
@@ -234,15 +238,15 @@ public class RankStrategy4RegionMergeModelV1 extends RankService {
         }
         // 3 融合公式
         List<Video> result = new ArrayList<>();
-        double a = mergeWeight.getOrDefault("a", 0.1);
+        double a = mergeWeight.getOrDefault("a", 1.0);
         double b = mergeWeight.getOrDefault("b", 0.0);
-        double bb = mergeWeight.getOrDefault("bb", 0.005);
-        double c = mergeWeight.getOrDefault("c", 0.0002);
+        double bb = mergeWeight.getOrDefault("bb", 0.1);
+        double c = mergeWeight.getOrDefault("c", 0.000001);
         double d = mergeWeight.getOrDefault("d", 1.0);
         double e = mergeWeight.getOrDefault("e", 1.0);
-        double f = mergeWeight.getOrDefault("f", 0.1);
-        double g = mergeWeight.getOrDefault("g", 1.0);
-        double h = mergeWeight.getOrDefault("h", 20.0);
+        double f = mergeWeight.getOrDefault("f", 0.8);
+        double g = mergeWeight.getOrDefault("g", 2.0);
+        double h = mergeWeight.getOrDefault("h", 240.0);
         double ifAdd = mergeWeight.getOrDefault("ifAdd", 1.0);
         for (RankItem item : items){
             double trendScore =  item.scoresMap.getOrDefault("trendScore", 0.0) > 1E-8 ?

+ 1 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV547.java

@@ -239,7 +239,7 @@ public class RankStrategy4RegionMergeModelV547 extends RankService {
         double c = mergeWeight.getOrDefault("c", 0.000001);
         double d = mergeWeight.getOrDefault("d", 1.0);
         double e = mergeWeight.getOrDefault("e", 1.0);
-        double f = mergeWeight.getOrDefault("f", 0.08);
+        double f = mergeWeight.getOrDefault("f", 0.8);
         double g = mergeWeight.getOrDefault("g", 2.0);
         double h = mergeWeight.getOrDefault("h", 240.0);
         double ifAdd = mergeWeight.getOrDefault("ifAdd", 1.0);

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

@@ -92,10 +92,11 @@ public class RecallService implements ApplicationContextAware {
         } else {
             switch (abCode) {
                 case "60121": // 536
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1_default.class.getSimpleName()));
+                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
                     strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV2.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV3_default.class.getSimpleName()));
+                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV3.class.getSimpleName()));
                     strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV4.class.getSimpleName()));
+                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV5HighValue.class.getSimpleName()));
                     strategies.addAll(getRegionRecallStrategy(param));
                     break;
                 case "60122": // 537

+ 70 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/RegionRealtimeRecallStrategyV5HighValue.java

@@ -0,0 +1,70 @@
+package com.tzld.piaoquan.recommend.server.service.recall.strategy;
+
+import com.google.common.collect.Lists;
+import com.tzld.piaoquan.recommend.server.model.Video;
+import com.tzld.piaoquan.recommend.server.service.filter.FilterParam;
+import com.tzld.piaoquan.recommend.server.service.filter.FilterResult;
+import com.tzld.piaoquan.recommend.server.service.filter.RegionFilterService;
+import com.tzld.piaoquan.recommend.server.service.recall.FilterParamFactory;
+import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
+import com.tzld.piaoquan.recommend.server.service.recall.RecallStrategy;
+import com.tzld.piaoquan.recommend.server.service.score.ScorerUtils;
+import com.tzld.piaoquan.recommend.server.service.score4recall.ScorerPipeline4Recall;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.tuple.Pair;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+/**
+ * @author zhangbo feeds_recall_config_region_v5_highvalue
+ */
+@Slf4j
+@Component
+public class RegionRealtimeRecallStrategyV5HighValue implements RecallStrategy {
+    @Autowired
+    protected RegionFilterService filterService;
+    @Override
+    public List<Video> recall(RecallParam param) {
+
+        // 2 通过model拿到召回list
+        Map<String, String> param4Model = new HashMap<>(0);
+        ScorerPipeline4Recall pipeline = ScorerUtils.getScorerPipeline4Recall("feeds_recall_config_region_v5_highvalue.conf");
+        List<List<Pair<Long, Double>>> results = pipeline.recall(param4Model);
+        List<Pair<Long, Double>> result = results.get(0);
+        for (int i=1; i<results.size(); ++i){
+            result.addAll(results.get(i));
+        }
+        Map<Long, Double> videoMap = new LinkedHashMap<>();
+        for (Pair<Long, Double> v: result){
+            videoMap.put(v.getLeft(), v.getRight());
+        }
+
+        FilterParam filterParam = FilterParamFactory.create(param, Lists.newArrayList(videoMap.keySet()));
+        filterParam.setForceTruncation(10000);
+        filterParam.setConcurrent(true);
+        filterParam.setNotUsePreView(false);
+        FilterResult filterResult = filterService.filter(filterParam);
+        List<Video> videosResult = new ArrayList<>();
+        if (filterResult != null && CollectionUtils.isNotEmpty(filterResult.getVideoIds())) {
+            filterResult.getVideoIds().stream().forEach(vid -> {
+                Video video = new Video();
+                video.setVideoId(vid);
+                video.setAbCode(param.getAbCode());
+                video.setRovScore(videoMap.get(vid));
+                video.setPushFrom(pushFrom());
+                videosResult.add(video);
+            });
+        }
+        videosResult.sort(Comparator.comparingDouble(o -> -o.getRovScore()));
+        return videosResult;
+    }
+    public static final String PUSH_FORM = "recall_strategy_highvalue";
+    @Override
+    public String pushFrom(){
+        return PUSH_FORM;
+    }
+
+}

+ 1 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/ScorerUtils.java

@@ -38,6 +38,7 @@ public final class ScorerUtils {
         ScorerUtils.init4Recall("feeds_recall_config_region_v2.conf");
         ScorerUtils.init4Recall("feeds_recall_config_region_v3.conf");
         ScorerUtils.init4Recall("feeds_recall_config_region_v4.conf");
+        ScorerUtils.init4Recall("feeds_recall_config_region_v5_highvalue.conf");
         ScorerUtils.init4Recall("feeds_score_config_festival.conf");
         ScorerUtils.init4Recall("feeds_score_config_bless.conf");
         ScorerUtils.init4Recall("feeds_recall_config_tomson.conf");

+ 34 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score4recall/strategy/RegionRecallScorerV5HighValue.java

@@ -0,0 +1,34 @@
+package com.tzld.piaoquan.recommend.server.service.score4recall.strategy;
+
+import com.tzld.piaoquan.recommend.server.service.score.ScorerConfigInfo;
+import com.tzld.piaoquan.recommend.server.service.score4recall.AbstractScorer4Recall;
+import com.tzld.piaoquan.recommend.server.service.score4recall.model4recall.Model4RecallList;
+import org.apache.commons.lang3.tuple.Pair;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+
+public class RegionRecallScorerV5HighValue extends AbstractScorer4Recall {
+
+    public RegionRecallScorerV5HighValue(ScorerConfigInfo configInfo) {
+        super(configInfo);
+    }
+    @Override
+    public void loadModel() {
+        doLoadModel(Model4RecallList.class);
+    }
+
+    @Override
+    public List<Pair<Long, Double>> recall(Map<String, String> params){
+        // todo zhangbo 这里要写实现功能
+        Model4RecallList model = (Model4RecallList) this.getModel();
+        List<Pair<Long, Double>> lists = model.recallList;
+        lists.sort(Comparator.comparingDouble(o -> -o.getRight()));
+        return lists.subList(0, Math.min(100, lists.size()));
+    }
+
+
+}

+ 9 - 0
recommend-server-service/src/main/resources/feeds_recall_config_region_v5_highvalue.conf

@@ -0,0 +1,9 @@
+scorer-config = {
+
+    score5-config = {
+        scorer-name = "com.tzld.piaoquan.recommend.server.service.score4recall.strategy.RegionRecallScorerV5HighValue"
+        scorer-priority = 98
+        model-path = "alg_recall_file/06_high_value_same_period.txt"
+    }
+
+}