双塔学习笔记
(Deep Structured Semantic Models)
总体框架
一、纸上得来终觉浅
1、背景
2、双塔的鼻祖(最初的双塔,重点讲解)
3、百家争鸣(各路英雄对双塔的改进,主要讲解改进了哪里)
4、双塔在推荐系统的表演(百度、谷歌)
5、双塔的优缺点
二、绝知此事要躬行
实战篇 :双塔手助游戏推荐中的应用和效果。
一、背景:
DSSM 深度语义匹配模型最早是应用于 NLP 领域中计算语义相似度任务。因为语义匹配本身是一种排序问题,和推荐场景不谋而合,所以 DSSM 模型被自然的引入到推荐领域中。因为效果不错并且对工业界十分友好,所以被各大厂广泛应用于推荐系统中。
通过构建 user 和 item 两个独立的子网络,将训练好的两个“塔”中的 user embedding 和 item embedding 各自缓存到内存数据库中,所以称为双塔模型。线上预测的时候只需要在内存中计算相似度运算即可。DSSM 双塔模型是推荐领域不中不得不会的重要模型。
二、双塔的鼻祖 2013
微软在CIKM2013发表的一篇工作,它主要是用来解决NLP领域语义相似度任务的。
1、结构:Query端 Encoder 和 Doc端 Encoder都是使用 MLP实现,最后Score计算使用的是cosine similarity,后续模型的改进很多都是使用更好的Encoder结构。
2、以字母n-grame为基础的词哈希(Word Hashing)
作用1:虽然英语单词的数量是无限的,但英语(或其他类似语言)中字母n-g的数量通常是有限的。旨在降低词袋词向量的维数;
作用2:词哈希能够将相同单词的形态变化映射到字母n-gram空间中彼此靠近的点;
作用3:基于词的表示,如果在训练集中没见过这个词,那么在基本单词的表示中就会造成困难,但是在基于n-gram的表示中就不存在这个问题;
例如一个单词good,首先给单词加上起尾标记 #good#;
然后将这个三次分词n-gram,例如三元组:#go,goo, ood, od#;
最后,用n-gram组成的向量表示单词。
这种方法的问题是有可能出现不同的单词会出现相同的n-gram向量表示。
3、训练过程和loss函数
(Q, D+)表示query和被点击的document;
(Q, D-)表示query和未被点击的document;
正负样本数1:4
最大限度地提高在整个训练集中给定query的情况下,被点击过的文档被点击的可能性。
极大似然估计的公式:
等价地,我们需要最小化以下损失函数:
三、各种变体塔
1、CNN-DSSM 2014
CNN-DSSM依然由DSSM的作者提出,在语义特征计算部分采用CNN网络,网络结构如图所示。在词向量的表达上依然采用了word hash。不过DSSM忽略了上下文的信息,因此作者在word trigram的基础上增加了letter trigram。在一定的窗口大小内,对该窗口内的word进行拼接就是letter trigram。
例如I have an apple,可以被拼接为 # I have, I have an, have an apple ... 以此类推。
后微软、google又对CNN-DSSM作了改进。
2、LSTM-DSSM 2014
结构:针对CNN-DSSM无法捕捉长文本的上下文的信息的缺点,LSTM可以学习长期依赖信息,所以LSTM比 CNN有更强的编码能力,匹配层再将LSTM的输出进行cosine相似度计算。
后续改进:
(1)Convolutional-pooling LSTM
用一个Bi-LSTM作为word embedding的方法,然后word embedding concat成矩阵表达句子,用卷积来抽取组合特征作为question和anwser的向量表达,再计算cosin loss.
(2)Convolution-based LSTM
先对原始文本用卷积捕捉局部的N-gram信息, 然后在这个基础上用Bi-LSTM来学习更大范围的上下文依赖关系。
(3) Attentive-LSTM
相比LSTM-DSSM, 在Attention机制上做了些改进:通过Answer中的词向量加权平均生成整个Answer的向量时,每个词的权重是由Question向量和词向量来决定的。Question的表达仍由其所有词向量的avg或sum,max来表示。
3、Sentence-BERT
Why BERT?
优势1:BERT采用pre-train+fine-turning的训练模式,基于超大量语料进行pre-train,在pre-train过程BERT已经能学好单词、句法、语义等特征,具体任务只需用较少量的数据进行fine-truning。对于文本有更强的表示能力。
优势2:BERT是双向语言模型,拥有上下文信息。相比GPT(单向语言模型)和ELMO(粗暴的双向语言模型,前向和后向简单相加),BERT有得天独厚的优势。
优势3:BERT采用Transformer作为特征提取器,Transformer可并行、拥有比之前所有网络结构都更强的捕捉长序列的依赖关系的能力。
四、双塔在推荐系统领域的表演
1、朴素的双塔 2014
user和item是独立的两个子网络,对工业界十分友好。将两个塔各自缓存,线上预测的时候只需要在内存中进行相似度运算即可。
2、百度的双塔 2015
百度的双塔模型分别使用复杂的网络对用户相关的特征和广告相关的特征进行embedding,分别形成两个独立的塔,在最后的交叉层之前用户特征和广告特征之间没有任何交互。
这种方案就是训练时引入更多的特征完成复杂网络离线训练,然后将得到的user embedding和item embedding存入redis这一类内存数据库中。线上预测时使用LR、浅层NN等轻量级模型或者更方便的相似距离计算方式。这也是业界很多大厂采用的推荐系统的构造方式。
3、谷歌的双塔模型,2019
Google在YouTube上进行了模型的测试,模型结构如下图所示,其中:
1、训练标签:点击并进行了完整观看的为1,只点击或者观看很少的认为是0
2、Video特征:视频ID、频道ID,转化为Embedding,对于一些多值特征(比如视频的主题)采用Embedding加权平均
3、User特征:历史观看视频的平均Embedding(这里选取的是过去的一段时间)
对于同一个ID的embedding在双塔模型的左侧和右侧是共享的
五、DSSM 模型的优缺点
优点:
- 解决了 LSA、LDA、Autoencoder 等方法存在的字典爆炸问题,从而降低计算复杂度。因为英文中词的数量要远远高于字母 n-gram 的数量;
- 中文方面使用字作为最细切分粒度,可以复用每个字表达的语义,减少分词的依赖,从而提高模型的泛化能力;
- 字母的 n-gram 可以更好的处理新词,具有较强的鲁棒性;
- 使用有监督的方法,优化语义 embedding 的映射问题;
- 省去了人工特征工程;
- 采用有监督训练,精度较高。传统的输入层使用 embedding 的方式(比如Word2vec 的词向量)或者主题模型的方式(比如 LDA 的主题向量)做词映射,再把各个词的向量拼接或者累加起来。由于 Word2vec 和 LDA 都是无监督训练,会给模型引入误差。
- 最重要的一点:实时性好,可以把user embedding和item embedding存入redis这一类内存数据库中,更方便地用于在线服务。
缺点:
- Word Hashing 可能造成词语冲突;
- 采用词袋模型,损失了上下文语序信息。这也是后面会有 CNN-DSSM、LSTM-DSSM 等 DSSM 模型变种的原因;
- 搜索引擎的排序由多种因素决定,用户点击时 doc 排名越靠前越容易被点击,仅用点击来判断正负样本,产生的噪声较大,模型难以收敛;
- 效果不可控。因为是端到端模型,好处是省去了人工特征工程,但是也带来了端到端模型效果不可控的问题。
六、双塔在手助游戏推荐上的实战
1、结构:借鉴谷歌的双塔模型(后续可以尝试其他结构)
2、在各场景的效果表现:
(1)排序
手助首页主列表
收入:相对于deepfm(base)提升5%
分发:相对于deepfm(base)提升40%
(2)相似召回
在详情页相似应用上线根据item embedding 进行相似度召回,并根据相似度进行排序并推荐
(灰度测试效果):
date | project | distribute_rate_lift | profit_rate_lift |
2021/8/24 | zhushou | 79.94% | 99.35% |
2021/8/25 | zhushou | 87.09% | 147.90% |
2021/8/26 | zhushou | 82.25% | 151.73% |
last_7d_weighting | zhushou | 83.97% | 142.72% |
2021/8/24 | zhushou_game | 106.40% | 39.59% |
2021/8/25 | zhushou_game | 100.74% | 140.84% |
2021/8/26 | zhushou_game | 74.47% | 118.35% |
last_7d_weighting | zhushou_game | 88.93% | 114.73% |