|  | @@ -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));
 | 
	
		
			
				|  |  |                                    }
 |