聊聊推荐系统的高阶特征交叉问题

bac89627397f8b905714f5a1da3861f7.png

文 | 水哥
源 | 知乎

Saying

1. DCN看起来给了我们很好的允诺,但是细细想来是有一些问题的,这里也可以参考大佬的意见

62f3ada21aae3667fedb20ac881d6c25.png

2. 高阶FM的核心设计是先element-wise乘,再对embedding求和。核心优化方法是利用计算中的冗余构建递推关系,然后使用动态规划解决
3. 计算出现冗余的地方,动态规划就可能出现;冗余的部分和新的信息组成递推的时候,动态规划就可以应用
4. DCN的形式对于交叉有点表面化,我们要的不是交叉这个概念,我们要的是确切的谁和谁交叉

FM引入了特征embedding的交叉之后,还顺带引入了另一个很自然的问题:除了二阶关系,是否还有更高阶的交叉存在?这些交叉应该选用什么样的数学形式,又如何来优化?在本讲中我们来探讨这个问题。按照上一讲提到的文章,仅仅凭借MLP是很难做到element-wise,以及内积这种交叉的。想要有高阶,首先想到的还是FM自然的向高阶的拓展,但是这个形式中需要优化茫茫多的参数,higher-order FM的作者抓到了计算中的冗余,巧妙地化解了指数复杂度的问题。从另一个角度,在DNN中如果能引入很自然的交叉结构,实践起来当然也是非常便利的。鼎鼎大名的Deep&Cross Network就做了这方面的工作,可惜它给我们的,可能是梦幻泡影,这又是为何呢?

扩展简单优化难——Higher-Order Factorization Machines(HOFM[1]

核心观点:高阶特征的交叉形式是所有的embedding element-wise乘,再求和,乘以所有要交叉的特征。在这个计算中存在大量的冗余,通过推导递推关系可以简化为动态规划求解

HOFM这篇工作发表于2016年的NIPS,作者重新思考了高阶FM的问题(主要是优化的问题)。其实在原来的FM中就有一个自然的扩展,二阶的特征是两个特征乘起来,以及他们embedding的内积,那么照葫芦画瓢,可以设计出 阶的交叉关系:

其中, 表示要进行交叉的特征索引的集合,里面的 , , 这些都是对应的索引。还是特征, 是对应的embedding,这些表示方法还和之前一样。这里的交叉分为两部分,一部分是所有涉及到的特征的连乘,而另一部分是先把所有涉及到的embedding做element-wise乘法(操作),然后再把所有元素加起来(即上面的sum函数)。这样就得到了一个交叉单项的形式,而整体的高阶FM就可以表示为:

前面的三项就和之前的FM是一样的。这里我们用上标(m)表示这个embedding是给 阶交叉使用的(因此每到一阶都有一份独立的embedding)。 是一个缩写,实际表示的是,而 也就是 。就等价于上面的 这样,我们就得到了高阶FM的表示。

由于高阶交叉求和中的每一项其实都是组合数的一项(比如4阶就是从 个特征里面挑出4个来做交叉),这个计算复杂度是指数级的。直接按照这个形式去优化,forward,backward计算量都太大了。

如果把上面的交叉项用ANOVA核(这里不用关心背景知识,不影响下面的阅读)表示的话,可以记为 ,其中求和和后面的乘都是 项。上面的表示还可以展开为:。HOFM的核心是指出这里存在一个递推的关系

这里表示的是单向量的关系,要注意这里 的 表示的是取第个元素操作,请不要和上面混淆了。表示除了 之外剩下的部分。

这个递推关系用数学来表示是很难受的,我们尽量用语言来证明这个递推:原来的表示的是从所有个特征中挑出个(称为组合数),遍历所有可能性,每一项算好乘加起来。如果我们把单独拿出来,原来的组合数可以分为两部分,一部分是不含 的,而一部分是包含的。不含 的这部分,还是从 个里面挑出 个,只是这里面没有 ,那么这一项就是 。而包含的这部分,可以先把 提到外面去,这部分组合数因为一定包含了这个位置,那么就相当于 挑 中的一个已经固定了,剩下的其实是在中挑出 个,而且是不含 的。所以后面这一项就是 ,这样就得到上面的递推关系。

当有了这个递推关系之后,就可以用动态规划来解决接下来的问题。我们用一张表格来表示:

fd1bacf423e212c62cea3624fbc170af.png

在这里我们保证每次计算到的最新的 都是当前向量的最后一维。假设更小的和更短的的结果已经计算好了(图上的深色部分),那么当前所需要的结果就是该点左上角和左边结果的融合。只要保证先从上到下,再从左到右的计算顺序,就可以在 的时间复杂度内得到结果,避免了指数级的运算。在优化的过程中,梯度的传导也是类似的。区别是从下往上,从右往左倒着回来的,这里就不再赘述了。

我们仅仅知道这里有一个很好的动态规划的简化是不关键的,而是要知道,为什么这里可以出现动态规划?我们再次观察,其实在 阶和 阶之间,不涉及新加的 的部分,算出来的结果大部分是一样的,而且在两边都得各自算一遍。由于有大量的冗余计算,当我们把计算过程分解为“新的结果=冗余的计算+新的信息”的时候,就可以得到动态规划的递推形式。关于更多动态规划的本质,可以参考笔者的另一篇文章(专栏)进行理解[2]

如果直接按照原来的形式来做,每一阶所有的参数都是独立的,这样庞大的参数量还是会带来不小的麻烦。论文中也提出了一些实践的建议,比如可以所有阶都共享embedding,只是有的地方阶高,有的地方阶低,节省了大量的参数。

HOFM中的高阶交叉确实优化的很到位,但是这还是限定在了FM这个大框架下去做的。现在基本都使用DNN了,如果在DNN中能够很方便的引入高阶交叉,对于实践再方便不过了。Deep&Cross Network就是这么一个工作,我们来看看,它是不是能够很好地完成高阶交叉。

天下没有免费的午餐——Deep & Cross Network(DCN[2]

DCN是斯坦福的学者们在2017年设计的一个新的网络结构,其核心是一个叫做Cross Network的旁路,这一路是专门对特征进行交叉的。按照设计,这路网络会对特征进行任意有限阶交叉。其核心设计可以用下面的公式来表示:

其中, , 分别是DNN中,输入层和输出层的中间结果(向量)。 为一开始的输入特征的embedding的拼接,它会在每一个层都参与运算。就是这层要学习的权重了,这也是一个向量。结构上也可以用下面的图来辅助理解:

40e4d0b23a92a80148076641c2dfb152.png

这里的 对应上面的 , 对应公式中的 。之所以要写成上面公式的形式是因为这个公式的模块是可以层层堆叠的。

那么DCN这样的设计是如何进行特征交叉的呢?设想在第一层,其实就是先和 做向量外积,得到一个矩阵,然后在矩阵中,每一个元素都是原先embedding中两个元素的乘:

当后面再乘以 的时候,其实是让 进行筛选,选出哪些交叉项留下,继续进行后面的运算。在第一层计算完毕之后,结果其实保留了一部分二阶的embedding元素交叉,那么再往下继续,就会有3阶,4阶。。。一直到网络层数的阶层。这样,只要我的网络有 层,我就能让输出带有 阶的交叉。下面的图展示了这个过程, 出现在每一层的中间,只要产生了新的中间输出,就要和 作用来得到下一层的结果:

50aa02bfcf83490b17e9c7876fffb1c2.png

高阶交叉空许约

就到目前为止,一切看起来都很美好,但是看完DCN这篇文章,睡一觉,再起来,就有一个问题钻进脑海:HOFM用了指数级的参数来优化高阶交叉特征,而DCN每一层仅仅就一个向量 就把高阶交叉做了,会不会太廉价了

抛开DCN许诺的高阶交叉,我们来想象一下,假设 我们可以人为指定了,需要什么样的形式,才能完全达到挑出交叉的效果?比如就让DCN只有一层,然后还原出FM的形式?

想要达到这个目的,必须拿出上面 矩阵的上三角或者下三角(不包含对角线)的所有元素加到一起才可以,这时候怎么解出 呢?我发现不论如何设计 其实都是做不到的(本质原因还是因为 是个向量,势单力薄)。所以这里的交叉最后和我们见到的FM以及类似模型中的交叉已经不是一个东西了。这是我个人对DCN的最大疑问点,可能也是文章开头大佬观点的部分原因吧。光有交叉这个概念是不能达到工业目的的,就像我们上一讲所讲的。我们要的交叉甚至谁和谁交叉比较好都有详细的门道在里面。

第二点是,当交叉变成了embedding中的一个元素的乘法,而不是原来整个embedding合起来内积的。如果后面这个不成立,就不存在embedding泛化性的保证了,那么交叉的意义还剩下多大呢?

上面这两个问题,在xDeepFM[3]这篇文章中相当于是做了一个归纳:DCN的本质实际上是给 乘了一个系数!重新考虑这个公式,根据结合律和分配率,可以重新写作:

结合上面的图,括号里面的两个向量分别是行向量和列向量,乘起来就是一个数字,也就是说,最后一层一层迭代完了,只得到一个 的倍数。你要说没有交叉吧,系数其实还是和 有关系的,你要说有交叉吧,又不是我们FM,PNN,ONN等等网络中讲得这么回事。

这么看下来,DCN给我们的,大体上是一个空头支票。它的交叉也不一定是我们想要的交叉,如果想要真正的交叉应该怎么做呢?

写到这又发现写的太多了,先鸽住,下期继续讲如何做真正的高阶交叉~

下期预告

推荐系统精排之锋(7):xDeepFM与DCN-V2,兑现交叉的诺言

往期回顾

1.召回 粗排 精排,如何各司其职?

2.拍不完的脑袋:推荐系统打压保送重排策略

3.简单复读机LR如何成为推荐系统精排之锋?

4.召回粗排精排-级联漏斗(上)

5.召回粗排精排-级联漏斗(下)

6.推荐系统精排:看阿里妈妈再试线性模型

7.推荐精排之锋:FM的一小步,泛化的一大步

7.推荐中使用FNN/PNN/ONN/NFM优化特征交叉

8559f40b9b40e250f619bcca113a41b0.png后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

72362846e931a95e484cb8954a7f5425.gif 8d7604e173a9f97ff194b125f1c1c688.png

[1] Higher-Order Factorization Machines,NIPS,2016
https://proceedings.neurips.cc/paper/2016/file/158fc2ddd52ec2cf54d3c161f2dd6517-Paper.pdf

[2] 水哥:从零单排leetcode第二十五期之动态规划(2):动态规划的本质是状态压缩
https://zhuanlan.zhihu.com/p/390344991

[3] Deep & Cross Network for Ad Click Predictions,AdKDD,2017
https://arxiv.org/pdf/1708.05123.pdf

[4] xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems,KDD,2018  
https://arxiv.org/pdf/1803.05170.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

COS系统的前端演变和发展

背景 美团COS:全称美团网核心业务系统部,以持续整合O2O线下资源,共建高效率、低成本的供应链系统,高效推动O2O生态环境建设为业务目标,负责美团网核心业务系统的建设和管理。 COS系统,伴随着美团3年多的发展…

OpenKG 祝大家元宵节快乐!

OpenKGOpenKG(中文开放知识图谱)旨在推动以中文为核心的知识图谱数据的开放、互联及众包,并促进知识图谱算法、工具及平台的开源开放。点击阅读原文,进入 OpenKG 网站。

LeetCode 1262. 可被三整除的最大和(DP)

1. 题目 给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。 示例 1: 输入:nums [3,6,5,1,8] 输出:18 解释:选出数字 3, 6, 1 和 8,它们的和是 18(可被 3 整除的最大和&#xff…

LeetCode 1253. 重构 2 行二进制矩阵(贪心)

1. 题目 给你一个 2 行 n 列的二进制数组: 矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1。第 0 行的元素之和为 upper。第 1 行的元素之和为 lower。第 i 列(从 0 开始编号)的元素之和为 colsum[i],…

论文浅尝 | ExCAR: 一个事件图知识增强的可解释因果推理框架

笔记整理:朱珈徵,天津大学硕士链接:https://aclanthology.org/2021.acl-long.183.pdf动机因果推理旨在理解因果之间的一般因果相关性,对于各种人工智能应用都有很大的价值。先前的研究主要是基于从手工注释的因果事件对中归纳出的…

从ACL2021看对比学习在NLP中的应用

本文首发于微信公众号”夕小瑶的卖萌屋“文 | 花小花Posy源 | 夕小瑶的卖萌屋最近关注对比学习,所以ACL21的论文列表出来后,小花就搜罗了一波,好奇NLPers们都用对比学习干了什么?都是怎么用的呀?效果怎样呀&#xff1f…

美团性能优化之路——性能指标体系

前言 在互联网网站百花齐放的今天,网站响应速度是用户体验的第一要素,其重要性不言而喻,这里有几个关于响应时间的重要条件: 用户在浏览网页时,不会注意到少于0.1秒的延迟;少于1秒的延迟不会中断用户的正常…

图谱实战 | 面向C端场景的概念图谱构成、建设与应用索引

转载公众号 | 老刘说NLPC端是知识图谱应用的一个重要领域,这个领域有大量的用户行为数据,存在着包括搜索、推荐、广告投放等业务。当前,主流的互联网公司,如美团、阿里、腾讯都在尝试相关落地,在此当中,概念…

11 个好用的科研工具推荐!工作效率提升 max!

文 | 炼丹学徒编 | 小轶前阵子,卖萌屋团队群里大家互相分享了一波自己收藏已久的 好用科研工具 。小伙伴们纷纷都有一种相见恨晚的感觉!这么多好东西,当然也要分享与各位读者小伙伴啦~也希望大家能把自己用过好用的工具留言在评论区&#xff…

搜索引擎关键字智能提示的一种实现

背景 搜索关键字智能提示是一个搜索应用的标配,主要作用是避免用户输入错误的搜索词,并将用户引导到相应的关键词上,以提升用户搜索体验。 美团CRM系统中存在数以百万计的商家,为了让用户快速查找到目标商家,我们基于s…

会议交流 | DataFunSummit 知识图谱在线峰会——链接知识图谱最前沿技术和最落地产业化应用的桥梁!...

随着人工智能技术的发展与应用,知识图谱作为AI进步的阶梯越来越受到学术界和产业界的重视,并且已经在很多领域、场景中体现出自身的价值。从最初的互联网搜索、推荐、问答等ToC场景,逐渐进入到垂直行业ToB的应用当中。然而,场景的…

LeetCode 1209. 删除字符串中的所有相邻重复项 II(栈)

1. 题目 给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。 在执行完所有删除…

YUI经验谈 - 自定义事件默认行为

纵观主流JS库和框架,YUI在自定义事件方面做的尤为出色。如果需要挑出一个代表性的feature,那么非事件默认行为莫属。 是什么 YUI自定义事件在总体上模仿了DOM事件的设计思想。DOM中的一些事件是有默认行为的,详细见DOM3 Event - Default acti…

美团NLP中心算法实习生招聘

致力于连接最靠谱的算法岗与最强的求职者招聘贴投放请联系微信xixiaoyao-1岗位职责:NLP算法研发,例如文本挖掘、知识预训练、知识&多模态预训练等知识图谱构建核心技术相关论文撰写岗位要求:北京高校在校大学生。(2023年毕业优…

论文浅尝 | 改善多语言KGQA的 Zero-shot 跨语言转换

笔记整理:谭亦鸣, 东南大学博士生来源:NAACL21链接:https://aclanthology.org/2021.naacl-main.465/概述为了扩展多语言知识图谱问答的应用,Zero-shot方法成为一个研究趋势。在Zero-shot的设定下,通过高资源语言的训练…

LeetCode 1172. 餐盘栈(栈 + set)

1. 题目 我们把无限数量 ∞ 的栈排成一行,按从左到右的次序从 0 开始编号。每个栈的的最大容量 capacity 都相同。 实现一个叫「餐盘」的类 DinnerPlates: DinnerPlates(int capacity) - 给出栈的最大容量 capacity。void push(int val) - 将给出的正…

Hive SQL的编译过程

Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用。美团数据仓库也是基于Hive搭建,每天执行近万次的Hive ETL计算流程,负责每天数百GB的数据存储和分析。Hive的稳定性和性能对我们的数据分析非常关键。 在几次升级Hive的过程中&…

Prompt tuning新工作,五个参数解决下游任务 fine-tuning

文 | 小伟编 | 小轶前言自从Google石破天惊地发布Bert以来,NLP就进入了预训练语言模型的时代。众所周知,我们可以用预训练语言模型来学习各种各样的任务,即使它们的特征空间有比较大的差异。那么预训练语言模型为什么会有这种泛化能力呢&…

会议交流 | 如何将图谱实体与关系更好的向量化,并基于推理扩充知识边界?——DataFun Summit2022知识图谱在线峰会...

背景介绍知识图谱是对人类先验知识的概括,具有重要的学术价值和广泛的应用前景。在深度学习广泛应用环境下,知识图谱的表示学习通过将图谱实体和关系向量化,便于利用深度学习技术实现异质信息融合;同时,基于这种图谱表…

真正的高阶特征交叉:xDeepFM与DCN-V2

文 | 水哥源 | 知乎Saying1. xDeepFM和DCN-V2是真正的高阶交叉,和前面讲的High Order Factorization Machine(HOFM)又有着千丝万缕的联系。某种简化下,都能退化为HOFM的形式2. 如图3. 推荐模型迭代的时候要平衡涨点和复杂度的关系…