ソースを参照

request context

丁云鹏 1 年間 前
コミット
df368eb074

+ 22 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/model/MachineInfo.java

@@ -0,0 +1,22 @@
+package com.tzld.piaoquan.recommend.server.model;
+
+import lombok.Data;
+
+/**
+ * @author dyp
+ */
+@Data
+public class MachineInfo {
+    // HONOR
+    private String brand;
+    // NZA-AL00
+    private String model;
+    // android
+    private String platform;
+    // 3.2.4
+    private String sdkVersion;
+    // Android 10
+    private String system;
+    // 8.0.43
+    private String wechatVersion;
+}

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

@@ -344,7 +344,7 @@ public class RecommendService {
         // TODO RequestContext
         RequestContext context = new RequestContext();
 
-        rankParam.setRequestContext(context);
+        //rankParam.setRequestContext(context);
         return rankParam;
     }
 

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

@@ -1,6 +1,6 @@
 package com.tzld.piaoquan.recommend.server.service.rank;
 
-import com.tzld.piaoquan.recommend.server.common.base.RequestContext;
+import com.tzld.piaoquan.recommend.server.model.MachineInfo;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallResult;
 import lombok.Data;
 
@@ -19,5 +19,7 @@ public class RankParam {
     private boolean specialRecommend;
     private String uid;
     private String cityCode;
-    private RequestContext requestContext;
+
+    private MachineInfo machineInfo;
+
 }

+ 34 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/RankService.java

@@ -3,13 +3,16 @@ package com.tzld.piaoquan.recommend.server.service.rank;
 
 import com.tzld.piaoquan.recommend.server.common.base.ItemFeature;
 import com.tzld.piaoquan.recommend.server.common.base.RankItem;
+import com.tzld.piaoquan.recommend.server.common.base.RequestContext;
 import com.tzld.piaoquan.recommend.server.common.base.UserFeature;
 import com.tzld.piaoquan.recommend.server.common.enums.AppTypeEnum;
+import com.tzld.piaoquan.recommend.server.model.MachineInfo;
 import com.tzld.piaoquan.recommend.server.model.Video;
 import com.tzld.piaoquan.recommend.server.remote.FeatureRemoteService;
 import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallResult;
 import com.tzld.piaoquan.recommend.server.service.recall.strategy.*;
+import com.tzld.piaoquan.recommend.server.service.score.ScoreParam;
 import com.tzld.piaoquan.recommend.server.service.score.ScorerUtils;
 import com.tzld.piaoquan.recommend.server.util.CommonCollectionUtils;
 import com.tzld.piaoquan.recommend.server.util.JSONUtils;
@@ -21,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -164,7 +168,7 @@ public class RankService {
 
         // TODO
         List<RankItem> rovRecallScore = ScorerUtils.getScorerPipeline(ScorerUtils.BASE_CONF)
-                .scoring(param, userFeature, rankItems);
+                .scoring(convert(param), userFeature, rankItems);
         log.info("mergeAndRankRovRecall rovRecallScore={}", JSONUtils.toJson(rovRecallScore));
 
         return CommonCollectionUtils.toList(rovRecallScore, i -> {
@@ -175,6 +179,35 @@ public class RankService {
         });
     }
 
+    private ScoreParam convert(RankParam param) {
+        ScoreParam scoreParam = new ScoreParam();
+        // TODO hardcode 为了兼容写入逻辑
+        RequestContext context = new RequestContext();
+        context.setApptype(param.getAppType() + "");
+
+        // TODO 地域转换
+//        context.setRegion();
+//        context.setCity();
+
+        Calendar calendar = Calendar.getInstance();
+        context.setWeek((calendar.get(Calendar.DAY_OF_WEEK) + 6) % 7 + "");
+        context.setDay(new SimpleDateFormat("yyyyMMdd").format(calendar.getTime()));
+        context.setHour(new SimpleDateFormat("HH").format(calendar.getTime()));
+
+        MachineInfo machineInfo = param.getMachineInfo();
+        if (machineInfo != null) {
+            context.setMachineinfo_brand(machineInfo.getBrand());
+            context.setMachineinfo_model(machineInfo.getModel());
+            context.setMachineinfo_platform(machineInfo.getPlatform());
+            context.setMachineinfo_sdkversion(machineInfo.getSdkVersion());
+            context.setMachineinfo_system(machineInfo.getSystem());
+            context.setMachineinfo_wechatversion(machineInfo.getWechatVersion());
+        }
+
+        scoreParam.setRequestContext(context);
+        return scoreParam;
+    }
+
     private List<Video> mergeAndRankFlowPoolRecall(RankParam param) {
         if (param.getAppType() == AppTypeEnum.LAO_HAO_KAN_VIDEO.getCode()
                 || param.getAppType() == AppTypeEnum.ZUI_JING_QI.getCode()) {

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

@@ -60,7 +60,7 @@ public abstract class AbstractScorer {
         return scorerConfigInfo;
     }
 
-    public abstract List<RankItem> scoring(final RankParam param,
+    public abstract List<RankItem> scoring(final ScoreParam param,
                                            final UserFeature userFeature,
                                            final List<RankItem> rankItems);
 

+ 12 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/ScoreParam.java

@@ -0,0 +1,12 @@
+package com.tzld.piaoquan.recommend.server.service.score;
+
+import com.tzld.piaoquan.recommend.server.common.base.RequestContext;
+import lombok.Data;
+
+/**
+ * @author dyp
+ */
+@Data
+public class ScoreParam {
+    private RequestContext requestContext;
+}

+ 1 - 5
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/ScorerPipeline.java

@@ -39,13 +39,9 @@ public class ScorerPipeline {
      * scoring
      * @return
      */
-    public List<RankItem> scoring(final RankParam param,
+    public List<RankItem> scoring(final ScoreParam param,
                                final UserFeature userFeature,
                                final List<RankItem> rankItems) {
-        // check recall is empty?
-        if (CollectionUtils.isEmpty(param.getRecallResult().getData())) {
-            // log.error
-        }
 
         if (CollectionUtils.isEmpty(scorers)) {
             // log.error()

+ 7 - 17
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/VlogShareGBDTScorer.java

@@ -29,21 +29,10 @@ public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
     }
 
 
-    private RequestContext getRequestContext(RecommendRequest request) {
-
-        RequestContext requestContext = new RequestContext();
-        return requestContext;
-    }
-
     @Override
-    public List<RankItem> scoring(final RankParam param,
+    public List<RankItem> scoring(final ScoreParam param,
                                   final UserFeature userFeature,
                                   final List<RankItem> rankItems) {
-        RecallResult recallResult = param.getRecallResult();
-        if (recallResult.getData().size() == 0) {
-            return rankItems;
-        }
-
         long startTime = System.currentTimeMillis();
 
         GBDTModel model = (GBDTModel) this.getModel();
@@ -53,7 +42,7 @@ public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
         }
 
         // 多Rank的rank打分
-        multipleGBDTScore(rankItems, model, userFeature, param.getRequestContext());
+        multipleGBDTScore(rankItems, model, userFeature, param);
         Collections.sort(rankItems);
         LOGGER.debug("dwelltime ranker excute time: [{}]", System.currentTimeMillis() - startTime);
         return rankItems;
@@ -121,7 +110,7 @@ public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
     public void multipleGBDTScore(final List<RankItem> items,
                                   final GBDTModel model,
                                   final UserFeature user,
-                                  final RequestContext requestContext) {
+                                  final ScoreParam param) {
         final int size = items.size();
         if (size == 0) {
             return;
@@ -131,7 +120,7 @@ public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
         final Map<String, Double> contextFeatures;
 
         // context feature
-        contextFeatures = GBDTFeatureExtractorBase.extractRequestContextFeatures(requestContext);
+        contextFeatures = GBDTFeatureExtractorBase.extractRequestContextFeatures(param);
         // user feature
         userFeatures = GBDTFeatureExtractorBase.extractUserFeatures(user);
 
@@ -143,7 +132,8 @@ public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
                               @Override
                               public Object call() throws Exception {
                                   try {
-                                      gbdtBaseScore(items.get(fIndex), model, requestContext, userFeatures, contextFeatures, user);
+                                      gbdtBaseScore(items.get(fIndex), model, param.getRequestContext(), userFeatures, contextFeatures,
+                                              user);
                                   } catch (Exception e) {
                                       LOGGER.error("dwelltime exception: [{}] [{}]", items.get(fIndex), ExceptionUtils.getFullStackTrace(e));
                                   }
@@ -166,7 +156,7 @@ public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
                 try {
                     if (future != null && future.isDone() && !future.isCancelled() && future.get() != null) {
                     } else {
-                        LOGGER.debug("Canceled Dwelltime Score {}", requestContext);
+                        LOGGER.debug("Canceled Dwelltime Score {}", param.getRequestContext());
                     }
                 } catch (Exception e) {
                     LOGGER.error("InterruptedException {},{}", ExceptionUtils.getFullStackTrace(e));

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

@@ -34,7 +34,7 @@ public class VlogShareLRScorer extends BaseLRModelScorer {
 
 
     @Override
-    public List<RankItem> scoring(final RankParam param,
+    public List<RankItem> scoring(final ScoreParam param,
                                   final UserFeature userFeature,
                                   final List<RankItem> rankItems) {
         long startTime = System.currentTimeMillis();

+ 4 - 11
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/feature/GBDTFeatureExtractorBase.java

@@ -1,16 +1,14 @@
 package com.tzld.piaoquan.recommend.server.service.score.feature;
 
 
-
-import com.tzld.piaoquan.recommend.server.common.base.RequestContext;
 import com.tzld.piaoquan.recommend.server.common.base.UserFeature;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallResult;
+import com.tzld.piaoquan.recommend.server.service.score.ScoreParam;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 
 public class GBDTFeatureExtractorBase {
@@ -25,7 +23,7 @@ public class GBDTFeatureExtractorBase {
     }
 
     // TODO
-    public static Map<String, Double> extractRequestContextFeatures(final RequestContext requestContext) {
+    public static Map<String, Double> extractRequestContextFeatures(final ScoreParam param) {
         Map<String, Double> features = new HashMap<String, Double>();
         // need to add which features to extract
 
@@ -33,7 +31,6 @@ public class GBDTFeatureExtractorBase {
     }
 
 
-
     // TODO
     public static Map<String, Double> extractUserFeatures(final UserFeature userFeature) {
         Map<String, Double> features = new HashMap<String, Double>();
@@ -44,8 +41,4 @@ public class GBDTFeatureExtractorBase {
     }
 
 
-
-
-
-
 }

+ 9 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/util/DateUtils.java

@@ -27,4 +27,13 @@ public final class DateUtils {
         Date previousDate = calendar.getTime();
         return dateFormat.format(previousDate);
     }
+
+    public static void main(String[] args){
+        Calendar calendar = Calendar.getInstance();
+
+        System.out.println((calendar.get(Calendar.DAY_OF_WEEK) + 6) % 7 );
+        System.out.println(new SimpleDateFormat("yyyyMMdd").format(calendar.getTime()));
+        System.out.println(new SimpleDateFormat("HH").format(calendar.getTime()));
+
+    }
 }