双塔模型:微软DSSM模型浅析

DSSM是一种深层结构语义模型,常用于搜索引擎和推荐系统的召回和粗排阶段,通过映射query和doc到语义空间并计算余弦相似度。在推荐系统中,DSSM采用双塔模型处理user和item特征。离线训练涉及用户和物品特征的concat、DNN处理及余弦相似度计算。线上预测时,使用Faiss进行近邻搜索。优化点包括减少User塔的重复计算和保持UserEmbedding与ItemEmbedding的一致性。文章讨论了正负样本选择策略和模型版本一致性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.背景

DSSM是Deep Structured Semantic Model (深层结构语义模型) 的缩写,即我们通常说的基于深度网络的语义模型,其核心思想是将query和doc映射到到共同维度的语义空间中,通过最大化query和doc语义向量之间的余弦相似度,从而训练得到隐含语义模型,达到检索的目的。DSSM有很广泛的应用,比如:搜索引擎检索,广告相关性,问答系统,机器翻译等。DSSM主要用在召回和粗排阶段。 在应⽤于推荐系统时,通过两个塔分别去建模user侧和item侧的embedding,计算embedding之间 的内积,最后⽤真实的label计算loss。

论文题目:《Learning Deep Structured Semantic Models for Web Search using Clickthrough Data》

2.DSSM模型结构

论文中的 DSSM的模型, 考虑一个搜索的场景, 在输入一个Query之后, 要在众多的Doc中寻找最为匹配的项, 那么此时如果将Query经过某种模型, 得到其向量表示, 再与Doc对应的向量进行相似度计算, 将相似度高的进行返回, 即可完成匹配。 主要是⽤来解决NLP领域语义相似度任务, 如果把document换成item或是⼴告,就演变成了⼀个推荐模型。

在这里插入图片描述

从模型上来看, x x x 是用来表示输入的term向量, y y y 是经过DNN后的输出向量;DSSM模型的整体结构中,Q代表Query信息,D表示Document信息。

  • Term Vector:表示文本的Embedding向量;
  • Word Hashing技术:为解决Term Vector太大问题,对bag-of-word向量降维;
  • Multi-layer nonlinear projection:表示深度学习网络的隐层;
  • Semantic feature :表示Query和Document 最终的Embedding向量;
  • Relevance measured by cosine similarity:表示计算Query与Document之间的余弦相似度
  • Posterior probability computed by softmax:表示通过Softmax 函数把Query 与正样本Document的语义相似性转化为一个后验概率

典型的DNN结构是将原始的文本特征映射为在语义空间上表示的特征。DNN在搜索引擎排序中主要有2个作用:

  • 将query中term的高维向量映射为低维语义向量
  • 根据语义向量计算query与doc之间的相关性分数

从推荐系统角度看DSSM模型:

在这里插入图片描述

双塔模型结构简单,一个user塔(用户侧特征–用户画像信息、统计属性以及历史行为序列等),另一个item塔(Item相关特征–Item基本信息、属性信息等),两边的DNN结构最后一层(全连接层)隐藏单元个数相同,保证user embedding和item embedding维度相同,后面相似度计算(如cos内积计算),损失函数使用二分类交叉熵损失函数。DSSM模型无法像deepFM一样使用user和item的交叉特征。

3.DSSM模型离线训练流程

召回阶段一般用到的特征有三种:

内容
user特征user ID、用户基础属性信息(性别、年龄、地域等)、用户画像信息、用户的各种session信息等等
item特征item ID、item基础属性信息(发布日期、作者ID、类别等)、item的画像、item创作者画像等等
上下文特征当前时间戳、手机类型、网络类型、星期几等等

离线训练双塔召回模型时,将user特征和上下文特征concat起来,作为user塔的输入。将item特征concat起来,作为item塔的输入。
双塔召回模型的离线训练步骤为:

  1. 将用户侧的特征concat起来,输入一个DNN网络中,最终得到一个user embedding;
  2. 将物品侧的特征concat起来,输入一个DNN网络中,最终得到一个item embedding;
  3. 拿user embedding与item embedding,做点积或cosine,得到logit,代表user和item之间的匹配程度;
  4. 设计loss训练模型,一般loss都选择weighted cross entropy loss或Focal loss,这些loss都是point wise方法。

双塔召回模型的线上预测步骤为:

  1. 离线刷可推荐item库得到item embedding,具体做法为:离线的、周期性的、批量的将item特征输入item塔,得到item embedding。把得到的item embedding导入Faiss中,建立索引。
  2. 线上实时得到用户的user embedding,具体做法为:当用户线上请求后,将user特征和上下文特征输入user塔,得到user embedding。
  3. 拿到的实时user embedding到Faiss中做近邻搜索(ANN),得到与user embedding相邻的Top N个item集合,作为召回内容返回。

4.思考

Q: DSSM 就一定适合所有的业务吗

  1. DSSM 是端到端的模型 ,虽然省去了人工特征转化、特征工程和特征组合,但端到端的模型有个问题就是效果不可控
  2. DSSM 是弱监督模型,因为引擎的点击曝光日志里 Query 和 Title 的语义信息比较弱。 大部分的用户进行点击时越靠前的点击的概率越大,而引擎的排序又是由 pCTR、CVR、CPC 等多种因素决定的。从这种非常弱的信号里提取出语义的相似性或者差别,那就需要有海量的训练样本

Q:DSSM模型做召回时的正负样本选择?

正样本:曝光给用户并且用户点击的item;

负样本: 从全量候选item中召回,而不是从有曝光的item中召回

召回负样本构造是一门学问,常见的负样本构造方法有( 摘自张俊林大佬文章,SENet双塔模型:在推荐领域召回粗排的应用及其它,关于负样本构造方法总结的非常棒 ):

  • 曝光未点击数据 导致Sample Selection Bias(SSB)问题的原因。我们的经验是,这个数据还是需要的,只是要和其它类型的负例选择方法,按照一定比例进行混合,来缓解Sample Selection Bias问题。当然,有些结论貌似是不用这个数据,所以用还是不用,可能跟应用场景有关。
  • 全局随机选择负例 就是说在原始的全局物料库里,随机抽取做为召回或者粗排的负例。这也是一种做法,Youtube DNN双塔模型就是这么做的。从道理上讲,这个肯定是完全符合输入数据的分布一致性的,但是,一般这么选择的负例,因为和正例差异太大,导致模型太好区分正例和负例,所以模型能学到多少知识是成问题的。
  • Batch内随机选择负例 训练的时候,在Batch内,选择除了正例之外的其它Item,做为负例。这个本质上是:给定用户,在所有其它用户的正例里进行随机选择,构造负例。它在一定程度上,也可以解决Sample Selection Bias问题。比如Google的双塔召回模型,就是用的这种负例方法。
  • 曝光数据随机选择负例 在给所有用户曝光的数据里,随机选择做为负例。这个我们测试过,在某些场景下是有效的。
  • 基于Popularity随机选择负例 全局随机选择,但是越是流行的Item,越大概率会被选择作为负例。目前不少研究证明了,负例采取Popularity-based方法,对于效果有明显的正面影响。它隐含的假设是:如果一个例子越流行,那么它没有被用户点过看过,说明更大概率,对当前的用户来说,它是一个真实的负例。同时,这种方法还会打压流行Item,增加模型个性化程度。
  • 基于Hard选择负例 它是选择那些比较难的例子,做为负例。因为难区分的例子,很明显给模型带来的loss和信息含量比价多,所以从道理上讲是很合理的。但是怎样算是难的例子,可能有不同的做法,有些还跟应用有关。比如Airbnb,还有不少工作,都是在想办法筛选Hard负例上。

新浪微博的实践经验(直接copy大佬原话):以上是几种常见的在召回和粗排阶段选择负例的做法。我们在模型召回阶段的经验是:比如在19年年中左右,我们尝试过选择1+选择3的混合方法,就是一定比例的“曝光未点击”和一定比例的类似Batch内随机的方法构造负例,当时在FM召回取得了明显的效果提升。但是在后面做双塔模型的时候,貌似这种方法又未能做出明显效果。

Q:User Embedding 与 Item Embedding 如何保持一致性?

由于双塔召回模型在Serving环节,主要包括异步Item刷库Serving和User Serving两部分,具体功能如下:
1.异步Item刷库Serving,主要通过刷库Item Serving捕获所有的item embedding,以异步的方式反复刷库,把得到的item embedding导入Faiss中,建立索引。为了保持版本的一致性,更新周期短即可。
2.User Serving,当用户请求推荐引擎后,获取该用户的user features,然后请求User Serving产出user embedding;同时,基于全库Item刷库的Embedding结果产出的Faiss索引服务做近邻搜索(ANN),召回Top N个item集合。
User Embedding是实时从线上服务的模型中产生的,线上服务的模型一定是最新版本的模型。而Item Embedding是周期性拿全量Item库刷线上服务模型得到,会出现有的Item Embedding是新的,有的是旧版的,版本不一致。
那在做近邻搜索(ANN)时,User Embedding会和部分Item Embedding版本一致,都是从一个模型中产生的,而其余部分Item Embedding版本是上一版模型导出的。这种版本的不一致就会导致召回结果的准确性降低!
线上实时得到User Embedding时,也会拿到当前服务模型的版本号,如果用Tensorflow导出模型的话,模型的版本号就是导出模型时刻的时间戳。Item Embedding导入到Faiss中建立索引时,也会对这个建立的Faiss索引库标上模型的版本号。
然后拿着带有模型版本号的User Embedding,到对应版本号的Faiss索引库中做近邻搜索(ANN),召回Top N个item集合。这个优化主要集中在工程上,优化难度也不大,主要就是能提升模型的在线收益。

Q:对于一个用户的一次Batch打分请求,User塔只计算一次

在线Serving打分阶段,一个Batch请求中包含一个用户的特征和多个item的特征。一般是将用户的特征复制Batch Size大小的次数,然后与每一个item的特征进行拼接,最后输入到双塔网络中计算user对每个item的打分。
这里有一个问题是:如果user塔的网络比较复杂或者用户特征非常多时,这种Serving打分的方式容易导致user塔的大量、重复计算。通常推荐系统中用户特征占比非常大,主要是用户的各种session特征及各种画像特征,而item的特征通常是一些属性特征和统计特征,占一个Batch请求包的很小比例。User塔的优化就是,对于一个用户的一次Batch打分请求,User塔只计算一次,在得到最终User Embedding后,复制batch size份。

​ 在线Serving时,每个Batch只有一个用户的所有特征且拿一次,这里不是拿一个用户的特征拿Batch Size次哦,所以在生成稀疏特征的Embedding和稠密特征时,我们只需要取第一行的Embedding数据和稠密特征数据就可以了,也就是用户的特征只过一次User塔,User Embedding只需要生成一遍,这样矩阵运算就可以优化为向量运算。在得到最终的User Embedding后,把User Embedding再复制为batch size的维度。经过这一步的优化,双塔模型在线Serving时的打分耗时及线上服务需要的机器资源都减少了许多。

5.总结

  • DSSM其核心思想是将query和doc映射到到共同维度的语义空间中,通过最大化query和doc语义向量之间的余弦相似度,从而训练得到隐含语义模型,达到检索的目的。
  • DSSM主要用在召回和粗排阶段。 在应⽤于推荐系统时,通过两个塔分别去建模user侧和item侧的embedding,计算embedding之间的内积,最后⽤真实的label计算loss。
  • user塔与item塔的DNN结构最后一层(全连接层)隐藏单元个数相同,保证user embedding和item embedding维度相同,后面相似度计算(如cos内积计算),损失函数使用二分类交叉熵损失函数。

本文仅仅作为个人学习记录所用,不作为商业用途,谢谢理解。

参考:https://blog.csdn.net/u012328159/article/details/123782735

资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 在心电信号处理领域,实验(一)“心电2”主要聚焦于心电图(ECG)信号的分析与处理。心电图是记录心脏电生理活动的重要工具,被广泛用于临床诊断和健康监测。本实验的核心内容分为两部分:一是模拟数据的使用,二是RST波的检测。 实验中使用的ECG.mat文件包含了心电图信号的模拟数据。在实际研究和教学中,模拟数据常被用来代替真实采集的数据,因为它们能够精确控制、重复生成,且便于开展各种假设性实验。这些模拟数据可能包含正常的心电信号波形,如P波、QRS复合波和T波,也可能包含异常情况,如心律不齐、早搏等。通过对这些模拟信号的分析和处理,可以深入理解心电图的基本特征,并学习如何提取有用信息,例如心跳周期、心率等。 peakdetect.m是Hooman Sedghamiz在2014年编写的RST波检测程序。RST波,尤其是QRS复合波,是心电图分析的关键部分,因为它标志着心脏心动周期中的一个关键阶段——心室激动。该程序采用基于状态机逻辑的算法,这种算法通常涉及一系列预定义的状态,每个状态对应于心电信号的不同特征或变化。通过这种方式,程序能够有效识别和定位QRS波群,从而计算出心率和其他相关参数。状态机方法在信号处理中具有良好的鲁棒性和适应性,能够处理不同质量和复杂性的ECG信号。在心电信号检测中,峰检测是一个核心步骤,它涉及寻找信号中的局部最大值。peakdetect.m可能包含了对信号平滑、阈值设定、波形匹配等预处理步骤,以减少噪声影响并准确捕捉到QRS波的起点和终点。这一过程对于识别异常心律、诊断心律失常至关重要。 在实验过程中,学生和研究人员可以利用ECG.mat数据和peakdetect.m程序进行以下实践操作:1. 加载并可视化心电图信号,了解其基本形态和特征;2. 运行peakdet
斑马 Zebra ZT410 是一款工业条码打印机,具有打印速度快、分辨率可选、连接方式多样等特点,适用于快递物流、服装、医疗等多个行业: 打印性能: 打印方式:支持热印和直热式热敏两种打印方式,可根据不同需求灵活选择。 分辨率:标准分辨率为 203dpi,还可选配 300dpi 或 600dpi,能满足不同精度要求的打印任务。 打印速度:最大打印速度可达 14ips(每秒 356 毫米),可快速完成大量标签打印工作。 打印宽度与长度:最大打印宽度为 4.09 英寸(104 毫米)。不同分辨率下打印长度不同,203dpi 时为 3988 毫米,300dpi 时为 1854 毫米,600dpi 时为 991 毫米。 内存配置:标配 256MB RAM 内存和 512MB 闪存,可存储大量标签格式和数据,确保打印任务的顺畅进行。 介质与碳带: 介质类型:支持连续纸、模切纸、有凹口的纸、黑标纸等多种介质。 介质尺寸:介质卷筒宽度(标签和底纸)为 1.00 英寸(25.4 毫米)至 4.50 英寸(114 毫米)(撕 / 切纸器),或 1.00 英寸(25.4 毫米)至 4.25 英寸(108 毫米)(剥离 / 回卷),非连续标签最大长度为 39 英寸(991 毫米)。 碳带规格:碳带标准长度为 450 米,宽度为 2.00 英寸(51 毫米)至 4.33 英寸(110 毫米),碳带墨面向外卷绕,也可选配墨面向内卷绕的碳带卷轴。 接口与连接:配备 USB 2.0、高速 RS-232 串行、10/100 以太网、蓝牙 2.1 等接口,还可选择并行接口,支持 ZebraNet 打印机服务器,能连接多种设备,实现便捷的数据传输和网络打印。 外观与结构:采用金属框架和具有超大透明视窗的两折金属介质盖,结构坚固耐用。侧面加载耗材路径,方便介质和碳带的装载。机身尺寸为 495
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值