|
|
@@ -8,15 +8,12 @@ import com.tzld.piaoquan.recommend.server.model.MachineInfo;
|
|
|
import com.tzld.piaoquan.recommend.server.model.Video;
|
|
|
import com.tzld.piaoquan.recommend.server.service.FeatureService;
|
|
|
import com.tzld.piaoquan.recommend.server.service.rank.RankParam;
|
|
|
-import com.tzld.piaoquan.recommend.server.service.rank.bo.UserSRBO;
|
|
|
import com.tzld.piaoquan.recommend.server.service.rank.bo.UserShareReturnProfile;
|
|
|
import com.tzld.piaoquan.recommend.server.service.rank.extractor.ExtractVideoMergeCate;
|
|
|
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.*;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.collections4.MapUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
@@ -26,7 +23,6 @@ import org.springframework.stereotype.Service;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.Future;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
@Slf4j
|
|
|
@@ -47,114 +43,100 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
|
|
|
//-------------------辑-------------------
|
|
|
|
|
|
long currentMs = System.currentTimeMillis();
|
|
|
- List<Video> oldRovs = new ArrayList<>();
|
|
|
- oldRovs.addAll(extractAndSort(param, RegionHRecallStrategy.PUSH_FORM));
|
|
|
- oldRovs.addAll(extractAndSort(param, RegionHDupRecallStrategy.PUSH_FORM));
|
|
|
- oldRovs.addAll(extractAndSort(param, Region24HRecallStrategy.PUSH_FORM));
|
|
|
- oldRovs.addAll(extractAndSort(param, RegionRelative24HRecallStrategy.PUSH_FORM));
|
|
|
- oldRovs.addAll(extractAndSort(param, RegionRelative24HDupRecallStrategy.PUSH_FORM));
|
|
|
- removeDuplicate(oldRovs);
|
|
|
- int sizeReturn = param.getSize();
|
|
|
- List<Video> v0 = oldRovs.size() <= sizeReturn
|
|
|
- ? oldRovs
|
|
|
- : oldRovs.subList(0, sizeReturn);
|
|
|
Set<Long> setVideo = new HashSet<>();
|
|
|
- this.duplicate(setVideo, v0);
|
|
|
- setVideo.addAll(v0.stream().map(Video::getVideoId).collect(Collectors.toSet()));
|
|
|
- List<Video> rovRecallRank = new ArrayList<>(v0);
|
|
|
+ setVideo.add(param.getHeadVid());
|
|
|
+ List<Video> rovRecallRank = new ArrayList<>();
|
|
|
+ // -------------------5路特殊旧召回------------------
|
|
|
+ RecallUtils.extractOldSpecialRecall(mergeWeight.getOrDefault("oldSpecialN", (double) param.getSize()).intValue(), param, setVideo, rovRecallRank);
|
|
|
//-------------------return相似召回------------------
|
|
|
- List<Video> v6 = extractAndSort(param, ReturnVideoRecallStrategy.PUSH_FORM);
|
|
|
- v6 = v6.stream().filter(r -> !setVideo.contains(r.getVideoId())).collect(Collectors.toList());
|
|
|
- v6 = v6.subList(0, Math.min(mergeWeight.getOrDefault("v6", 5.0).intValue(), v6.size()));
|
|
|
- rovRecallRank.addAll(v6);
|
|
|
- setVideo.addAll(v6.stream().map(Video::getVideoId).collect(Collectors.toSet()));
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("v6", 5.0).intValue(), param, ReturnVideoRecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
//-------------------新地域召回------------------
|
|
|
- List<Video> v1 = extractAndSort(param, RegionRealtimeRecallStrategyV1.PUSH_FORM);
|
|
|
- v1 = v1.stream().filter(r -> !setVideo.contains(r.getVideoId())).collect(Collectors.toList());
|
|
|
- v1 = v1.subList(0, Math.min(mergeWeight.getOrDefault("v1", 5.0).intValue(), v1.size()));
|
|
|
- rovRecallRank.addAll(v1);
|
|
|
- setVideo.addAll(v1.stream().map(Video::getVideoId).collect(Collectors.toSet()));
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("v1", 5.0).intValue(), param, RegionRealtimeRecallStrategyV1.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
//-------------------scene cf rovn------------------
|
|
|
- List<Video> sceneCFRovn = extractAndSort(param, SceneCFRovnRecallStrategy.PUSH_FORM);
|
|
|
- sceneCFRovn = sceneCFRovn.stream().filter(r -> !setVideo.contains(r.getVideoId())).collect(Collectors.toList());
|
|
|
- sceneCFRovn = sceneCFRovn.subList(0, Math.min(mergeWeight.getOrDefault("sceneCFRovn", 5.0).intValue(), sceneCFRovn.size()));
|
|
|
- rovRecallRank.addAll(sceneCFRovn);
|
|
|
- setVideo.addAll(sceneCFRovn.stream().map(Video::getVideoId).collect(Collectors.toSet()));
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("sceneCFRovn", 5.0).intValue(), param, SceneCFRovnRecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
//-------------------scene cf rosn------------------
|
|
|
- List<Video> sceneCFRosn = extractAndSort(param, SceneCFRosnRecallStrategy.PUSH_FORM);
|
|
|
- sceneCFRosn = sceneCFRosn.stream().filter(r -> !setVideo.contains(r.getVideoId())).collect(Collectors.toList());
|
|
|
- sceneCFRosn = sceneCFRosn.subList(0, Math.min(mergeWeight.getOrDefault("sceneCFRosn", 5.0).intValue(), sceneCFRosn.size()));
|
|
|
- rovRecallRank.addAll(sceneCFRosn);
|
|
|
- setVideo.addAll(sceneCFRosn.stream().map(Video::getVideoId).collect(Collectors.toSet()));
|
|
|
- // -------------------cate1------------------
|
|
|
- int cate1RecallN = mergeWeight.getOrDefault("cate1RecallN", 5.0).intValue();
|
|
|
- addRecall(param, cate1RecallN, UserCate1RecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
- // -------------------cate2------------------
|
|
|
- int cate2RecallN = mergeWeight.getOrDefault("cate2RecallN", 5.0).intValue();
|
|
|
- addRecall(param, cate2RecallN, UserCate2RecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("sceneCFRosn", 5.0).intValue(), param, SceneCFRosnRecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
+ // -------------------user cate1------------------
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("cate1RecallN", 5.0).intValue(), param, UserCate1RecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
+ // -------------------user cate2------------------
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("cate2RecallN", 5.0).intValue(), param, UserCate2RecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
// -------------------head province cate1------------------
|
|
|
- int headCate1RecallN = mergeWeight.getOrDefault("headCate1RecallN", 3.0).intValue();
|
|
|
- addRecall(param, headCate1RecallN, HeadProvinceCate1RecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("headCate1RecallN", 3.0).intValue(), param, HeadProvinceCate1RecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
// -------------------head province cate2------------------
|
|
|
- int headCate2RecallN = mergeWeight.getOrDefault("headCate2RecallN", 3.0).intValue();
|
|
|
- addRecall(param, headCate2RecallN, HeadProvinceCate2RecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("headCate2RecallN", 3.0).intValue(), param, HeadProvinceCate2RecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
//-------------------head cate2 of rovn------------------
|
|
|
- List<Video> headCate2Rov = extractAndSort(param, HeadCate2RovRecallStrategy.PUSH_FROM);
|
|
|
- // 视频去重
|
|
|
- removeDuplicate(headCate2Rov);
|
|
|
- headCate2Rov = headCate2Rov.stream().filter(o -> !setVideo.contains(o.getVideoId())).collect(Collectors.toList());
|
|
|
- headCate2Rov = headCate2Rov.subList(0, Math.min(mergeWeight.getOrDefault("headCate2Rov", 5.0).intValue(), headCate2Rov.size()));
|
|
|
- rovRecallRank.addAll(headCate2Rov);
|
|
|
- setVideo.addAll(headCate2Rov.stream().map(Video::getVideoId).collect(Collectors.toSet()));
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("headCate2Rov", 5.0).intValue(), param, HeadCate2RovRecallStrategy.PUSH_FROM, setVideo, rovRecallRank);
|
|
|
+ //-------------------city rovn------------------
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("cityRov", 5.0).intValue(), param, CityRovnRecallStrategy.PUSH_FROM, setVideo, rovRecallRank);
|
|
|
+ //-------------------priori province rovn------------------
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("prioriProvinceRov", 3.0).intValue(), param, PrioriProvinceRovnRecallStrategy.PUSH_FROM, setVideo, rovRecallRank);
|
|
|
+ //-------------------priori province str------------------
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("prioriProvinceStr", 1.0).intValue(), param, PrioriProvinceStrRecallStrategy.PUSH_FROM, setVideo, rovRecallRank);
|
|
|
+ //-------------------priori province ros------------------
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("prioriProvinceRos", 1.0).intValue(), param, PrioriProvinceRosRecallStrategy.PUSH_FROM, setVideo, rovRecallRank);
|
|
|
+ //-------------------return1 cate2 ros------------------
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("return1Cate2Ros", 5.0).intValue(), param, Return1Cate2RosRecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
+ //-------------------return1 cate2 str------------------
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("return1Cate2Str", 5.0).intValue(), param, Return1Cate2StrRecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
|
|
|
//-------------------排-------------------
|
|
|
//-------------------序-------------------
|
|
|
//-------------------逻-------------------
|
|
|
//-------------------辑-------------------
|
|
|
+ Map<String, String> rtFeatureDumpsMap = dumpsRtFeature(param.getUserRTShareList());
|
|
|
|
|
|
// 1. 批量获取特征 省份参数要对齐 headvid 要传递过来!
|
|
|
// k1:视频、k2:表、k3:特征、v:特征值
|
|
|
+ Map<String, String> headVideoInfo = param.getHeadInfo();
|
|
|
List<String> vids = CommonCollectionUtils.toListDistinct(rovRecallRank, v -> String.valueOf(v.getVideoId()));
|
|
|
- String headVid = String.valueOf(param.getHeadVid());
|
|
|
- Map<String, Map<String, Map<String, String>>> videoBaseInfoMap = featureService.getVideoBaseInfo(headVid, vids);
|
|
|
- FeatureService.Feature feature = featureService.getFeatureV3(param, videoBaseInfoMap, vids);
|
|
|
+ Map<String, Map<String, Map<String, String>>> videoBaseInfoMap = featureService.getVideoBaseInfo("", vids);
|
|
|
+ Map<String, Map<String, Map<String, String>>> videoBCData = featureService.getVideoStatistics(vids);
|
|
|
+
|
|
|
+ FeatureService.Feature feature = featureService.getFeatureV4(param, headVideoInfo, videoBaseInfoMap, vids);
|
|
|
Map<String, Map<String, String>> featureOriginUser = feature.getUserFeature();
|
|
|
Map<String, Map<String, Map<String, String>>> featureOriginVideo = feature.getVideoFeature();
|
|
|
- Map<String, String> headVideoInfo = videoBaseInfoMap.getOrDefault(headVid, new HashMap<>()).getOrDefault("alg_vid_feature_basic_info", new HashMap<>());
|
|
|
|
|
|
// 2. 用户信息预处理
|
|
|
Map<String, Map<String, String[]>> newC7Map = FeatureV6.parseUCFScore(featureOriginUser.getOrDefault("alg_mid_feature_sharecf", new HashMap<>()));
|
|
|
Map<String, Map<String, String[]>> newC8Map = FeatureV6.parseUCFScore(featureOriginUser.getOrDefault("alg_mid_feature_returncf", new HashMap<>()));
|
|
|
UserShareReturnProfile userProfile = parseUserProfile(featureOriginUser);
|
|
|
- Map<String, Map<String, String>> userBehaviorVideoMap = getUserBehaviorVideoMap(userProfile);
|
|
|
+ Map<String, Map<String, String>> userBehaviorVideoMap = param.getBehaviorVideos();
|
|
|
+ Map<String, String> creativeInfo = param.getCreativeInfoFeature();
|
|
|
|
|
|
// 3. 特征处理
|
|
|
List<RankItem> rankItems = CommonCollectionUtils.toList(rovRecallRank, RankItem::new);
|
|
|
- Map<String, Float> userFeatureMap = getUserFeature(currentMs, param, headVideoInfo, userProfile, featureOriginUser);
|
|
|
- batchGetVideoFeature(currentMs, userProfile, headVideoInfo, videoBaseInfoMap,
|
|
|
+ Map<String, Float> userFeatureMap = getUserFeature(currentMs, param, creativeInfo, headVideoInfo, userProfile, featureOriginUser);
|
|
|
+ batchGetVideoFeature(currentMs, userProfile, creativeInfo, headVideoInfo, videoBaseInfoMap,
|
|
|
newC7Map, newC8Map, featureOriginUser, userBehaviorVideoMap, featureOriginVideo, rankItems);
|
|
|
|
|
|
// 4. 排序模型计算
|
|
|
Map<String, Float> sceneFeatureMap = new HashMap<>(0);
|
|
|
- List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20250317.conf").scoring(sceneFeatureMap, userFeatureMap, userFeatureMap, rankItems);
|
|
|
+ List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20250729.conf").scoring(sceneFeatureMap, userFeatureMap, userFeatureMap, rankItems);
|
|
|
|
|
|
// 5. 排序公式特征
|
|
|
double xgbRovNegRate = mergeWeight.getOrDefault("xgbRovNegRate", 0.059);
|
|
|
double xgbNorPowerWeight = mergeWeight.getOrDefault("xgbNorPowerWeight", 1.22);
|
|
|
double xgbNorPowerExp = mergeWeight.getOrDefault("xgbNorPowerExp", 1.15);
|
|
|
+
|
|
|
+ double rosAdd = mergeWeight.getOrDefault("ros_add", 0.1);
|
|
|
+ double rosW = mergeWeight.getOrDefault("ros_w", 1.0d);
|
|
|
+
|
|
|
+ double vorAdd = mergeWeight.getOrDefault("vor_add", 0.1d);
|
|
|
+ double vorW = mergeWeight.getOrDefault("vor_w", 1.0d);
|
|
|
+
|
|
|
+ double c1Rovn1hW = mergeWeight.getOrDefault("c1_rovn_1h_w", 0d);
|
|
|
+ double c1Rovn24hW = mergeWeight.getOrDefault("c1_rovn_24h_w", 0d);
|
|
|
+
|
|
|
+ double b0Str1hW = mergeWeight.getOrDefault("b0_str_1h_w", 0d);
|
|
|
+ double b0Str24hW = mergeWeight.getOrDefault("b0_str_24h_w", 0d);
|
|
|
+
|
|
|
+ double b0Ror1hW = mergeWeight.getOrDefault("b0_ror_1h_w", 0d);
|
|
|
+ double b0Ror24hW = mergeWeight.getOrDefault("b0_ror_24h_w", 0d);
|
|
|
+
|
|
|
Map<String, Map<String, String>> vid2MapFeature = this.getVideoRedisFeature(vids, "redis:vid_hasreturn_vor:");
|
|
|
|
|
|
// 获取权重
|
|
|
- Map<String, Double> cate2Coefficient = new HashMap<>();
|
|
|
- double cate2CoefficientFunc = mergeWeight.getOrDefault("cate2CoefficientFunc", 0d);
|
|
|
- if (cate2CoefficientFunc == 1d) {
|
|
|
- String headVidStr = String.valueOf(param.getHeadVid());
|
|
|
- String mergeCate2 = this.findVideoMergeCate2(videoBaseInfoMap, headVidStr);
|
|
|
- Double length = mergeWeight.getOrDefault("cate2CoefficientLength", 10000d);
|
|
|
- Map<String, Double> simCateScore = this.findSimCateScore(mergeCate2, length.intValue());
|
|
|
- cate2Coefficient.putAll(simCateScore);
|
|
|
- }
|
|
|
- Double cate2CoefficientDenominator = mergeWeight.getOrDefault("cate2CoefficientDenominator", 1d);
|
|
|
+ Map<String, String> contextInfo = getContextInfo(param);
|
|
|
|
|
|
List<Video> result = new ArrayList<>();
|
|
|
for (RankItem item : items) {
|
|
|
@@ -163,25 +145,56 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
|
|
|
item.getScoresMap().put("fmRovOrigin", fmRovOrigin);
|
|
|
double fmRov = restoreScore(fmRovOrigin, xgbRovNegRate);
|
|
|
item.getScoresMap().put("fmRov", fmRov);
|
|
|
+
|
|
|
double hasReturnRovScore = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("rov", "0"));
|
|
|
item.getScoresMap().put("hasReturnRovScore", hasReturnRovScore);
|
|
|
+
|
|
|
double norXGBScore = item.getScoresMap().getOrDefault("NorXGBScore", 0d);
|
|
|
double newNorXGBScore = norPowerCalibration(xgbNorPowerWeight, xgbNorPowerExp, norXGBScore);
|
|
|
+ item.getScoresMap().put("rosAdd", rosAdd);
|
|
|
+ item.getScoresMap().put("rosW", rosW);
|
|
|
+
|
|
|
double vor = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("vor", "0"));
|
|
|
item.getScoresMap().put("vor", vor);
|
|
|
-
|
|
|
- String vidMergeCate2 = this.findVideoMergeCate2(videoBaseInfoMap, String.valueOf(item.getVideoId()));
|
|
|
- Double scoreCoefficient = cate2Coefficient.getOrDefault(vidMergeCate2, 0d);
|
|
|
- item.getScoresMap().put("scoreCoefficient", scoreCoefficient);
|
|
|
- item.getScoresMap().put("cate2CoefficientDenominator", cate2CoefficientDenominator);
|
|
|
-
|
|
|
- score = fmRov * (0.1 + newNorXGBScore) * (0.1 + vor) * (1 + scoreCoefficient / cate2CoefficientDenominator);
|
|
|
+ item.getScoresMap().put("vorAdd", vorAdd);
|
|
|
+ item.getScoresMap().put("vorW", vorW);
|
|
|
+
|
|
|
+ Map<String, String> bcData = videoBCData.getOrDefault(String.valueOf(item.getVideoId()), new HashMap<>()).getOrDefault("alg_vid_feature_b_c_data", new HashMap<>());
|
|
|
+
|
|
|
+ double c1Rovn1h = Double.parseDouble(bcData.getOrDefault("c1_rovn_1h", "0"));
|
|
|
+ double c1Rovn24h = Double.parseDouble(bcData.getOrDefault("c1_rovn_24h", "0"));
|
|
|
+ double c1RovnScore = c1Rovn1hW * c1Rovn1h + c1Rovn24hW * c1Rovn24h;
|
|
|
+ item.getScoresMap().put("c1RovnScore", c1RovnScore);
|
|
|
+ item.getScoresMap().put("c1Rovn1hW", c1Rovn1hW);
|
|
|
+ item.getScoresMap().put("c1Rovn1h", c1Rovn1h);
|
|
|
+ item.getScoresMap().put("c1Rovn24hW", c1Rovn24hW);
|
|
|
+ item.getScoresMap().put("c1Rovn24h", c1Rovn24h);
|
|
|
+
|
|
|
+ double b0Str1h = Double.parseDouble(bcData.getOrDefault("b0_str_1h", "0"));
|
|
|
+ double b0Str24h = Double.parseDouble(bcData.getOrDefault("b0_str_24h", "0"));
|
|
|
+ double b0StrScore = b0Str1hW * b0Str1h + b0Str24hW * b0Str24h;
|
|
|
+ item.getScoresMap().put("b0StrScore", b0StrScore);
|
|
|
+ item.getScoresMap().put("b0Str1hW", b0Str1hW);
|
|
|
+ item.getScoresMap().put("b0Str1h", b0Str1h);
|
|
|
+ item.getScoresMap().put("b0Str24hW", b0Str24hW);
|
|
|
+ item.getScoresMap().put("b0Str24h", b0Str24h);
|
|
|
+
|
|
|
+
|
|
|
+ double b0Ror1h = Double.parseDouble(bcData.getOrDefault("b0_ror_1h", "0"));
|
|
|
+ double b0Ror24h = Double.parseDouble(bcData.getOrDefault("b0_ror_24h", "0"));
|
|
|
+ double b0RorScore = b0Ror1hW * b0Ror1h + b0Ror24hW * b0Ror24h;
|
|
|
+ item.getScoresMap().put("b0RorScore", b0RorScore);
|
|
|
+ item.getScoresMap().put("b0Ror1hW", b0Ror1hW);
|
|
|
+ item.getScoresMap().put("b0Ror1h", b0Ror1h);
|
|
|
+ item.getScoresMap().put("b0Ror24hW", b0Ror24hW);
|
|
|
+ item.getScoresMap().put("b0Ror24h", b0Ror24h);
|
|
|
+
|
|
|
+ score = fmRov * (rosAdd + rosW * newNorXGBScore) * (vorAdd + vorW * vor) + c1RovnScore + b0StrScore + b0RorScore;
|
|
|
|
|
|
Video video = item.getVideo();
|
|
|
video.setScore(score);
|
|
|
video.setSortScore(score);
|
|
|
video.setScoresMap(item.getScoresMap());
|
|
|
- // video.setAllFeatureMap(item.getAllFeatureMap());
|
|
|
|
|
|
String mergeCate2 = ExtractVideoMergeCate.parseMergeCate2(String.valueOf(item.getVideoId()), videoBaseInfoMap);
|
|
|
if (StringUtils.isNotBlank(mergeCate2)) {
|
|
|
@@ -200,6 +213,15 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
|
|
|
if (MapUtils.isNotEmpty(feature.getUserFeature())) {
|
|
|
video.getMetaFeatureMap().putAll(feature.getUserFeature());
|
|
|
}
|
|
|
+ if (null != rtFeatureDumpsMap && !rtFeatureDumpsMap.isEmpty()) {
|
|
|
+ video.getMetaFeatureMap().put("rt", rtFeatureDumpsMap);
|
|
|
+ }
|
|
|
+ if (MapUtils.isNotEmpty(param.getCreativeInfoFeature())) {
|
|
|
+ video.getMetaFeatureMap().put("creativeInfo", param.getCreativeInfoFeature());
|
|
|
+ }
|
|
|
+ if (MapUtils.isNotEmpty(contextInfo)) {
|
|
|
+ video.getMetaFeatureMap().put("context", contextInfo);
|
|
|
+ }
|
|
|
result.add(video);
|
|
|
}
|
|
|
ExtractVideoMergeCate.addOtherParam(result, videoBaseInfoMap);
|
|
|
@@ -224,42 +246,13 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- private Map<String, Map<String, String>> getUserBehaviorVideoMap(UserShareReturnProfile userProfile) {
|
|
|
- Set<String> vidSet = new HashSet<>();
|
|
|
- if (null != userProfile) {
|
|
|
- for (List<UserSRBO> list : Arrays.asList(userProfile.getM_s_s(), userProfile.getM_r_s(), userProfile.getL_s_s(), userProfile.getL_r_s())) {
|
|
|
- if (null != list) {
|
|
|
- for (UserSRBO u : list) {
|
|
|
- if (null != u) {
|
|
|
- vidSet.add(u.getId() + "");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- Map<String, Map<String, String>> historyVideoMap = new HashMap<>();
|
|
|
- if (!vidSet.isEmpty()) {
|
|
|
- Map<String, Map<String, Map<String, String>>> videoMap = featureService.getVideoBaseInfo("", new ArrayList<>(vidSet));
|
|
|
- if (null != videoMap && !videoMap.isEmpty()) {
|
|
|
- for (Map.Entry<String, Map<String, Map<String, String>>> entry : videoMap.entrySet()) {
|
|
|
- String vid = entry.getKey();
|
|
|
- Map<String, Map<String, String>> map = entry.getValue();
|
|
|
- if (null != map && map.containsKey("alg_vid_feature_basic_info")) {
|
|
|
- historyVideoMap.put(vid, map.get("alg_vid_feature_basic_info"));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return historyVideoMap;
|
|
|
- }
|
|
|
-
|
|
|
- private Map<String, Float> getUserFeature(long currentMs, RankParam param, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
|
|
|
+ private Map<String, Float> getUserFeature(long currentMs, RankParam param, Map<String, String> creativeInfo, Map<String, String> headInfo, UserShareReturnProfile userProfile, Map<String, Map<String, String>> userOriginInfo) {
|
|
|
Map<String, Double> featMap = new HashMap<>();
|
|
|
// context feature
|
|
|
String appType = String.valueOf(param.getAppType());
|
|
|
String hotSceneType = String.valueOf(param.getHotSceneType());
|
|
|
FeatureV6.getContextFeature(currentMs, appType, hotSceneType, featMap);
|
|
|
+ FeatureV6.getCreativeBaseFeature("e1", creativeInfo, featMap);
|
|
|
|
|
|
// head video feature
|
|
|
FeatureV6.getVideoBaseFeature("h", currentMs, headInfo, featMap);
|
|
|
@@ -274,6 +267,7 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
|
|
|
|
|
|
private Map<String, Float> getVideoFeature(long currentMs, String vid,
|
|
|
UserShareReturnProfile userProfile,
|
|
|
+ Map<String, String> creativeInfo,
|
|
|
Map<String, String> headInfo, Map<String, String> rankInfo,
|
|
|
Map<String, Map<String, String[]>> c7Map,
|
|
|
Map<String, Map<String, String[]>> c8Map,
|
|
|
@@ -293,6 +287,7 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
|
|
|
|
|
|
// head&rank cross feature
|
|
|
FeatureV6.getHeadRankVideoCrossFeature(headInfo, rankInfo, featMap);
|
|
|
+ FeatureV6.getCreativeCrossFeature("e1", creativeInfo, rankInfo, featMap);
|
|
|
|
|
|
// user profile & rank cross
|
|
|
FeatureV6.getProfileVideoCrossFeature(currentMs, userProfile, rankInfo, historyVideoMap, featMap);
|
|
|
@@ -302,6 +297,7 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
|
|
|
|
|
|
private void batchGetVideoFeature(long currentMs,
|
|
|
UserShareReturnProfile userProfile,
|
|
|
+ Map<String, String> creativeInfo,
|
|
|
Map<String, String> headInfo,
|
|
|
Map<String, Map<String, Map<String, String>>> videoBaseInfoMap,
|
|
|
Map<String, Map<String, String[]>> c7Map,
|
|
|
@@ -316,7 +312,7 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
|
|
|
String vid = item.getVideoId() + "";
|
|
|
Map<String, String> rankInfo = videoBaseInfoMap.getOrDefault(vid, new HashMap<>()).getOrDefault("alg_vid_feature_basic_info", new HashMap<>());
|
|
|
Future<Integer> future = ThreadPoolFactory.defaultPool().submit(() -> {
|
|
|
- item.featureMap = getVideoFeature(currentMs, vid, userProfile, headInfo, rankInfo, c7Map, c8Map, userOriginInfo, historyVideoMap, videoOriginInfo);
|
|
|
+ item.featureMap = getVideoFeature(currentMs, vid, userProfile, creativeInfo, headInfo, rankInfo, c7Map, c8Map, userOriginInfo, historyVideoMap, videoOriginInfo);
|
|
|
item.norFeatureMap = item.featureMap;
|
|
|
return 1;
|
|
|
});
|
|
|
@@ -370,6 +366,13 @@ public class RankStrategy4RegionMergeModelV563 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;
|
|
|
}
|
|
|
|
|
|
@@ -383,16 +386,6 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
|
|
|
return newScore;
|
|
|
}
|
|
|
|
|
|
- private void addRecall(RankParam param, int recallNum, String recallName, Set<Long> setVideo, List<Video> rovRecallRank) {
|
|
|
- if (recallNum > 0) {
|
|
|
- List<Video> list = extractAndSort(param, recallName);
|
|
|
- list = list.stream().filter(r -> !setVideo.contains(r.getVideoId())).collect(Collectors.toList());
|
|
|
- list = list.subList(0, Math.min(recallNum, list.size()));
|
|
|
- rovRecallRank.addAll(list);
|
|
|
- setVideo.addAll(list.stream().map(Video::getVideoId).collect(Collectors.toSet()));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
private Map<String, Double> findSimCateScore(String headCate2, int length) {
|
|
|
if (StringUtils.isBlank(headCate2)) {
|
|
|
return new HashMap<>();
|