双塔模型的结构
相比于矩阵补充模型,双塔模型考虑了id之外的多种特征作为输入。
对于每个离散特征用单独的enbadding层得到向量,对于性别等类别较少的特征直接使用one-hot编码;对于连续特征,最简单的直接归一化,对于长尾分布的特征取log或做分桶等。
神经网络可以是简单的全连接网络,或更复杂的结构,例如深度交叉网络等。输出向量,即表征,用于召回。
余弦相似度范围 [-1 ,1],相当于对两个向量a b归一化然后求内积。
双塔模型的训练
pointwise: 把正样本和负样本组成一个数据集,在数据集上做随机梯度下降训练双塔模型;
pairwise: 每次取一个正样本和负样本组成一个二元组,损失函数用triplet hinge loss或者 triplet logistic loss;
listwise: 每次取一个正样本和多个负样本组成一个list,训练类似于多元分类。
pointwise训练
正负样本数量约定俗成
pairwise训练
正负样本embadding层使用一样的参数
m是超参数,可以调整,例如设置为1。训练就是最小化损失函数,用梯度更新双塔神经网络的参数,triplet hinge loss是一种损失函数;triplet logistic loss函数中的sigma是一个大于0的超参数,控制损失函数的形状,手动设置。
listwise训练:
鼓励正样本余弦相似度接近1,负样本都接近于-1。输入到softmax激活函数,输出分数s介于0-1之间。希望s+接近1,s-接近0,鼓励s接近y。用y和s的交叉熵-logs+作为损失函数,训练来最小化交叉熵,即鼓励softmax输出s接近标签y,也就是最大化s+。
总结:
这是粗排和精排,前期融合,将特征在神经网络之前就拼接融合,不适用于召回,适用于排序模型;召回使用双塔模型,是在最终输出相似度的时候才融合。