轉自:http://ju.outofmemory.cn/entry/316660
感謝分享~
DSSM這篇paper發表在cikm2013,短小但是精煉,值得記錄一下
ps:后來跟了幾篇dssm的paper,一並記錄在這里
DSSM
DSSM的結構
DSSM 最大的賣點在檢索場景下 使用點擊數據來訓練語義層次的匹配,簡單的來說,傳統檢索場景下的匹配主要有:
- 字面匹配:
TFIDF、BM25等 - 使用
LSA類模型進行語義匹配,但是效果不好
而DSSM訓練出來之后,檢索場景下用戶輸入query之后,可以根據該query計算各個doc的語義相似度。
這里上圖最直接:
上面是 DSSM 訓練的架構圖:
- 輸入的是一個
query和這個query相關的doc,這里的輸入特征可以是最簡單的one-hot,而需要train的是這個query下各個doc的相關性(DSSM里面使用點擊率來代替相關性) -
由於這種
one-hot的輸入可能會有兩個問題:- 導致
vocabulary太大 -
會出現
oov的問題因此輸入特征之后的第一層是做一個叫做
Word Hashinging的操作
- 導致
- 接下來就是傳統的神經網絡了
$$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}}$ - 得到的$y$就是語義特征了,query和doc之間的相關性就可以直接使用特想之間的相似性來度量,這里使用cosine來計算
$$R(Q,D)=cosine(y_Q,y_D) = \frac{y_Q^Ty_D}{||y_Q||||y_D||}$$ - 最終得到的相似度就可以去訓練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 的優勢:
DSSM看起來在真實檢索場景下可行性很高,一方面是直接使用了用戶天然的點擊數據,出來的結果可行度很高,另一方面文中的doc可以使用title來表示,同時這個部分都是可以離線進行語義向量計算的,然后最終query和doc的語義相似性也是相當誘人DSSM出的結果不僅可以直接排序,還可以拿中間見過做文章:semantic feature可以天然的作為word embedding嘛
DSSM 的劣勢:
- 用戶信息較難加入(不過可以基於
MVDSSM改造) - 貌似訓練時間很長啊
參考
- 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.
- 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.
- Palangi, Hamid, et al. “Semantic modelling with long-short-term memory for information retrieval.” arXiv preprint arXiv:1412.6629 (2014).
- 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.
