|
@@ -9,21 +9,12 @@ import com.tzld.piaoquan.recommend.server.service.rank.RankParam;
|
|
|
import com.tzld.piaoquan.recommend.server.service.recall.RecallResult;
|
|
|
import com.tzld.piaoquan.recommend.server.service.score.feature.GBDTFeatureExtractorBase;
|
|
|
import com.tzld.piaoquan.recommend.server.service.score.model.GBDTModel;
|
|
|
-import com.tzld.piaoquan.recommend.server.model.Video;
|
|
|
import org.apache.commons.lang.exception.ExceptionUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.concurrent.Callable;
|
|
|
-import java.util.concurrent.ExecutorService;
|
|
|
-import java.util.concurrent.Executors;
|
|
|
-import java.util.concurrent.Future;
|
|
|
-import java.util.concurrent.TimeUnit;
|
|
|
+import java.util.*;
|
|
|
+import java.util.concurrent.*;
|
|
|
|
|
|
public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
|
|
|
|
|
@@ -38,17 +29,16 @@ public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
|
|
|
}
|
|
|
|
|
|
|
|
|
- private RequestContext getRequestContext(RecommendRequest request) {
|
|
|
+ private RequestContext getRequestContext(RankParam param) {
|
|
|
|
|
|
RequestContext requestContext = new RequestContext();
|
|
|
return requestContext;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<RankItem> scoring(final RecommendRequest request,
|
|
|
- final RankParam param,
|
|
|
- final UserFeature userFeature,
|
|
|
- final List<RankItem> rankItems) {
|
|
|
+ public List<RankItem> scoring(final RankParam param,
|
|
|
+ final UserFeature userFeature,
|
|
|
+ final List<RankItem> rankItems) {
|
|
|
RecallResult recallResult = param.getRecallResult();
|
|
|
if (recallResult.getData().size() == 0) {
|
|
|
return rankItems;
|
|
@@ -61,10 +51,10 @@ public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
|
|
|
LOGGER.error("not found model");
|
|
|
return rankItems;
|
|
|
}
|
|
|
- RequestContext requestContext = getRequestContext(request);
|
|
|
+ RequestContext requestContext = getRequestContext(param);
|
|
|
|
|
|
// 多Rank的rank打分
|
|
|
- multipleGBDTScore(rankItems, model, userFeature, request, requestContext);
|
|
|
+ multipleGBDTScore(rankItems, model, userFeature, requestContext);
|
|
|
Collections.sort(rankItems);
|
|
|
LOGGER.debug("dwelltime ranker excute time: [{}]", System.currentTimeMillis() - startTime);
|
|
|
return rankItems;
|
|
@@ -80,8 +70,8 @@ public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
|
|
|
* @return
|
|
|
*/
|
|
|
private double predictMultipleGBDTScore(final double oldScore, final double dwelltimeOrCompletion,
|
|
|
- final double duration, final String itemId,
|
|
|
- final RecommendRequest requestData, final UserFeature user) {
|
|
|
+ final double duration, final String itemId,
|
|
|
+ final RecommendRequest requestData, final UserFeature user) {
|
|
|
double ctrScalePower = 0;
|
|
|
double dwelltimeScalePower = 0;
|
|
|
|
|
@@ -91,7 +81,7 @@ public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
|
|
|
}
|
|
|
double newScore = Math.pow(ctrScore, ctrScalePower) * Math.pow(dwelltimeOrCompletion, dwelltimeScalePower);
|
|
|
//值越大压制越弱
|
|
|
- double alpha = 1.0;
|
|
|
+ double alpha = 1.0;
|
|
|
double suppressRatio = (1 + alpha) / (Math.max(duration, 300.0) / 300 + alpha);
|
|
|
newScore = newScore * suppressRatio;
|
|
|
LOGGER.debug("Expected dwell time score [{}]: {} ,{}, {}--> {}", new Object[]{itemId, oldScore, dwelltimeOrCompletion, duration, newScore});
|
|
@@ -99,11 +89,11 @@ public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
|
|
|
}
|
|
|
|
|
|
private void gbdtBaseScore(final RankItem item,
|
|
|
- final GBDTModel model,
|
|
|
- final RequestContext requestContext,
|
|
|
- final Map<String, Double> userFeatures,
|
|
|
- final Map<String, Double> contextFeatures,
|
|
|
- final RecommendRequest requestData, final UserFeature user) {
|
|
|
+ final GBDTModel model,
|
|
|
+ final RequestContext requestContext,
|
|
|
+ final Map<String, Double> userFeatures,
|
|
|
+ final Map<String, Double> contextFeatures,
|
|
|
+ final UserFeature user) {
|
|
|
try {
|
|
|
|
|
|
Map<String, Double> articleFeatures;
|
|
@@ -130,10 +120,9 @@ public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
|
|
|
|
|
|
|
|
|
public void multipleGBDTScore(final List<RankItem> items,
|
|
|
- final GBDTModel model,
|
|
|
- final UserFeature user,
|
|
|
- final RecommendRequest requestData,
|
|
|
- final RequestContext requestContext) {
|
|
|
+ final GBDTModel model,
|
|
|
+ final UserFeature user,
|
|
|
+ final RequestContext requestContext) {
|
|
|
final int size = items.size();
|
|
|
if (size == 0) {
|
|
|
return;
|
|
@@ -155,7 +144,7 @@ public class VlogShareGBDTScorer extends BaseGBDTModelScorer {
|
|
|
@Override
|
|
|
public Object call() throws Exception {
|
|
|
try {
|
|
|
- gbdtBaseScore(items.get(fIndex), model, requestContext, userFeatures, contextFeatures, requestData, user);
|
|
|
+ gbdtBaseScore(items.get(fIndex), model, requestContext, userFeatures, contextFeatures, user);
|
|
|
} catch (Exception e) {
|
|
|
LOGGER.error("dwelltime exception: [{}] [{}]", items.get(fIndex), ExceptionUtils.getFullStackTrace(e));
|
|
|
}
|