|
@@ -24,6 +24,14 @@ import java.util.*;
|
|
|
import java.util.concurrent.Future;
|
|
import java.util.concurrent.Future;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * V536 实验:基于 V569,对以下 4 路召回来源命中的 item 在排序公式上提权
|
|
|
|
|
+ * - recall_strategy_user_cate1
|
|
|
|
|
+ * - recall_strategy_user_cate2
|
|
|
|
|
+ * - return_1_cate2_ros
|
|
|
|
|
+ * - return_1_cate2_str
|
|
|
|
|
+ * 提权倍数读 mergeWeight[item_recall_weight],默认 1.0。
|
|
|
|
|
+ */
|
|
|
@Service
|
|
@Service
|
|
|
@Slf4j
|
|
@Slf4j
|
|
|
public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeModelBasic {
|
|
public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeModelBasic {
|
|
@@ -33,6 +41,13 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private FeatureService featureService;
|
|
private FeatureService featureService;
|
|
|
|
|
|
|
|
|
|
+ private static final Set<String> BOOST_PUSH_FORMS = new HashSet<>(Arrays.asList(
|
|
|
|
|
+ UserCate1RecallStrategy.PUSH_FORM,
|
|
|
|
|
+ UserCate2RecallStrategy.PUSH_FORM,
|
|
|
|
|
+ Return1Cate2RosRecallStrategy.PUSH_FORM,
|
|
|
|
|
+ Return1Cate2StrRecallStrategy.PUSH_FORM
|
|
|
|
|
+ ));
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public List<Video> mergeAndRankRovRecall(RankParam param) {
|
|
public List<Video> mergeAndRankRovRecall(RankParam param) {
|
|
|
Map<String, Double> mergeWeight = this.mergeWeight != null ? this.mergeWeight : new HashMap<>(0);
|
|
Map<String, Double> mergeWeight = this.mergeWeight != null ? this.mergeWeight : new HashMap<>(0);
|
|
@@ -78,6 +93,8 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
|
|
|
RecallUtils.extractRecall(mergeWeight.getOrDefault("return1Cate2Ros", 5.0).intValue(), param, Return1Cate2RosRecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
RecallUtils.extractRecall(mergeWeight.getOrDefault("return1Cate2Ros", 5.0).intValue(), param, Return1Cate2RosRecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
//-------------------return1 cate2 str------------------
|
|
//-------------------return1 cate2 str------------------
|
|
|
RecallUtils.extractRecall(mergeWeight.getOrDefault("return1Cate2Str", 5.0).intValue(), param, Return1Cate2StrRecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
RecallUtils.extractRecall(mergeWeight.getOrDefault("return1Cate2Str", 5.0).intValue(), param, Return1Cate2StrRecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
|
|
+ //--------------deconstruction keywords ros-------------
|
|
|
|
|
+ RecallUtils.extractRecall(mergeWeight.getOrDefault("deconstructionKeywordsRos", 5.0).intValue(), param, UserDeconstructionKeywordsRecallStrategy.PUSH_FORM, setVideo, rovRecallRank);
|
|
|
|
|
|
|
|
// 记录召回源中的视频
|
|
// 记录召回源中的视频
|
|
|
this.rankBeforePostProcessor(rovRecallRank);
|
|
this.rankBeforePostProcessor(rovRecallRank);
|
|
@@ -114,7 +131,7 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
|
|
|
|
|
|
|
|
// 4. 排序模型计算
|
|
// 4. 排序模型计算
|
|
|
Map<String, Float> sceneFeatureMap = new HashMap<>(0);
|
|
Map<String, Float> sceneFeatureMap = new HashMap<>(0);
|
|
|
- List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_fm_xgb_20250729.conf").scoring(sceneFeatureMap, userFeatureMap, userFeatureMap, rankItems);
|
|
|
|
|
|
|
+ List<RankItem> items = ScorerUtils.getScorerPipeline("feeds_score_config_str_and_ros_20260319.conf").scoring(sceneFeatureMap, userFeatureMap, userFeatureMap, rankItems);
|
|
|
|
|
|
|
|
// 5. 排序公式特征
|
|
// 5. 排序公式特征
|
|
|
double xgbRovNegRate = mergeWeight.getOrDefault("xgbRovNegRate", 0.059);
|
|
double xgbRovNegRate = mergeWeight.getOrDefault("xgbRovNegRate", 0.059);
|
|
@@ -136,12 +153,6 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
|
|
|
double b0Ror1hW = mergeWeight.getOrDefault("b0_ror_1h_w", 0d);
|
|
double b0Ror1hW = mergeWeight.getOrDefault("b0_ror_1h_w", 0d);
|
|
|
double b0Ror24hW = mergeWeight.getOrDefault("b0_ror_24h_w", 0d);
|
|
double b0Ror24hW = mergeWeight.getOrDefault("b0_ror_24h_w", 0d);
|
|
|
|
|
|
|
|
- double cnRovn1hW = mergeWeight.getOrDefault("cn_rovn_1h_w", 0d);
|
|
|
|
|
- double cnRovn24hW = mergeWeight.getOrDefault("cn_rovn_24h_w", 0d);
|
|
|
|
|
-
|
|
|
|
|
- double dnRovn1hW = mergeWeight.getOrDefault("dn_rovn_1h_w", 0d);
|
|
|
|
|
- double dnRovn24hW = mergeWeight.getOrDefault("dn_rovn_24h_w", 0d);
|
|
|
|
|
-
|
|
|
|
|
Map<String, Map<String, String>> vid2MapFeature = this.getVideoRedisFeature(vids, "redis:vid_hasreturn_vor:");
|
|
Map<String, Map<String, String>> vid2MapFeature = this.getVideoRedisFeature(vids, "redis:vid_hasreturn_vor:");
|
|
|
|
|
|
|
|
// 获取权重
|
|
// 获取权重
|
|
@@ -169,7 +180,6 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
|
|
|
item.getScoresMap().put("vorW", vorW);
|
|
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<>());
|
|
Map<String, String> bcData = videoBCData.getOrDefault(String.valueOf(item.getVideoId()), new HashMap<>()).getOrDefault("alg_vid_feature_b_c_data", new HashMap<>());
|
|
|
- Map<String, String> cdNData = videoBCData.getOrDefault(String.valueOf(item.getVideoId()), new HashMap<>()).getOrDefault("alg_vid_feature_cn_dn_data", new HashMap<>());
|
|
|
|
|
|
|
|
|
|
double c1Rovn1h = Double.parseDouble(bcData.getOrDefault("c1_rovn_1h", "0"));
|
|
double c1Rovn1h = Double.parseDouble(bcData.getOrDefault("c1_rovn_1h", "0"));
|
|
|
double c1Rovn24h = Double.parseDouble(bcData.getOrDefault("c1_rovn_24h", "0"));
|
|
double c1Rovn24h = Double.parseDouble(bcData.getOrDefault("c1_rovn_24h", "0"));
|
|
@@ -189,7 +199,6 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
|
|
|
item.getScoresMap().put("b0Str24hW", b0Str24hW);
|
|
item.getScoresMap().put("b0Str24hW", b0Str24hW);
|
|
|
item.getScoresMap().put("b0Str24h", b0Str24h);
|
|
item.getScoresMap().put("b0Str24h", b0Str24h);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
double b0Ror1h = Double.parseDouble(bcData.getOrDefault("b_ror1_1h", "0"));
|
|
double b0Ror1h = Double.parseDouble(bcData.getOrDefault("b_ror1_1h", "0"));
|
|
|
double b0Ror24h = Double.parseDouble(bcData.getOrDefault("b_ror1_24h", "0"));
|
|
double b0Ror24h = Double.parseDouble(bcData.getOrDefault("b_ror1_24h", "0"));
|
|
|
double b0RorScore = b0Ror1hW * b0Ror1h + b0Ror24hW * b0Ror24h;
|
|
double b0RorScore = b0Ror1hW * b0Ror1h + b0Ror24hW * b0Ror24h;
|
|
@@ -199,27 +208,20 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
|
|
|
item.getScoresMap().put("b0Ror24hW", b0Ror24hW);
|
|
item.getScoresMap().put("b0Ror24hW", b0Ror24hW);
|
|
|
item.getScoresMap().put("b0Ror24h", b0Ror24h);
|
|
item.getScoresMap().put("b0Ror24h", b0Ror24h);
|
|
|
|
|
|
|
|
- double cnRovn1h = Double.parseDouble(cdNData.getOrDefault("cn_rovn_1h", "0"));
|
|
|
|
|
- double cnRovn24h = Double.parseDouble(cdNData.getOrDefault("cn_rovn_24h", "0"));
|
|
|
|
|
- double cnRovnScore = cnRovn1hW * cnRovn1h + cnRovn24hW * cnRovn24h;
|
|
|
|
|
- item.getScoresMap().put("cnRovnScore", cnRovnScore);
|
|
|
|
|
- item.getScoresMap().put("cnRovn1hW", cnRovn1hW);
|
|
|
|
|
- item.getScoresMap().put("cnRovn1h", cnRovn1h);
|
|
|
|
|
- item.getScoresMap().put("cnRovn24hW", cnRovn24hW);
|
|
|
|
|
- item.getScoresMap().put("cnRovn24h", cnRovn24h);
|
|
|
|
|
-
|
|
|
|
|
- double dnRovn1h = Double.parseDouble(cdNData.getOrDefault("dn_rovn_1h", "0"));
|
|
|
|
|
- double dnRovn24h = Double.parseDouble(cdNData.getOrDefault("dn_rovn_24h", "0"));
|
|
|
|
|
- double dnRovnScore = dnRovn1hW * dnRovn1h + dnRovn24hW * dnRovn24h;
|
|
|
|
|
- item.getScoresMap().put("dnRovnScore", dnRovnScore);
|
|
|
|
|
- item.getScoresMap().put("dnRovn1hW", dnRovn1hW);
|
|
|
|
|
- item.getScoresMap().put("dnRovn1h", dnRovn1h);
|
|
|
|
|
- item.getScoresMap().put("dnRovn24hW", dnRovn24hW);
|
|
|
|
|
- item.getScoresMap().put("dnRovn24h", dnRovn24h);
|
|
|
|
|
-
|
|
|
|
|
- score = fmRov * (rosAdd + rosW * newNorXGBScore) * (vorAdd + vorW * vor) + c1RovnScore + b0StrScore + b0RorScore + cnRovnScore + dnRovnScore;
|
|
|
|
|
|
|
+ score = fmRov * (rosAdd + rosW * newNorXGBScore) * (vorAdd + vorW * vor) + c1RovnScore + b0StrScore + b0RorScore;
|
|
|
|
|
|
|
|
|
|
+ // V536: 命中目标 4 路召回来源的 item 提权
|
|
|
Video video = item.getVideo();
|
|
Video video = item.getVideo();
|
|
|
|
|
+ double itemRecallWeight = mergeWeight.getOrDefault("item_recall_weight", 1.0);
|
|
|
|
|
+ double itemWeight = 1.0;
|
|
|
|
|
+ if (video.getPushFromIndex() != null
|
|
|
|
|
+ && !Collections.disjoint(video.getPushFromIndex().keySet(), BOOST_PUSH_FORMS)) {
|
|
|
|
|
+ itemWeight = itemRecallWeight;
|
|
|
|
|
+ }
|
|
|
|
|
+ item.getScoresMap().put("itemRecallWeight", itemRecallWeight);
|
|
|
|
|
+ item.getScoresMap().put("itemWeight", itemWeight);
|
|
|
|
|
+ score = score * itemWeight;
|
|
|
|
|
+
|
|
|
video.setScore(score);
|
|
video.setScore(score);
|
|
|
video.setSortScore(score);
|
|
video.setSortScore(score);
|
|
|
video.setScoresMap(item.getScoresMap());
|
|
video.setScoresMap(item.getScoresMap());
|