从2016年google的wide&deep和youtube dnn两篇标志性的paper开始,深度学习在推荐系统中的应用已经遍地开花,个人觉得可以简单粗暴地将其归纳为两大阶段,第一阶段是dnn在推荐系统中的可行性验证并规模化应用,如wide&deep/deepfm/deepcross等的大规模落地;第二阶段是各大公司在dnn的基础上,结合自家的业务特点,做模型二次创新,如阿里结合综合电商场景门类大而全的特点,研发了DIN系列模型。
我们来聊聊第一阶段,dnn在推荐系统落地的核心操作之一。
先来看看基础的dnn,我们知道,dnn一个相对黑盒的算法,所谓黑盒,指的是可解释性差,比如他给出你一个预测结果,你无法根据模型结构参数精确解释模型为什么会给出你这个结果;而并不是你丢给它一堆数据,它会自动地帮你预测个结果出来。是的,我们需要把我们业务场景的数据特点抽象出来,并把它告诉模型,即将抽象出来的数据共性表达在模型当中。当然了,这也可以通过大量且细致的特征工程来实现,但这种方式不具备复用性,在这里不展开讨论。
我们先来看看,如何把数据特点抽象到模型结构里吧,先来看看典型的文本和图像领域是怎么做的。
文本数据是典型的强序列化数据,所谓强序列化指的是数据单位的顺序关系蕴含着重要的信息,比如“人吃鱼”和“鱼吃人”,同样的三个字,不同的顺序表达的意义完全不同。那么如何捕捉这种序列关系呢?词典+ngram看起来是种可行的方法,但它带来的维度爆炸让人无法接受。rnn系列序列化模型优雅地解决了这个问题,即把数据的序列化关系表达在了模型里面,又没有引入过多参数。
而图像本质上是一个稠密矩阵,数据携带的