《Wide & Deep Learning for Recommender Systems 》笔记

时间:2021-06-01 03:39:22

从tensorflow的文档找到的论文,没几页,看上去也不复杂,赶紧弄下来看看。

场景是Google Play的推荐

wide & deeplearning是什么鬼?

  • wide是指高维特征+特征组合的LR。LR高效、容易规模化(scalable)、可解释性强。但是泛化性需要在特征工程上下功夫
  • deep就是deep learning了。特征工程省力,但是容易过度泛化over-generalize。

Memorization 和Generalization

文中提了两个观点,有点意思。Memorization 和Generalization。

  • Memorization 。从现有的训练数据item或者特征的共现或者相关性。局部性(topical),跟用户有行为的item直接强相关。
  • Generalization。相关性的传递(transitivity),新特征组合。多样性(diversity)好一些。

有点类似I2i里的item-base方法效果好,user-base的方法新颖性好。

我自己之前的观点是机器学习某种程度上来说就是找“相似”,这种相似有时候比较直接(Memorization),有时候比较间接(Generalization)。意思其实差不多啦。

回顾LR和DL的问题

先介绍现有LR方法,特征通通0/1编码,然后做特征组合。老套路了,基本都这样。有个问题就是特征组合如果训练数据里面没有,那就没有信息了。其实也算是数据稀疏的问题。

embedding-based的方法,比如FM、DL,学习一个low-dimensional dense embedding向量。想起hash,可以把位数比较多的稀疏数据压缩到位数比较小的空间。当然,这样会有冲突发生。不过这里有点不同,学到是类似主题或者语义的东西,希望对于item是有“冲突”的,才能解决稀疏性问题。

特殊兴趣或者小众爱好的用户,数据是很稀疏,但embedding方法还是能得到很多其他nonzero的权重,也就是前面所说的over-generalize。LR就没这个问题,只直接记住这种数量很少的特征组合。

system overview

先retrieval粗筛,用machine-learning models和human-defined rules,不要觉得人工规则low,但是工业界就是需要啊。
再ranking精排。WDL就是用在这里。看看用了啥特征。
1. user features (e.g., country, language, demographics),
2. contextual features (e.g., device, hour of the day, day of the week) 像余额宝、阿里音乐那个比赛都用了时间特征啊。
3. impression features (e.g., app age, historical statistics of an app).

  • activation function 用的是ReLu
  • 输入居然是字符串(e.g., “language=en”) ,向量怎么embedding没细说,估计是k-Shingling吧

wide & deeplearning上场

《Wide & Deep Learning for Recommender Systems 》笔记
看图就明了。中间那个就是了。

一些细节
* 模型的目标是app安装。
* 对比join training和ensemble。ensemble是disjoint的。join training可以一起优化整个模型。突然想到一个问题,之前一直对DL抱有歧视,觉得这玩意拟合非线性还不如xgboost来得简单直接。没注意DL的优势:学习embedding表达,可以并行训练(不用一棵树一棵树地来)。
* 训练时候LR部分是FTRL+L1正则,我还以为FTRL只能用在online learning呢。DL用的AdaGrad
* 训练数据有5000亿??把一个pv的每个app当作一条数据倒是有可能。
* 训练的时候不会从头开始,用之前的模型作为初始模型。难怪用FTRL。模型上线前会dry run一下。习惯很好。
* 连续值先用累计分布函数CDF归一化到[0,1],再划档离散化。这个倒是不错的trick。

效果咋样

《Wide & Deep Learning for Recommender Systems 》笔记

离线评估auc提升不大,取了1%的用户在线评估,效果比较好。 奇怪了,解释是说离线数据是fixed的,在线能学新的用户responses。我脑补一下,就是说你的模型效果好了,影响前面用户的点击,进而影响app的实时统计特征,最后影响后面的效果?不然就是因为排序结果变了,影响用户的点击,离线不能反映真实的用户行为。比如原来模型把差一点的排上来,导致用户安装了。你把更好的排上了反而预测错了。

总之,线上有效果最重要,理由可以慢慢编。另外就是离线评估没提升也不要轻易放弃,成功可能就跟你擦肩而过。仔细想想,离线评估确实有坑。