Bladeren bron

添加详情页&优化fm预测

jch 2 dagen geleden
bovenliggende
commit
32ffa49884

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

@@ -14,10 +14,7 @@ import com.tzld.piaoquan.recommend.server.service.rank.extractor.ExtractVideoMer
 import com.tzld.piaoquan.recommend.server.service.rank.tansform.FeatureV6;
 import com.tzld.piaoquan.recommend.server.service.recall.strategy.*;
 import com.tzld.piaoquan.recommend.server.service.score.ScorerUtils;
-import com.tzld.piaoquan.recommend.server.util.CommonCollectionUtils;
-import com.tzld.piaoquan.recommend.server.util.FeatureBucketUtils;
-import com.tzld.piaoquan.recommend.server.util.JSONUtils;
-import com.tzld.piaoquan.recommend.server.util.RecallUtils;
+import com.tzld.piaoquan.recommend.server.util.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -74,6 +71,7 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
         //-------------------序-------------------
         //-------------------逻-------------------
         //-------------------辑-------------------
+        Map<String, String> rtFeatureDumpsMap = dumpsRtFeature(param.getUserRTShareList());
 
         // 1. 批量获取特征  省份参数要对齐  headvid  要传递过来!
         // k1:视频、k2:表、k3:特征、v:特征值
@@ -163,6 +161,9 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
             if (MapUtils.isNotEmpty(feature.getUserFeature())) {
                 video.getMetaFeatureMap().putAll(feature.getUserFeature());
             }
+            if (null != rtFeatureDumpsMap && !rtFeatureDumpsMap.isEmpty()) {
+                video.getMetaFeatureMap().put("rt", rtFeatureDumpsMap);
+            }
             result.add(video);
         }
         ExtractVideoMergeCate.addOtherParam(result, videoBaseInfoMap);
@@ -333,6 +334,13 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
                 baseInfo.put("system", system);
             }
         }
+        String userChannel = param.getChannelName();
+        if (null != userChannel && !userChannel.isEmpty()) {
+            baseInfo.put("user_channel", userChannel);
+        }
+        if (FeatureUtils.firstLevel(param.getUserShareDepth())) {
+            baseInfo.put("user_level", "1st");
+        }
         return baseInfo;
     }
 

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

@@ -17,20 +17,20 @@ public class FeatureV6 {
     private static final double log1Scale = 10.0;
     private static final List<String> c1Periods = Arrays.asList("72h", "168h");
     private static final List<String> b0Periods = Arrays.asList("1h", "3h", "6h", "12h");
-    private static final List<String> b1Periods = Arrays.asList("1h", "3h", "24h", "72h", "168h");
+    private static final List<String> b1Periods = Arrays.asList("1h", "3h", "6h", "24h", "72h", "168h");
     private static final List<String> b2Periods = Arrays.asList("1h", "3h", "24h");
-    private static final List<String> b3Periods = Arrays.asList("24h", "168h");
-    private static final List<String> b4Periods = Arrays.asList("1h", "12h");
-    private static final List<String> b5Periods = Arrays.asList("1h", "3h", "72h", "168h");
+    private static final List<String> b3Periods = Arrays.asList("24h", "72h", "168h");
+    private static final List<String> b4Periods = Arrays.asList("1h", "3h", "6h", "12h");
+    private static final List<String> b5Periods = Arrays.asList("1h", "3h", "6h", "12h", "24h", "72h", "168h");
     private static final List<String> b6Periods = Arrays.asList("1h", "24h");
-    private static final List<String> b7Periods = Arrays.asList("24h", "168h");
+    private static final List<String> b7Periods = Arrays.asList("24h", "72h", "168h");
     private static final List<String> b8Periods = Arrays.asList("24h");
     private static final List<String> b9Periods = Arrays.asList("24h");
     private static final List<String> b10Periods = Arrays.asList("1h", "12h");
     private static final List<String> b11Periods = Arrays.asList("12h", "168h");
-    private static final List<String> b13Periods = Arrays.asList("24h", "168h");
+    private static final List<String> b13Periods = Arrays.asList("1h", "3h", "24h", "72h", "168h");
     private static final List<String> videoCateAttrs = Arrays.asList(FeatureUtils.cate1Attr, FeatureUtils.cate2Attr, FeatureUtils.festive1Attr,
-            FeatureUtils.channelAttr, FeatureUtils.sourceAttr, FeatureUtils.uidAttr);
+            FeatureUtils.channelAttr, FeatureUtils.sourceAttr, FeatureUtils.uidAttr, FeatureUtils.mergeCate1Attr, FeatureUtils.mergeCate2Attr);
     private static final List<String> videoSimAttrs = Arrays.asList("title", "cate2", "cate2_list", "keywords");
     private static final List<String> hVideoSimAttrs = Arrays.asList("title");
     private static final List<String> cfList = Arrays.asList("share", "return");
@@ -175,10 +175,6 @@ public class FeatureV6 {
         }
         featMap.put(prefix + "@total_time", FeatureUtils.log1(Double.parseDouble(videoInfo.getOrDefault("total_time", "0")), log1Scale));
         featMap.put(prefix + "@bit_rate", FeatureUtils.log1(Double.parseDouble(videoInfo.getOrDefault("bit_rate", "0")), log1Scale));
-        if (videoInfo.containsKey("width") && videoInfo.containsKey("height")) {
-            String resolution = String.format("%s@%s@%s_%s", prefix, "wh", videoInfo.get("width"), videoInfo.get("height"));
-            featMap.put(resolution, 1.0);
-        }
         String resolution = FeatureUtils.getResolution(videoInfo);
         if (!resolution.isEmpty()) {
             String resKey = String.format("%s@%s@%s", prefix, "res", resolution);

+ 6 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/model/FMModel.java

@@ -56,10 +56,15 @@ public class FMModel extends Model {
         if (MapUtils.isNotEmpty(featureMap)) {
             // 计算 sum w*x
             float sum0 = 0.0f;
+            Map<String, Float> validFeatureMap = new HashMap<>(featureMap.size());
             for (Map.Entry<String, Float> e : featureMap.entrySet()) {
+                if (!this.model.containsKey(e.getKey())) {
+                    continue;
+                }
                 float x = e.getValue();
                 float w = getWeight(this.model, e.getKey(), 0);
                 sum0 += w * x;
+                validFeatureMap.put(e.getKey(), x);
             }
             sum += sum0;
 
@@ -68,7 +73,7 @@ public class FMModel extends Model {
             for (int i = 1; i < 9; i++) {
                 float sum10 = 0.0f;
                 float sum11 = 0.0f;
-                for (Map.Entry<String, Float> e : featureMap.entrySet()) {
+                for (Map.Entry<String, Float> e : validFeatureMap.entrySet()) {
                     float x = e.getValue();
                     float v = getWeight(this.model, e.getKey(), i);
                     float d = v * x;

+ 2 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/util/FeatureUtils.java

@@ -14,6 +14,8 @@ public class FeatureUtils {
     public static final String channelAttr = "channel";
     public static final String sourceAttr = "vid_source";
     public static final String uidAttr = "uid";
+    public static final String mergeCate1Attr = "merge_first_level_cate";
+    public static final String mergeCate2Attr = "merge_second_level_cate";
     public static final double twoMonthMs = 2 * 30 * 24 * 3600 * 1000.0;
 
     private static final String goodMorningRegex = "(早安|早上好|早晨好|上午好)";