Abstract
短文本匹配是指使用 NLP 模型預測兩個文本的語義相關性,很多領域內都有它的身影,比如:信息檢索(information retrieval)、問答系統(question answering system)、對話系統(dialogue system)。本文將回顧近年來基於神經網絡的表現較好的一些文本匹配算法。首先會介紹一下 DSSM 模型,它使用神經網絡將文本表示為特征向量,然后使用兩個特征向量之間的余弦相似度衡量文本之間的匹配度。然后介紹基於 word 交互的模型,比如:DRMM、MatchPyramid、Bert,它們從兩個文本中的 “單詞對” 的相似性中提取語義匹配特征,以捕獲文本之間更詳細的交互信息。同時,本文還基於模型的有效性和時間復雜度分析了每種算法的應用場景。
Introduction
短文本匹配是一種被廣泛使用的 NLP 技術,它旨在對文本語義關系建模。信息檢索(information retrieval)、問答系統(question answering system)、對話系統(dialogue system)等是它主要的應用領域。
在信息檢索問題中,用戶想找到和給定查詢相關的文檔。對於搜索引擎來說,如何對給定的查詢匹配到合適的文檔是至關重要的。文本匹配還能被用來在問答系統中為問題匹配到合適的答案,這對自動客服機器人非常有幫助,可以大大降低人工成本。
最近的研究表明基於神經網絡的文本匹配算法要優於傳統的文本匹配算法,例如:TFIDF、LSA、LDA 等等。使用神經網絡表示文本、學習文本之間的交互模式將會使模型能夠挖掘出文本之間復雜的語義關系。
近些年來出現了很多基於神經網絡的文本匹配算法,但是本文只關注其中效果較好的算法,考慮到有效性和低時間復雜度,文本着重介紹 DSSM、DRMM、Match-Pyramid 以及 BERT。還有一些出名的方法,例如 ARC、DURT,但是由於它們在空間復雜度上的限制,本文將不會介紹它們。
DSSM (Deep Structured Semantic Models)
DSSM 是一個非常出名的短文本匹配算法,它首先被應用於 Web 搜索應用中匹配查詢 (query) 和相關文檔 (documents)。DSSM 使用神經網絡將查詢 (query) 和文檔 (documents) 表示為向量,兩向量之間的距離被視為它們的匹配得分。目前 DSSM 結構中的表示部分有三種不同的神經網絡可以選擇,接下來將會一一介紹。
Feed-Forward Network Based DSSM
基礎版本的 DSSM 使用前向傳播神經網絡表示 query 和 document,如上圖所示
輸入的 query 和 documents 首先被表示為 bag of triple-gram letters。舉個例子,“#good#” (加上 “#” 用來區分中間位置的字母和開始、結尾位置的字母),它的 letter trigram 為:“#go”、“goo”、“ood”、“od#”,最早提出 DSSM 的論文將這種方法稱為 word hashing,為什么叫做 word hashing 呢?這里先解釋一下這么做的好處,之后解釋一下為什么叫做 word hashing。這么做的好處主要有兩個:
- 由於使用 letter trigram,許多單詞之間就會出現同樣的 pattern,這樣就可以顯著降低 vocabulary size,也就大大降低了底層神經網絡的計算量
- 使用 letter trigram 表示可以使得對於拼寫錯誤的單詞更加魯棒,正確拼寫的片段仍然可以被有效使用。
表示成 bag of triple-gram letters 之后,再使用 one-hot 表示,出現 letter trigram 的那個維度被設置為 1,未出現的為 0。通過神經網絡之后被表示成更加稠密的低維特征向量。將 query 和其最相關的文檔 (positive document) 之間的余弦相似度記為 \(s^+\),和其第 \(i\) 個不相關的文檔 (negative document) 之間的余弦相似度記為 \(s^-_i\),假設共有 N 個不相關文檔,訓練 DSSM 的損失函數如下:
其中 \(\gamma\) 是超參數,用於控制 softmax 函數的平滑度。最小化這個損失函數就能使得最相關的文檔匹配得分越來越高,不相關的文檔匹配得分越來越低。這個過程將會使得 DSSM 能夠對給定的 query 從一堆文檔中將最相關的文檔辨別出來。
word hashing
word hashing 指的是將 word 通過某種方式轉換成一種唯一的表達方式,在這里就是通過 letter-trigram 的方式,但是卻很難做到唯一,這也是一般哈希過程會出現的問題——哈希沖突,理想狀態下,我們希望每個詞都能得到唯一的表達方式,但是當詞特別長時,letter-trigram 的組合就會特別多,就有可能出現這個詞的 letter-trigram 以某種順序結合可以成為另一個合法的 word (沒想到好的例子😂)。 DSSM 原文中有一個統計表:
這個表主要說明了當 letter n-gram 的 “n” 越小,vocabulary size 減小的幅度越大,對比 Letter-Bigram 和 Letter-Trigram 會發現 word size 不管是 40k 還是 500k,Letter-Bigram 的 token size 都更小,這非常正常,因為截取的 word 片段粒度越小,word 中特有的模式也就越容易被丟失,共同的片段就越多,所以 vocabulary size 就更小,但可以看到當失去特性時,也就越容易發生哈希沖突,表中的 collision 都是 Letter-Trigram 更小。綜合來說 Letter-Trigram 對 vocabulary size 的減小和 collision 的控制做到了不錯的平衡。
Convolutional DSSM (CDSSM)
不同於基礎版本的 DSSM,CDSSM 使用了卷積的操作,使用一個固定大小的窗口在文本序列上滑動,期望獲得局部上下文特征 (lcoal contextual feature),比如窗口大小為 3,那么一些長度為 3 的短語將會被捕捉到。同時,CDSSM 的表示更加精細,基礎版 DSSM 直接將所有詞的 letter-trigram 一視同仁,類似於詞袋的做法,出現就是 1,那么一個 query 或者 document 將會一步到位被表示成一個長度為 trigram vocabulary size 的 one-hot 向量。而 CDSSM 將一個窗口內的詞首先通過 letter-trigram one-hot 向量表示,最終將一個窗口內的所有詞拼接,比如說窗口為 3,trigram vocabulary size 為 30k,那么一個窗口內的特征將被表示為一個長度 30*3=90 k 的向量。
接下來將會有一個特征轉換矩陣 \(W_c\),它將 90k 的向量轉換成一個比如說 300 維的特征向量,同時經過 tanh 激活。這個過程也很符合直覺,90 k 維的稀疏向量計算量將會較大,所以首先要降維,將 local contextual feature 變成更加稠密的低維向量。然后對這個向量進行序列長度維度上的最大池化,得到一個不隨長度變化的 sentence-level 的特征向量。經過這一步基本得到了 query 和 document 的向量表示
損失函數和基礎版本一致。
LSTM-DSSM
簡單來說,和 CDSSM 相比,就是使用 LSTM 代替卷積和池化操作得到最終的文本表示。原文中並沒有描述 \(x(m)\) 是一種什么樣的表示,這里暫且認為和 CDSSN 采用了同樣的做法,也就是letter-trigram 的 one-hot 表示,那么 \(x(m)\) 就是一個 30k,同樣 \(W_h\) 的作用可以認為和 CDSSM 中的 \(W_c\) 一樣。然后就是輸入到 LSTM 中,原文采用的 LSTM 並不是原始版本,是一種帶 "peephole connections" 的變體,其實就是讓 cell state 參與了三個門控值的決定 。最后,使用 LSTM 最后一個時間步的隱藏狀態表示整個 query 或者 document,之后的步驟也就和前面一致了,計算余弦相似度,計算損失函數。
Deep Relevance Matching Model (DRMM)
DRMM 基於 word-level 對文本進行匹配,首先計算 word 交互矩陣 (word interaction matrix),然后其中抽取高層級特征。
對於每一個 query word \(q_i\),計算一個 term gate,用於最后的得分加權:
\(w\) 是一個可學習參數,其實這個過程和 attention 有些類似,本質上都是希望給更重要的特征以更大的權重。
然后對 query 和 document 中的 word 兩兩計算余弦值:\(s_{ij}=cosine(q_i,d_j)\),其中,\(q_i,d_j\) 分別代表 query 中的第 \(i\) 個 word、document 中第 \(j\) 個 word。
對於第 \(i\) 個 query word 的 \(s_{i1}\) 到 \(s_{iD}\) 進行直方圖統計,將余弦值范圍 [-1, 1] 分成幾個區間,分別統計每個區間內的 word 數量,以此形成特征向量,反映第 \(i\) 個 query word 與 document 的匹配狀態。將直方圖特征向量輸入到神經網絡中得到第 \(i\) 個 query word 與 document 的匹配得分 \(m_i\),最后利用前面得到的權重加權 query 中每一個 word 對 docuemnt 的匹配得分得到整個 query 與 document 的匹配得分:
損失函數與 DSSM 系列方法不太相同,DRMM 使用的是 pairwise ranking loss:
當模型剛開始訓練時,\(s(q,d^+)\) 不一定靠近 1,\(s(q,d^-)\) 也不一定靠近 -1,此時,max 函數的第二項大概率是一個正值,當模型接近收斂時,\(s(q,d^+)\) 靠近 1,\(s(q,d^-)\) 靠近 -1,max 函數的第二項大概率是一個負值,也就是說經過 max 函數后損失為 0,所以這個損失函數的優化方向是符合我們要求的。
MatchPyramid
DRMM 在 matching matrix 的基礎上需要人工指定直方圖中 bins 的范圍,而 MatchPyramid 則避免了這個問題,它使用 CNN 從 matching matrix 中學習特征表示,matching matrix 依然由 query 和 document 中兩兩 word 的余弦值組成,最終 matching matrix 類似於單通道圖片的像素矩陣。
這種做法的動機是什么呢,為什么有效呢?原文中有這么個例子:
上圖中存在三種 Matching 信號:
- word level matching signals:指的是兩文本中 words 之間的 matchings,不僅僅是只完全一樣的 word 還包括語義相近的 word (famous-popular, chinese-china)
- phrase level matching signals:指的是短語、詞組之間的 matchings,包括 n-gram 和 n-term。n-gram 指的是 完全匹配的短語或詞組,例如上圖中的 “(down the ages)--(down the ages)”,而 n-term 指的是語序以及語義上的另一種表達方式,例如:“(noodles and dumplings)--(dumplings and noodles)”,“(were famous chinese food)--(were popular in china)”
- sentence level matching signals:指的是句子之間的 matchings,其可以有由多個低層級的 matching signals 組成。
綜上,文本之間的交互結構是由層次結構組成的,可以通過組合較低級別的信號獲得較高級別的信號,這個過程和圖像識別非常類似,所以使用 CNN 就是理所當然的了。
BERT for Short Text Matching
bert 的做法比較簡單,將兩文本作為 sentence pair 直接輸入到 bert 中,最后使用 CLS 的特征向量回歸得到 matching score,得益於 bert 強大的表示能力,此方法的表現超出其他方法特別多。
Model Selection in Real-World Applications
DSSM 使用兩文本之間的余弦相似度衡量匹配度得分,而余弦相似度的計算是非常快的,並且由於在計算余弦相似度之前 query 和 document 之間並沒有交互,所以可以預先計算好 document 的特征向量並進行存儲,當出現新的 query 時,只需要對較短的 query 進行推理得到特征向量,然后和存儲好的 document 特征向量計算余弦相似度,最后依據相似度得分對文檔進行排序展示給用戶。這使得 DSSM 非常適用於要求實時推斷文本相似性的線上服務。
對於余弦相似度的計算還有一種近似算法,ANN (approximate nearest neighbor) 搜索,它使用某種索引結構 (index structure) 避免 query 和所有的 document 進行比較計算,具體的細節這里就不展開了。感興趣的可以了解一下 HNSW 和 Faiss。
DSSM 沒有直接使用 word level 的交互特征計算匹配得分,這限制了其在短文本匹配上的應用。而 DRMM、MatchPyramid 以及 BERT 充分利用了基於 word 交互特征的細粒度匹配信息,所以它們的表現普遍更好。然而,也正是由於 word level 的交互,導致無法使用像 DSSM 那樣事先計算好 document 特征向量的方式進行加速。
如果線上效率非常重要,DRMM 是一個不錯的選擇。由於 DRMM 的主要結構是一個前向傳播神經網絡,它要比使用 CNN 的 MatchPyramid 以及 BERT 快很多。BERT 的表現通常比其他算法都要更好,但是由於它的結構過於復雜了,並且時間開銷遠大於其他算法,所以通常它適用於時間效率不是主要約束的更注重表現的場景。MatchPyramid 對時間復雜度和匹配表現兩個要求做到了不錯的平衡。
小結
本文所描述的四個模型可以細分為 “表示模型” 和 “交互模型”,DSSM 模型就是一個典型的表示模型,因為 DSSM 只是使用神經網絡將 query 和 document 各自互相不影響地表示成特征向量,然后直接計算余弦相似度。而 DRMM、MatchPyramid 以及 BERT 都是在底層也就是非常靠近原始輸入的階段進行 query 和 document 的交互,比如 MatchPyramid,利用 CNN 對由 query word 和 document word 余弦相似度組成的 matching matrix 提取各層級的 matching signals。BERT 的交互來自於 query 和 docuemnt 的 attention,最終得到 query 和 document 更好的表示,個人認為 MatchPyramid 和 BERT 雖然都屬於交互模型,但實際上交互的方式不同,MatchPyramid 更偏向於 Relevance Matching,BERT 更偏向於 Semantic Matching。MatchPyramid 在語義方面主要體現在 matching matrix 的計算上,這個階段較早,后期更注重相關性的匹配;而 BERT 的整個前向過程似乎都是語義的深度交互,最后提一下實際上 BERT 也可以作為表示模型使用,如下圖所示。