소스 검색

update rec

linfan 1 년 전
부모
커밋
ac50d1eeda
2개의 변경된 파일22개의 추가작업 그리고 6개의 파일을 삭제
  1. 4 1
      recommend.py
  2. 18 5
      video_rank.py

+ 4 - 1
recommend.py

@@ -343,8 +343,11 @@ def video_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type, al
     # 60058: u2itag, 60059:word2vec, 60061: sim_recall, 60062: u2u2i
     if ab_code == 60058 or ab_code == 60059 or ab_code == 60060 or ab_code == 60061 \
         or ab_code == 60062 or ab_code== 60063 or ab_code == 60064:
-        rank_result, flow_num = video_sank_pos_rank(data=data, size=size, top_K=top_K, flow_pool_P=float(flow_pool_P), ab_Code=ab_code, exp_config=exp_config)
+        rank_result, flow_num, sim_pos, filter_sim_pos, filter_sim_pos2 = video_sank_pos_rank(data=data, size=size, top_K=top_K, flow_pool_P=float(flow_pool_P), ab_Code=ab_code, exp_config=exp_config)
         result['flow_num'] = flow_num
+        result['sim_pos'] = sim_pos
+        result['filter_sim_pos'] = filter_sim_pos
+        result['filter_sim_pos2'] = filter_sim_pos2
         if rank_result:
             result['rank_num'] = len(rank_result)
     else:

+ 18 - 5
video_rank.py

@@ -973,26 +973,39 @@ def video_sank_pos_rank(data, size, top_K, flow_pool_P, ab_Code='', exp_config=N
     if exp_config and 'recall_num_limit' in exp_config:
         recall_num_limit_dict = exp_config['recall_num_limit']
     exp_recall_dict = {}
-    for j in range(3):
+    select_pos = 0
+    sim_pos = 0
+    filter_sim_pos = 0
+    filter_sim_pos2 = 0
+    for j in range(1):
         if len(rov_recall_rank)>12:
             break
         for recall_pos_config in recall_list:
+            select_pos =select_pos+1
             rand_num = random.random()
-            print("choose_item:",recall_pos_config, "rand_num:", rand_num)
+            #print("choose_item:",recall_pos_config, "rand_num:", rand_num)
             for per_recall_item in recall_pos_config:
                 per_recall_name = per_recall_item[0]
                 per_recall_freq = per_recall_item[1]
                 per_recall_num = exp_recall_dict.get(per_recall_name, 0)
                 per_recall_total_num = recall_num_limit_dict.get(per_recall_name, 0)
+                if select_pos==2 and per_recall_name.find("sim")>-1 and rand_num < per_recall_freq and \
+                    per_recall_name in recall_dict:
+                    sim_pos +=1
                 # recall set total num
-                if len(recall_num_limit_dict)>0 and per_recall_total_num>0 and per_recall_num>= per_recall_total_num:
+                if len(recall_num_limit_dict)>0 and per_recall_total_num>0 \
+                        and per_recall_num>= per_recall_total_num:
+                    if sim_pos>0:
+                        filter_sim_pos +=1
                     continue
                 if rand_num < per_recall_freq and per_recall_name in recall_dict:
                     per_recall = recall_dict[per_recall_name]
                     for recall_item in per_recall:
                         vid = recall_item['videoId']
                         if vid in select_ids:
-                            print("exsited vid:", vid, "\t:", per_recall_name)
+                            if sim_pos > 0:
+                                filter_sim_pos2 += 1
+                            #print("exsited vid:", vid, "\t:", per_recall_name)
                             continue
                         recall_item['rand'] = rand_num
                         rov_recall_rank.append(recall_item)
@@ -1091,7 +1104,7 @@ def video_sank_pos_rank(data, size, top_K, flow_pool_P, ab_Code='', exp_config=N
                     rank_result.extend(flow_recall_rank[:size - top_K - i])
                     return rank_result[:size],flow_num
             i += 1
-    return rank_result[:size], flow_num
+    return rank_result[:size], flow_num, sim_pos, filter_sim_pos, filter_sim_pos2