推荐系统(十七)双塔模型:微软DSSM模型(Deep Structured Semantic Models)

推荐系统系列博客:

  1. 推荐系统(一)推荐系统整体概览
  2. 推荐系统(二)GBDT+LR模型
  3. 推荐系统(三)Factorization Machines(FM)
  4. 推荐系统(四)Field-aware Factorization Machines(FFM)
  5. 推荐系统(五)wide&deep
  6. 推荐系统(六)Deep & Cross Network(DCN)
  7. 推荐系统(七)xDeepFM模型
  8. 推荐系统(八)FNN模型(FM+MLP=FNN)
  9. 推荐系统(九)PNN模型(Product-based Neural Networks)
  10. 推荐系统(十)DeepFM模型
  11. 推荐系统(十一)阿里深度兴趣网络(一):DIN模型(Deep Interest Network)
  12. 推荐系统(十二)阿里深度兴趣网络(二):DIEN模型(Deep Interest Evolution Network)
  13. 推荐系统(十三)阿里深度兴趣网络(三):DSIN模型(Deep Session Interest Network)
  14. 推荐系统(十四)多任务学习:阿里ESMM(完整空间多任务模型)
  15. 推荐系统(十五)多任务学习:谷歌MMoE(Multi-gate Mixture-of-Experts )
  16. 推荐系统(十六)多任务学习:腾讯PLE模型(Progressive Layered Extraction model)

写在前面:这是一篇和原论文关系不大的博客(大家如果有兴趣看原始论文,可以先看完原始论文后,再来看本博客),基本上是基于个人在工作实践中的经验以及思考写成的一篇关于DSSM的博客,先定基调:DSSM主要用在召回和粗排阶段。

DSSM全称Deep Structured Semantic Models,是伊利诺伊大学厄巴纳-香槟分校(UIUC)与微软于2013年发表在CIKM上的,盲猜是一作在微软实习时的工作,所以基本上是微软的成果。DSSM在业界搜广推的影响力目前来说是超过前面介绍的任何一个模型,基本上统治了召回/粗排阶段。值得一提的是我厂(百度)同样在2013年(那个年头的百度还处在如日中天的状态)搞了个双塔模型simnet,不过并没有发表相应的论文,具体可以参见:百度NLP | 神经网络语义匹配技术,这也符合百度一向喜欢掖着藏着的风格。

这篇博客将会从以下几个方面进行介绍DSSM:

  1. 推荐中DSSM双塔模型结构
  2. DSSM用于召回
    2.1. DSSM召回离线训练
    2.2. DSSM召回在线infer
  3. DSSM用于粗排
  4. 总结

一、推荐中DSSM双塔模型结构

这里直接上一个我画的图,相比较原始论文,这个图更能表示在推荐领域中的DSSM结构,如下图所示:

图1. 推荐领域常用DSSM模型结构

模型结果非常简单,主要包括两部分:user侧一个塔,item侧一个塔。user侧特征和item侧特征分别经过各自的DNN(一般情况下,两个DNN结构是一样的,当然也可以不一样)后得到user embedding和item embedding,这里需要注意的是如果你的user dnn和item dnn结构不一样,请无比保证输出维度一样,也就是最后一层全连接层隐藏单元个数相同,需要保证user embedding和item embedding的维度相同,因为下一步要做相似度计算(常用内积或者cosine)。损失函数部分则是常用的二分类交叉熵损失,y_true为真实label 0或者1,y_pred为相似度结果。

对于有经验的常年沉溺于挖特征(99%推荐/广告算法工程师的现状)的老司机,应该可以一年就看出DSSM模型的缺点:无法使用user#item的交叉特征。 这个问题我们在后面再探讨。

二、DSSM用于召回

现在工业界的推荐系统的召回阶段基本上多路召回,比如CF召回、CB召回、语义向量召回等,可参见我关于推荐系统的第一篇博客:推荐系统(一)推荐系统整体概览,DSSM召回也是语义向量召回的一种,先来看离线部分如何训练DSSM模型。

2.1、DSSM召回离线训练

DSSM离线训练和普通的DNN训练并没有什么大的区别,只是需要把特征分为user侧特征和item侧特征,并且无法使用user-item的交叉特征。 在之前博客里,我曾提到过:如果精排是特征的艺术,那么召回就是样本的艺术。对于DSSM召回的样本,正样本没什么好说的,就是用户点击的item,那么对于负样本呢?对于没什么经验的算法工程师,最常见的错误就是负样本直接用曝光未点击的item。这会直接导致SSB问题,即样本选择偏差问题(sample selection bias),原因很简单,召回在线的时候是从全量候选item中召回,而不是从有曝光的item中召回。 这里,就引申出了一个学问非常大的topic:负样本为王,如何构造负样本?

先说DSSM原始论文里的做法,只有正样本,记为D+D^+D+,对于用户u1u_1u1,其正样本就是其点击过的item,负样本则是随机从D+D^+D+(不包含u1u_1u1点击过的item)中随机选择4个item作为负样本。

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

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

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

2.2、 DSSM召回在线infer

提到召回必然面对一个问题:如何在全量候选item中选出用户最喜欢的topX个,也就必然涉及到效率问题。离线训练尚可不太考虑效率问题,当然训练时间越短模型更新越及时,则更好,但对训练时间的容忍度相对较高。但在线infer时对耗时有着严格的要求,效率就必须是首先要面对的问题。DSSM之所以能够在工业界这么流行,就是因为其双塔结构能够做到非常好的解耦,即训练好后user侧塔和item侧塔完全没关系,没有依赖关系。

因为百度在AI算法这一块还是有不错的技术积累,因此有一套非常成熟好用的基建,从日志收集传输、特征抽取框架、模型训练部署框架、embedding向量存储、在线infer等非常齐全。所以我们在线部署DSSM的时候选择了比较奢侈的方法:item侧塔和user侧塔都部署到线上,有个server会每间隔几个小时就请求item塔,计算出全量item的embedding向量,然后存储更新。当每个用户请求到达时,会请求user塔计算出user的embedding向量,然后拿着这个user向量去做item库里做ANN检索选出相似度最大的topX个ietm。关于ANN检索技术比较有很多,比如:kd树、Annoy、HNSW等,Facebook开源了ANN库FAISS,国内很多公司在用,百度则有自己的一套ANN检索框架。

看到这里,你应该已经明白为什么DSSM无法使用user#item的交叉特征了。

三、DSSM用于粗排

DSSM也可以用于粗排,整体上和召回差不多。区别点有以下几个方面:

  1. 在线infer时候选集不同: 召回时是整个item池子,粗排时则是多路召回后的候选item。
  2. 训练样本不一样: 为了发扬精排干啥粗排干啥的精神,在我们自己的实践中,负样本用的和精排一样,都是曝光未点击的item。

如果召回的DSSM模型和粗排的DSSM模型,在特征、样本都一样的情况下,则DSSM召回的item大部分都会被粗排排出去,注意这里是大部分,从我们的实践中大概有一半的会被排出去,至于为什么没有全部都被排出去,原因应该是数据中存在multi-view,即使特征、样本、网络结构都一样,只要参数初始化是随机的,网络最终也会学到不同的view。

四、总结

DSSM因为其双塔能够解耦的特点迅速在业界得到了广泛的应用,当然其也存在一些缺点,比如:

  1. user侧和item侧特征无法交叉,有一些工作尝试了一些解决方案,比如:新浪微博张俊林尝试了SENet,美团发表了论文 A Dual Augmented Two-tower Model for Online Large-scale
    Recommendation
  2. 我们自己在实践中发现,DSSM召回的内容单一性比较严重,大多数都是同类别的,不知道有没有其他小伙伴遇到,可以贴出解决方案。

参考文献

[1]: Huang P S , He X , Gao J , et al. Learning deep structured semantic models for web search using clickthrough data[C]// Proceedings of the 22nd ACM international conference on Conference on information & knowledge management. ACM, 2013.

推荐系统(十七)双塔模型:微软DSSM模型(Deep Structured Semantic Models)相关推荐

  1. DSSM(DEEP STRUCTURED SEMANTIC MODELS)

    Huang, Po-Sen, et al. "Learning deep structured semantic models for web search using clickthrou ...

  2. DSSMs: Deep Structured Semantic Models

    Attention! 我的Dr.Sure项目正式上线了,主旨在分享学习Tensorflow以及DeepLearning中的一些想法.期间随时更新我的论文心得以及想法. Github地址:https:/ ...

  3. 论文翻译1-----DSSM:Deep Structured Semantic Models

    说明: 论文全部名称:Learning Deep Structured Semantic Models for Web Search using Clickthrough Data 论文中文全称:使用 ...

  4. Learning Deep Structured Semantic Models for Web Search using Clickthrough Data (DSSM)

    主要研究问题: 给定一个查询(query)和一组文档(document),返回一个排序(ranking),系统根据查询所对应文档的契合度高低排序. 论文主要结构: 一.Abstract 1.基于关键词 ...

  5. 推荐系统实战4——EasyRec 搭建DSSM召回模型实现CTR点击平台

    推荐系统实战4--EasyRec 搭建DSSM召回模型实现CTR点击平台 学习前言 EasyRec仓库地址 DSSM实现思路 一.DSSM整体结构解析 二.网络结构解析 1.Embedding层的构建 ...

  6. 召回模型:DSSM双塔模型

    文章目录 DSSM(2013) DNN for Computing Semantic Features Word Hashing Youtube双塔模型(2019) Modeling Framewor ...

  7. 【深度学习】DSSM模型介绍(1)

    DSSM (Deep Structured Semantic Models)用于文本相似度匹配场景,是为了平衡搜索的关键词,和被点击的文本标题之间的相关性. 论文地址:https://www.micr ...

  8. 推荐算法之召回模型:DSSM、YoutubeDNN

    1. DSSM 1.1 DSSM模型原理 DSSM(Deep Structured Semantic Model),由微软研究院提出,利用深度神经网络将文本表示为低维度的向量,应用于文本相似度匹配场景 ...

  9. 推荐系统的发展演进历史和模型的目标及优缺点

    推荐系统发展历程 梳理推荐系统的模型进化历程,明白模型改进了什么,有什么缺点.做到心中有一副big picture,才能明白未来模型的趋势. 文章目录 推荐系统发展历程 前言 一.模型进化历程 二.常 ...

最新文章

  1. 为什么AI的翻译水平还远不能和人类相比?
  2. oracle调用存储过程
  3. php5.3中ZendGuardLoader与wincache冲突问题的解决方法
  4. 用户的购物历史都有用吗?看作者如何运用对比学习来筛选相关项
  5. 费解 | 为什么很多程序员工作时都戴耳机?
  6. setnx和expire合成一条指令_Python 为什么只需一条语句“a,b=b,a”,就能直接交换两个变量?...
  7. 介绍一篇路端传感器的cooperative perception(3D目标检测)论文
  8. anaconda开发python_使用anaconda和pycharm搭建多python本版的开发环境
  9. PC端QQ协议解析之0825
  10. PDF 文档拆分工具包
  11. Java - Eclipse: quot;Error notifying a preference change listenerquot;
  12. 《大明王朝》赵贞吉的拉扯
  13. 猜拳游戏(基于TCP socket的编程)
  14. TTN服务器LoRaWAN网关配置流程
  15. 通过python修改cmd路径_cmd中如何更改文件路径 - 卡饭网
  16. c++类与对象(多文件编程!)(编写一个有关股票的程序,其中有两个类:一个是深圳类shen_stock,另一个是上海类shang_stock。)
  17. c语言蚊香数组,蚊香的代码咋弄啊
  18. 从Hexo迁移到Hugo最强攻略
  19. 特斯拉FSD技术解析
  20. Java判断平年闰年

热门文章

  1. CA认证与HTTPs原理介绍
  2. 拿到项目需求应该怎么处理呢
  3. 沟通的艺术III:看人之间 之倾听
  4. 神经网络是什么?如何直观理解它的能力极限?它是如何无限逼近真理?
  5. HTML 5新增表单元素(案例详解)
  6. 网络广告效果评估方法
  7. 通过wine使用通达信、钱龙、同花顺、大智慧软件
  8. 没有了自主,学习的小船说翻就翻——读《做中学》有感 20155318
  9. 全智贤拉动达芙妮股价上涨
  10. 开发平台选择篇——王者归来