[推荐]双塔模型(介绍)

个人总结

其核心思想是通过两个独立的神经网络(用户塔和物品塔)分别处理用户和物品的特征,最终通过相似度计算实现匹配或召回任务。

用户侧和物品侧的特征分别经过各自的深度神经网络(DNN)处理后,得到用户嵌入(user embedding)和物品嵌入(item embedding),然后通过相似度计算(如内积或余弦相似度)来评估用户和物品之间的匹配程度‌.

2个塔, 2个深度神经网络.

左边用户塔user, 右边物品塔item

用在召回阶段, 而不是排序阶段

计算2个向量的相似度来打分, 根据分数的高低, 从而进行召回.

一、什么是双塔模型?

双塔模型(Dual Tower Model)是一种基于深度学习的两分支神经网络架构,其核心特点是两个独立的编码器网络("塔")分别处理两种不同类型的数据,最后在向量空间中进行相似度计算。

基本架构

 
css
体验AI代码助手
代码解读
复制代码
        左塔(用户侧)          右塔(物品侧)
         ↓                       ↓
    [编码器网络]             [编码器网络]
         ↓                       ↓
    [用户向量u]                [物品向量v]
         \                     /
          \                   /
           ↘  相似度计算  ↙
            [匹配分数]

二、核心特点

  1. 对称/非对称双塔

    • 对称双塔:两个塔结构相同(如Siamese网络)
    • 非对称双塔:根据输入特征不同设计不同的网络结构
  2. 解耦合设计

    • 两个塔独立处理各自的特征
    • 只在最后的向量层进行交互
  3. 向量化检索

    • 将实体映射到统一的向量空间
    • 通过向量相似度进行匹配

三、主要应用场景

1. 推荐系统(最主要应用)

  • 用户-物品匹配:左塔处理用户特征,右塔处理物品特征
  • 召回阶段:从百万/千万级候选集中快速筛选出几百个候选
  • 典型应用
    • YouTube推荐:2016年论文《Deep Neural Networks for YouTube Recommendations》
    • 新闻推荐、电商商品推荐、短视频推荐等

2. 信息检索与搜索

  • 查询-文档匹配:左塔编码查询query,右塔编码文档
  • 语义搜索:超越关键词匹配,理解语义相似性
  • 广告检索:查询与广告的匹配

3. 自然语言处理

  • 句子相似度计算:两个文本编码器
  • 问答匹配:问题与答案的匹配
  • 对话系统:对话上下文与回复的匹配

4. 计算机视觉

  • 图像-文本检索:CLIP模型(图像编码器+文本编码器)
  • 跨模态检索

5. 其他场景

  • 药物-靶点匹配:生物信息学领域
  • 求职匹配:简历与职位的匹配

四、为什么使用双塔模型?

优势:

  1. 高效检索

    • 物品向量可以离线计算并存储
    • 在线服务时只需计算用户向量,然后做向量相似度检索
    • 支持近似最近邻搜索(ANN),实现毫秒级响应
  2. 可扩展性

    • 新增物品只需计算其向量,无需重新训练整个模型
    • 适合大规模动态更新的候选集
  3. 灵活性

    • 两个塔可以根据数据类型独立设计
    • 支持多模态输入(文本、图像、行为序列等)
  4. 缓解冷启动

    • 通过特征工程,可以处理新用户/新物品

劣势:

  1. 特征交互不足

    • 用户user和物品item特征在早期就分离,缺乏细粒度交叉
    • 不适合精细排序(通常用于召回,排序阶段用更复杂的模型)
  2. 信息损失

    • 压缩到低维向量会损失信息

五、技术实现细节

1. 特征工程

 
体验AI代码助手
代码解读
复制代码
用户塔特征:
├── 用户画像特征(年龄、性别、地域)
├── 历史行为序列(点击、购买历史)
├── 实时行为特征(最近点击)
└── 上下文特征(时间、设备)

物品塔特征:
├── 物品属性(标题、类目、价格)
├── 内容特征(文本描述、图像特征)
├── 统计特征(点击率、销量)
└── 嵌入特征(预训练的ID嵌入)

2. 相似度计算方式

  • 点积:score = u·v
  • 余弦相似度:score = (u·v)/(||u||·||v||)
  • 带温度系数的softmax:score = exp(u·v/τ)

3. 损失函数

  • 多分类softmax损失(采样负样本)
  • Triplet Loss
  • 对比学习损失(如InfoNCE Loss)
  • BPR损失(贝叶斯个性化排序)

4. 负样本采样策略

  • 随机负采样
  • 批量内负采样(In-batch Negative)
  • 困难负样本挖掘(Hard Negative Mining)
  • 曝光未点击作为负样本

六、工业实践案例

YouTube双塔召回模型

  1. 用户塔

    • 输入:观看历史序列、搜索历史、人口统计特征
    • 结构:Embedding + MLP + 特征交叉
  2. 视频塔

    • 输入:视频ID、频道ID、视频主题
    • 结构:Embedding + 平均池化
  3. 训练

    • 任务:预测用户下一个观看的视频
    • 负样本:随机采样+流行度加权
  4. 服务

    • 离线:预计算所有视频向量存入向量数据库
    • 在线:计算用户向量,ANN检索Top-K

七、最新演进方向

  1. 多兴趣双塔:为用户生成多个兴趣向量
  2. 序列建模增强:使用Transformer等捕获长序列依赖
  3. 跨塔信息交互:在早期引入轻量级交叉
  4. 多任务学习:同时优化多个相关目标
  5. 与图神经网络结合:融入社交关系、知识图谱

八、典型架构示例

 
python
体验AI代码助手
代码解读
复制代码
# 简化版伪代码
class DualTowerModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.user_tower = nn.Sequential(
            nn.Embedding(user_vocab_size, 256),
            nn.Linear(256, 128),
            nn.ReLU(),
            nn.Linear(128, 64)  # 用户向量
        )
        
        self.item_tower = nn.Sequential(
            nn.Embedding(item_vocab_size, 256),
            nn.Linear(256, 128),
            nn.ReLU(),
            nn.Linear(128, 64)  # 物品向量
        )
    
    def forward(self, user_features, item_features):
        user_vec = self.user_tower(user_features)
        item_vec = self.item_tower(item_features)
        # 计算相似度
        score = torch.matmul(user_vec, item_vec.T)
        return score

总结

双塔模型是大规模推荐/检索系统的基石性架构,以其高效的向量化检索能力良好的可扩展性在工业界得到广泛应用。虽然它在精细特征交互方面存在局限,但作为召回阶段的解决方案,其在性能与效率的平衡上具有不可替代的优势。随着技术的发展,双塔模型也在不断演进,融合更多先进技术以适应更复杂的业务需求。


作者:import_random
链接:https://juejin.cn/post/7586942589321592868
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

posted on 2026-01-16 11:43  ExplorerMan  阅读(0)  评论(0)    收藏  举报

导航