|
@@ -10,7 +10,7 @@ import config
|
|
|
from log import Log
|
|
|
from config import set_config
|
|
|
from video_recall import PoolRecall
|
|
|
-from video_rank import video_rank, bottom_strategy, video_rank_by_w_h_rate
|
|
|
+from video_rank import video_rank, bottom_strategy, video_rank_by_w_h_rate, video_rank_with_old_video
|
|
|
from db_helper import RedisHelper
|
|
|
import gevent
|
|
|
from utils import FilterVideos
|
|
@@ -136,7 +136,7 @@ def positon_duplicate(pos1_vids, pos2_vids, videos):
|
|
|
|
|
|
|
|
|
def video_recommend(mid, uid, size, top_K, flow_pool_P, app_type, algo_type, client_info, expire_time=24*3600,
|
|
|
- ab_code=config_.AB_CODE['initial'], rule_key='', no_op_flag=False):
|
|
|
+ ab_code=config_.AB_CODE['initial'], rule_key='', no_op_flag=False, old_video_index=-1):
|
|
|
"""
|
|
|
首页线上推荐逻辑
|
|
|
:param mid: mid type-string
|
|
@@ -173,18 +173,26 @@ def video_recommend(mid, uid, size, top_K, flow_pool_P, app_type, algo_type, cli
|
|
|
pool_recall = PoolRecall(app_type=app_type, mid=mid, uid=uid, ab_code=ab_code,
|
|
|
client_info=client_info, rule_key=rule_key, no_op_flag=no_op_flag)
|
|
|
_, last_rov_recall_key, _ = pool_recall.get_video_last_idx()
|
|
|
+ # 小时级实验
|
|
|
if ab_code in [code for _, code in config_.AB_CODE['rank_by_h'].items()]:
|
|
|
t = [gevent.spawn(pool_recall.rov_pool_recall_by_h, size, expire_time),
|
|
|
gevent.spawn(pool_recall.flow_pool_recall, size)]
|
|
|
+ # 最惊奇/老好看实验
|
|
|
elif app_type in [config_.APP_TYPE['LAO_HAO_KAN_VIDEO'], config_.APP_TYPE['ZUI_JING_QI']]:
|
|
|
# if ab_code == config_.AB_CODE['rov_rank_appType_18_19']:
|
|
|
t = [gevent.spawn(pool_recall.rov_pool_recall, size, expire_time),
|
|
|
gevent.spawn(pool_recall.flow_pool_recall_18_19, size)]
|
|
|
# else:
|
|
|
# t = [gevent.spawn(pool_recall.rov_pool_recall, size, expire_time)]
|
|
|
+ # 天级实验
|
|
|
elif ab_code in [code for _, code in config_.AB_CODE['rank_by_day'].items()]:
|
|
|
t = [gevent.spawn(pool_recall.rov_pool_recall_by_day, size, expire_time),
|
|
|
gevent.spawn(pool_recall.flow_pool_recall, size)]
|
|
|
+ # 老视频实验
|
|
|
+ elif ab_code in [config_.AB_CODE['old_video']]:
|
|
|
+ t = [gevent.spawn(pool_recall.rov_pool_recall, size, expire_time),
|
|
|
+ gevent.spawn(pool_recall.flow_pool_recall, size),
|
|
|
+ gevent.spawn(pool_recall.old_videos_recall, size)]
|
|
|
else:
|
|
|
t = [gevent.spawn(pool_recall.rov_pool_recall, size, expire_time),
|
|
|
gevent.spawn(pool_recall.flow_pool_recall, size)]
|
|
@@ -215,6 +223,12 @@ def video_recommend(mid, uid, size, top_K, flow_pool_P, app_type, algo_type, cli
|
|
|
'flow_pool_recall': recall_result_list[1]
|
|
|
}
|
|
|
rank_result = video_rank(data=data, size=size, top_K=top_K, flow_pool_P=flow_pool_P)
|
|
|
+
|
|
|
+ # 老视频实验
|
|
|
+ if ab_code in [config_.AB_CODE['old_video']]:
|
|
|
+ rank_result = video_rank_with_old_video(rank_result=rank_result, old_video_recall=recall_result_list[2],
|
|
|
+ size=size, top_K=top_K, old_video_index=old_video_index)
|
|
|
+
|
|
|
end_rank = time.time()
|
|
|
log_.info('mid: {}, uid: {}, rank_result: {}, execute time = {}ms'.format(
|
|
|
mid, uid, rank_result, (end_rank - start_rank) * 1000))
|
|
@@ -355,6 +369,7 @@ def get_recommend_params(ab_exp_info):
|
|
|
ab_code = config_.AB_CODE['initial']
|
|
|
expire_time = 24 * 3600
|
|
|
rule_key = config_.RULE_KEY['initial']
|
|
|
+ old_video_index = -1
|
|
|
else:
|
|
|
ab_exp_code_list = []
|
|
|
config_value_dict = {}
|
|
@@ -449,7 +464,15 @@ def get_recommend_params(ab_exp_info):
|
|
|
flow_pool_P = config_.P_18_19
|
|
|
no_op_flag = True
|
|
|
|
|
|
- return top_K, flow_pool_P, ab_code, rule_key, expire_time, no_op_flag
|
|
|
+ # 老视频实验
|
|
|
+ if config_.AB_EXP_CODE['old_video'] in ab_exp_code_list:
|
|
|
+ ab_code = config_.AB_CODE['old_video']
|
|
|
+ no_op_flag = True
|
|
|
+ old_video_index = 2
|
|
|
+ else:
|
|
|
+ old_video_index = -1
|
|
|
+
|
|
|
+ return top_K, flow_pool_P, ab_code, rule_key, expire_time, no_op_flag, old_video_index
|
|
|
|
|
|
|
|
|
def video_homepage_recommend(mid, uid, size, app_type, algo_type, client_info, ab_exp_info):
|
|
@@ -500,14 +523,16 @@ def video_homepage_recommend(mid, uid, size, app_type, algo_type, client_info, a
|
|
|
top_K=top_K, expire_time=12 * 3600)
|
|
|
|
|
|
else:
|
|
|
- top_K, flow_pool_P, ab_code, rule_key, expire_time, no_op_flag = get_recommend_params(ab_exp_info=ab_exp_info)
|
|
|
+ top_K, flow_pool_P, ab_code, rule_key, expire_time, no_op_flag, old_video_index = \
|
|
|
+ get_recommend_params(ab_exp_info=ab_exp_info)
|
|
|
|
|
|
# 简单召回 - 排序 - 兜底
|
|
|
rank_result, last_rov_recall_key = video_recommend(mid=mid, uid=uid, app_type=app_type,
|
|
|
size=size, top_K=top_K, flow_pool_P=flow_pool_P,
|
|
|
algo_type=algo_type, client_info=client_info,
|
|
|
ab_code=ab_code, expire_time=expire_time,
|
|
|
- rule_key=rule_key, no_op_flag=no_op_flag)
|
|
|
+ rule_key=rule_key, no_op_flag=no_op_flag,
|
|
|
+ old_video_index=old_video_index)
|
|
|
# ab-test
|
|
|
# result = ab_test_op(rank_result=rank_result,
|
|
|
# ab_code_list=[config_.AB_CODE['position_insert']],
|
|
@@ -530,14 +555,16 @@ def video_relevant_recommend(video_id, mid, uid, size, app_type, ab_exp_info):
|
|
|
:param ab_exp_info: ab实验分组参数 [{"expItemId":1, "configValue":{"size":4, "K":3, ...}}, ...]
|
|
|
:return: videos type-list
|
|
|
"""
|
|
|
- top_K, flow_pool_P, ab_code, rule_key, expire_time, no_op_flag = get_recommend_params(ab_exp_info=ab_exp_info)
|
|
|
+ top_K, flow_pool_P, ab_code, rule_key, expire_time, no_op_flag, old_video_index = \
|
|
|
+ get_recommend_params(ab_exp_info=ab_exp_info)
|
|
|
|
|
|
# 简单召回 - 排序 - 兜底
|
|
|
rank_result, last_rov_recall_key = video_recommend(mid=mid, uid=uid, app_type=app_type,
|
|
|
size=size, top_K=top_K, flow_pool_P=flow_pool_P,
|
|
|
algo_type='', client_info=None,
|
|
|
ab_code=ab_code, expire_time=expire_time,
|
|
|
- rule_key=rule_key, no_op_flag=no_op_flag)
|
|
|
+ rule_key=rule_key, no_op_flag=no_op_flag,
|
|
|
+ old_video_index=old_video_index)
|
|
|
# ab-test
|
|
|
# result = ab_test_op(rank_result=rank_result,
|
|
|
# ab_code_list=[config_.AB_CODE['position_insert'], config_.AB_CODE['relevant_video_op']],
|