双塔模型

[[DSSM]]

user

离线建图 + [[Approximate Nearest Neighbor Search]]

  • 离线计算 item 的 embedding

双塔模型最后一层为什么都进行L2 Norm?

  • 为什么双塔要用cos距离?#card

    • 本质是因为点乘距离非度量空间,不满足三角不等式 ,距离比较没有传递性。更通俗的说内积不保序,假设有三个点ABC,点击意义下|A,B|<|A,C|,但是欧式距离下不一定有|A,B|<|A,C|,比如A=(100,0),B=(0,100),C=(101,0)。

    • 总结:双塔召回需要ANN,点积不保序一般使用欧式距离,双塔最上层归一化能将输入映射到欧式空间,保证了训练检索的一致性,提高了效果。

  • 双塔最上层为什么要归一化?#card

    • 双塔模型最终需要计算两个表示向量在表示空间中的夹角(余弦相似度),通过 L2 norm 后直接通过向量点积计算 cos 值,减少重复计算量

      • cosine(x,y)=xyxy\operatorname{cosine}(x, y)=\frac{x \cdot y}{|x| \cdot|y|}

      • L2 Norm $$\hat{x}=\frac{x}{|x|}, \quad \hat{y}=\frac{y}{|y|}$$

      • cosine(x,y)=xyxy=x^y^\operatorname{cosine}(x, y)=\frac{x \cdot y}{|x| \cdot|y|}=\hat{x} \cdot \hat{y}

    • 主流的向量匹配引擎,并不支持 余弦相似度 作为距离度量;只支持 向量内积 作为距离度量。

  • L2 norm 归一化后为什么要乘温度系数?#card

    • It is interesting to see the effect of temperature on performance, suggesting the necessity to carefully tune this parameter when normalization is applied

    • temperature 作用放大 logit

    • 对Temperature的第一层理解是把L2 norm后的值阈拉回Softmax的敏感激活范围。这样,向量取消了norm,模型专注于调整用户和物品的超平面夹角,模型稳定性得到了保证。

双塔训练方法 #card #depth-1

  • Pointwise:独立看待每个正样本、负样本,做简单的 二元分类 #card
    image.png

  • [[Pairwise 训练]] 每次取一个正样本、一个负样本

  • [[Listwise 训练]] 每次取一个正样本、多个负样本

Ref

作者

Ryen Xiang

发布于

2024-10-05

更新于

2025-04-15

许可协议


网络回响

评论