共计 656 个字符,预计需要花费 2 分钟才能阅读完成。
dssm双塔召回算是召回模型的经典之作,就是到现在也是广泛在应用,研究dssm网络的改进也是大有人在,今天写的这篇senet就是改进的其中的一个方法。
首先要看下经典的dssm网络
这个网络计算用户与item之间的关系是在最后一层。
这个网络结构天然的隔绝了用户侧与物料侧前期特征的交叉过程,只有在最后一层生成等长的dense输出做相似度计算。那么在dnn阶段,可能会丢失很多有用的信息。这些年从人工组合特征到模型自动交叉,这一步步都说明特征交叉的重要性,但是现在却实打实的分开了,这不免会丢失很多有用的信息。
senet的出现是尽可能在原始特征输入到dense输出向量保留更多的有效的信息。
看上述的senet的结构图,主要拆分为两部分:
- squeeze:这个步骤就是讲embedding 求平均变为1维,比如你有十个特征,那么对应的embedding压缩后变成10维的变量
- excitation:简单的通过两层mlp输出指定的dense,这个输出的大小与输入的特征个数有关,比如你的特征有4个,那么mlp输出维度为4 ,然后与原始的embdding相乘累加,看起来就是attention 的意思,无非就是算权重的方式不一样
在上面的描述之后可以得到给予senet的网络结构:
其实到这里发现senet也不是很复杂,不过思路真的很好,自底向上想要尽可能的保留更多的信息用于用户和物料的交叉。因为要做embedding累加,所以要求查表的embedding维度都是一样的,比如都指定是32维。
关于dssm的改进还有很多,这只是其中一种。
正文完
请博主喝杯咖啡吧!