瀏覽代碼

update exp code

丁云鹏 3 月之前
父節點
當前提交
ffd6acce33
共有 12 個文件被更改,包括 2 次插入345 次删除
  1. 0 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/model/RecommendParam.java
  2. 0 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/model/Video.java
  3. 1 26
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/RecommendService.java
  4. 0 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolService.java
  5. 0 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallParam.java
  6. 1 5
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallService.java
  7. 0 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractFlowPoolWithLevelRecallStrategy.java
  8. 0 71
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractFlowPoolWithLevelScoreRecallStrategy.java
  9. 0 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolWithLevelRecallStrategyTomson.java
  10. 0 178
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolWithLevelScoreRecallStrategy.java
  11. 0 27
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/QuickFlowPoolWithLevelRecallStrategy.java
  12. 0 30
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/QuickFlowPoolWithLevelScoreRecallStrategy.java

+ 0 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/model/RecommendParam.java

@@ -22,8 +22,6 @@ public class RecommendParam {
     private String ruleKey;
     private String dataKey;
 
-    private int flowPoolId;
-    private String flowPoolAbtestGroup;
     private String rankKeyPrefix;
     private int appType;
     private Long videoId;

+ 0 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/model/Video.java

@@ -20,7 +20,6 @@ public class Video {
     // 流量池相关 start
     private String flowPool;
     private String level;
-    private String flowPoolAbtestGroup;
     private boolean inFlowPool;
     // 流量池相关 end
 

+ 1 - 26
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/RecommendService.java

@@ -53,9 +53,6 @@ public class RecommendService {
     @Qualifier("redisTemplate")
     private RedisTemplate<String, String> redisTemplate;
 
-    @ApolloJsonValue("${app_ab_code:{}}")
-    private Map<String, Map<String, Map<String, String>>> appAbCodeMap;
-
     @ApolloJsonValue("${flow.pool.ids:[7, 8, 9, 10, 11, 12, 13, 14, 15, 16]}")
     private List<Integer> flowPoolIds;
     @ApolloJsonValue("${city_code:[]}")
@@ -221,7 +218,6 @@ public class RecommendService {
 
                 map.put("flowPool", String.valueOf(v.getFlowPool()));
                 map.put("level", String.valueOf(v.getLevel()));
-                map.put("flowPoolAbtestGroup", String.valueOf(v.getFlowPoolAbtestGroup()));
                 map.put("inFlowPool", String.valueOf(v.isInFlowPool()));
 
                 map.put("scoreRos", String.valueOf(v.getScoreRos()));
@@ -336,18 +332,6 @@ public class RecommendService {
             }
         }
 
-        // 流量池分发实验组划分
-        int flowPoolIdChoice = flowPoolIds.get(RandomUtils.nextInt(0, flowPoolIds.size()));
-        Map<String, List<Integer>> flowPoolConfig = flowPoolConfigService.getFlowPoolConfig();
-
-        param.setFlowPoolId(flowPoolIdChoice);
-        param.setFlowPoolAbtestGroup("control_group");
-        for (Map.Entry<String, List<Integer>> entry : flowPoolConfig.entrySet()) {
-            if (entry.getValue().contains(flowPoolIdChoice)) {
-                param.setFlowPoolAbtestGroup(entry.getKey());
-            }
-        }
-
         // 风险过滤
         if (riskVideoFilterSwitch) {
             boolean riskUser = riskScenes.contains(request.getHotSceneType())
@@ -416,7 +400,6 @@ public class RecommendService {
         recallParam.setDataKey(param.getDataKey());
 
         recallParam.setVideoId(param.getVideoId());
-        recallParam.setFlowPoolAbtestGroup(param.getFlowPoolAbtestGroup());
 
         String provinceCode = StringUtils.isNotBlank(param.getProvinceCode())
                 ? param.getProvinceCode()
@@ -495,15 +478,7 @@ public class RecommendService {
         if (CollectionUtils.isEmpty(flowPoolVideos)) {
             return;
         }
-
-        switch (param.getFlowPoolAbtestGroup()) {
-            case FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL:
-                flowPoolService.updateDistributeCountWithLevel(flowPoolVideos);
-                break;
-            case FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL_SCORE:
-                flowPoolService.updateDistributeCountWithLevelScore(flowPoolVideos);
-                break;
-        }
+        flowPoolService.updateDistributeCountWithLevel(flowPoolVideos);
     }
 
     private void updateLastVideoCache(List<Video> videos) {

+ 0 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolService.java

@@ -80,13 +80,11 @@ public class FlowPoolService {
         if (flowPoolUpgradeSwitch) {
             asyncDelDistributeCountV2(videoFlowPoolMap, (appType, level, values) -> {
                 redisTemplate.opsForSet().remove(String.format(KEY_WITH_LEVEL_FORMAT_V2, appType, level), values);
-                redisTemplate.opsForSet().remove(KEY_QUICK_WITH_LEVEL_FORMAT_V2, values);
             });
         } else {
             asyncDelDistributeCount(videoFlowPoolMap, (appType, level, values) -> {
                 String key = String.format(KEY_WITH_LEVEL_FORMAT, appType, level);
                 Long count = redisTemplate.opsForSet().remove(key, values);
-                redisTemplate.opsForSet().remove(String.format(KEY_QUICK_WITH_LEVEL_FORMAT, appType), values);
             });
         }
 

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

@@ -20,7 +20,6 @@ public class RecallParam {
     private String province;
 
     private int size;
-    private String flowPoolAbtestGroup;
     private Long videoId;
     private String uid;
     private boolean specialRecommend;

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

@@ -121,11 +121,7 @@ public class RecallService implements ApplicationContextAware {
 
         // 命中用户黑名单不走流量池
         if (!param.isRiskUser()) {
-            if (param.getFlowPoolAbtestGroup().equals(FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL)) {
-                strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyTomson.class.getSimpleName()));
-            } else if (param.getFlowPoolAbtestGroup().equals(FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL_SCORE)) {
-                strategies.add(strategyMap.get(FlowPoolWithLevelScoreRecallStrategy.class.getSimpleName()));
-            }
+            strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyTomson.class.getSimpleName()));
         }
         return strategies;
     }

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

@@ -56,7 +56,6 @@ public abstract class AbstractFlowPoolWithLevelRecallStrategy implements RecallS
                 recallData.setRovScore(RandomUtils.nextDouble(0, 100));
                 recallData.setPushFrom(pushFrom());
                 recallData.setFlowPool(videoFlowPoolMap.get(vid));
-                recallData.setFlowPoolAbtestGroup(param.getFlowPoolAbtestGroup());
                 recallData.setLevel(level);
                 results.add(recallData);
             });

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

@@ -1,71 +0,0 @@
-package com.tzld.piaoquan.recommend.server.service.recall.strategy;
-
-import com.tzld.piaoquan.recommend.server.model.Video;
-import com.tzld.piaoquan.recommend.server.service.filter.FilterResult;
-import com.tzld.piaoquan.recommend.server.service.filter.FlowPoolWithLevelScoreFilterService;
-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 org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.math.NumberUtils;
-import org.apache.commons.lang3.tuple.Pair;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.core.ZSetOperations;
-
-import java.util.*;
-
-/**
- * @author dyp
- */
-public abstract class AbstractFlowPoolWithLevelScoreRecallStrategy implements RecallStrategy {
-    @Autowired
-    @Qualifier("redisTemplate")
-    protected RedisTemplate<String, String> redisTemplate;
-
-    @Autowired
-    protected FlowPoolWithLevelScoreFilterService filterService;
-
-    @Override
-    public List<Video> recall(RecallParam param) {
-        Pair<String, String> flowPoolKeyAndLevel = flowPoolKeyAndLevel(param);
-        String flowPoolKey = flowPoolKeyAndLevel.getLeft();
-        String level = flowPoolKeyAndLevel.getRight();
-
-        int getSize = param.getSize() * 5;
-        List<Video> results = new ArrayList<>();
-        Set<ZSetOperations.TypedTuple<String>> data = redisTemplate.opsForZSet().reverseRangeWithScores(flowPoolKey, 0,
-                getSize - 1);
-        if (CollectionUtils.isEmpty(data)) {
-            return null;
-        }
-
-        Map<Long, Double> videoScoreMap = new HashMap<>();
-        Map<Long, String> videoFlowPoolMap = new LinkedHashMap<>();
-        for (ZSetOperations.TypedTuple<String> t : data) {
-            String[] values = t.getValue().split("-");
-            videoFlowPoolMap.put(NumberUtils.toLong(values[0], 0), values[1]);
-            videoScoreMap.put(NumberUtils.toLong(values[0], 0), t.getScore());
-        }
-        FilterResult filterResult = filterService.filter(FilterParamFactory.create(param, videoFlowPoolMap));
-
-        if (filterResult != null && CollectionUtils.isNotEmpty(filterResult.getVideoIds())) {
-            filterResult.getVideoIds().stream().forEach(vid -> {
-                Video video = new Video();
-                video.setVideoId(vid);
-                video.setRovScore(videoScoreMap.get(vid));
-                video.setPushFrom(pushFrom());
-                video.setFlowPool(videoFlowPoolMap.get(vid));
-                video.setFlowPoolAbtestGroup(param.getFlowPoolAbtestGroup());
-                video.setLevel(level);
-                results.add(video);
-            });
-        }
-
-        return results.subList(0, results.size() < param.getSize() ? results.size() : param.getSize());
-    }
-
-    abstract Pair<String, String> flowPoolKeyAndLevel(RecallParam param);
-
-}

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

@@ -169,7 +169,6 @@ public class FlowPoolWithLevelRecallStrategyTomson extends AbstractFlowPoolWithL
                 recallData.setRovScore(finalResultmap.getOrDefault(vid, 0.0));
                 recallData.setPushFrom(pushFrom());
                 recallData.setFlowPool(videoFlowPoolMap_.get(vid));
-                recallData.setFlowPoolAbtestGroup(param.getFlowPoolAbtestGroup());
                 recallData.setLevel(level);
                 videosResult.add(recallData);
             });

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

@@ -1,178 +0,0 @@
-package com.tzld.piaoquan.recommend.server.service.recall.strategy;
-
-import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
-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.flowpool.FlowPoolConfigService;
-import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
-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.score.ScorerUtils;
-import com.tzld.piaoquan.recommend.server.service.score4recall.ScorerPipeline4Recall;
-import com.tzld.piaoquan.recommend.server.util.JSONUtils;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.RandomUtils;
-import org.apache.commons.lang3.math.NumberUtils;
-import org.apache.commons.lang3.tuple.Pair;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.ZSetOperations;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants.*;
-
-/**
- * @author dyp
- */
-@Service
-public class FlowPoolWithLevelScoreRecallStrategy extends AbstractFlowPoolWithLevelScoreRecallStrategy {
-    @ApolloJsonValue("${ifOneLevelRandom:true}")
-    private boolean ifOneLevelRandom;
-    @Autowired
-    private FlowPoolConfigService flowPoolConfigService;
-
-    @Override
-    Pair<String, String> flowPoolKeyAndLevel(RecallParam param) {
-        //# 1. 获取流量池各层级分发概率权重
-        Map<String, Double> levelWeightMap = flowPoolConfigService.getLevelWeight4FlowPoolWithLevelScore();
-
-        // 2. 判断各层级是否有视频需分发
-        List<LevelWeight> availableLevels = new ArrayList<>();
-        for (Map.Entry<String, Double> entry : levelWeightMap.entrySet()) {
-            String levelKey = param.isFlowPoolUpgrade()
-                    ? String.format(KEY_WITH_LEVEL_SCORE_FORMAT_V2, 0, entry.getKey())
-                    : String.format(KEY_WITH_LEVEL_SCORE_FORMAT, param.getAppType(), entry.getKey());
-            if (Boolean.TRUE.equals(redisTemplate.hasKey(levelKey))) {
-                LevelWeight lw = new LevelWeight();
-                lw.setLevel(entry.getKey());
-                lw.setLevelKey(levelKey);
-                lw.setWeight(entry.getValue());
-                availableLevels.add(lw);
-            }
-        }
-
-        //log.info("availableLevels {}", JSONUtils.toJson(availableLevels));
-        if (CollectionUtils.isEmpty(availableLevels)) {
-            return Pair.of("", "");
-        }
-
-        // 3. 根据可分发层级权重设置分发概率
-        Collections.sort(availableLevels, Comparator.comparingDouble(LevelWeight::getWeight));
-
-        double weightSum = availableLevels.stream().mapToDouble(o -> o.getWeight()).sum();
-        BigDecimal weightSumBD = new BigDecimal(weightSum);
-        double level_p_low = 0;
-        double weight_temp = 0;
-        double level_p_up = 0;
-        Map<String, LevelP> level_p_mapping = new HashMap<>();
-        for (LevelWeight lw : availableLevels) {
-            BigDecimal bd = new BigDecimal(weight_temp + lw.getWeight());
-            level_p_up = bd.divide(weightSumBD, 2, RoundingMode.HALF_UP).doubleValue();
-            LevelP levelP = new LevelP();
-            levelP.setMin(level_p_low);
-            levelP.setMax(level_p_up);
-            levelP.setLevelKey(lw.getLevelKey());
-            level_p_mapping.put(lw.level, levelP);
-            level_p_low = level_p_up;
-
-            weight_temp += lw.getWeight();
-        }
-
-        // 4. 随机生成[0,1)之间数,返回相应概率区间的key
-        double random_p = RandomUtils.nextDouble(0, 1);
-        for (Map.Entry<String, LevelP> entry : level_p_mapping.entrySet()) {
-            if (random_p >= entry.getValue().getMin()
-                    && random_p <= entry.getValue().getMax()) {
-                return Pair.of(entry.getValue().getLevelKey(), entry.getKey());
-            }
-        }
-        return Pair.of("", "");
-    }
-
-    @Data
-    static class LevelWeight {
-        private String level;
-        private String levelKey;
-        private Double weight;
-    }
-
-    @Data
-    static class LevelP {
-        private String levelKey;
-        private double min;
-        private double max;
-    }
-
-    @Override
-    public String pushFrom() {
-        return FlowPoolConstants.PUSH_FORM;
-    }
-
-    @Override
-    public List<Video> recall(RecallParam param) {
-        Pair<String, String> flowPoolKeyAndLevel = flowPoolKeyAndLevel(param);
-        String flowPoolKey = flowPoolKeyAndLevel.getLeft();
-        String level = flowPoolKeyAndLevel.getRight();
-        Set<ZSetOperations.TypedTuple<String>> data = redisTemplate.opsForZSet().reverseRangeWithScores(flowPoolKey, 0, 1000);
-        if (CollectionUtils.isEmpty(data)) {
-            return null;
-        }
-        Map<String, String> videoFlowPoolMap = new LinkedHashMap<>();
-        Map<Long, String> videoFlowPoolMap_ = new LinkedHashMap<>();
-        for (ZSetOperations.TypedTuple<String> value : data) {
-            String[] values = Objects.requireNonNull(value.getValue()).split("-");
-            videoFlowPoolMap.put(values[0], values[1]);
-            videoFlowPoolMap_.put(NumberUtils.toLong(values[0], 0), values[1]);
-        }
-        Map<Long, Double> resultmap = null;
-        if ("1".equals(level) && ifOneLevelRandom) {
-            // 流量池一层改为全随机
-            int limitSize = 60;
-            List<Long> keyList = new ArrayList<>(videoFlowPoolMap_.keySet());
-            Collections.shuffle(keyList);
-            resultmap = keyList.stream().limit(limitSize).collect(Collectors.toMap(
-                    key -> key,
-                    key -> Math.random()
-            ));
-        } else {
-            ScorerPipeline4Recall pipeline = ScorerUtils.getScorerPipeline4Recall("feeds_recall_config_tomson.conf");
-            List<List<Pair<Long, Double>>> results = pipeline.recall(videoFlowPoolMap);
-            List<Pair<Long, Double>> result = results.get(0);
-            resultmap = result.stream()
-                    .collect(Collectors.toMap(
-                            Pair::getLeft, // 键是Pair的left值
-                            Pair::getRight, // 值是Pair的right值
-                            (existingValue, newValue) -> existingValue, // 如果键冲突,选择保留现有的值(或者你可以根据需要定义其他合并策略)
-                            LinkedHashMap::new // 使用LinkedHashMap来保持插入顺序(如果需要的话)
-                    ));
-        }
-
-        // 3 召回内部过滤
-        FilterParam filterParam = FilterParamFactory.create(param, new ArrayList<>(resultmap.keySet()));
-        FilterResult filterResult = filterService.filter(filterParam);
-        List<Video> videosResult = new ArrayList<>();
-        if (filterResult != null && CollectionUtils.isNotEmpty(filterResult.getVideoIds())) {
-            Map<Long, Double> finalResultmap = resultmap;
-            filterResult.getVideoIds().forEach(vid -> {
-                Video recallData = new Video();
-                recallData.setVideoId(vid);
-                recallData.setRovScore(finalResultmap.getOrDefault(vid, 0.0));
-                recallData.setPushFrom(pushFrom());
-                recallData.setFlowPool(videoFlowPoolMap_.get(vid));
-                recallData.setFlowPoolAbtestGroup(param.getFlowPoolAbtestGroup());
-                recallData.setLevel(level);
-                videosResult.add(recallData);
-            });
-        }
-        videosResult.sort(Comparator.comparingDouble(o -> -o.getRovScore()));
-        return videosResult;
-    }
-}

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

@@ -1,27 +0,0 @@
-package com.tzld.piaoquan.recommend.server.service.recall.strategy;
-
-import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
-import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
-import org.apache.commons.lang3.tuple.Pair;
-import org.springframework.stereotype.Service;
-
-/**
- * @author dyp
- */
-@Service
-public class QuickFlowPoolWithLevelRecallStrategy extends AbstractFlowPoolWithLevelRecallStrategy {
-
-    @Override
-    Pair<String, String> flowPoolKeyAndLevel(RecallParam param) {
-        if (param.isFlowPoolUpgrade()) {
-            return Pair.of(FlowPoolConstants.KEY_QUICK_WITH_LEVEL_FORMAT_V2, "-1");
-        }
-        return Pair.of(String.format("flow:pool:quick:item:%s:3", param.getAppType()), "");
-    }
-
-    @Override
-    public String pushFrom() {
-        return FlowPoolConstants.QUICK_PUSH_FORM;
-    }
-
-}

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

@@ -1,30 +0,0 @@
-package com.tzld.piaoquan.recommend.server.service.recall.strategy;
-
-import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
-import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.tuple.Pair;
-import org.springframework.stereotype.Service;
-
-import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants.KEY_QUICK_WITH_LEVEL_SCORE_FORMAT;
-
-/**
- * @author dyp
- */
-@Service
-@Slf4j
-public class QuickFlowPoolWithLevelScoreRecallStrategy extends AbstractFlowPoolWithLevelScoreRecallStrategy {
-
-    @Override
-    Pair<String, String> flowPoolKeyAndLevel(RecallParam param) {
-        if (param.isFlowPoolUpgrade()) {
-            return Pair.of(FlowPoolConstants.KEY_QUICK_WITH_LEVEL_SCORE_FORMAT_V2, "-1");
-        }
-        return Pair.of(String.format(KEY_QUICK_WITH_LEVEL_SCORE_FORMAT, param.getAppType()), "");
-    }
-
-    @Override
-    public String pushFrom() {
-        return FlowPoolConstants.QUICK_PUSH_FORM;
-    }
-}