本文是在再次整理上一篇博客后,根据论文中理解不深刻的内容做了下复盘。作者是业余推荐系统爱好者,望看到本博客并且感兴趣的大佬们多多指点。 在CTR预估任务中利用手工构造的交叉组合特征来使线性模型具有“记忆性”,使模型记住共现频率较高的特征组合,往往也能达到一个不错的baseline,且可解释性强。但这种方式有着较为明显的缺点: 1.特征工程需要耗费太多精力。 2.模型是强行记住这些组合特征的,对于未曾出现过的特征组合,权重系数为0,无法进行泛化。 为了加强模型的泛化能力,研究者引入了DNN结构,将高维稀疏特征编码为低维稠密的Embedding vector,这种基于Embedding的方式能够有效提高模型的泛化能力。但是,基于Embedding的方式可能因为数据长尾分布,导致长尾的一些特征值无法被充分学习,其对应的Embedding vector是不准确的,这便会造成模型泛化过度。
对于数据长尾分布,献上查阅到的最新研究进展博文,请看链接, 对Embedding层的理解有篇博客写的非常好且很有趣,请看博客 代码实现请戳链接,在代码中对每行代码都做了比较详细的说明 其中具体对下面的代码实现示意图解释一下: 首先作者一开始就划分好了哪些是稀疏特征,哪些是稠密特征,然后整理成字典值输入模型,在wide部分和deep部分的输入中其实都含有这两种特征。只是在进去wide部分的稠密特征不做处理,对稀疏矩阵进行一维embedding后和稠密特征一起进行logit,在deep部分,稠密特征会和经过k维embedding的稀疏特征进行输入到dnn网络中,然后进行dnn_logit。最后再把deep部分输出和wide部分输出加和之后用sigmoid激活。
|