分享
双塔交互
输入“/”快速插入内容
双塔交互
飞书用户7782
飞书用户5993
9月18日修改
双塔结构在面对大规模物料库时,能够保证线上快速serving,但也存在一些问题:
•
user信息只能喂入user tower, item信息只能喂入item tower,没有地方喂入user & item之间的交叉特征
•
user侧信息与item侧信息,
只有唯一一次交叉机会
,就是在双塔生成各自的embedding之后的那次点积或cosine。
但是这时参与交叉的user/item embedding,已经是高度浓缩的了。一些细节信息已经损失,永远失去了与对侧信息交叉的机会
。
•
为了线上快速serving,交叉只能是简单的dot或cosine。一些复杂的、依赖于底层信息的交叉结构,比如target item对user action history的attention,也在双塔中找不到位置。
可以看出,双塔最突出的两个特点是:
1.
候选集空间大,可以保障线上快速serving;(优势)
2.
双塔分离,模型表达能力弱(劣势)
所以,双塔改建最重要的一条主线就是:
如何保留更多的信息在tower的final embedding中,从而有机会和对侧塔得到的embedding交叉?
1.
『双塔重地 闲人免进』
这一方案的出发点是,
弱化甚至过滤掉原始特征中的噪声,从而减少信息在塔中传播过程中的污染与损耗
,
1.1
SENet:输入特征权重动态调整
•
新浪微博 RecSys'19的论文:FiBiNET: combining feature importance and bilinear feature interaction for click-through rate prediction
•
主要亮点是在CTR模型引入了CV领域的SENET来动态根据重要度选择特征。SENET输入是feature embedding,输出也是embedding。
◦
Squeeze:对每个特征组中的embedding向量进行统计汇总,
◦
Excitation:基于上一步得到的统计向量,学习每个特征域的重要度
◦
Re-weight:利用Excitation操作得到的特征重要性权重来对原始的特征组embedding向量重新赋权,
微博的SENET是应用到精排模型的,召回阶段的双塔也是一样。在底层信息喂入塔之前,通过SENET动态学习各特征的重要性,弱化甚至过滤掉原始特征中的噪音,让重要信息一路通畅到达塔顶。
1.2
ResNet
类似ResNet的思路,将重要信息直接保送到塔顶。方法简单,但会存在几个问题