20 | DeepFM:如何让你的模型更好地处理特征交叉?
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了深度学习模型处理特征交叉的重要性,并探讨了传统机器学习模型因子分解机模型(FM)以及深度学习模型和FM模型的结合DeepFM。文章还介绍了新的特征交叉方法,即元素积操作。作者指出,深度学习模型需要加强处理特征交叉的能力,而FM模型善于进行特征交叉,因此将两者结合形成了DeepFM模型。通过对这些模型的介绍,读者可以了解到不同模型在处理特征交叉方面的特点和优势,以及它们的应用场景和效果。文章内容丰富,对于深度学习模型处理特征交叉的方法和原理进行了详细的阐述,对于深度学习领域的研究和实践具有一定的参考价值。文章还总结了DeepFM模型在解决特征交叉问题上的优势,以及实现DeepFM模型的关键步骤。同时,鼓励读者在实践中尝试不同的特征输入和模型结构,以及思考其他处理两个Embedding向量间特征交叉的方法。整体而言,本文为读者提供了深度学习模型处理特征交叉问题的全面概览,对于深度学习领域的从业者具有一定的指导意义。
《深度学习推荐系统实战》,新⼈⾸单¥68
全部留言(36)
- 最新
- 精选
- 张弛 Conor关于DeepFM,想请教一下老师:DeepFM的图示中,输入均是类别型特征的one-hot或embedding,请问是因为特征交叉仅适用于类别型特征的交叉吗?数值型特征之间,数值型与类别型特征之间能否进行交叉呢?另外,在DeepFM的wide部分中一阶交叉项是否可以包含未参与特征交叉的数值型特征呢?
作者回复: 这是个好问题。按照DeepFM原论文,数值型特征是不参与特征交叉的,因为特征交叉的操作是在两个embedding向量间进行的。 但是如果可以把通过分桶操作把连续型特征处理成离散型特征,然后再加Embedding层,就可以让数值型特征也参与特征交叉。这是一个可行的方案。
2020-11-2657 - 张弛 Conor老师您好,请教一个关于FM的问题。原FM中二阶交叉项中隐向量的内积仅作为权重,但从这篇课程的图示和代码来看,他们的内积直接作为了交叉项的结果,而没有了初始特征的交叉,想请问一下,这样做是因为教程里所选的特征是one-hot格式,所以维度可能不一致,从而无法进行初始特征的交叉吗?那对于数值型的特征,他们的初始特征交叉是否应该和隐向量内积相乘再作为二阶交叉项的输出呢?
作者回复: 是这样,原FM中内积作为权重,然后还要乘以特征本身的值。 但在DeepFM中,所有的参与交叉的特征都先转换成了embedding,而且由于是one-hot,所以特征的值就是1,参不参与交叉都无所谓。所以直接使用embedding的内积作为交叉后的值就可以了。 至于数值型特征的问题在于,如何把他们转换成embedding向量,我觉得分桶后加embedding层是一个方法,但其实分桶后加embedding层也是不用加原特征值的,因为分桶后的结果还是一个one-hot向量。
2020-11-26417 - 那时刻请问老师,文中提到FM 和 DeepFM 中进行特征交叉的方式,都是进行 Embedding 向量的点积操作。FM层中还有个加操作,它的作用是什么?
作者回复: 加操作是不进行特征交叉,直接把原先的特征接入输出层,相当于wide&deep模型中的wide层。
2020-11-25513 - 那时刻关于课后思考题,处理两个 Embedding 向量间的特征交叉的方法。 1.是否可以把这两个embedding向量组合之后再做一次embedding。 2.对于两个Embedding向量做一次pooling层,采用average/max pooling。 另外,开个脑洞,不是有木有把点积和元素积一起使用的模型呢?
作者回复: 这两个想法都没有问题,其实深度学习中没有什么不可以的,有的只是提出思路,改进模型,和验证效果。 把点积和元素积在一起使用,交给模型自动学习权重当然也是可行的。 除此之外,还有元素减,外积等交叉操作,除此之外还有一些自定义的复杂交叉操作,比如google cross&deep模型中自定义的一些cross操作。
2020-11-2512 - 厚积薄发内积和元素积的区别是什么?都是对应元素相乘然后求和吧
作者回复: 元素积不求和,对位操作后生成一个向量。
2021-02-2811 - xll老师您好,按FM的交叉方式,不同特征的embedding 向量维度要相同,但实际不同离散特征的维度可能相差很大,如果想用不同的embedding 维度,那应该怎样做交叉,业界有没有这样的处理方式?
作者回复: 几乎不可以。如果一定要做的话,也要在不同embedding层上再加上一层fc layer或者embedding layer,把他们变成一致的,然后交叉。
2020-12-0111 - Sebastian对特征embedding做concat、average pooling、sum pooling 都可以
作者回复: 这些确实都可以,但针对性不强,还是一些专门针对两个embedding特征交叉设计的操作效果好一些。比如我们提到的dot product, element-wise product 和element-wise minus. outer product等等。
2020-11-259 - 浣熊当家这一讲里是关于不同特征之间的交叉,但对于之前提到过Youtube有对单一特征进行平方,开方这样的操作得出新的特征的做法,对于这种单一特征的变换操作有没有什么深度模型可以做到?还是一般都是根据经验和理性进行人工手动的尝试?
作者回复: 一般是通过人工经验进行一些预处理。当然,预处理层也可以看作深度学习模型的一部分,需要一些人工的尝试。
2020-11-256 - 王志文老师好,代码中FM的交叉好像是手工指定了几种交叉,还不是全部特征的两两交叉?进一步,如果是全部特征的两两交叉,会出现user id和 user gener的交叉,这两项都是用户侧特征,不涉及物品侧特征,感觉交叉了也不会对指标提升有作用,这样考虑对吗?如果全部两两交叉不会有作用的话,是不是又得手动做交叉特征的筛选呢?谢谢老师!
作者回复: 代码中只是一个例子,仅供参考,具体哪种效果好当然是靠自己探索。 你的思路很对,一般来说物品侧和用户侧的特征交叉的作用更大,在实际应用中,还是最好有一些手动调参,和先验知识会更好一些。
2021-06-185 - Geek_ddf8b1老师 您好!我准备做推荐项目场景为类似抖音这种的短视频信息流推荐 想请教一下:1、实际生产环境中tensorflow训练这些深度学习模型一般是分布式训练吧?如果是分布式训练的话,您sparrowrec项目中的代码需要做哪些改动?或者能否整体说明一下如果这个项目代码在生产环境使用的话有哪些需要注意应该要修改的地方。2、我看您代码中特征是存在reids中。想请教一下几百万用户(dau几十万)和几十万的视频 用户和物品特征一共300个字段左右 这种规模的数据量适合把用户和视频的特征都存在redis中吗?
作者回复: 1. 不一定,也有大量公司采用单机多卡的形式训练。如果是分布式的环境,改变会比较大,需要深入研究parameter server相关的配置和实践,属于非常偏工程前沿的内容了,需要大家自己去踩坑填坑。 2. 这个问题不用我回答,你自己estimate一下就可以了,redis的容量有多大,你的数据量有多大。然后做一个poc去先插入少量数据看一下实际的内存使用量就可以了。 如果redis容量不够怎么办,参考之前存储模块的那讲。
2020-12-035