DSSM在召回和粗排的应用举例
0.写在前面的话
DSSM(Deep Structured Semantic Models)又称双塔模型,因其结构简单,在推荐系统中应用广泛;下面仅以召回、粗排两个阶段的应用举例,
具体描述下DSSM在工业界实践的一些所见所闻,力求自身和大家都能有所收获。
1.网络结构
paper:Learning Deep Structured Semantic Models for Web Search using Clickthrough Data
example:DSSM召回模型
原始的DSSM是在搜索CTR预估任务,大概分为:1)embedding层 2)MLP层 3)cosine相似度logit 4)softmax层;其中Q代表搜索词(用户),D1,2,...,n为检索文档(物料) 。
如果将最左侧看作一个塔,并称为用户塔;那右侧就可以称为物料塔(或者物料塔1,2,...,n);双塔,多塔架构由此得来。
1.1 tanh激活函数与ReLU激活函数
注意DSSM是用的tanh激活函数
2.召回应用
自然能想到,将用户最近点击,消费,转化等的数据采集后作为正样本;采样些全局最热但未点击(Youtube负采样套路)作为负样本构造样本训练DSSM模型进行推荐召回。
DSSM在预测的时候就可以借助Faiss进行异步物料向量更新,加载模型后可以根据实时用户行为进行ANN检索(求Topk相似向量)。
下图为视频 | 深度学习在美图个性化推荐的应用实践 中DSSM召回线下训练,线上serving的整体架构图。
当然DSSM只是一种架构,上面模型结构只是其中一个示例;实际user feature,item feature可以有多种多样建模方式,负样本采样、以及sigmoid还是softmax loss等等都是可以探索的地方。
3.粗排
如果说DSSM召回是用户物料表征的精耕细作,那DSSM粗排就是学习精排序的算力优化。
下面是全民K歌推荐分享 中粗排的引入:大概总结就是将多路召回结果在进入精排前引入粗排阶段,在性能约束的情况下学习精排的排序结果,初筛出精排能处理的结果集。
下面是全民K歌推荐分享 的两个演进:
承上启下,上面DSSM的两个优化点都借助于模型蒸馏,其一softmax中加入temperature(即参数T),可以起到平滑/尖锐softmax输出的作用;
T越大,结果越平滑,得到的概率分布更“平滑”;相应的T越小,得到的概率分布更“尖锐”,这就是T的作用。更详细的计算可以参考:SoftMax温度系数temperature parameter;
其二引入Teacher-Student架构进行蒸馏,下面是增加了优势特征(Privileged Features)蒸馏的架构图:
教师网络训练的同时,异步更新学生网络,减少训练时长;线上serving时,仅部署student网络进行前向推断。这样就可以同时训练复杂模型,和提供轻量的线上预估模型。
粗排中的优势特征:
有一些交叉特征是对粗排效果影响明显的,比如用户(u_i)在过去24个小时内在待预估商品类目(cate_j)下的点击次数。但是复杂的交叉特征会增加线上的推理延时,所以不能作为常规特征来训练。于是交叉特征就成为了粗排阶段的优势特征。
关于Point2中的公式说明:
X表示普通特征,X*表示优势特征,y表示标签,L表示损失函数;下标s表示student,d表示distillation,t表示teacher。
4.写在后面的话
上面的介绍仅是从dssm角度总结了召回,排序的一些工作;实际dssm导出的用户向量,物料向量还可衍生出很多著名的召回(读者可以想想上一篇ucf变种); 同时整个排序架构特征更新、样本拼接,模型更新等都由于篇幅有限没有详细说明,那下一篇文章想和大家一起总结回顾下近年来排序模型及架构的主要演进。
DSSM在召回和粗排的应用举例的更多相关文章
- L2R 一:基础知识介绍
一.背景 l2r可以说是搜索推荐里面很常用的知识了,一直处于一知半解的地步,今天开个博客准备把这些零散的东西系统性整理好,一版就粗糙点了. 二.粗概 前段时间的项目主要和搜索引擎相关,记录下搜索引擎的 ...
- 广告召回 Query-Ad Matching
小结: 1.最为基础的召回链路就是要保证召回层的相关性,但是相关性高的广告并不一定具有很高的商业价值,所以开始尝试将一些商业化业务指标作为召回的依据 百度凤巢新一代广告召回系统--"莫比乌斯 ...
- 牛亚男:基于多Domain多任务学习框架和Transformer,搭建快精排模型
导读: 本文主要介绍了快手的精排模型实践,包括快手的推荐系统,以及结合快手业务展开的各种模型实战和探索,全文围绕以下几大方面展开: 快手推荐系统 CTR模型--PPNet 多domain多任务学习框架 ...
- 计算广告(4)----搜索广告召回(也叫match、触发)
一.搜索广告形态 1.特征工程 特征主要有用户画像(user profile).用户行为(user behavior).广告(ad)和上下文(context)四部分组成,如下所示: 2.平台算法主要分 ...
- 是时候给你的产品配一个AI问答助手了!
本文由云+社区发表 | 导语 问答系统是信息检索的一种高级形式,能够更加准确地理解用户用自然语言提出的问题,并通过检索语料库.知识图谱或问答知识库返回简洁.准确的匹配答案.相较于搜索引擎,问答系统能更 ...
- 搜索相关性算法在 DiDi Food 中的搜索
导读:今天给大家分享的主题是搜索匹配问题在 DiDi Food 中的一些探索与应用.本文首先介绍了搜索相关性的一些背景,之后介绍了业界常见的三种匹配模型,以及在DiDi Food业务中的模型效果对比. ...
- 搜索系统核心技术概述【1.5w字长文】
前排提示:本文为综述性文章,梳理搜索相关技术,如寻求前沿应用可简读或略过 搜索引擎介绍 搜索引擎(Search Engine),狭义来讲是基于软件技术开发的互联网数据查询系统,用户通过搜索引擎查询所需 ...
- 【阿里云产品公测】阿里云OpenSearch初次使用评测
作者:阿里云用户 bailimei 从一开始我就对opensearch非常陌生,这是我第一次接触它,本以为对我来说上手难度会比较大,看完帮助信息后我决定试用看看,经试用后我发现阿里云opensearc ...
- 鹅厂优文 | 怎样用AI运维
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由 织云平台团队 团队发布在腾讯云+社区 诞生背景 最近这些年,运维行业提出了不少概念,各种各样的"XX运维"可以说 ...
随机推荐
- 【ORA】ORA-32004: 问题分析和解决
今天做一个特殊的实验,需要重启数据库 数据库关闭没有问题 SQL> shutdown immediate; Database closed. Database dismounted. ORACL ...
- ctfhub技能树—sql注入—UA注入
手注 打开靶机 查看页面信息 抓取数据包 根据提示注入点在User-Agent文件头中 开始尝试注入 成功查到数据库名 查询数据表名 查询字段名 查询字段信息 成功拿到flag 盲注 测试是否存在时间 ...
- Job for docker.service failed because start of the service was attempted too often. See "systemctl status docker.service" and "journalctl -xe" for details. To force a start use "systemctl reset-failed
安装docker时,自己添加了国内的hub.docker.com镜像 [root@ce-docker ~]# systemctl restart docker 出现以下报错:Job for docke ...
- SDNU_ACM_ICPC_2021_Winter_Practice_1st [个人赛] 2021.1.19 星期二
SDNU_ACM_ICPC_2021_Winter_Practice_1st [个人赛] K - Color the ball 题意: 有n个气球,每次都给定两个整数a,b,给a到b内所有的气球涂一个 ...
- 【Android初级】如何实现一个“模拟后台下载”的加载效果(附源码)
在Android里面,后台的任务下载功能是非常常用的,比如在APP Store里面下载应用,下载应用时,需要跟用户进行交互,告诉用户当前正在下载以及下载完成等. 今天我将通过使用Android的原生控 ...
- RabbitMq消费者在初始配置之后进行数据消费
RabbitMq消费者在初始配置之后进行数据消费 问题背景 在写一个消费rabbitmq消息的程序是,发现了一个问题,消费者的业务逻辑里面依赖这一些配置信息,但是当项目启动时,如果队列里面有积压数据的 ...
- jdk安装逻辑学习笔记
一.三个重要变量 很多软件需要用到jdk,安装的时候主要用到三个变量,那这三个变量的代表逻辑又是什么呢? 1.JAVA_HOME(JDK的安装目录)这个变量值选择的是jdk的安装目录 2.classp ...
- 1 flume快速入门——十分钟学会flume
flume ## 1.1 Flume定义 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统.Flume基于流式架构,灵活简单. 大数据框架大致分为3类: ...
- python RecursionError: maximum recursion depth exceeded while calling
import copyimport sys # 导入sys模块sys.setrecursionlimit(8192) # 将默认的递归深度修改为r = sys.getrecursionlimit()_ ...
- loj10014数列分段二
10014. 「一本通 1.2 练习 1」数列分段 II 题目描述 对于给定的一个长度为 n 的正整数数列 A ,现要将其分成 m 段,并要求每段连续,且每段和的最大值最小. 例如,将数列 4,2,4 ...