1. 文本相似度計算-文本向量化
2. 文本相似度計算-距離的度量
3. 文本相似度計算-DSSM算法
4. 文本相似度計算-CNN-DSSM算法
1. 前言
最近在學習文本相似度的計算,前面兩篇文章分別介紹了文本的向量化和文本的距離度量,這兩篇文章的思路主要在機器學習的框架下面,本文准備換一個思路,從深度學習的角度來處理文本相似度的問題。
本文介紹DSSM(Deep Structured Semantic Models)深度學習架構。
2. DSSM原理
DSSM的原理很簡單,通過搜索引擎里Query和Doc的海量的點擊曝光日志,用DNN把Query和Doc轉化為低緯語義向量,並通過cosine距離來計算兩個語義向量的距離,並且根據用戶的點擊選擇Doc當做標簽值進行有監督學習,最終訓練出語義相似度模型。該模型既可以用來預測兩個句子的語義相似度,又可以獲得某句子的低緯語義向量表達。
這里的一個重要的概念是低緯語義向量,它的意思是把一句文本通過一定的方式轉換到一個固定維度的空間上,這樣就可以對不同句子間計算相似度了。然后我們的任務就是需要去找各種方法在盡量保存文本本身信息的情況下,獲得一個低維語義向量。AutoEncoder算法也是一種獲得低緯語義向量的方法。
2.1 DSSM架構
DSSM的架構圖如下所示:
我們從下到上的看數據流動的過程。
輸入數據:\(Q\)代表用戶的輸入,\(D_i\)代表比對的第\(i\)個文檔。
- Term Vector層可以理解為輸入層,我們簡單的理解成把文本做one-hot處理后的詞向量。這一層的矩陣維度在50W左右,矩陣太大,並且太稀疏,不容易訓練。
- Word Hashing層可以理解為數據預處理層,這一層主要是通過n-gram的方式降低矩陣維度。舉個例子,假設用letter-trigams來切分單詞(3個字母為一組,#表示開始和結束符),boy這個單詞會被切為#-b-o,b-o-y,o-y-#。這樣做的好處有兩個:首先是壓縮空間,50萬w個詞的one-hot向量空間可以通過letter-trigram壓縮為一個3w維的向量空間。其次是增強范化能力,三個字母的表達往往能代表英文中的前綴和后綴,而前綴后綴往往具有通用的語義,在通過BOW對文本向量化。
這里之所以用 3 個字母的切分粒度,是綜合考慮了向量空間和單詞沖突:
以50w個單詞的詞庫為例,Bigram的切分粒度的單詞沖突為1192(沖突的定義:至少有兩個單詞的letter-bigram向量完全相同),而TriGram的單詞沖突降為22效果很好,且轉化后的向量空間3w維不是很大,綜合考慮選擇TriGram的切分粒度。
- Multi-layer nonlinear projection這一層就是DNN的處理了。上面的架構圖中畫了3層DNN結構。做了一個降維操作,3w->300->300->128。
- Relevance層是把Query的向量和Doc中的所有向量做一個cosine的相似度計算。
- softmax層把計算出的概率進行歸一化輸出。
最終的loss是
2.2 DSSM優缺點
從整體上看,DSSM還是對傳統的機器學習和深度學習的方法進行了組合,先用n-gram進行矩陣壓縮,再通過DNN網絡進一步壓縮,再通過cosine計算相似度,softmax輸出歸一化的相似度概率。
- 優點:
- DSSM 用字向量作為輸入既可以減少切詞的依賴,又可以提高模型的范化能力,因為每個漢字所能表達的語義是可以復用的。
- 傳統的輸入層是用Embedding的方式(如Word2Vec的詞向量)或者主題模型的方式(如LDA的主題向量)來直接做詞的映射,再把各個詞的向量累加或者拼接起來,由於Word2Vec和LDA都是無監督的訓練,這樣會給整個模型引入誤差,DSSM采用統一的有監督訓練,不需要在中間過程做無監督模型的映射,因此精准度會比較高。
- 缺點:
- 上文提到 DSSM 采用詞袋模型(BOW),因此喪失了語序信息和上下文信息。
- DSSM采用的是端到端的模型,預測結果不可控。
- DSSM是弱監督模型,因為引擎的點擊曝光日志里Query和Doc的語義信息比較弱。首先搜索引擎有自己的排序算法,排序算法決定了那些Doc顯示在第一頁。因為第一頁的被點擊率大大大於后面的Doc的點擊率。所以用戶點擊第一頁的概率的置信度不是太高。