Press "Enter" to skip to content

神仙打架!也评Deep Interest Evolution Network

作 者:石塔西

 

来 源: https://zhuanlan.zhihu.com/p/54838663

 

整理:深度传送门

 

背景

 

近期,知乎上有同学解析了阿里的《Deep Interest Evolution Network for Click-Through Rate Prediction》这篇论文,很遗憾,没有一篇解答我对该文的疑问,我给原文作者的私信也没有得到回复。所以,在这里,特撰此文,将我的疑问公开出来,希望与知乎上的同学共同讨论。

 

要提到Deep Interest Evolution Network ( DIEN ),就不得不提Deep Interest Network( DIN ), DIEN可以视为DIN的后续发展。但是,在我心目中,对两篇论文的评价相差很大,

 

当初读DIN的时候,有 眼前一亮 的感觉,感叹作者思路的开阔,没想到 Attention这种NLP技术还能被应用到推荐中 。这种感觉,就像读Youtube DNN那篇论文时,没想到 Negative Sampling这种训练word2vec的技术也能应用到视频的召回 。

 

但是等读到DIEN时, 除了感叹网络结构的复杂,对于其功效,至今还抱有怀疑 。

 

DIN vs DIEN

 

读书,要 先读厚,再读薄 。记得有秘书回忆,林彪元帅用“剪贴法”来读书:在读书时,选择他认为“有用”的话剪贴起来。一本《共产党宣言》最后被他剪到最后只剩下“大工业、大机器”几个字 。

 

效法先贤,我将这两篇文章也总结成以下几句话:

 

1. 深度学习应用于推荐算法,经典操作就是将高维、稀疏categorical/id类特征通过embedding映射成一个低维、稠密向量;

 

2. 但是,表达用户兴趣时,用户的 历史行为往往涉及多个categorical/id特征 ,比如点击过的多个商品、看过的多个视频、输入过的多个搜索词,需要各这些id特征embedding之后的多个低维向量, “合并”成一个向量 ,作为用户兴趣的表示,喂入DNN。 这个“合并”就是所谓 Pooling 。

 

3.DIN与DIEN的相同之处,都是通过Attention来实现Pooling,使用户兴趣的向量表示,根据候选物料的不同而不同,实现 用户兴趣的“千物千面”;

 

4. 不同之处在于:DIN没有考虑用户历史之间的时序关系, DIEN则使用了GRU来建模用户历史的时间序列。

 

因为写文章,还是要清晰表述思想,所以写出来,还是有点啰嗦。写在我自己的笔记上,还能够再简练许多。接下来,我再对上面4句话,做一些补充。

 

Pooling招式

 

第一句话,我在我之前的文章中反复论述很多遍了。

 

高维、稀疏的categorical/id类特征都是推荐系统中的一等公民;

 

深度学习在推荐系统中的应用,各种NN,各种FM,都是以embedding为基础的

 

embedding的作用是将原来高维、稀疏的categorical/id类特征的“精确匹配”,变为向量之间的“模糊查找”,从而提高了可扩展性。

 

第二句话,围绕着这个Pooling过程,各家有各家的高招:

 

Youtube DNN这篇论文中,Youtube的做法最简单、直观,就是将用户看过的视频embedding向量、搜索过的关键词embedding向量,做一个 简单的平均 。

 

Neural Factorization Machine中,使用如下公式,将n个(n=特征数)k维向量压缩成一个k维向量,取名为 B i-interaction Pooling 。既完成pooling,也实现了特征间的二阶交叉。

DIN用各embedding向量的加权平均实现了pooling, 而”权重”由attention机制 计算得到。

 

基于深度学习的文本分类,同样面临着如何将一段话中的多个词向量压缩成一个向量来表示这段话的问题。常用的方法, 就是将多个词向量喂入RNN,最后一个时刻RNN的输出向量就代表了多个词向量的“合并”结果 。显然,DIEN则借鉴了这一思路,并且改造了GRU的构造,利用attention score来控制门。

 

用户兴趣表示

 

第三句话,解释一下“ 用户兴趣的千物千面 ”,它也是DIN的创新之处。比如,一个用户之前买过奶粉与泳衣,当展示给她泳镜时,显然更会唤起她买过的泳衣的记忆;而当展示给她尿不湿时,显然更唤起她买过的奶粉的记忆。

 

DIN用attention机制实现了以上过程,用户兴趣向量是历史上接触过的item embedding向量的加权平均,而第i个历史item的权重 由该历史item的embedding向量 与候选物料的embedding向量 共同决定(函数g)。可见同一个用户当面对不同候选物料时,其兴趣向量也不相同,从而实现了“千物千面”。

DIN中用户兴趣的向量表示

第四句,终于说到了DIEN。其基本思路如前所述:

 

用户历史肯定是一个时间序列,将其喂入RNN,则最后一个状态可以认为包含了所有历史信息。因此,作者用一个双层的GRU来建模用户兴趣。

 

将用户历史接触过的item embedding微量,喂进第一层GRU,输出的就是用户各时刻的兴趣。这一层被称为 Interest Extraction Layer

 

将第一层的输出,喂进第二层GRU,并用attention score(基于第一层的输出向量与候选物料计算得出)来控制第二层的GRU的update gate。这一层叫做 Interest Evolving Layer 。

 

Interest Evolving Layer的最后一个状态作为用户兴趣的向量表示,与ad, context的特征一同喂入MLP ,预测点击率。

看上去,这个思路顺理成章,“ 用户历史行为本来就是一个序列,用RNN来建模肯定要比Youtube, DIN那种忽略了时序,进行简单平均,损失较少信息,要合理得多 ”,但是,我的疑问也来了。

 

第一,用RNN是否合适?

 

其实,包括RNN在内的大多数时间序列模型都有一个前提,就是 各输入之间是等时间间距的 。一句话中的各个词肯定是满足这一关系的,而DIEN的论文中,用户历史取过去14天接触过的item,非常规律、定时上淘宝上的用户毕竟是少的, 因此用户历史行为序列肯定是不等间距的。 而且间距肯定相差极其悬殊 ,一个用户在一个session内部的点击行为最多相差几分钟,然后就是明天、甚至下周才在淘宝上发生行为,间隔至少是几个小时。

 

从公式中可以看出, LSTM/GRU只关心t-1(上一步)和t(当前步),而没有涉及t-1和t之间的时间间隔 。 没涉及不代表不重要 ,反而是因为其使用前提就是假定各步骤之间是等间距的,无需多言。

 

举一个简单、粗暴的例子,两条用户点击序列,都是”先点击了itemA,再点击了itemB,最后点击了itemC”:

 

如果A–>B–>C是发生在一个session内部,间隔几秒。显然A、B、C有较强的相关性,A–>B–>C作为一个序列,包含了远超A,B,C三个单独item的信息。

 

如果A–>B–>C的间隔是3天。反正,如果是我, 当我点击B(C)时肯定忘记了3天前我点击过A(B) 。那幺,A–>B–>C序列所包含的信息,并不比单独点击A,B,C多 。

 

可见,序列内容相同,但是时间间隔不同,无论对学习A/B/C的embedding还是学习GRU/LSTM的参数,都会产生重大影响。

 

而DIEN中恰恰是将GRU应用于 过去14天用户行为这一间隔极其悬殊的序列 上

 

 

违反了RNN的使用前提;

 

训练起来,也会极其困难。当面对相同内容的输入序列,但是因为间隔不同而导致target不同, GRU/LSTM缺乏足够的信息来区分 。人都无法分辨,更何况机器。

 

 

RNN不是没有应用于推荐系统的先例,比如《Understanding Consumer Behavior with Recurrent Neural Networks》, 但是人家建模的是用户在一个session内部的行为序列 ,各行为之间间距相等的前提基本成立。但是DIEN用RNN建模过去2周的用户行为显然不属此例。要用RNN建模也不是不可以,比如将t步与t-1步之间的时间间隔也作为t步的输入,但是DIEN的论文中完全没有涉及。

 

第二个问题,是否有必要用时序模型来建模用户行为?

 

首先,用户行为肯定是一个时间序列,但是“先点击商品A”与”再点击商品B之间“是否有那幺强的时序关系? 用户行为毕竟没有人类语言那幺强的顺序关系 ,“我吃饭”就是人话,而“我饭吃”就没有意义,而我进入电子商城后,点击A后是点击B还是C,完全有可能是随心所欲(假设A/B/C同一屏)。用RNN这幺强的模型,有“牛刀杀鸡”之嫌,极容易overfitting。

 

其次,尽管建模时序关系, 会给人一种“没有损失信息”的完美感觉 ,但是, 故意摒弃一部分信息,反而可能带来更好的效果 。比如Youtube那篇着名的论文《Deep Neural Networks for YouTube Recommendations》,提到

 

Somewhat counter-intuitively, great care must be taken to withhold information from the classifier in order to prevent the model from exploiting the structure of the site and overfitting the surrogate problem

 

而在建模用户输入的搜索关键词时,是 故意抛弃了词与词之前的顺序关系 ,而只是建模成bag of words, “ By discarding sequence information and representing search queries with an unordered bag of tokens , the classifier is no longer directly aware of the origin of the label.”

 

带着以上的疑问,尽管DIEN在模型上好像很完美,论文声称的效果也不错,但是没有像DIN那样给我眼前一亮的感觉, 也不会成为我日后实现的首选 。

 

总结

 

总结一下,我对DIEN这篇论文评价并不高,在我看来,其完全无法与DIN那篇论文相比。回归到最基本的文章立意:

 

是否有必要在推荐系统中建模用户历史行为的时序关系? 在我看来,时序信息起码没有重要到“非加不可”的地步;

 

即使加, 使用RNN是否合适? 我的答案是不合适的,因为用户历史行为序列违反了“等时间间距”的前提。

 

但机器学习毕竟要靠实验结果说话的,怎幺看待论文中所声称的DIEN与其他模型相比的巨大性能提升?

 

借用《天下无贼》中的台词,“ 不是我能喝的,你就一定能喝 ”。阿里的数据+阿里的计算资源,造出个复杂的模型,得出比较好的结果,也不足为奇。接下来,可以把GRU改成LSTM, 再改成bi-directional LSTM, 再改成CNN,再改成CNN+LSTM,再改成Transformer, ……, 什幺attention, batch-normalization, dropout能加上的都给它加上,结果呢?可以参考DeepMind LipNet的经历,见《 工程设计+算法规模化真的是AI突破吗? DeepMind唇读系统ICLR遭拒 》。

 

现在推荐领域的深度学习论文越来越多了,各种NN,各种FM,让人眼花缭乱,目不暇接。这就需要我们在读论文时,更要加入自己的思考, 不仅要看作者写了什幺,更要注意作者没写什幺 ,方能提高自己,而不是迷失在论文海中。

 

神仙打架

 

DIEN作者朱小强的回复: 今 天才有时间好好拜读下这篇文章。 非常棒的思考和质疑,我觉得这是很好的习惯,当然要是再有一些实践就更好了。 先回答作者的问题: RNN是否合适,RNN为什幺不考虑时间间隔的因素,以及是否有必要用序列建模方法。

 

这些东西都是技术,背后的真正思考和出发点是如何充分利用淘宝上大量的用户行为数据, 淘宝活跃用户的行为长度远比大家想象的长 ,这些对模型效果提升巨大的数据是我们建模的思考中心。 DIN这种pooling式的方法在序列变长(超过100)后就会出现信息淹没 ,哪怕有attention也不行;GRU的方式比pooling好一些,但是直接GRU也是不太行的,我们在KDD版的DIN里面提到过原因,DIEN对GRU有不少细节的优化,同时引入辅助loss帮助学习、进一步用attention做兴趣投影也是关键点之一,这样下来我们获得了比DIN显着的提升。

 

注意这里面看起来模型复杂很多了,但技术的迭代是以实际大规模业务应用效果来度量,而不是模型看起来简洁漂亮,虽然我们也想做到。当然说到这应该能听出来, DIEN也还不是我们最理想的解法 ,用户行为是否能够按照通常的序列建模来,我们还没有定论,目前看部分work,这里面涉及的问题是 究竟合适的网络处理单元是什幺 ;时间间隔在建模中我们多次实验没什幺效果,估计也跟这种特殊的行为序列内在数据模式有关;此外100量级的用户行为序列长度还远不到我们理想的规模,这里面对algo和system的codesign设计是关键,我们会有新的工作出来。最后说一句,deep learning目前还是强实践驱动,不要被漂亮的结构所迷惑,最好亲自动手感知数据,我们的论文也只是在部分数据上适合,论文给大家share的也更多的希望是对问题分析和拆解的过程。期待作者对这种行为序列有进一步的思考,能够把这个领域再往前推进一步!

 

本文作者回复: 不得不承认,在没有(机会)充分实践的情况下,我的观点可能有失偏颇,结论武断了一些。 我强烈同意你的观点,实践是检验真理的唯一标准,特别是在机器学习、深度学习的领域。 能够提升线上性能,为公司带来收益,是判断方法、模型是否有效的最终标准。

 

特别是在拜读了你的《漫谈深度学习时代点击率预估技术进展》一文之后,我对一个观点印象深刻,现代CTR/推荐算法的发展趋势,正由“精细特征工程+大规模浅层模型”发展为“海量数据+大规模复杂深度学习模型”。(希望我理解得没错)

 

我承认这是事实,同时,也为我文中的偏颇之处找到了一些思想来源。我是从传统的机器学习走过来的,上课学的、老师教的,都是强调特征工程的重要性。工作了,面试、辅导新人,也强调要重视特征工程,不要过分神话深度学习。

 

所以面对深度复杂模型,内心深处抱着一种小小的、复杂的心态,就是偏爱简单模型,对复杂模型多少有些怀疑。加上在学校的时候,见惯了发文章灌水,总觉得大部分文章上的最新成果,实践起来,未必如文章中那样漂亮,反而不如简单的LR, GBDT实用。

 

所以,在实践过程中,往往抱着类似洋务运动时“中学为体,西学为用”的心态。像Wide & Deep,Wide很好了,再加上一点Deep,锦上添花就可以了。像DIN,也能在我能接受的“复杂”范围之内。而看到DIEN,双层GRU+Attention+MLP,初看上去,有点超过了我之前对“实用的复杂模型”的认知,从而产生怀疑(加上我对RNN本身就不太感冒)。

 

这种感觉,就像日本电影《最后的武士》。武士一辈子苦练十八般武艺,还产生了“道”这种精神上的追求,最终不敌他们之前鄙视的农民手中的新式火枪。

 

当然了,虽然我是处女座,但毕竟不是冥顽不化,只知道一味追求模型的完美。在拜读了你的大作之后,知道很多炕已经由贵团队踩过了,之后,我们就可以放心地在“海量数据+大规模复杂深度学习模型”亦步亦趋了。

 

更多最前沿的推荐广告深度CTR预估 方面 的 论文分享请移步如下的 GitHub项目进行 学习交流、star 以及 fork ,后续仓库会持续更新最新论文。

 

https://github.com/imsheridan/DeepRec

 

本文转载自公众号: 深度传送门,作者石塔西

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注