数据
对于推荐系统甚至所有的机器学习模型,数据都是特别重要的,包括数据的分布,大小。
线上训练数据的产生
线上推荐系统的训练数据主要由两部分产生,一部分提供用户的feature,一部分提供用户的action,这个是需要一个时间窗口的,时间窗口过短,我们会失去很多正样本,时间窗口过长,会导致训练数据不那么freash,从而导致了模型学不到最新的信息。
真实的数据分布
线上的数据中往往负样本的数量远远多于正样本的数量,如果直接使用的原来的数据,可能回使模型倾向于生成负判断。此时我们需要负采样和过采样,一般公司常用的是负采样,采样比列可以制定为1:10,当然这会造成数据的bias问题,比如在ctr预估时,会使得ctr的值过高。此时我们一般会对结果进行bais纠偏。
特征
构建一个好的模型特征无疑是非常重要的一部分,目前大型公司都会将特征embedding化,然后送往深度学习的模型中去学习,很少去做一些特征工程的工作,一个是因为大公司的数据量比较大,可以将embedding训练的很好,这比人工去定义特征是好很多的,当然一些必要的简单工作也是要做的,比如对于特征进行特征淘汰从而保证模型不至于过大,限定特征作为embedding的最少出现次数(实际的效果线上其实是比较存疑的,因为训练了总比不训练好)。
特征分类大概可以分为以下几类:
用户特征
物品特征
用户与物品的交互特征
模型
模型的进步。最开始各大公司用的lr模型,简单线性可解释,到后面复杂些的FM、FFM DEEPFM模型再到后面的cross 、autoincoder模型比较重要的点主要是以下几个把
batch normalization
embedding 预训练可以加快训练速度
梯度裁减
对于dense feature可以进行梯度drop,大大加快训练速度
多目标训练loss差异不要过大(比如不要把时长模型和分类模型一起训练)
对于较大型的应用,其训练的embedding可以引入到较小app中,提供额外信息
使用relu激活函数,但要注意避免神经元死亡
目标的确定
目标的实际含义,比如在视频推荐中(时长,pct和 finish)
评价标准
线下指标
training阶段和serving阶段的auc和calibration
线上指标
留存,时长,动作率
非模型步骤
打散、规则过滤、强插
打散:避免同一类型的物品出的太多
规则过滤:可以尝试用模型替代
强插:插播一些非常重要的信息,一般不使用
我们的原则一般是能不用规则就不用规则,比如我们发现女性用户总是对衣服类视频有很大的偏好,这时候正确的做法是什么呢,是对对女性用户boost这类信息吗,不是的,最合适的做法加入性别特征,模型会根据item的id embdding和性别信息学到这些有用的信息。
网友评论