正文开始之前,先声明两点:
双塔的模型结构很简单,
综上所述,我们发现双塔模型最大的特点就是“双塔分离”。只不过“部署时分离”成了双塔最大的优点,而“训练时分离”成了制约双塔性能的最大因素。
综上所述,“双塔分离”的结构,既是保障线上快速serving的优点,也是不能使用交叉特征与结构、导致两侧信息交叉过晚、制约模型表达能力的最大缺点。“线上快速serving”正好对召回、粗排这种“大候选集”场景的胃口,而由于后面还有能力强大的精排,所以“模型表达能力弱”的缺点,也能够为召回、粗排所容忍。因此,双塔模型成为召回+粗排的主流模型,几乎是粗排的不二选择。
但是,你也知道,互联网人追逐OKR的脚步是永无停歇的。在“做大做强,再创辉煌”的口号激(nei)励(juan)下,说好的可容忍的“表达能力弱”变得面目可憎,卷起来的互联网人从来不做选择,“线上快速serving的能力”与“强悍的模型表达能力”,我都要!!!
综上所以,双塔最大的缺点就在于,user&item两侧信息交叉得太晚,等到最终能够通过dot或cosine交叉的时候,user & item embedding已经是高度浓缩的了,一些细粒度的信息已经在塔中被损耗掉,永远失去了与对侧信息交叉的机会。所以,双塔改建最重要的一条主线就是:如何保留更多的信息在tower的final embedding中,从而有机会和对侧塔得到的embedding交叉?围绕着这条主线,勤劳的互联网打工人设计出很多的改进方案。
这种思路以张俊林大佬的SENet为代表。既然把信息“鱼龙混杂”一古脑地喂入塔,其中的噪声造成污染,导致很多细粒度的重要信息未能“幸存”到final dot product那一刻。SENet的思路就是,在将信息喂入塔之前,插入SEBlock。SEBlock动态学习各特征的重要性,增强重要信息,弱化甚至过滤掉原始特征中的噪声,从而减少信息在塔中传播过程中的污染与损耗,能够让可能多的重要信息“撑”到final dot product那一刻。
信息在塔中向上流动的过程,也是一个信息压缩的过程,不可避免地带来信息损耗。所以,我们很自然地想到,何不让那些重要信息抄近路,走捷径,把它们直接送到离final dot product更近的地方。
提到抄近路,大家自然而然地想到ResNet,如下图所示。
抄近路的思路确定了,那么抄近路的方式,就五花八门,多种多样了。比如除了原始输入能够抄近路,塔中间的一些信息是不是也能抄一把?比如下图模样(BTW,有谁知道logo的出处吗?如果知道,咱俩除了调参炼丹,就有了另一个共同爱好^_^);既然信息在塔中流动过程中就已经损失了,重要信息没必要等到最后一刻再补充,补充到中间层也会大有帮助,就像马拉松选手的中途补水。
但是,这种抄近路的方式,也有其固有的缺点,就是会导致输入层的肿胀。比如原来tower final embedding是64维,你现在要将一些重要的、细粒度的信息也抄近路到最后一层。既然称这些信息是细粒度的,自然是未经过压缩提炼的,维度一般都很大,比如1024维。如果你将原来tower embedding与抄近路信息简单拼接,那么final embedding就会膨胀好几倍,会给线上存储、内存都带来巨大的压力。当然你可以将抄近路的信息,经过一层简单的线性映射,压缩到一个比较小的维度,但这也会引入额外的映射权重,严重时会导致训练时OOM。
所以,将所有原始信息无脑地抄近路,显然是行不通的。这就牵扯到另外一个问题:哪些信息值得抄近路?要回答这个问题,你当然可以跑一个SE block或其他什么算法,获得各特征的重要性。而从我的个人经验来看,我们要特别注意那些“极其个性化”(e.g., userId, itemId)的特征,和,对划分人群、物群有显著区分性的特征(e.g., 用户是新用户还是老用户?用户是否登陆?文章所使用的语言,等)。
这一思路有两个出发点:
这种思路的典型代表,就是腾讯的并联双塔,“通过并联多个双塔结构增加双塔模型的宽度,来缓解双塔内积的瓶颈从而提升效果”
另外,涉及到并联双塔训练细节的是,
这种“多塔”思路的另一个代表,来自Facebook的今年最新论文《Que2Search: Fast and Accurate Query and Document Understanding for Search at Facebook》。这篇文章可以算是Facebook 2020年经典论文《Embedding-based Retrieval in Facebook Search》的后继。对比两篇论文的结构图,可以清晰看到“拆一个大塔为若干小塔”的思路变化。在Que2Search中,不同信息通过不同通道向上传递,比如country这样的categorical特征直接embedding,而文本信息则通过XLM。不同通道得到各自的embedding,再融合(fusion)生成final embedding,与对侧塔得到的final embedding计算cosine similarity。
而在融合多塔embedding生成final embedding时,Que2Search也提出Simple Attention Fusion方案,并通过实验证明,比传统的concatenation+mlp方案有效。Simple Attention Fusion的方案如下图所示,其中 表示第i个通道得到的embedding, 'f'是各通道融合后的final embedding。
这种"多塔各自embedding + Attention Fusion"的方案,在淘宝的《Embedding-based Product Retrieval in Taobao Search》也有所体现。以user embedding " "为例
之前的几种双塔改建方案,都是针对传统双塔“交叉太晚”这一缺点,目标是让更多有效信息“幸存”到final embedding里,“撑”到final dot product那一时刻,并通过净化输入、重要信息走捷径、拓宽信息上升通道等手段来实现这一思路。以上都是“亡羊补牢”的作法,也就是承认双塔就是交叉太晚,然后想方设法减轻这一缺点带来的信息损失。而美团在2021 KDD上发表的最新论文《A Dual Augmented Two-tower Model for Online Large-scale Recommendation》则选择和“交叉太晚”这一难题正面硬刚。我没有复现并尝试美团的思路,不过,我的确觉得这是一个非常有意思的想法,值得借鉴。
美团的“对偶增强双塔”的出发点是:
具体实现简单描述如下。要了解详情的同学,请移步美团的原文
通过以上方式,“对偶增强双塔”中的每个塔,学习到了对侧信息,并将其作为本侧塔的底层输入,从而使双塔之间从底层就发生交叉。
其实,美团的这种方式,有点蒸馏学习的味道。另外,要将“与某用户/物料交互过的物料/用户信息作为特征”,恐怕也不必这么麻烦,只要将user action list中的item id先embedding再pooling就可以。但是,真正有意义的是美团这种"让双塔相互深情对视"的创新思路,对我有非常强的借鉴意义,未来或许用得上。
如前所述,双塔模型的最大缺点就在于由于双塔分离,造成不能使用任何交叉特征和交叉架构,使得模型表达能力大打折扣。既然召回、粗排“苦双塔久矣”,何不鼓起勇气,大声和双塔说再见?
又是阿里妈妈一马当先,引领了这一波“去双塔”的潮流。阿里妈妈先是用TDM让召回告别了双塔,又用COLD+FSCD拉开了粗排向双塔告别的序幕。阿里的粗排算法,简单概括之,就是“粗排=特征筛选+精排”。而且遵循两步走策略:先训练一个模型,通过正则,筛选出“表达能力+计算耗时”性价比高的特征;再用筛选出的特征,训练出一个能够使用交叉特征+交叉结构的模型,用于粗排。以上只是我对原理的概括,欲了解详情,请移步阿里论文的原文。
那是不是说,现在我们就可以和“双塔”说bye bye了?正如歌中所唱的那样,“现在说再见还为时太早”。
本文是我和双塔模型死磕了6个月之后的心得体会。如前文所述,双塔分离,既是保障线上快速serving、以适应召回+粗排场景的优点,也是不能使用交叉特征与结构、导致两侧信息交叉过晚、制约模型表达能力的最大缺点。user&item两侧信息交叉得太晚,等到最终能够通过dot或cosine交叉的时候,user & item embedding已经高度浓缩,一些细粒度的信息已经在塔中被损耗,永远失去了与对侧信息交叉的机会。
为了克服这一缺点,业界同仁设计出许多改进方案。这些方案背后有一个共同的思路,就是减少信息沿塔上升过程中的损耗,让更多细粒度的重要信息能够“幸存”到final embedding中,能够“撑”到final dot product那一刻。然后我分析了Facebook、阿里、腾讯、新浪、美团等中外大厂的工作,看看我的中外同仁们如何从“净化输入”、“重要信息走捷径”、“拓宽信息上升通道”、“双塔相互模仿”等方面实现了这个思路,克服双塔的缺点,提升其性能。
正如我之前经常论述的“道”与“术”,“了解双塔的缺点,知道从哪里改进”是“道”,“怎么改进”是“术”,深刻理解“道”之后,才能将各大厂的“术”综合运用,甚至创造你自己的“术”,提升你自己模型的性能。比如,如果美团方案中的对偶增强向量真的那么重要,那么不将它们接入DNN最底层,而是直接抄近路到塔的最后一层,离final dot-product更近,是不是效果更佳?至于是否是这样,就要等GPU和AB平台告诉我们了。
最后,我也指出,尽管阿里妈妈已经在召回+粗排领域告别了“双塔”,但是现在和双塔彻底告别还为时过早,“双塔”模型仍然是我们广大算法同仁手中得心应手的一件兵器,你值得拥有。
回归之后的第一篇就这样写完了,啥时候写下一篇呢?写点啥呢?对了,问一下知乎的运营同学,我的“返航专属礼盒”怎么还没寄到?
- END -
由于微信公众号试行乱序推送,您可能不再能准时收到机器学习与推荐算法的推送。为了第一时间收到机器学习与推荐算法的干货, 请将“机器学习与推荐算法”设为星标账号,以及常点文末右下角的“在看”。