【双塔模型DSSM】的原理与实现

news/2024/5/19 23:20:15 标签: 推荐算法

文章目录

  • 简介
  • 1 双塔模型的召回结构
    • 1.1 样本准备
    • 1.2 模型特征
    • 1.3 模型loss
    • 1.4 线上部署
  • 2 双塔模型的粗排结构
    • 2.1 样本准备
    • 2.2 模型特征
    • 2.3 模型loss
    • 2.4 线上部署
  • 参考文章

简介

DSSM 模型总的来说可以分成三层结构,分别是输入层、表示层和匹配层。双塔结构如下图所示:
在这里插入图片描述

DSSM的训练方式

  • Pointwise:独立看待每一个正样本、负样本,做简单的二元分类。
    在这里插入图片描述
  • Pairwise:每次取一个正样本,一个负样本。在这里插入图片描述
    (1)第1种loss:Triplet Hinge Loss
    在这里插入图片描述
    (2)第2种loss:Triplet Logistic Loss,这里 σ \sigma σ是控制loss函数形状的超参数。
    在这里插入图片描述
  • Listwise:每次取一个正样本,多个负样本。
    在这里插入图片描述
    这里 s s s表示softmax输出的预测值, y y y表示正负样本的标签。
    在这里插入图片描述

1 双塔模型的召回结构

召回模型一般是特征后融合。
在这里插入图片描述

一个被实践的召回模型的实例:
在这里插入图片描述
如图所示,其中:

  1. x x x为(user,上下文)的特征, y y y为(item)的特征;
  2. u ( x ) u(x) u(x)表示(user,上下文)最终的Embedding向量表示, v ( y ) v(y) v(y)表示(item)最终的Embedding向量表示;
  3. < u ( x ) , v ( y ) > <u(x), v(y)> <u(x),v(y)>表示(user,上下文)和(item)的余弦相似度(或者 点积),如下式。
    R ( u , v ) = c o s i n e ( u , v ) = u T v ∣ ∣ u ∣ ∣    ∣ ∣ v ∣ ∣ R(u,v) = cosine(u,v) = \frac{u^T v}{||u||\; ||v||} R(u,v)=cosine(u,v)=∣∣u∣∣∣∣v∣∣uTv

在推荐系统中,一般左侧为User Tower,右侧为Item Tower,因此称之为双塔模型。

优点

  1. 该结构对工业界非常友好,两个子网络产生的embedding向量可以独自获取以及缓存;
  2. 两个塔可以分别对user和item建模,可拓展性强,使用灵活。

缺点

  1. 该结构进行的是特征后融合,即user和item仅在最后softmax才产生交互

1.1 样本准备

用户链路:曝光-点击-下载-购买。
正样本:曝光&&下载

负样本为什么不能是 曝光&&未下载?
如果只是曝光未下载当做负样本的话,那训练样本分布就和精排无异了,但实际上精排的样本是经过召回粗排等层层筛选过的,而召回面对的是庞大的物料库。所以,如果只是用曝光未下载当做负样本那线上线下的的样本分布就不一致了。

负样本如何选择?
(1)随机采样物料库作为负样本
大部分实验采用随机采样物料库作为负样本。这样能保证召回模型中存在不同的物料。
(2)参考word2vec中的负采样方法
采样概率应该与物料出现频率相关。当高频物料作正样本时,要降采样;当高频物料作负样本时,要适当过采样。这样可以抵消高频物料对正样本集的绑架,同时也保证低频物料在负样本集的出现机会。
(3)在batch内随机采样
考虑工程复杂度,这是工程实现中最常用的方案。
针对每条正样本,在每个batch内采样m个负样本。

注意:这里有一个点需要注意,如果你的物料比较少,且头部效应比较明显,这种情况下在batch随机采样为负样本很有可能采样到正样本当做负样本,所以是不适合该方案的。这种物料足够少的情况下,物料大部分都出现过,甚至没必要进行负采样。

P.S.:在(3)的基础上,还有 a.丢弃重采样; b.伪负样本反转;c. 伪负样本反转&&伪负样本赋权

1.2 模型特征

在这里插入图片描述

1.3 模型loss

一般采样方法是在batch内随机采样,针对每条正样本,在每个batch内采样m个负样本。所以最终选用的是softmax的交叉熵损失函数,即交叉熵(softmax®)
在这里插入图片描述

1.4 线上部署

DSSM的召回分为u2i、u2i2i、i2i等等召回。这里以u2i召回举例说明。

在做DSSM的u2i召回时,考虑到用户量在亿级别,item在18w级,用户量庞大而物料库比较小,所以这里u2i的整体思路是用户向量在线生成,而物料库向量离线生成,线上生成的向量再用faiss与离线item embeding计算点积生成候选集。

(1)用户向量如何在线生成

双塔模型的两个塔结构时完全分离的,所以这里把user和item两个塔的模型分别输出,方便后续使用user模型线上生成用户向量。

(2)物料库向量如何生成

这里我们需要先构造包含所有物料的测试数据集(可以伪造一个用户信息和上下文信息,然后拼接物料库所有item数据来构造),然后predict测试集的时候输出物料塔的最后一层隐向量当做物料embeding。

2 双塔模型的粗排结构

粗排模型一般是特征前融合。
在这里插入图片描述

一个被实践的粗排模型的实例:
在这里插入图片描述

2.1 样本准备

粗排的样本分布一般与精排保持一致。
正样本:曝光&&下载
负样本:曝光&&未下载

2.2 模型特征

在这里插入图片描述

2.3 模型loss

一般采样方法是在batch内随机采样,针对每条正样本,在每个batch内采样m个负样本。所以最终选用的是softmax的交叉熵损失函数,即交叉熵(softmax®)
在这里插入图片描述

2.4 线上部署

在做DSSM粗排粗排时,具体来说:

(1)用户塔模型和物料塔模型按天/时生成,部署线上

双塔模型的两个塔结构是完全分离的,所以这里把user和item两个塔的模型分别输出,部署线上,方便后续生成user向量和item向量。

(2)粗排如何产生候选集

DSSM拿到召回结果后,分别从user塔模型生成user embedding,item塔模型生成item embedding,然后两个embedding做点积,产出 T o p K TopK TopK候选集。

参考文章

推荐系统中不得不说的 DSSM 双塔模型
美团-对偶增强的双塔模型(DAT)
DSSM在召回和粗排的实践总结


http://www.niftyadmin.cn/n/5048765.html

相关文章

[补题记录] Atcoder Beginner Contest 321(E)

URL&#xff1a;https://atcoder.jp/contests/abc321 目录 E Problem/题意 Thought/思路 Code/代码 E Problem/题意 有一颗 N 个节点的完全二叉树&#xff0c;现在给出节点 X&#xff0c;一个整数 K&#xff0c;问举例节点 X 的长度为 K 的点有多少个&#xff1f; Thoug…

新建vue-element项目

创建vue项目 快速上手 | Vue.js npm create vuelatestcd <your-project-name> npm install npm run dev 构建生产包&#xff1a; npm run build 安装Chrome插件&#xff1a; https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbled…

【Python入门教程】Python实现猜数字小游戏

今天跟大家分享一下很久之前自己做的一款猜数字小游戏&#xff0c;基本的循环判断语句即可实现&#xff0c;可以用来当练手或者消磨时间用。 大家在编代码的时候最重要就是先理清逻辑思路&#xff0c;例如应该套几层循环、分几个模块等等。然后在编码时可以先随意一点&#xff…

客户端负载均衡_负载均衡策略

以前的Ribbon有多种负载均衡策略 RandomRule - 随性而为 解释&#xff1a; 随机 RoundRobinRule - 按部就班 解释&#xff1a; 轮询 RetryRule - 卷土重来 解释&#xff1a; 先按照RoundRobinRule的策略获取服务&#xff0c;如果获取服务失败则在指定时间内会进行重试。 Weigh…

数据中心与数据仓库的区别

在数字化时代&#xff0c;数据已经成为企业竞争的核心资源&#xff0c;数据处理和数据管理也变得越来越重要。在数据处理方面&#xff0c;数据中台和数据仓库是两种常见的数据处理方式&#xff0c;它们有着不同的特点和适用场景。本文将从技术角度对数据中台和数据仓库的区别进…

spring security教程(一)--认证

零.简介 【1】简介 【2】登录校验流程 【3】原理&#xff08;入门的时候先了解一下就好&#xff09; 一.思路分析 二.建表 确保你已经建立好一张用户表&#xff0c;并且引入springboot&#xff0c;mybatis&#xff0c;mp,slf4j等基础依赖。 即使你有多个角色你也可以将他们的…

leetcode周赛 2859. 计算 K 置位下标对应元素的和

题目所属分类 二进制中1的个数 相关的集合结论 原题链接 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 请你用整数形式返回 nums 中的特定元素之 和 &#xff0c;这些特定元素满足&#xff1a;其对应下标的二进制表示中恰存在 k 个置位。 整数的二进制表示中的 …

大数据(九):数据可视化(一)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对…