zoukankan      html  css  js  c++  java
  • 深度语义匹配模型-DSSM 及其变种

    转自:http://ju.outofmemory.cn/entry/316660

    感谢分享~

    DSSM这篇paper发表在cikm2013,短小但是精炼,值得记录一下 
    ps:后来跟了几篇dssm的paper,一并记录在这里

    DSSM

    DSSM的结构

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

    1. 字面匹配: TFIDF 、 BM25 
    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) $$

      这里的 是激活函数,文中使用$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 估计没有这么有效了 
    因为直接使用了word hashing,因为无法记录上下文信息

    训练DSSM

    上面是前向计算过程,在进行训练的时候需要计算给定 Query 下与 Doc 的相关性: 
    $$P(D|Q) = frac{exp(gamma R(Q,D))}{sum_{d_i in D} exp(gamma R(Q,D))}$$

    最终他需要优化的损失函数为: 
    $$L(Lambda) = - ext{log} prod_{(Q,D^+)} P(D^+|Q)$$

    $D^+$表示被点击的文档,这里就是最大化点击文档的相关性的最大似然

    CDSSM

    CDSSM (又称 CLSM :Convolutional latent semantic model)在一定程度上他可以弥补 DSSM 会丢失上下文的问题,他的结构也很简单,主要是将 DNN 替换成了 CNN


    他的前向步骤主要计算如下: 
    1. 使用指定滑窗大小对输入序列取窗口数据(称为 word-n-gram ) 
    2. 对于这些 word-n-gram 按 letter-trigram 进行转换构成representation vector(其实就是 Word Hashing 
    3. 对窗口数据进行一次卷积层的处理(窗口里面含有部分上下文) 
    4. 使用 max-pooling 层来取那些比较重要的 word-n-gram 
    5. 再过一次FC层计算语义向量 
    6. 他最终输出的还是128维 

    > 因为使用 CDSSM 来做语义匹配的工作也是比较合适的 

    ## DSSM-LSTM 
    既然是为了记录输入句子的上下文,这个无疑是 Lstm 这个模型更为擅长,因此又有了一种 Lstm 来构造的 DSSM 模型 

    这篇相对于 CDSMM 来说改的更为简单,其实就是将原始 DSSM 的模型替换为了 LSTM 模型…

    MV-DSSM

    MV-DSSM 里面的 MV 为 Multi-View ,一般可以理解为多视角的 DSSM ,在原始的DSSM中需要训练的有 Query 和 Doc 这两类的embedding,同时里面DNN 的所有权重都是共享的,而 MV-DSSM 他可以训练不止两类的训练数据,同时里面的深度模型的参数是相互独立:


    基于 Multi-View 的 DSSM 是的参数变多了,由于多视角的训练,输入的语料也可以变得不同,自由度也更大了,但是随之带来的问题就是训练会变得越来越困难^_^

    总结

    DSSM 类的模型其实在计算相似度的时候最后一步除了使用Cosine,可能再接入一个MLP会更加好,因为Cosine是完全无参的。

    DSSM 的优势:

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

    DSSM 的劣势:

    1. 用户信息较难加入(不过可以基于 MVDSSM 改造)
    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. Shen, Yelong, et al. “A latent semantic model with convolutional-pooling structure for information retrieval.” Proceedings of the 23rd ACM International Conference on Conference on Information and Knowledge Management. ACM, 2014.
      3. Palangi, Hamid, et al. “Semantic modelling with long-short-term memory for information retrieval.” arXiv preprint arXiv:1412.6629 (2014).
      4. Elkahky, Ali Mamdouh, Yang Song, and Xiaodong He. “A multi-view deep learning approach for cross domain user modeling in recommendation systems.” Proceedings of the 24th International Conference on World Wide Web. International World Wide Web Conferences Steering Committee, 2015.
  • 相关阅读:
    Makefile与shell脚本区别
    Linux fdisk命令参数及用法详解---Linux磁盘分区管理命令fdisk
    李洪强iOS开发之XMPP
    李洪强iOS开发之宏定义方法来初始化一个单例对象
    李洪强iOS开发之拓展篇—UIDynamic(简单介绍)
    李洪强iOS开发之【零基础学习iOS开发】【02-C语言】07-基本数据类型
    李洪强iOS开发之OC[018]对象和方法之间的关系
    李洪强漫谈iOS开发[C语言-011]
    李洪强iOS开发之静态库
    李洪强iOS开发之【零基础学习iOS开发】【02-C语言】06-变量与内存
  • 原文地址:https://www.cnblogs.com/baiting/p/7195998.html
Copyright © 2011-2022 走看看