|
@@ -38,6 +38,7 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
|
|
|
//-------------------逻-------------------
|
|
|
//-------------------辑-------------------
|
|
|
|
|
|
+ //-------------------老地域召回------------------
|
|
|
List<Video> oldRovs = new ArrayList<>();
|
|
|
oldRovs.addAll(extractAndSort(param, RegionHRecallStrategy.PUSH_FORM));
|
|
|
oldRovs.addAll(extractAndSort(param, RegionHDupRecallStrategy.PUSH_FORM));
|
|
@@ -46,36 +47,34 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
|
|
|
oldRovs.addAll(extractAndSort(param, RegionRelative24HDupRecallStrategy.PUSH_FORM));
|
|
|
removeDuplicate(oldRovs);
|
|
|
int sizeReturn = param.getSize();
|
|
|
- List<Video> v0 = oldRovs.size() <= sizeReturn
|
|
|
- ? oldRovs
|
|
|
- : oldRovs.subList(0, sizeReturn);
|
|
|
+ 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);
|
|
|
+ List<Video> recallVideos4Rank = new ArrayList<>(v0);
|
|
|
//-------------------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);
|
|
|
+ recallVideos4Rank.addAll(v6);
|
|
|
setVideo.addAll(v6.stream().map(Video::getVideoId).collect(Collectors.toSet()));
|
|
|
//-------------------新地域召回------------------
|
|
|
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);
|
|
|
+ recallVideos4Rank.addAll(v1);
|
|
|
setVideo.addAll(v1.stream().map(Video::getVideoId).collect(Collectors.toSet()));
|
|
|
//-------------------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);
|
|
|
+ recallVideos4Rank.addAll(sceneCFRovn);
|
|
|
setVideo.addAll(sceneCFRovn.stream().map(Video::getVideoId).collect(Collectors.toSet()));
|
|
|
//-------------------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);
|
|
|
+ recallVideos4Rank.addAll(sceneCFRosn);
|
|
|
setVideo.addAll(sceneCFRosn.stream().map(Video::getVideoId).collect(Collectors.toSet()));
|
|
|
|
|
|
//-------------------排-------------------
|
|
@@ -84,7 +83,7 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
|
|
|
//-------------------辑-------------------
|
|
|
|
|
|
// 1 批量获取特征 省份参数要对齐 headvid 要传递过来!
|
|
|
- List<String> vids = CommonCollectionUtils.toListDistinct(rovRecallRank, v -> String.valueOf(v.getVideoId()));
|
|
|
+ List<String> vids = CommonCollectionUtils.toListDistinct(recallVideos4Rank, v -> String.valueOf(v.getVideoId()));
|
|
|
|
|
|
// k1:视频、k2:表、k3:特征、v:特征值
|
|
|
String provinceCn = param.getProvince().replaceAll("省$", "");
|
|
@@ -97,7 +96,7 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
|
|
|
|
|
|
// 2 特征处理
|
|
|
Map<String, Double> userFeatureMapDouble = new HashMap<>();
|
|
|
- String mid = param.getMid();
|
|
|
+ // String mid = param.getMid();
|
|
|
Map<String, String> c1 = featureOriginUser.getOrDefault("alg_mid_feature_play", new HashMap<>());
|
|
|
Map<String, String> c2 = featureOriginUser.getOrDefault("alg_mid_feature_share_and_return", new HashMap<>());
|
|
|
Map<String, String> c3 = featureOriginUser.getOrDefault("alg_mid_feature_play_tags", new HashMap<>());
|
|
@@ -170,7 +169,7 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
|
|
|
}
|
|
|
|
|
|
|
|
|
- List<RankItem> rankItems = CommonCollectionUtils.toList(rovRecallRank, RankItem::new);
|
|
|
+ List<RankItem> rankItems = CommonCollectionUtils.toList(recallVideos4Rank, RankItem::new);
|
|
|
for (RankItem item : rankItems) {
|
|
|
Map<String, Double> featureMap = new HashMap<>();
|
|
|
String vid = item.getVideoId() + "";
|
|
@@ -317,63 +316,45 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
|
|
|
List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_20240807.conf").scoring(sceneFeatureMap, userFeatureMap, rankItems);
|
|
|
// 5 排序公式特征
|
|
|
Map<String, Map<String, String>> vid2MapFeature = this.getVideoRedisFeature(vids, "redis:vid_hasreturn_vor:");
|
|
|
-
|
|
|
// Ros增强传播因子
|
|
|
Map<String, Map<String, String>> rosSpreadDivMap = this.getVideoRedisFeature(vids, "vid_for_spread:");
|
|
|
-
|
|
|
+ double alpha = mergeWeight.getOrDefault("alpha", 0.1);
|
|
|
+ double beta = mergeWeight.getOrDefault("beta", 0.0);
|
|
|
+ double gamma = mergeWeight.getOrDefault("gamma", 0.5);
|
|
|
+ double vorMod = mergeWeight.getOrDefault("vorMod", 4.0);
|
|
|
List<Video> result = new ArrayList<>();
|
|
|
-
|
|
|
- double calcVorMode = mergeWeight.getOrDefault("calcVorMode", 3d);
|
|
|
- double calcRosMode = mergeWeight.getOrDefault("calcRosMode", 0d);
|
|
|
- double calcStrMode = mergeWeight.getOrDefault("calcStrMode", 3d);
|
|
|
-
|
|
|
- double rosAdd = mergeWeight.getOrDefault("ros_add", 0.1d);
|
|
|
- double ros2Multi = mergeWeight.getOrDefault("ros2_multi", 1d);
|
|
|
- double vorAdd = mergeWeight.getOrDefault("vor_add", 0d);
|
|
|
-
|
|
|
- double rosSpreadDivisorIndex = mergeWeight.getOrDefault("rosSpreadDivisorIndex", 4d);
|
|
|
- String spreadDivisorKey = this.indexCoverKey(rosSpreadDivisorIndex);
|
|
|
- log.info("562 spreadDivisorKey is: {}", spreadDivisorKey);
|
|
|
-
|
|
|
for (RankItem item : items) {
|
|
|
- double score;
|
|
|
double fmRovOrigin = item.getScoreRov();
|
|
|
item.getScoresMap().put("fmRovOrigin", fmRovOrigin);
|
|
|
- double str = restoreScore(fmRovOrigin);
|
|
|
- item.getScoresMap().put("originStr", str);
|
|
|
- str = this.handleStr(str, calcStrMode, item, mergeWeight);
|
|
|
- item.getScoresMap().put("xgbRovNegRate", 0.9d);
|
|
|
- item.getScoresMap().put("fmRov", str);
|
|
|
- item.getScoresMap().put("str", str);
|
|
|
- item.getScoresMap().put("calcStrMode", calcStrMode);
|
|
|
-
|
|
|
- double originRos = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("rov", "0"));
|
|
|
- double ros = this.handleRos(originRos, calcRosMode, item, mergeWeight);
|
|
|
- item.getScoresMap().put("hasReturnRovScore", ros);
|
|
|
- item.getScoresMap().put("ros", ros);
|
|
|
- item.getScoresMap().put("originRos", originRos);
|
|
|
- item.getScoresMap().put("calcRosMode", calcRosMode);
|
|
|
-
|
|
|
- String spreadDivStr = rosSpreadDivMap.getOrDefault(String.valueOf(item.getVideoId()), new HashMap<>()).getOrDefault(spreadDivisorKey, "0");
|
|
|
- double rosSpreadDiv = Double.parseDouble(spreadDivStr);
|
|
|
- item.getScoresMap().put("rosSpreadDiv", rosSpreadDiv);
|
|
|
-
|
|
|
- double originVor = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("vor", "0"));
|
|
|
- double vor = this.handleVor(originVor, calcVorMode, item, mergeWeight);
|
|
|
- item.getScoresMap().put("originVor", originVor);
|
|
|
+ double fmRov = restoreScore(fmRovOrigin);
|
|
|
+ item.getScoresMap().put("fmRov", fmRov);
|
|
|
+ double strTransfor = fmRov;
|
|
|
+ item.getScoresMap().put("strTransfor", strTransfor);
|
|
|
+ double originRos = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>(0)).getOrDefault("rov", "0"));
|
|
|
+ item.getScoresMap().put("hasReturnRovScore", originRos);
|
|
|
+ double rosTransfor = originRos;
|
|
|
+ item.getScoresMap().put("rosTransfor", rosTransfor);
|
|
|
+ double vor = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("vor", "0"));
|
|
|
item.getScoresMap().put("vor", vor);
|
|
|
- item.getScoresMap().put("calcVorMode", calcVorMode);
|
|
|
+ double vorTransfor = this.handleVor(vor, vorMod, item, mergeWeight);
|
|
|
+ item.getScoresMap().put("vorTransfor", vorTransfor);
|
|
|
+ double spreadRate = Double.parseDouble(rosSpreadDivMap.getOrDefault(String.valueOf(item.getVideoId()), new HashMap<>(0)).getOrDefault("head_video_recommend_fission_rate", "0.01"));
|
|
|
+ item.getScoresMap().put("spreadRate", spreadRate);
|
|
|
+
|
|
|
+ // 最终融合公式计算
|
|
|
+ double scoreRov = strTransfor * (alpha + rosTransfor);
|
|
|
+ double scoreVov = scoreRov * (beta + vorTransfor);
|
|
|
+ double score = scoreVov + gamma * spreadRate;
|
|
|
|
|
|
+ item.getScoresMap().put("scoreRov", scoreRov);
|
|
|
+ item.getScoresMap().put("scoreVov", scoreVov);
|
|
|
+ item.getScoresMap().put("score", score);
|
|
|
|
|
|
- item.getScoresMap().put("rosAdd", rosAdd);
|
|
|
- item.getScoresMap().put("vorAdd", vorAdd);
|
|
|
- item.getScoresMap().put("ros2Multi", ros2Multi);
|
|
|
- item.getScoresMap().put("rosSpreadDivisorIndex", rosSpreadDivisorIndex);
|
|
|
- score = str * (rosAdd + ros + ros2Multi * rosSpreadDiv) * (vorAdd + vor);
|
|
|
+ item.getScoresMap().put("alpha", alpha);
|
|
|
+ item.getScoresMap().put("beta", beta);
|
|
|
+ item.getScoresMap().put("gamma", gamma);
|
|
|
|
|
|
Video video = item.getVideo();
|
|
|
- video.setScoreStr(str);
|
|
|
- video.setScoreRos(rosAdd + ros + ros2Multi * rosSpreadDiv);
|
|
|
video.setScore(score);
|
|
|
video.setSortScore(score);
|
|
|
video.setScoresMap(item.getScoresMap());
|