文章目录
  1. 1. DSSM结构
  2. 2. Word Hashing
  3. 3. 总结
  4. 4. 参考

DSSM这篇paper发表在cikm2013,短小但是精炼,值得记录一下

DSSM结构

DSSM最大的卖点在检索场景下 使用点击数据来训练语义层次的匹配,简单的来说,传统检索场景下的匹配主要有:

  1. 字面匹配:TFIDFBM25
  2. 使用LSA类模型进行语义匹配,但是效果不好

而DSSM训练出来之后,检索场景下用户输入query之后,可以根据该query计算各个doc的语义相似度。

这里上图最直接:

上面是DSSM训练的架构图:

  1. 输入的是一个query和这个query相关的doc,这里的输入特征可以是最简单的one-hot,而需要train的是这个query下各个doc的相关性(DSSM里面使用点击率来代替相关性)
  2. 由于这种one-hot的输入可能会有两个问题:

    1. 导致vocabulary太大
    2. 会出现oov的问题

      因此输入特征之后的第一层是做一个叫做Word Hashinging的操作

  3. 接下来就是传统的神经网络了
    $$l_i=f(W_il_{i-1}+b_i),i = 2,…,N-1 \\
    y=f(W_Nl_{N-1}+b_N) $$

    这里的f是激活函数,文中使用$tanh$来计算:$f(x)=\frac{1-e^{-2x}}{1+e^{-2x}}$

  4. 得到的$y$就是语义特征了,query和doc之间的相关性就可以直接使用特想之间的相似性来度量,这里使用cosine来计算
    $$R(Q,D)=cosine(y_Q,y_D) = \frac{y_Q^Ty_D}{||y_Q||||y_D||}$$
  5. 最终得到的相似度就可以去训练query和doc的相关性了

因此整个结构就可以看做做了一层Word Hashing之后去训练DNN网络

Word Hashing

Word Hashing是paper非常重要的一个trick,以英文单词来说,比如good,他可以写成#good#,然后按tri-grams来进行分解为#go goo ood od#,再将这个tri-grams灌入到bag-of-word中,这种方式可以非常有效的解决vocabulary太大的问题(因为在真实的web search中vocabulary就是异常的大),另外也不会出现oov问题,因此英文单词才26个,3个字母的组合都是有限的,很容易枚举光。
那么问题就来了,这样两个不同的单词会不会产出相同的tri-grams,paper里面做了统计,说了这个冲突的概率非常的低,500K个word可以降到30k维,冲突的概率为0.0044%

但是在中文场景下,这个Word Hashing估计没有这么有效了

总结

DSSM的优势:

  1. DSSM看起来在真实检索场景下可行性很高,一方面是直接使用了用户天然的点击数据,出来的结果可行度很高,另一方面文中的doc可以使用title来表示,同时这个部分都是可以离线进行语义向量计算的,然后最终query和doc的语义相似性也是相当诱人
  2. DSSM出的结果不仅可以直接排序,还可以拿中间见过做文章:semantic feature可以天然的作为word embedding

DSSM的劣势:

  1. 用户信息较难加入
  2. 貌似训练时间很长啊

参考

  1. Huang P S, He X, Gao J, et al. Learning deep structured semantic models for web search using clickthrough data[C]// ACM International Conference on Conference on Information & Knowledge Management. ACM, 2013:2333-2338.

本作品采用[知识共享署名-非商业性使用-相同方式共享 2.5]中国大陆许可协议进行许可,我的博客欢迎复制共享,但在同时,希望保留我的署名权kubiCode,并且,不得用于商业用途。如您有任何疑问或者授权方面的协商,请给我留言

文章目录
  1. 1. DSSM结构
  2. 2. Word Hashing
  3. 3. 总结
  4. 4. 参考