Browse Source

算法打散

jch 1 month ago
parent
commit
2278e2209f

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

@@ -298,27 +298,27 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
     private Map<String, String> getUserBaseInfo(RankParam param) {
         Map<String, String> baseInfo = new HashMap<>();
         String province = param.getProvince();
-        if (null != province) {
+        if (null != province && !province.isEmpty()) {
             baseInfo.put("province", province.replaceAll("省$", ""));
         }
 
         String city = param.getCity();
-        if (null != city) {
+        if (null != city && !city.isEmpty()) {
             baseInfo.put("city", city.replaceAll("市$", ""));
         }
 
         MachineInfo machineInfo = param.getMachineInfo();
         if (null != machineInfo) {
             String model = machineInfo.getModel();
-            if (null != model) {
+            if (null != model && !model.isEmpty()) {
                 baseInfo.put("model", model);
             }
             String brand = machineInfo.getBrand();
-            if (null != brand) {
+            if (null != brand && !brand.isEmpty()) {
                 baseInfo.put("brand", brand);
             }
             String system = machineInfo.getSystem();
-            if (null != system) {
+            if (null != system && !system.isEmpty()) {
                 baseInfo.put("system", system);
             }
         }

+ 36 - 67
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV566.java

@@ -3,13 +3,14 @@ package com.tzld.piaoquan.recommend.server.service.rank.strategy;
 import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.tzld.piaoquan.recommend.server.model.Video;
 import com.tzld.piaoquan.recommend.server.service.rank.RankParam;
-import com.tzld.piaoquan.recommend.server.util.MathUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.math3.util.Pair;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @Service
 @Slf4j
@@ -20,33 +21,20 @@ public class RankStrategy4RegionMergeModelV566 extends RankStrategy4RegionMergeM
     @Autowired
     private RankStrategy4RegionMergeModelV563 modelV563Service;
 
-    @Autowired
-    private RankStrategy4RegionMergeModelV567 modelV567Service;
-
     @Override
     public List<Video> mergeAndRankRovRecall(RankParam param) {
         Map<String, Double> mergeWeight = this.mergeWeight != null ? this.mergeWeight : new HashMap<>(0);
 
-        List<Video> result;
-        String rosScoreKey;
-        int baseRankId = mergeWeight.getOrDefault("baseRankId", 563D).intValue();
-        if (567 == baseRankId) {
-            rosScoreKey = "NorXGBScore";
-            result = modelV567Service.mergeAndRankRovRecall(param);
-        } else {
-            rosScoreKey = "hasReturnRovScore";
-            result = modelV563Service.mergeAndRankRovRecall(param);
-        }
+        List<Video> result = modelV563Service.mergeAndRankRovRecall(param);
         if (null != result && !result.isEmpty()) {
             try {
                 Integer versionCode = param.getVersionCode();
                 int orderVersionCode = mergeWeight.getOrDefault("orderVersionCode", 1500D).intValue();
                 if (null != versionCode && versionCode == orderVersionCode) {
                     int keepTopN = mergeWeight.getOrDefault("keepTopN", 1D).intValue();
-                    boolean useRandFlag = mergeWeight.getOrDefault("useRandFlag", 0D).intValue() > 0;
-                    boolean firstRovFlag = mergeWeight.getOrDefault("firstRovFlag", 1D).intValue() > 0;
-                    double rovRandRate = mergeWeight.getOrDefault("rovRandRate", 0.5);
-                    return resort(keepTopN, useRandFlag, firstRovFlag, rovRandRate, rosScoreKey, result);
+                    int secondN = mergeWeight.getOrDefault("secondN", 4D).intValue();
+                    boolean secondFirstFlag = mergeWeight.getOrDefault("secondFirstFlag", 1D).intValue() > 0;
+                    return resort(keepTopN, secondN, secondFirstFlag, result);
                 }
             } catch (Exception e) {
                 log.error("diversity resort error", e);
@@ -55,60 +43,41 @@ public class RankStrategy4RegionMergeModelV566 extends RankStrategy4RegionMergeM
         return result;
     }
 
-    private List<Video> resort(int keepTopN, boolean useRandFlag, boolean firstRovFlag, double rovRandRate, String rosScoreKey, List<Video> videos) {
-        Map<Long, Video> videoMap = new HashMap<>();
-        List<Pair<Long, Double>> rovList = new ArrayList<>();
-        List<Pair<Long, Double>> rosList = new ArrayList<>();
-        for (Video video : videos) {
-            long vid = video.getVideoId();
-            videoMap.put(vid, video);
-
-            Map<String, Double> scoreMap = video.getScoresMap();
-            rovList.add(Pair.create(vid, scoreMap.getOrDefault("fmRov", 0d)));
-            rosList.add(Pair.create(vid, scoreMap.getOrDefault(rosScoreKey, 0d)));
-        }
-        rovList.sort(Comparator.comparingDouble(o -> -o.getSecond()));
-        rosList.sort(Comparator.comparingDouble(o -> -o.getSecond()));
-
-        // top
-        Set<Long> hit = new HashSet<>();
+    private List<Video> resort(int keepTopN, int secondN, boolean secondFirstFlag, List<Video> videos) {
+        // split
         List<Video> result = new ArrayList<>();
-        for (int i = 0; i < keepTopN && i < videos.size(); i++) {
-            Video video = videos.get(i);
-            hit.add(video.getVideoId());
-            result.add(video);
-        }
-
-        // alternate
-        int rovIndex = 0;
-        int rosIndex = 0;
-        boolean flag = firstRovFlag;
-        for (int i = keepTopN; i < videos.size(); i++) {
-            if (useRandFlag) {
-                flag = MathUtil.nextDouble(0, 1) < rovRandRate;
-            }
-            if (flag) {
-                rovIndex = fillVideo(rovIndex, rovList, videoMap, hit, result);
+        List<Video> list2nd = new ArrayList<>();
+        List<Video> list3rd = new ArrayList<>();
+        for (int i = 0; i < videos.size(); i++) {
+            if (i < keepTopN) {
+                result.add(videos.get(i));
+            } else if (i < secondN) {
+                list2nd.add(videos.get(i));
             } else {
-                rosIndex = fillVideo(rosIndex, rosList, videoMap, hit, result);
+                list3rd.add(videos.get(i));
             }
-            flag = !flag;
+        }
+
+        // merge
+        if (secondFirstFlag) {
+            fillVideo(list2nd, list3rd, result);
+        } else {
+            fillVideo(list3rd, list2nd, result);
         }
         return result;
     }
 
-    private int fillVideo(int start, List<Pair<Long, Double>> list, Map<Long, Video> videoMap, Set<Long> hit, List<Video> result) {
-        for (int i = start; i < list.size(); i++) {
-            start++;
-            Pair<Long, Double> pair = list.get(i);
-            long vid = pair.getFirst();
-            if (!hit.contains(vid)) {
-                Video video = videoMap.get(vid);
-                hit.add(vid);
-                result.add(video);
-                break;
-            }
+    private void fillVideo(List<Video> list1, List<Video> list2, List<Video> result) {
+        int index = 0;
+        for (; index < list1.size() && index < list2.size(); index++) {
+            result.add(list1.get(index));
+            result.add(list2.get(index));
+        }
+        for (; index < list1.size(); index++) {
+            result.add(list1.get(index));
+        }
+        for (; index < list2.size(); index++) {
+            result.add(list2.get(index));
         }
-        return start;
     }
 }

+ 1 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/tansform/FeatureV6.java

@@ -247,7 +247,7 @@ public class FeatureV6 {
                         }
                         if (null != hVideoMap && hVideoMap.containsKey(vid)) {
                             Map<String, String> hVideo = hVideoMap.get(vid);
-                            getVideoCateFeature(baseKey, hVideo, featMap);
+                            //getVideoCateFeature(baseKey, hVideo, featMap);
                             getTwoVideoCrossFeature(baseKey, hVideoSimAttrs, hVideo, rankVideo, featMap);
                         }
                     }