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