|
@@ -35,7 +35,7 @@ import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-
|
|
|
+import com.tzld.piaoquan.recommend.server.service.rank.extractor.ExtractorUtils;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -116,13 +116,26 @@ public class RankStrategy4RegionMergeModelV2 extends RankService {
|
|
|
//-------------------逻-------------------
|
|
|
//-------------------辑-------------------
|
|
|
|
|
|
+ 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));
|
|
|
+ int sizeReturn = param.getSize();
|
|
|
+ removeDuplicate(oldRovs);
|
|
|
+ oldRovs = oldRovs.size() <= sizeReturn
|
|
|
+ ? oldRovs
|
|
|
+ : oldRovs.subList(0, sizeReturn);
|
|
|
+ Set<Long> setVideo = new HashSet<>();
|
|
|
+ this.duplicate(setVideo, oldRovs);
|
|
|
+
|
|
|
//-------------------地域相关召回 融合+去重-------------------
|
|
|
List<Video> rovRecallRank = new ArrayList<>();
|
|
|
List<Video> v1 = extractAndSort(param, RegionRealtimeRecallStrategyV1.PUSH_FORM);
|
|
|
List<Video> v2 = extractAndSort(param, RegionRealtimeRecallStrategyV2.PUSH_FORM);
|
|
|
List<Video> v3 = extractAndSort(param, RegionRealtimeRecallStrategyV3.PUSH_FORM);
|
|
|
List<Video> v4 = extractAndSort(param, RegionRealtimeRecallStrategyV4.PUSH_FORM);
|
|
|
- Set<Long> setVideo = new HashSet<>();
|
|
|
this.duplicate(setVideo, v1);
|
|
|
this.duplicate(setVideo, v2);
|
|
|
this.duplicate(setVideo, v3);
|
|
@@ -136,14 +149,18 @@ public class RankStrategy4RegionMergeModelV2 extends RankService {
|
|
|
List<Video> v7 = extractAndSort(param, FestivalRecallStrategyV1.PUSH_FORM);
|
|
|
this.duplicate(setVideo, v7);
|
|
|
|
|
|
+ rovRecallRank.addAll(oldRovs);
|
|
|
rovRecallRank.addAll(v1.subList(0, Math.min(mergeWeight.getOrDefault("v1", 20.0).intValue(), v1.size())));
|
|
|
rovRecallRank.addAll(v2.subList(0, Math.min(mergeWeight.getOrDefault("v2", 15.0).intValue(), v2.size())));
|
|
|
rovRecallRank.addAll(v3.subList(0, Math.min(mergeWeight.getOrDefault("v3", 10.0).intValue(), v3.size())));
|
|
|
- rovRecallRank.addAll(v4.subList(0, Math.min(mergeWeight.getOrDefault("v4", 5.0).intValue(), v4.size())));
|
|
|
+ rovRecallRank.addAll(v4.subList(0, Math.min(mergeWeight.getOrDefault("v4", 0.0).intValue(), v4.size())));
|
|
|
rovRecallRank.addAll(v5.subList(0, Math.min(mergeWeight.getOrDefault("v5", 10.0).intValue(), v5.size())));
|
|
|
rovRecallRank.addAll(v6.subList(0, Math.min(mergeWeight.getOrDefault("v6", 10.0).intValue(), v6.size())));
|
|
|
rovRecallRank.addAll(v7.subList(0, Math.min(mergeWeight.getOrDefault("v7", 10.0).intValue(), v7.size())));
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
//-------------------排-------------------
|
|
|
//-------------------序-------------------
|
|
|
//-------------------逻-------------------
|
|
@@ -192,6 +209,14 @@ public class RankStrategy4RegionMergeModelV2 extends RankService {
|
|
|
item.scoresMap.put("view2playScore", view2playScore);
|
|
|
item.scoresMap.put("play2shareScore", play2shareScore);
|
|
|
|
|
|
+ // 全部回流的rov和ros
|
|
|
+ List<Double> share2allreturn = getRateData(returns, shares, 1.0, 10.0);
|
|
|
+ Double share2allreturnScore = calScoreWeight(share2allreturn);
|
|
|
+ List<Double> view2allreturn = getRateData(returns, views, 0.0, 0.0);
|
|
|
+ Double view2allreturnScore = calScoreWeight(view2allreturn);
|
|
|
+ item.scoresMap.put("share2allreturnScore", share2allreturnScore);
|
|
|
+ item.scoresMap.put("view2allreturnScore", view2allreturnScore);
|
|
|
+
|
|
|
// 全部回流
|
|
|
Double allreturnsScore = calScoreWeight(allreturns);
|
|
|
item.scoresMap.put("allreturnsScore", allreturnsScore);
|
|
@@ -211,12 +236,15 @@ public class RankStrategy4RegionMergeModelV2 extends RankService {
|
|
|
}
|
|
|
// 3 融合公式
|
|
|
List<Video> result = new ArrayList<>();
|
|
|
- double a = mergeWeight.getOrDefault("a", 1.0);
|
|
|
- double b = mergeWeight.getOrDefault("b", 1.0);
|
|
|
+ double a = mergeWeight.getOrDefault("a", 0.1);
|
|
|
+ double b = mergeWeight.getOrDefault("b", 0.0);
|
|
|
double c = mergeWeight.getOrDefault("c", 0.0002);
|
|
|
double d = mergeWeight.getOrDefault("d", 1.0);
|
|
|
double e = mergeWeight.getOrDefault("e", 1.0);
|
|
|
- double ifAdd = mergeWeight.getOrDefault("ifAdd", 0.0);
|
|
|
+ double f = mergeWeight.getOrDefault("f", 0.1);
|
|
|
+ double g = mergeWeight.getOrDefault("g", 1.0);
|
|
|
+ double h = mergeWeight.getOrDefault("h", 20.0);
|
|
|
+ double ifAdd = mergeWeight.getOrDefault("ifAdd", 1.0);
|
|
|
for (RankItem item : items){
|
|
|
double trendScore = item.scoresMap.getOrDefault("trendScore", 0.0) > 1E-8 ?
|
|
|
item.scoresMap.getOrDefault("trendScore", 0.0) : 0.0;
|
|
@@ -224,6 +252,8 @@ public class RankStrategy4RegionMergeModelV2 extends RankService {
|
|
|
item.scoresMap.getOrDefault("newVideoScore", 0.0) : 0.0;
|
|
|
double strScore = item.getScoreStr();
|
|
|
double rosScore = item.scoresMap.getOrDefault("share2returnScore", 0.0);
|
|
|
+ double share2allreturnScore = item.scoresMap.getOrDefault("share2allreturnScore", 0.0);
|
|
|
+ double view2allreturnScore = item.scoresMap.getOrDefault("view2allreturnScore", 0.0);
|
|
|
double preturnsScore = Math.log(1 + item.scoresMap.getOrDefault("preturnsScore", 0.0));
|
|
|
double score = 0.0;
|
|
|
if (ifAdd < 0.5){
|
|
@@ -232,6 +262,11 @@ public class RankStrategy4RegionMergeModelV2 extends RankService {
|
|
|
}else {
|
|
|
score = a * strScore + b * rosScore + c * preturnsScore +
|
|
|
(newVideoScore > 1E-8? d * trendScore * (e + newVideoScore): 0.0);
|
|
|
+
|
|
|
+ }
|
|
|
+ double allreturnsScore = item.scoresMap.getOrDefault("allreturnsScore", 0.0);
|
|
|
+ if (allreturnsScore > h){
|
|
|
+ score += (f * share2allreturnScore + g * view2allreturnScore);
|
|
|
}
|
|
|
Video video = item.getVideo();
|
|
|
video.setScore(score);
|
|
@@ -280,9 +315,13 @@ public class RankStrategy4RegionMergeModelV2 extends RankService {
|
|
|
public List<Double> getRateData(List<Double> ups, List<Double> downs, Double up, Double down){
|
|
|
List<Double> data = new LinkedList<>();
|
|
|
for(int i=0; i<ups.size(); ++i){
|
|
|
- data.add(
|
|
|
- (ups.get(i) + up) / (downs.get(i) + down)
|
|
|
- );
|
|
|
+ if (ExtractorUtils.isDoubleEqualToZero(downs.get(i) + down)){
|
|
|
+ data.add(0.0);
|
|
|
+ }else{
|
|
|
+ data.add(
|
|
|
+ (ups.get(i) + up) / (downs.get(i) + down)
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
return data;
|
|
|
}
|