1. 程式人生 > >深度語義匹配模型-DSSM 及其變種

深度語義匹配模型-DSSM 及其變種

字母 pooling 獨立 層次 ssm 一次 nag hot lsa

轉自: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) $$

    這裏的 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 估計沒有這麽有效了
因為直接使用了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) = - \text{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.

深度語義匹配模型-DSSM 及其變種