2.1.1DRMM
2.2.1Position-Aware Neural IR Model
3.1DC-BERT
3.2polybert
一、語義匹配
1 基於特征表示
特點:學習 query 和 doc ( 放在推薦里就是 user 和 item ) 的 representation 表示,然后通過定義 matching score 函數,是個經典的雙塔結構。
整個學習過程可以分為兩步:
① 表示層:計算 query 和 doc 各自的 representation,包括DNN、CNN 或者 RNN
② 匹配層:根據上一步得到的 representation,計算 query-doc 的匹配分數,包括兩類:
1、直觀無需學習的計算,向量點積、cosine 距離;
2、引入了參數學習的網絡結構,如 MLP 網絡結構(接一個或者多個MLP,最后一層的輸出層只有一個節點,那么最后一層的輸出值就可以表示匹配分),或者 CNTN 模型(Neural Tensor Network)。
1.1DSSM
-
word hash:輸入層對於英文提出了word hash的方法,大大減少了原始one-hot輸入空間,中文最小單位就是單字了
-
表示層:詞到句的表示構建,或者說將序列的孤立的詞語的 embedding 表示,轉換為具有全局信息的一個或多個低維稠密的語義向量
-
匹配層:使用cosine表示query和doc的匹配分數
-
端到端學習:模型是個完全end-2-end的框架,包query和doc的embedding向量直接通過訓練得到不需要經過預訓練
-
缺點:對query和doc的表示都是bow,丟失了序列信息和上下文信息
原論文:based on<query, doc title >pairs,但也有based on the full text of the documents
1.2CNN_DSSM
特點:無論是 bow 的表示還是 DNN 全連接網絡結構的特點,都無法捕捉到原始詞序和上下文的信息,因而在表示層用CNN來替代DSSM的DNN層
總結下 CNN-DSSM 模型,對比原始 DSSM 模型主要區別如下:
-
輸入層除了letter-trigram,增加了word-trigram,提取了詞序局部信息
-
表示層的卷積層采用textCNN的方法,通過n=3的卷積滑動窗口捕獲query和doc的上下文信息
-
表示層中的池化層通過max-pooling,得到卷積層提取的每個feature map的最大值,從而一定程度的捕獲了全局上下文信息
卷積的時候,就類似抓取trigram信息,這個過程是保持局部的詞序信息的(局部統籌)。但是max-pooling的時候,又把次序信息丟失了,max-pooling類似一個全局統籌的操作,抓取最強的語義信息。也可以用其它的pooling操作,可以部分的保留次序信息,這里先不展開。另外,pooling還有一個作用,可以將變長的東西,變成定長的,因為神經網絡的神經元數目需要預先設定好,所以這個pooling的操作特別巧妙。但是max-pooling有個缺點是,例如query是ABCD,很有可能query是ABCDEFG的時候,max-pooling的結果不變,這個特性和很多匹配任務的場景是不一致的。
1.3LSTM-DSSM
總結 LSTM-RNN 模型的幾個特點:
-
相比於DSSM模型引入了LSTM網絡結構來捕捉次序的關系
-
LSTM最后一個隱層的輸出作為query和doc的representation
https://ai.51cto.com/art/201909/603290.htm LSTM-DSSM文本匹配模型在蘇寧商品語義召回上的應用
1.1.4bert
雙塔的方式, 把預訓練好的Bert當成一個編碼器,把query輸進去得到query的向量,把doc輸進去得到doc的向量,然后接一個簡單的match func(cosine 或者MLP)。
1.2.基於交互
特點:這種方法是不直接學習query和doc的語義表示向量,而是在底層,就讓query和doc提前交互,建立一些基礎的匹配信號,例如term和term層面的匹配,再想辦法把這些基礎的匹配信號融合成一個匹配分。更強調待匹配兩端更充分的交互,以及交互基礎上的匹配。所以不會在表示層將文本轉換成唯一的一個整體表示向量,而一般會保留和詞位置相對應的一組表示向量。一般來說效果更好一些,但計算成本會增加非常多,適合一些效果精度要求高但對計算性能要求不高的應用場景
1.2.1ARC-ii
-
讓兩個句子在得到它們各自的句子向量表示之前,提前交互,使用1D conv:
-
-
例如窗口大小為N=3,那么每次從兩個句子中分別取1個trigram,然后把兩個trigram的向量concat起來,然后使用一個卷積核進行卷積得到一個值
-
那么每兩個trigram進行卷積,就會得到一個矩陣,這個矩陣是兩個句子的基礎的匹配信號,這個矩陣類似圖像,是個2維的向量。
-
使用多個卷積核,就會得到多個矩陣,即tensor
-
-
得到多個有關兩個句子的基礎匹配信號的矩陣后,就可以像處理圖像一樣,處理每一個矩陣。常見的操作就是使用2D的卷積核。不斷的卷積,就會得到一個定長的向量,然后再接MLP,最后一層的輸出節點數目只有1,就得到了它們的匹配分。
優點是,有基礎的匹配信號矩陣,可解釋性強,而且卷積操作是保留次序信息的
缺點是,基於trigram的匹配,沒有unigram的匹配信號,不過這個稍微改一下就可以了;
另外沒有特別區分精確匹配(sim=1.0)和普通匹配信號(sim<1.0)
1.2.2MatchPyramid
-
-
和上文類似,只是這里不是trigram的基礎匹配信號,而是使用unigram的匹配信號,即word-level的匹配信號,每兩個詞的向量算cosine即得到兩個詞的相似度。那么兩個句子中每兩個詞都計算一遍相似度,就可以得到一個匹配矩陣,然后就可以像處理圖像一樣處理這個矩陣(用2D-CNN來提取匹配模式,或者更大片段的匹配信號):
-
1.2.3Match-SRNN
1.2.4bert
把query和title拼接,輸進去Bert,類似Bert里的NSP任務那樣,然后由最后一層的表示做pooling,或者由cls的表示,然后接MLP得到匹配分
用Bert來做匹配的好處是:
a.基於字粒度,減少OOV(未登錄詞)的影響,減輕分詞錯誤的風險,增強泛化能力。
b.使用positional embedding建模順序信號。
c.深層transformer結構,有足夠強的交互和建模能力。
d.使用海量無監督數據預訓練,在有監督樣本少的任務場景就是神一般的存在。
缺點是:
a.模型結構復雜,預測性能是瓶頸。
b.訓練耗GPU。
c.在有監督的訓練數據本來就有海量的時候,預訓練的方式優勢不明顯
總結一下:
-
Representation based:
-
-
重點是學習文本的句子表示;可以提前把文本的語義向量計算好,在線預測時,不用實時計算。
-
在學習出句子向量之前,兩者沒有任何交互,細粒度的匹配信號丟失。學習出來的向量可能是兩個不同向量空間的東西,通過上層的融合層和loss,強制性的拉近兩個向量。
-
-
interaction based:
-
-
有細粒度、精細化的匹配信號,上層進行更大粒度的匹配模式的提取;可解釋性好
-
在線計算代價大。
-
1.3改進方向
為了更好實現語義匹配、邏輯推理,需要 model 深度信息,可以從如下角度改進上述基礎 SE、SI 網絡:
-
結合 SE 與 SI 網絡:兩者的作用並非誰是誰子集的關系,是相互補充的關系,簡單加權組合即可。
-
考慮詞語的多粒度語義信息:即在基礎模型基礎上分別對 unigram、bigram、trigram 進行建模,從而 model 文本的word、term、phrase 層面的語義信息,融合的方式不唯一,在輸入層、表示層、匹配層都可以嘗試,通常來說越早融合越好提升效果,因為更早發揮了多粒度間的互補性。可參考騰訊的 MIX,百度的SImnet
-
引入詞語的多層次結構信息:即引入 term weight、pos、word position、NER 等層面的 element-wise 信息到語義信息中。可參考騰訊的 MIX。
-
引入高頻 bigram 和 collocation 片段:比基本切詞更大的短語片段粒度會不會進一步提升效果?理論上越大的文本片段,表義越精確,但也越稀疏。詞語粒度下的詞表已可達百萬量級,再增加更大片段壓力太大,而且還會面臨訓練不充分問題。我們設計了一種巧妙的統計量度量方式,基於大數據只挑選少量對匹配任務有很好信息量的高頻共現 Term 組合,作為 Bigram 詞加入字典,進一步顯著提升了模型效果。舉個例子,我們輸入語料「汽車藍牙自動連接」,利用基本分詞工具,可以把序列分割為「汽車 藍牙 自動 連接」四個 Term。此時,我們依據大數據下的統計分析,可以發現「汽車-藍牙」的統計量得分最高,「自動-連接」次之,「藍牙-自動」最小,那么依照設定的統計量閾值,我們就得到了基於 Bigram 粒度的輸出。
以上方式比較適合於連續 Term 共現組合,而對文本語義來講,有時候一些跨詞的 Collocation 搭配也非常重要。我們使用依存句法分析工具來獲得相應的 Collocation 片段。還是上面的例子,輸入語料「汽車藍牙自動連接」。此時,我們對輸入語料構建依存分析樹,統計父節點和子節點共現頻率,最終認為「藍牙-連接」顯得比「自動-連接」重要,因此最終輸出就成了「汽車-藍牙 藍牙-連接」。
-
參考 CTR 中 FM,處理業務特征:如美團的排序算法演進中,參考了 CTR 中的 wide&deep 模型來添加業務特征,即,有的業務特征不做變換直接連接到最外層,有的業務特征做非線性變化后不夠充分,會再進行多項式非線性變換。
-
對兩文本中的差異部分單獨建模:即在基礎模型基礎上,再使用一個單獨模型處理兩文本差異部分,強化負樣本的識別能力。可參考 HIT 的 GSD模型。
-
引入混合學習策略:如遷移學習,可參考 MT-hCNN;如多任務學習;以及兩者多種方式的組合,具體比較可參考 HIT 的 DFAN,如引入多任務學習和基於 Seq2Seq 的遷移學習的混合策略效果可能最好。
-
在實際應用中,除了模型算法之外,還有很多因素會對最終效果產生很大的影響。其中最重要的就是數據,還有就是應用場景的特點。
對深度學習模型來講,數據的規模是非常關鍵的。在網頁搜索應用上的成功,有個很重要的因素就是有海量的用戶點擊數據。但是光有數量還不夠,還要看數據如何篩選,正例負例如何設定,特別是負例如何選擇的問題。例如在網頁搜索應用中,如果不考慮頻次問題,可能訓練數據的絕大部分構成都是高頻 Query 數據,但高頻 Query 的搜索效果一般是比較好的了。另外,有的 Query 有點擊的網頁很多,有的很少,能組成的正負 pair 數差別會很大,這時候如何處理?而對於負例,數量和質量上還應該考慮哪些因素?這些問題都至關重要,不同的數據設計方式會極大地影響最后效果。
應用場景同樣很重要。比如最終匹配度得分就是最終的結果,還是作為下一層模型的特征輸入?如果作為下一層輸入的話,對得分的可比性有沒有要求?最終的任務是分類還是排序,是排序的話排序的優化目標和訓練中的優化目標如何可以做的更一致?這其中有一些會影響到對數據的組織方式,有一些需要針對性的對一些模型超參數做調整。例如前文 loss 中 margin 的具體設定,會影響到准確率指標和得分區分性之間的一些折中變化。
1.4傳統語義匹配模型
3.1tf-idf
3.2bm25
-
BM25 方法核心思想是,對於 query 中每個 term,計算與當前文檔 doc 的相關性得分,然后對 query 中所有 term 和 doc 的相關得分進行加權求和,可以得到最終的 BM25
-
對於 query 的表示采用的是布爾模型表達,也就是 term 出現為 1,否則為 0;
圖 BM25 公式為 query 中所有 term 的加權求和表達,可以分為兩部分,第一部分是每個 term qi的權重,用 IDF 表示,也就是一個 term 在所有 doc 中出現次數越多,說明該 qi對文檔的區分度越低,權重越低。
公式中第二部分計算的是當前 term qi與 doc d 的相關得分,分子表示的是 qi在 doc 中出現的頻率;分母中 dl 為文檔長度,avgdl 表示所有文檔的平均長度,|d|為當前文檔長度,k1和 b 為超參數。直觀理解,如果當前文檔長度|d|比平均文檔長度 avgdl 大,包含當前 query 中的 term qi概率也越高,對結果的貢獻也應該越小。
3.3隱式模型:一般是將query、title都映射到同一個空間的向量,然后用向量的距離或者相似度作為匹配分,例如使用主題模型
3.4通過將 doc 映射到 query 的空間的,然后在 query 的空間進行匹配。這種方法和機器翻譯中,將源語言映射到目標語言的做法是一致的,因此又稱為基於 translation 的方法。
-
詞義局限:字面匹配無法處理同義詞和多義詞問題,如在美團業務場景下“賓館”和“旅店”雖然字面上不匹配,但都是搜索“住宿服務”的同義詞;而“COCO”是多義詞,在不同業務場景下表示的語義不同,可能是奶茶店,也可能是理發店。
-
結構局限:“蛋糕奶油”和“奶油蛋糕”雖詞匯完全重合,但表達的語義完全不同。 當用戶搜“蛋糕奶油”時,其意圖往往是找“奶油”,而搜“奶油蛋糕”的需求基本上都是“蛋糕”。
1.5 Representation & Interaction Based Model(可嘗試)
Learning to Match Using Local and Distributed Representations of Text for Web Search
-
二、相關性匹配
相似度!=相關性,區別是:
-
相似性:
-
-
判斷兩個句子語義、意思是否相似
-
一般是同質的兩段文本,例如兩個句子、兩個文章(長度接近,屬性類似)
-
在兩段文本的不同位置進行匹配
-
匹配函數是對稱的,因為是同質的文本進行匹配
-
代表性任務:同義句子識別
-
-
相關性:
-
-
判斷文檔和搜索query是否相關
-
不同質的兩段文本,例如一個是query,一個是網頁,長度不一樣
-
在網頁的不同部分進行匹配,例如title、錨文本(鏈接對應的文本)、正文
-
匹配函數不是對稱的,因為不是同質的文本進行匹配
-
代表性任務:query-網頁檢索 .例如query和網頁,網頁只有有部分內容和query很相關,而其它部分和query不相關,可能就滿足搜索的相關性匹配的要求。
-
Query-Document Relevance Matching的方法也主要分為兩大類:
-
-
基於全局的匹配信號
-
基於局部的term級別的匹配信號
-
2.1基於全局的匹配信號
這種方法的基本步驟:
假設query=<q1,q2,q3>,doc=<d1,d2,d3...,dn>
1.對於query中的每個term:
a.計算它在doc中的匹配信號
b.計算整體的匹配強度的分布(q1與doc匹配度)
2.累計匹配強度的分布(對query中所有q進行累計)
2.1.1Deep Relevance Matching Model
對於query中的每個term:
-
將它和文檔的所有單詞的匹配分,離散化分桶。特別的是,為精確匹配單獨划分一個桶。統計在每個桶上的次數,即得到一個關於這個term和文檔匹配分的一個直方圖,即一個向量。
-
得到上述向量后,使用全連接層學習匹配分。注意,不同的單詞 ,這些全連接層的參數是共享的。
-
將上述的匹配分加權求和,這里的權重論文中也介紹了兩者方法,其中一種是使用簡單的IDF。
-
Matching Histogram Mapping
傳統基於交互的模型用一個匹配矩陣來表征query term和doc term的局部交互性,這個匹配矩陣保留了query和doc中詞條的順序,這對於位置敏感的任務是很有用的。但是根據多樣匹配性的要求,相關性匹配並不關心位置信息,因為與query相關的內容能出現在一個長文檔的任一位置。這篇文章采用了匹配直方圖,因為詞條之間相關性在【-1,1】之間,划分為以下五個子區間{[−1,−0.5), [−0.5,−0), [0, 0.5), [0.5, 1), [1, 1]},[1,1]單獨划分一個區間來表示精准匹配,再統計落在每個字區間的個數,最終得到的形式是 [0, 1, 3, 1, 1]這樣一個向量表示。
[注意]query term和doc term 的向量表示是通過WORD2VEC 訓練得到的,向量訓練好在模型中 凍結掉,不參與訓練。
model training:由於是個排序問題,pairwise ranking loss such as hinge loss to train our deep relevance matching model.
此篇論文含 調參說明和ablation study
Impact of Term Embeddings:實驗了50,100,300,500維度,結果先上升后下降。
對於低維的詞向量不足以表達起 相似性匹配,但過高維度又需要更多數據來支撐
impact of Matching Histogram:為了將不定長的局部交互表征變成定長的表示,用dynamic pooling, k-max pooling來代替
impact of term gating network
這個模型的優點是:
-
-
區分精確匹配和普通的相似度匹配信號
-
使用直方圖,不用像卷積那樣子使用padding
-
相比原始的匹配信號,直方分布圖更魯棒
-
缺點是:
-
失去了位置信息。但這篇論文要解決的是Ad-hoc Retrieval的問題,位置信息相對沒那么重要。
2.2基於局部的term級別的匹配信號
based on Global Distribution of Matching Strengths的方法是,對於query中的每個term,直接求解它和整個文檔的匹配信號。而based onLocal Context of Matched Terms的方法是,對於query中的每個term:
-
-
找出它要匹配的doc的局部上下文
-
匹配query和doc的局部上下文
-
累計每一個term的匹配信號
-
這種方法的好處是:
-
-
魯棒性強,可以過濾掉doc和query無關的部分
-
在doc的局部上下文,可以很好的考慮順序信息
-
2.2.1DeepRank
-
-
對於query中的每個term,找出它在doc中出現的位置。
-
例如query的第二個term:q2,它在doc中三個地方出現,對於這三個位置,分別取出2k+1個詞(前后各取k個),不妨假設取出來的三個句子是s1、s2、s3,然后可以用match-matrix等各種方法算出query和s1、s2、s3匹配信號,然后用rnn融合這三個匹配信號,得到一個匹配分
-
將每個term的匹配分加權求和得到最后的匹配分
-
三、最近新出
3.1DC-BERT
由於每一個問題都需要與 retrieve 模塊檢索出的每一個文檔進行拼接,這需要對大量檢索文檔進行重編碼,非常耗時。為了解決效率問題,DC-BERT 提出具有雙重 BERT 模型的解耦上下文編碼框架:在線的 BERT 只對問題進行一次編碼,而離線的 BERT 對所有文檔進行預編碼並緩存它們的編碼。DC-BERT 在文檔檢索上實現了 10 倍的加速,同時與最先進的開放域 QA 方法相比,保留了大部分(約98%)的 QA 問答性能。
如上圖所示,DC-BERT 自底向上分為如下三個部分:
Dual-BERT component
DC-BERT 框架包含兩個 BERT 模型,分別對問題和每個檢索得到的文檔進行編碼。
-
在訓練期間,算法將更新兩個 BERT 模型的參數以優化學習目標;
-
訓練模型后,我們會對所有文檔進行預編碼,並將其編碼存儲在離線緩存中;
-
在測試期間,我們只使用在線 BERT 模型對問題進行一次編碼,並從緩存中讀出由 retrieve 模塊檢索得到的所有候選文檔的緩存編碼。
這樣做的優點在於 DC-BERT 只對 Query 進行一次編碼,從而降低了底層 BERT 的編碼計算成本
Transformer component
通過 Dual-BERT component模塊,獲取到問題的編碼 和文檔編碼 ,其中 是詞嵌入的維數, 和 分別是問題和文檔的長度。由於 rerank 是預測文檔與問題的相關性,因此引入了一個帶有訓練 global embeddings 的Transformer 組件來使問題和文檔進行交互。
具體來講,全局 position embeddings 和 type embeddings 被加入到問題和文檔的頂層編碼中,用預訓練 BERT 的 position embeddings 和 type embeddings 進行初始化,之后送入 Transformer 層進行深度交互,並在訓練過程中進行更新。
3.2Poly-encoders
query 和 candidate 拼成一句話,使得模型可以對 query 和 doc 進行深度交互,充分發揮 BERT 的 next sentence 任務的作用。本篇論文實現的交互式匹配(Cross-encoder)也是基於這種架構。交互式匹配的核心思想是則是 query 和 candidates 時時刻刻都應相互感知,信息相互交融,從而更深刻地感受到相互之間是否足夠匹配。相較於 Siamese Network (Bi-encoder),這類交互式匹配方案可以在Q(Query)和D(Doc)之間實現更細粒度的匹配,所以通常可以取得更好的匹配效果。但是很顯然,這類方案無法離線計算candidates 的表征向量,每處理一個 query 都只能遍歷所有(query, candidate) 的 pairs 依次計算相關性,這種時間和計算開銷在工業界是不被允許的。
模型結構
本文是對速度快但質量不足的 Bi-encoder 架構和質量高但速度慢的 Cross-encoder 架構的一種折中,其基本結構如下圖:
每個 query 產生 m 個不同的 注意力機制 ,對每一個query產生不同的 attention模塊,以此獲取 query 中一詞多義或切詞帶來的不同語義信息;接着再根據 動態地將 m 個 注意力矩陣 集成為最終的
https://www.infoq.cn/article/ndedp7vgpmyuys0jemj7 搜索中的深度匹配模型