![]()
https://github.com/DA-southampton/NLP_ability
谈到WDL,一个经常看到的总结是:Wide and Deep 模型融合 wide 模型的记忆能力和 Deep 模型的泛化能力,进行两个模型的联合训练,从而兼顾推荐的准确性和多样性。
理解上面这句话,还是要先弄清楚:什么是记忆能力,什么是泛化能力?
1. 什么是记忆能力与泛化能力
1.1记忆能力
我们先说记忆能力,从中文的角度理解,记忆能力就是之前做过的事情,在后面做同样的事的时候会利用到之前的经验和教训。
进一步,记忆能力就是对之前学习到的经验或者说规律的遵守。
Memorization can be loosely defined as learning the frequent co-occurrence of items or features and exploiting the correlation available in the historical data.
-
从历史数据中学习共现的物体/特征组合--->这就对应到上面谈到的经验规律
-
在预测的时候利用到这种学习到的这种相关性--->这就对应到上面谈到的对经验的遵守。
在这里,我想提一下,在第一点中提到的 “学习共现的物体/特征组合” 的主体是谁?
因为LR模型属于广义线性模型,本身不具备对特征之间非线性关系进行建模。
所以需要我们从历史数据中找到有用的特征组合(当然我们也可以使用一些工具来找到哪些特征组合是有效的),人为的加入到模型中,给LR模型增添非线性建模能力。
简单来说,记忆能力是一种共现规律,表现方式为特征交叉,它需要人为或者通过工具从历史数据中找到,并放入到模型中作为新的特征,从而增加非线性建模能力。
记忆能力过强会出现一个问题,就是推荐物体的单一化。
Recommendations based on memorization are usually more topical and directly relevant to the items on which users have already performed actions.
1.2泛化能力
Generalization, on the other hand, is based on transitivity of correlation and explores new feature combinations that have never or rarely occurred in the past.
神经网络无需人为构建组合特征,有着自动做特征组合的方式。可以通过对类别特征做embedding,这样就是在测试集中出现在训练集中没有出现过的特征组合方式,也可以使用embedding进行计算得到对应的值。
综合来说,LR模型有着更强的记忆能力,Deep模型有着更强的泛化能力。
2.模型架构图
整个模型分为三个部分,左边的Wide模型,右边的Deep模型,最后输出的Softmax/sigmoid函数。
Wide使用的是LR模型,这里需要注意的点是LR的输入特征包含两部分:
-
-
特征交叉之后的特征(特征交叉之前各自特征需要one-hot)
Deep模型使用的是前馈神经网络,会对类别特征做embedding,连续特征不动直接输入就好(需要提前做好特征工程)。
联合训练,Wide使用FTRL算法进行优化,Deep模型使用AdaGrad进行优化。
在实际中,Wide和Deep部分直接使用一个优化器就可以。
3.实践
3.1 实践架构
这个是原论文中的架构图,我们自己在实践的时候不一定完全遵守。比如架构图中Wide部分只是使用了交叉特征,我们在使用的时候可以把原始的离散特征或者打散后的连续特征加过来。
3.2 多模态特征的加入
有些时候对于用户或者待推荐的物体会有Text和Image,为了增加效果,可能会使用到多模态特征。
(是否需要加入多模态特征需要大家亲自试,很有可能吭哧吭哧写了好久代码调试通了,最后发现效果提升不多甚至还会降低,哭了)
-
Text 和 Image 的 embedding 向量,采用 和Wide模型一样的方式加入到整体模型中就可以了。至于 两者的Embedding向量如何获取,就看你自己了。
-
Text和Image之间使用attention之后再加入
-
Text和Image 和Deep 模型的输出拼接之后再做一次处理
-
多看 Paper-给个关键词:
Multimodal Fusion
3.3 特征工程小记录
后记
读完整个论文,让我去回顾整个模型,给我这样一个感觉:
对于隐藏在历史数据中的共现特征关系,Deep模型是可以学习到的。但是WDL模型做的是,把其中的一部分(容易观察出来或者通过其他工具找出来的特征组合)放到LR这边,从而显式的加入到模型中。
往极端的方面想一下,LR模型这边更像是一种规则,是对Deep模型输出的补充。
由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:
(1)点击页面最上方"AINLP",进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心
。
进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注推荐or广告技术
推荐阅读
这个NLP工具,玩得根本停不下来
征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)
完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)
从数据到模型,你可能需要1篇详实的pytorch踩坑指南
如何让Bert在finetune小数据集时更“稳”一点
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化
Node2Vec 论文+代码笔记
模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结
中文命名实体识别工具(NER)哪家强?
学自然语言处理,其实更应该学好英语
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
![]()
阅读至此了,分享、点赞、在看三选一吧🙏