推荐系统中不得不说的DSSM双塔模型

本文来自OPPO互联网基础技术团队,转载请注名做者。同时欢迎关注咱们的公众号:OPPO_tech,与你分享OPPO前沿互联网技术及活动。redis

本文主要介绍项目中用于商业兴趣建模的DSSM双塔模型。做为推荐领域中大火的双塔模型,由于效果不错而且对工业界十分友好,因此被各大厂普遍应用于推荐系统中。数据库

经过构建user和item两个独立的子网络,将训练好的两个“塔”中的user embedding 和item embedding各自缓存到内存数据库中。线上预测的时候只须要在内存中计算类似度运算便可。DSSM双塔模型是推荐领域不中不得不会的重要模型。缓存

文章主要分为如下几部分:markdown

  • 为何要学习DSSM双塔模型网络

  • DSSM模型理论知识ide

  • 推荐领域中的DSSM双塔模型函数

  • 实战广告推荐的双塔模型学习

  • 总结优化

1. 为何要学习DSSM双塔模型

OPPO标签组主要的服务对象是广告主,服务目标是为广告主提供更好的广告转换效果。这里涉及到两种建模。搜索引擎

一种是天然兴趣建模,根据用户操做终端行为得到user-item关联,给不一样的数据源打标得到item-tag关联,最后将上面两种关联进行join操做获得user-tag的关联实现给用户打上兴趣标签,这里至关因而从标签维度为广告主推荐人群。

另外一种就是商业兴趣建模,在天然兴趣建模的基础上,从广告维度为广告主推荐人群,那么就须要目前大火的DSSM双塔模型了。

拿Youtube视频推荐系统举例,通常推荐系统中有两个流程。

第一步是召回模型,主要是进行初筛操做,从海量视频资源池中初步选择一部分用户可能感兴趣的视频数据子集,从数量上看多是从千万级别筛选出百级别。

第二步是精排模型,主要做用是对上面找到的百级别的视频子集进一步精筛,从数量上看多是从百级别筛选出几十级别。而后根据得分高低排序,生成一个排序列表做为用户的候选播放列表从而完成视频推荐任务。

咱们广告推荐领域中使用的DSSM双塔模型是从广告维度为广告主推荐必定数量的人群,从数量上看是从百亿级别人群中找出百万级人群用于投放广告,因此是召回模型。

2. DSSM模型理论知识

2.1 DSSM模型的原理

DSSM(Deep Structured Semantic Models)也叫深度语义匹配模型,最先是微软发表的一篇应用于NLP领域中计算语义类似度任务的文章。

DSSM深度语义匹配模型原理很简单:获取搜索引擎中的用户搜索query和doc的海量曝光和点击日志数据,训练阶段分别用复杂的深度学习网络构建query侧特征的query embedding和doc侧特征的doc embedding,线上infer时经过计算两个语义向量的cos距离来表示语义类似度,最终得到语义类似模型。这个模型既能够得到语句的低维语义向量表达sentence embedding,还能够预测两句话的语义类似度。

2.2 DSSM深度语义匹配模型总体结构

DSSM模型总的来讲能够分红三层结构,分别是输入层、表示层和匹配层。结构以下图所示:

2.2.1 输入层

输入层主要的做用就是把文本映射到低维向量空间转化成向量提供给深度学习网络。NLP领域里中英文有比较大的差别,在输入层处理方式不一样。

(1) 英文场景

英文的输入层经过Word Hashing方式处理,该方法基于字母的n-gram,主要做用是减小输入向量的维度。举例说明,假如如今有个词boy,开始和结束字符分别用#表示,那么输入就是(#boy#)。将词转化为字母n-gram的形式,若是设置n为3,那么就能获得(#bo,boy,oy#)三组数据,将这三组数据用n-gram的向量来表示。

使用Word Hashing方法存在的问题是可能形成冲突。由于两个不一样的词可能有相同的n-gram向量表示。下图是在不一样的英语词典中分别使用2-gram和3-gram进行Word Hashing时的向量空间以及词语碰撞统计:

能够看出在50W词的词典中若是使用2-gram,也就是两个字母的粒度来切分词,向量空间压缩到1600维,产生冲突的词有1192个(这里的冲突是指两个词的向量表示彻底相同,由于单词储量实在有限,原本想找几个例子说明下,结果没找到)。若是使用3-gram向量空间压缩到3W维,产生冲突的词只有22个。综合下来论文中使用3-gram切分词。

(2) 中文场景

中文输入层和英文有很大差异,首先要面临的是分词问题。若是要分词推荐jieba或者北大pkuseg,不过如今不少模型已经不进行分词了,好比BERT中文的预训练模型就直接使用单字做为最小粒度了。

2.2.2 表示层

DSSM模型表示层使用的是BOW(bag of words)词袋模型,没有考虑词序的信息。不考虑词序其实存在明显的问题,由于一句话可能词相同,可是语义则相差十万八千里,好比“我爱女友”和“女友爱我”可能差距蛮大的(这个小伙伴们本身体会)。

下图是DSSM表示层的结构:

最下面的Term Vector到Word Hashing将词映射到3W维的向量空间中。而后分别通过两层300维度的隐藏层,最后统一输出128维度的向量。

2.2.3 匹配层

如今咱们把query和doc统一转换成了两个128维的语义向量,接下来如何计算它们的语义类似度呢?经过cos函数计算这两个向量的余弦类似度就能够了,公式以下:

2.3 DSSM模型的优缺点

先说说DSSM模型的优势:

  • 解决了LSA、LDA、Autoencoder等方法存在的字典爆炸问题,从而下降了计算复杂度。由于英文中词的数量要远远高于字母n-gram的数量;

  • 中文方面使用字做为最细切分粒度,能够复用每一个字表达的语义,减小分词的依赖,从而提升模型的泛化能力;

  • 字母的n-gram能够更好的处理新词,具备较强的鲁棒性;

  • 使用有监督的方法,优化语义embedding的映射问题;

  • 省去了人工特征工程;

  • 采用有监督训练,精度较高。传统的输入层使用embedding的方式(好比Word2vec的词向量)或者主题模型的方式(好比LDA的主题向量)作词映射,再把各个词的向量拼接或者累加起来。因为Word2vec和LDA都是无监督训练,会给模型引入偏差。

再说说DSSM模型的缺点:

  • Word Hashing可能形成词语冲突;

  • 采用词袋模型,损失了上下文语序信息。这也是后面会有CNN-DSSM、LSTM-DSSM等DSSM模型变种的缘由;

  • 搜索引擎的排序由多种因素决定,用户点击时doc排名越靠前越容易被点击,仅用点击来判断正负样本,产生的噪声较大,模型难以收敛;

  • 效果不可控。由于是端到端模型,好处是省去了人工特征工程,可是也带来了端到端模型效果不可控的问题。

3. 推荐领域中的DSSM双塔模型

3.1 从NLP领域跨界到推荐领域的DSSM

DSSM深度语义匹配模型最先是应用于NLP领域中计算语义类似度任务。由于语义匹配自己是一种排序问题,和推荐场景不谋而合,因此DSSM模型被天然的引入到推荐领域中。DSSM模型分别使用相对独立的两个复杂网络构建用户相关特征的user embedding和item相关特征的item embedding,因此称为双塔模型。

3.2 朴素的DSSM双塔模型,2015

双塔模型最大的特色是user和item是独立的两个子网络,对工业界十分友好。将两个塔各自缓存,线上预测的时候只须要在内存中进行类似度运算便可。下面是2015年朴素的DSSM双塔模型结构:

3.3 百度的双塔模型

百度的双塔模型分别使用复杂的网络对用户相关的特征和广告相关的特征进行embedding,分别造成两个独立的塔,在最后的交叉层以前用户特征和广告特征之间没有任何交互。这种方案就是训练时引入更多的特征完成复杂网络离线训练,而后将获得的user embedding和item embedding存入redis这一类内存数据库中。线上预测时使用LR、浅层NN等轻量级模型或者更方便的类似距离计算方式。这也是业界不少大厂采用的推荐系统的构造方式。

3.4 谷歌的双塔模型,2019

2019年谷歌推出本身的双塔模型,文章的核心思想是:在大规模的推荐系统中,利用双塔模型对user-item对的交互关系进行建模,从而学习【用户,上下文】向量和【item】向量的关联。针对大规模流数据,提出in-batch softmax损失函数与流数据频率估计方法更好的适应item的多种数据分布。

利用双塔模型构建Youtube视频推荐系统,对于用户侧的塔根据用户观看视频特征构建user embedding,对于视频侧的塔根据视频特征构建video emebdding。两个塔分别是相互独立的网络。

4. 实战广告推荐的双塔模型

4.1 广告推荐业务场景

讲了上面一大堆,就是为了这一节构建我们广告推荐的DSSM双塔模型。对应到我们的广告业务就是构建DSSM双塔模型,用户侧输入用户对广告的历史行为特征(包括点击、下载、付费等)从而获得固定长度的user embedding,同理广告侧输入广告特征获得相同长度的ad embedding,分别存入redis内存数据库中。

线上infer时给定一个广告ad,而后分别和全量用户求类似度,找到“距离最近”的user子集,对这部分人群投放广告从而完成广告推荐任务。

4.2 广告推荐的DSSM双塔模型结构

模型总体结构以下图所示,也分红三层:输入层、表示层和匹配层。

4.2.1 输入层

模型训练分红两座不一样的“塔”分别进行,其实也就是两个不一样的神经网络。其中一座塔是用于生成user embedding。输入用户特征训练数据,用户特征包括用户稠密特征和用户稀疏特征,其中用户稠密特征进行one-hot编码操做,用户稀疏特征进行embedding降维到低维空间(64或者32维),而后进行特征拼接操做。广告侧和用户侧相似。

关于里面的特征,不在于你要什么,而在于你有什么。整个工程超级复杂的就是这块的特征工做。这里再也不赘述。

4.2.2 表示层

获得拼接好的特征以后会提供给各自的深度学习网络模型。用户特征和广告特征通过各自的两个全链接层后转化成了固定长度的向量,这里获得了维度相同的user embedding和ad embedding。各塔内部的网络层数和维度能够不一样,可是输出的维度必须是同样的,这样才能在匹配层进行运算。项目中user embedding和ad embedding 维度都是32。

4.2.3 匹配层

模型训练好了以后会分别获得user embedding和ad embedding,将它们存储到redis这一类内存数据库中。若是要为某个特定的广告推荐人群,则将该广告的ad embedding分别和全部人群的user embedding计算cos类似度。选择距离最近的N我的群子集做为广告投放人群,这样就完成了广告推荐任务。模型训练过程当中将cos函数获得的结果进入sigmoid函数和真实标签计算logloss,查看网络是否收敛。模型评估主要使用auc指标。

小结下,本节讲了下咱们使用DSSM双塔模型完成广告推荐任务。模型总体结构分红输入层、表示层和匹配层。首先在输入层处理数据获取特征;而后在表示层经过深度学习网络获得user embedding和ad embedding;最后在匹配层进行广告推荐。

4.3 一点思考

DSSM双塔模型有不少变种,好比CNN-DSSM、LSTM-DSSM等等。项目中表示层使用了两层全链接网络来做为特征抽取器。如今深度学习领域公认最强的特征抽取器是Transformer,后续是否能够加入Transformer。

5. 总结

本篇主要介绍了项目中用于商业兴趣建模的DSSM双塔模型。做为推荐领域中大火的双塔模型,最大的特色是效果不错而且对工业界十分友好,因此被各大厂普遍应用于推荐系统中。

经过构建user和item两个独立的子网络,将训练好的两个塔中的user embedding 和item embedding各自缓存到内存数据库中。线上预测的时候只须要在内存中进行类似度运算便可。

首先,讲了下DSSM语义匹配模型的理论知识,最先是应用于NLP领域中用于语义类似度任务;而后,由于都是排序问题,因此引入到推荐领域。从朴素的DSSM双塔模型到各大长的双塔模型;最后,讲了下咱们使用DSSM双塔模型实战到广告推荐场景。

6. 参考资料

1.LearningDeep Structured Semantic Models for Web Search using Clickthrough Data

2.Sampling-bias-corrected neural modeling for largecorpus item recommendations

相关文章
相关标签/搜索