DSSM相关论文阅读

DSSM是在2013年提出的,应用场景是IR中的Rank问题,即,给定一个query后,计算doc(url)与这个query的语义相关性。

DSSM

模型结构

先上DSSM的模型结构图

DSSM

可以将模型分为两步理解:

  1. 第一步是feature representation过程,使用DNN神经网络将文本的高维稀疏向量 投影到文本的低维语义特征向量。DNN网络接收query或者doc的term vector(如one-hot编码),为了使one-hot编码这种高维特征能够在模型中计算,文章使用了一个小技巧(Word Hashing)将高维稀疏特征表示为低维稀疏特征 得到 $l_1$层。从$l_1$到$y$是标准的三层DNN神经网络。$y$是一个具有128维的特征的向量,它是原始的query或者doc的低维语义向量表示。
    将query或者doc的原始Term Vector表示为$x$ ,$y$作为DNN网络的输出,$l_i$作为DNN网络的隐藏层节点值,$W_i$是DNN网络的第$i$层的权重矩阵,DNN网络的层数记为$N$。那么从$x$到$y$的前馈计算过程如下:

    $$
    \begin {aligned}
    l_1 &= W_1x \\
    \\
    l_i &=f(W_i l_{i-1}+b_i) , i =2,\dots,N-1 \\
    \\
    y &=f(W_N l_{N-1}+b_N) \\
    \end {aligned}
    $$

    其中$f$为神经网络中隐藏层和输出层的激活函数,论文中使用的是$\tanh$:
    $$
    f(x) = \frac {1-e^{-2x}}{1+e^{-2x}}
    $$

  2. 第二步是语义相关性的计算过程,使用第一步得到的query和doc的语义向量表示$y$计算query和doc的相关系数。论文中使用的是余弦相似度:
    $$
    R(Q,D)=\cos(y_Q,y_D) = \frac{y_Q^{\mathrm{T}}y_D}{\Arrowvert y_Q\Arrowvert \Arrowvert y_D\Arrowvert}
    $$
    其中 $y_Q$ 和 $y_D$ 分别表示query和doc的语义向量表示(第一步的输出)。当给定一个query和候选doc后,就可以按照上面的方法计算其相关性得分,并按照相关性大小排序(个人感觉生产环境下不会这样干,因为生产环境中面临的情况更加多样。将DSSM的相关性得分作为最终ltr模型的输入特征还是更加可行的)。

损失函数

上面介绍的是DSSM模型的前馈网络结构。DSSM做为一种监督学习方法,还需要有一个损失函数作为训练的目标。

DSSM模型的输入是一个query列表和每个query对应的用户点击的doc序列。论文奖给定一个query $Q$ ,用户点击一个特定doc $D$ 的概率定义为:
$$
p(D|Q) = \frac{\exp(\gamma R(Q,D))}{\sum_{D^{‘} \in \boldsymbol {D} } \exp(\gamma R(Q,D^{‘} ))}
$$

其中$\gamma$是一个softmax函数的平滑系数,是一个经验参数。

注意: 分母中有一个粗体的$\boldsymbol{D}$ 表示与$Q$对应的的所有doc的集合, 该集合包含如下内容:

  1. 在训练样本中与 $Q$ 相关的所有doc的集合(正例),下文中用$D^+$表示与 $Q$ 相关的doc
  2. 在训练样本中,相对于每个 $Q$ ,还随机从数据库中选择了4个负例(与 $Q$ 不相关的doc),下文中用 $D^-$表示 。

集合 $\boldsymbol{D}$包含与$Q$对应的所有$D^+$ 和$D^-$ ,即:

$$
D^+ \in \boldsymbol{D} \\
D^- \in \boldsymbol{D}
$$

模型的目标函数就是给定$Q$时所有正例的最大似然。损失函数取其负对数:
$$
\begin {aligned}
L(\Lambda) &= - \log \prod_{(Q,D^+)} p(D^+ | Q) \\
&= - \sum_{(Q,D^+)} log p(D^+ | Q)
\end {aligned}
$$

Word Hashing

由于DSSM的输入数据是 one-hot 编码,如果直接将其放入圣经网络中计算将会带来两个问题:

  1. vocabulary太大,输入层的稀疏向量将会具有非常高的维度。
  2. 会出现 oov (out of vocabulary)的问题

Word Hashing的设计就是为了解决以上问题的。他是基于字母级别的n-gram设计的。如单词 good:

  1. 在单词两端加入临界符号 #good# 。
  2. 按照n-gram将其分割为多个部分,如trigrams 将得到[#go, goo, ood, od#]四个部分。
  3. 单词good 将用[#go, goo, ood, od#] 的向量表示。

这种方式可以非常有效的解决 vocabulary 太大的问题,因此英文单词才26个,3个字母的组合都是有限的)。另外也不会出现 oov 问题, 举个例子:discriminative,discriminate,discrimination 三个单词的意思很像,他们的Word Hashing中也有大部分是相同的。

这样两个不同的单词也有可能具有相同的tri-grams,针对这个问题paper里面做了统计,这个冲突的概率非常的低,500K个word可以降到30k维,冲突的概率为0.0044%。

Word Hashing在英文场景下很有效,但是中文场景估计就没有这样的效果了吧。

CLSM

CSSM的一个重要不足是它将整个query/doc作为一个bag处理,没有考虑到term的上下文信息,文本的上下文信息丢失。如. “我爱你”和“你爱我”将会映射到同一个y(特征向量)。

CLSM(Convolutional latent semantic model)于2014年提出,又称CDSSM。它是解决了CSSM的文本上下文丢失问题。在模型结构上,它将DSSM的DNN换成了CNN,这也是其名称中Convolutional 的由来。

模型结构

入上图所示,对于一个query/doc的语义向量$y$ 的训练过程可以分为如下5个步骤:

(0) 预处理阶段:将句子的开头和结尾加上pading符, 上图中的<s>

(1) a word-n-gram layer obtained by running a contextual sliding window over the input word sequence (i.e., a query or a document),
按照固定大小(上图中是3)的滑动窗口从输入句子中提取word-n-gram层

(2) $l_t$ :a letter-trigram layer that transforms each word-tri-gram into a letter-trigram representation vector,
将word-n-gram层的每个word用3-gram的word hashing表示(每个word可以表示为30K维的向量),word-n-gram层($n=3$)中的每个bag可以表示成$30K \times 3 = 90K$维度的向量

(3) $h_t$ :a convolutional layer that extracts contextual features for each word with its neighboring words defined by a window
以固定大小的窗口对letter-trigram layer每个bag的90K维度的向量做卷积,每个bag映射到300维的向量上得到convolutional layer。卷几层的激活函数使用$tanh$
$$
tanh(x) = \frac {1-e^{-2x}}{1+e^{-2x}}
$$
到此时为止word-n-gram layer、letter-trigram layer和convolutional layer三层,每一层包含bag的数量是和句子的长度有关的,句子越长bag数量越多

(4) $v$ :a max-pooling layer that discovers and combines salient word-n-gram features to form a fixed-length sentence-level feature vector,
$$
v(i) = \max_{t=1,\dots,T} \{h_t(i)\} , i=1,\dots,K
$$
其中$v(i)$为$v$的第$i$个维度,$T$为卷几层包含的向量的个数,K为卷积层每个向量的维度(都是一样的),K也是$v$的维度

(5) a semantic layer that extracts a high-level semantic feature vector for the input word sequence
最后通过一个非线性映射得到语义向量$y$ :
$$
y=\tanh(W_s \cdot v)
$$

损失函数

与DSSM相同


分割线,coding工作繁忙,先写这些,回头在补!

DSSM-LSTM

如上文所述,DSSM不能够很好的捕捉上下文信息,所有使用LSTM替换DSSM的DNN使其能够捕捉到文本的上下文信息。

MV-DSSM

该模型主要是用于推荐系统。

参考资料

DSSM: Learning Deep Structured Semantic Models for Web Search using Clickthrough Data

CLSM: A Latent Semantic Model with Convolutional-Pooling Structure for Information Retrieval

DSSM-LSTM:Semantic Modelling with Long-Short-Term Memory for Information Retrieval

MV-DSSM:A Multi-View Deep Learning Approach for Cross Domain User Modeling in Recommendation Systems