所谓的“多路召回”策略,就是指采用不同的策略、特征或简单模型,分别召回一部分候选集,然后把候选集混合在一起供后续排序模型使用,可以明显的看出,“多路召回策略”是在计算速度和召回率之间进行权衡的结果。其中,各种简单策略保证候选集的快速召回,从不同角度设计的策略保证召回率接近理想的状态,不至于损伤排序效果。
导包
import pandas as pd
import numpy as np
from tqdm import tqdm
from collections import defaultdict
import os, math, warnings,math,pickle
import faiss
import random
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
from datetime import datetime
from deepctr.feature_column import SparseFeat,VarLenSparseFeat
from sklearn.preprocessing import LabelEncoder
from tensorflow.python.keras import backend as K
from tensorflow.python.keras.models import Model
from tensorflow.python.keras.preprocessing.sequence import pad_sequences
from deepmatch.model import *
from deepmatch.utils import sampledsoftmaxloss
warnings.filterwarnings('ignore')
# 做召回评估的一个标志,如果不进行评估就是直接用全量数据进行召回
metric_recall = False
读取数据
在一般推荐系统比赛中读取数据部分主要分为三种模式,不同的模式对应的不同的数据集:
- Debug模式:这个的目的帮助我们基于数据先搭建一个简易的baseline并跑通,保证写的baseline代码没有什么问题。由于推荐比赛的数据往往非常巨大,如果一上来就直接采用全部的数据进行分析,搭建baseline框架,往往会带来时间和设备上的损耗,所以这时候我们往往需要从海量数据的训练集中随机抽取一部分样本来进行调试(train_click_log_sample),先跑通一个baseline。
- 线下验证模式:这个目的是帮助我们在线下基于已有的训练集数据,来选择好合适的模型和一些超参数,所以我们这一块只需要加载整个训练集(train_click_log),然后把整个训练集再分成训练集和验证集,训练集是模型的训练数据,验证集部分帮助我们调整模型的参数和其他的一些超参数。
- 线上模式:我们用debug模式搭建起一个推荐系统比赛的baseline,用线下验证模式选择好了模型和一些超参数,这一部分就是真正的对于给定的测试集进行预测,提交到线上,所以这一块使用的训练数据集是全量的数据集(train_click_log+test_click_log)
下面就分别对这三种不同的数据读取模式先建立不同的代导入函数,方便后面针对不同的模式下导入数据。
# debug模式:从训练集中划出一部分数据来调试代码
def get_all_click_sample(data_path,sample_nums=10000