Przeglądaj źródła

MOD: BlessRecall

sunxy 1 rok temu
rodzic
commit
10413debbf

+ 6 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/RankService.java

@@ -83,6 +83,12 @@ public class RankService {
             return new RankResult(results);
         }
 
+        if (param.getAppType() == AppTypeEnum.APP_SPEED.getCode()) {
+            List<Video> results = new ArrayList<>(extractAndSort(param, AppFallbackRecallStrategy.PUSH_FORM));
+            removeDuplicate(results);
+            return new RankResult(results);
+        }
+
         // 2 正常走分发 排序+冷启动
         List<Video> rovRecallRank = mergeAndRankRovRecall(param);
         List<Video> flowPoolRank = mergeAndRankFlowPoolRecall(param);

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

@@ -88,6 +88,9 @@ public class RecallService implements ApplicationContextAware {
         } else if (param.getAppType() == AppTypeEnum.PIAO_QUAN_MEIHAO_ZHUFU.getCode() && Objects.equals(param.getCategoryId(), 100)) {
             strategies.add(strategyMap.get(BlessRecallStrategy.class.getSimpleName()));
             return strategies;
+        } else if (param.getAppType() == AppTypeEnum.APP_SPEED.getCode()) {
+            strategies.add(strategyMap.get(AppFallbackRecallStrategy.class.getSimpleName()));
+            return strategies;
         } else {
             switch (abCode) {
                 case "60121": // 536

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

@@ -0,0 +1,81 @@
+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 org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+/**
+ * @author zhangbo
+ */
+@Component
+public class AppFallbackRecallStrategy implements RecallStrategy {
+
+    public static final String PUSH_FORM = "app_fallback_recall_strategy";
+
+    @Autowired
+    private RegionFilterService filterService;
+
+    @Override
+    public List<Video> recall(RecallParam param) {
+        // 1 获取省份key 放入参数map中
+        String regionCode = param.getRegionCode();
+        if (StringUtils.isBlank(regionCode)) {
+            regionCode = "";
+        }
+        Map<String, String> param4Model = new HashMap<>(1);
+        param4Model.put("region_code", regionCode);
+        // 2 通过model拿到召回list
+        ScorerPipeline4Recall pipeline = ScorerUtils.getScorerPipeline4Recall("app_fallback_config.conf");
+        List<List<Pair<Long, Double>>> results = pipeline.recall(param4Model);
+        if (CollectionUtils.isEmpty(results)) {
+            return Collections.emptyList();
+        }
+        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().limit(500)
+                    .forEach(vid -> {
+                        Video video = new Video();
+                        video.setVideoId(vid);
+                        video.setAbCode(param.getAbCode());
+                        video.setRovScore(videoMap.get(vid));
+                        video.setPushFrom(pushFrom());
+                        videosResult.add(video);
+                    });
+        }
+        return videosResult;
+    }
+
+    @Override
+    public String pushFrom() {
+        return PUSH_FORM;
+    }
+
+
+}

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

@@ -42,6 +42,7 @@ public final class ScorerUtils {
         ScorerUtils.init4Recall("feeds_score_config_festival.conf");
         ScorerUtils.init4Recall("feeds_score_config_bless.conf");
         ScorerUtils.init4Recall("feeds_recall_config_tomson.conf");
+        ScorerUtils.init4Recall("app_fallback_config.conf");
     }
 
     private ScorerUtils() {

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

@@ -0,0 +1,44 @@
+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.Model4RecallKeyValue;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author sunxy
+ */
+public class AppFallbackScorer extends AbstractScorer4Recall {
+
+    public AppFallbackScorer(ScorerConfigInfo configInfo) {
+        super(configInfo);
+    }
+
+    @Override
+    public void loadModel() {
+        doLoadModel(Model4RecallKeyValue.class);
+    }
+
+    @Override
+    public List<Pair<Long, Double>> recall(Map<String, String> params) {
+        Model4RecallKeyValue model = (Model4RecallKeyValue) this.getModel();
+        if (model == null || model.kv == null) {
+            return new ArrayList<>();
+        }
+        String city = params.get("region_code");
+        List<Pair<Long, Double>> cityList;
+        if (StringUtils.isBlank(city)
+                || StringUtils.contains(city, "110100")
+                || StringUtils.contains(city, "430100")) {
+            cityList = model.kv.getOrDefault("北京长沙", new ArrayList<>());
+        } else {
+            cityList = model.kv.getOrDefault("非北京长沙", new ArrayList<>());
+        }
+        return cityList;
+    }
+}

+ 7 - 0
recommend-server-service/src/main/resources/app_fallback_config.conf

@@ -0,0 +1,7 @@
+scorer-config = {
+  app-fallback-config = {
+    scorer-name = "com.tzld.piaoquan.recommend.server.service.score4recall.strategy.AppFallbackScorer"
+    scorer-priority = 100
+    model-path = "alg_recall_file/app_fallback_videos.txt"
+  }
+}