1. 简介
DSSM(Deep Structured Semantic Models)是深度语义匹配模型,最早由微软在2013年提出,主要应用于NLP的语义检索任务中,通过对用户的历史点击Query和Document进行embedding编码,使用余弦相似度计算query和document的低维embedding相似度,继而达到语义相似度计算的目的。而在此之前语义检索任务大都是基于关键词的匹配,例如LSA等,无法匹配语义层面的信息,匹配的结果存在很大的误差。语义匹配本身是一种排序问题,和推荐场景不谋而合,并且DSSM的结构相对比较简单,偏于工程化实现,dssm很自然的引入到了推荐系统,目前被广泛应用于推荐系统的召回环节。实际线上应用中,DSSM模型分别使用相对独立的两个复杂网络构建用户相关特征的user embedding和item相关特征的item embedding,然后计算相似度,故也被称为双塔模型。为了深入了解该网络,下面将从原理和具体在召回系统的应用展开讲解。
2. 优缺点
DSSM模型的优点:
- 模型低层引入了word hash的方法,取代了原有的one hot 编码的方法,可以有效的解决输入维度过高的现象
- 英文对单词使用n-gram切分的方式,对原有单词重新切分,决了LSA、LDA、Autoencoder等方法存在的字典爆炸问题,从而降低了计算复杂度
- 中文方面使用字作为最细切分粒度,可以复用每个字表达的语义,减少分词的依赖,从而提高模型的泛化能力;
- 字母的n-gram可以更好的处理新词,具有较强的鲁棒性
- 采用有监督训练,精度较高。传统的输入层使用embedding的方式(比如Word2vec的词向量)或者主题模型的方式(比如LDA的主题向量)做词映射,再把各个词的向量拼接或者累加起来。由于Word2vec和LDA都是无监督训练,会给模型引入误差。
DSSM模型的缺点:
- n-gram可能造成词语冲突;
- 采用词袋模型,损失了上下文语序信息。这也是后面会有CNN-DSSM、LSTM-DSSM等DSSM模型变种的原因
- 搜索引擎的排序由多种因素决定,用户点击时doc排名越靠前越容易被点击,仅用点击来判断正负样本,产生的噪声较大,模型难以收敛;
3. 模型结构
DSSM的原理很简单,通过one-hot编码的方式将检索词query和待匹配内容item表达成高维的向量,然后通过DNN将高维向量表达为低纬度的向量,然后再通过cos相似度基于query和item的低纬向量之间的距离。具体的结构图如下表所示。其中左侧图1是原始论文中的结构图,右侧图2是抽象的结构图。由图中可以看到网络主要分为三层,分别是输入层、表示层和匹配层。
- 输入侧
针对网络的输入,以前多采用的方式是one_hot编码的方式,这样做的好处是能将所有的字符进行唯一编码,但是缺点也显而易见,由于字母库大多比较大,导致维度较大。本文中创新的提出了word hashing的方法,该方法主要思想是切词,假设用 letter-tri-gams 来切分单词(3个字母为一组,并且用#表示开始和结束符),单词boy 会被切为 #-b-o, b-o-y, o-y-#三个词,具体的表达方式如下图3所示,boy这个单词需要通过三个位置指针表示。这样有一个比较直观的好处,可以压缩空间,通过letter-tri-gams切分,可以将一个50万维度的向量压缩为3万维的向量空间(将所有单词都切分成3个字母表示,会有很多重复)。其次是增强范化能力,三个字母的表达往往能代表英文中的前缀和后缀,而前缀后缀往往具有通用的语义。而文章中之所以使用3作为切分长度,是综合考虑向量空间和单词冲突决定的,具体数据如下图4所示。这里的冲突是指两个单词切分后letter-*-gram表达完全相同。
上述方法多用于英文属于,针对中文输入可以使用分词或者直接单词的one-hot向量作为输入,目前很多网络是直接使用单词作为输入,比如bert,transform等
- 表示层
表示层的主要对输入向量做一个抽象表达,能够在一个比较低维度的向量空间描述query和Title(item)(得到一个128维度向量),使得两个向量能够映射到同一向量空间,具有可比性。DSSM 模型表示层使用的是 BOW(bag of words)词袋模型,它存在一个比较大的问题点:忽略输入单词的顺序,语法和句法要素等。 之后提出的CNN-DSSM和LSTM-DSSM就是基于这块不足做的升级优化。
- 匹配层
通过表示层后得到两个128维度的向量,分别是query向量和title向量,然后我们可以通过cos函数计算这两个向量的余弦相似度就可以了,公式如下:
$$
R(Q,D)=cosine(y_Q, y_D)=\frac{y_Q^T y_D}{||y_Q||||y_D||}
$$
4. 工程应用
DSSM模型是微软2013年发表的一个关于query/doc的相似度计算模型,后来发展成为一种所谓”双塔“的框架,被广泛应用于广告、推荐等领域的召回和排序问题中。在工业界中它的主要流程如第三章节所介绍的,首先输入层将Query和Doc(one-hot编码)转化为embedding向量,然后是多层DNN网络映射得到针对Query和Doc的低维维语义特征向量,最后会使用Query和Doc向量进行余弦相似度计算得到相似度R,然后进行softmax归一化得到最终的指标后验概率P,训练目标针对点击的正样本拟合P为1,否则拟合P为0。
DSSM模型的最大特点就是Query和Doc是两个独立的子网络,工业界目前多将该网络应用于召回环节,拆分为用户塔和物品塔。这两个塔分别构建独立的子网络结构。该方式对工业界十分友好,两个子网络产生Embedding向量可以独自获取及缓存,方便离线端和在线端的计算,节省计算资源。并且在模型训练过程中,双塔模型两侧分别对(用户,上下文)和(物品)进行建模,并在最后一层计算二者的内积。当模型训练完成时,物品的Embedding是可以保存成词表的,线上应用的时候只需要查找对应的Embedding即可。因此线上只需要计算(用户,上下文)一侧的 Embedding,基于 Annoy 或 Faiss 技术索引得到用户偏好的候选集,可以有效提升运行效率。
另外值得一提的是,在实际应用过程中,除了上述的表示层对最终结果有很大的影响外,针对样本的的选择对结果也有很大的影响。这里的样本选择主要是指正负样本的筛选,不涉及特征选择(特征选择对工程也有很大影响,这里不做具体讨论)。尤其是在推荐系统的召回环节,我们的主要目标是希望在全部数据库中筛选出用户可能感兴趣的正样本,如果负样本筛选不合理,将会导致模型见到的内容库很小,不能实现全库检索。所以我们希望召回训练数据的正样本是user和item匹配度最高的那些样本,也即用户点击样本,负样本是user和item最不匹配的那些样本,但不能拿“曝光未点击”作为召回模型的负样本,因为我们从线上日志获得的训练样本,已经是上一版本的召回、粗排、精排替用户筛选过的,即已经是对用户“匹配度较高”的样本了,即推荐系统以为用户会喜欢他们,但用户的行为又表明的对他的嫌弃。拿这样的样本训练出来的模型做召回,并不能与线上环境的数据分布保持一致。也就是说曝光未点击既不能成为合格的正样本,也不能成为合格的负样本。所以一般的做法是拿点击样本做正样本,拿随机采样做负样本,因为线上召回时,候选库里大多数的物料是与用户没有关系的,随机抽样能够很好地模拟这一分布。
5. 总结
本篇主要梳理了DSSM双塔模型的模型结构,相较传统网络的优缺点,以及该网络结构在工业推荐系统的具体应用。后续无论是学术界还是工业界基于此又提出了很多新的想法。在输入环节,引入用户的序列交互数据,并且通过注意力机制提升用户的关注点;在模型的表示层,通过CNN,RNN,Transform等方法更深度的刻画隐层语义向量,在匹配层中引入多目标等,联合训练用户多种兴趣。
6.参考文献
- 我的微信小程序
- 这是我的微信小程序扫一扫
-
- 我的微信公众号
- 我的微信公众号扫一扫
-
评论