2020深度文本匹配最新进展:精度、速度我都要!
文 | QvQ
編 | 兔子醬
在過去的幾年里,信息檢索(IR)領域見證了一系列神經排序模型的引入,這些模型多是基于表示或基于交互的,亦或二者的融合。然鵝,模型雖非常有效,尤其是基于 PLMs 的排序模型更是增加了幾個數量級的計算成本。
為了在 IR 中協調效率和精度,一系列基于表征學習的后期交互類深度排序模型被一一提出,致力于基于交互范式來計算查詢 query 和文檔 doc 的相關性。
傳統做法
傳統的 Representation-Based 模型是如下圖所示的雙塔結構,分別計算 Query 端和 Doc 端的隱層表示,最后選擇 Score function(如dot product,cosine similarity)計算相似度。這種方式由于失去了 Query-Doc 之間的交互,可能會產生語義漂移,精度相對來說不是太高,所以一般用來做向量召回或者粗排[1]。
經典模型:DSSM, SNRM
優點:計算量少,Document 可以離線處理得到其表征。線上運行時,只需要在線計算Query 的隱層表示,而 Doc 的隱層表示可以通過查詢得到,非常適合精度要求不高,速度要求較快的場合。
缺點:失去了交互信息,類似于 Word2Vec 的問題,學習出來的是一個靜態向量,不同上下文場景下,都是同一個表征。
所以,Representation-Based 模型學習出來的語義表達有局限性,沒有考慮上下文的信息。
今天介紹的三篇論文就是針對以上局限進行改進。
DC-BERT 通過解耦問題和文檔實現有效的上下文編碼。
ColBERT、Poly-encoders 則是在原始的 Representation-Based 模型中增加了弱交互,這種方法既豐富了模型的表達能力,又不會增加太大的計算量,并且 Doc 端還是能夠預先處理,保證了在線運行的速度。
Arxiv訪問慢的小伙伴也可以在 【夕小瑤的賣萌屋】訂閱號后臺回復關鍵詞 【0910】 下載論文PDF~
DC-BERT
論文名稱:SIGIR 2020 | DC-BERT: Decoupling Question and Document for Efficient Contextual Encoding
arxiv地址:
https://arxiv.org/pdf/2002.12591.pdf
自從預訓練語言模型(BERT等)提出,有關開放域 QA 的研究取得了顯著改進。目前開放域 QA 的主流方法是 “retrieve and read” 的 pipline 機制。一般通過使用 BERT 模型對retrieve 模塊檢索出的文檔進行 rerank,選出和問句最相關的 Topk 個文檔進行后續 read 分析。Rerank 的基本操作是將問題和檢索到的每個文檔進行拼接作為 BERT 的輸入,輸出相關性 score。
(向右滑動查看完整公式)
然鵝,由于每一個問題都需要與 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 層進行深度交互,并在訓練過程中進行更新。
Classifier component
DC-BERT 框架將 ReRank 任務作為一個二分類任務,通過計算候選文檔是否與該問題相關來進行重排序。如下:
(向右滑動查看完整公式)
其中,? 是問題和候選文檔對;? 和? 分別是問題和文檔的? token 經過 Transformer 模塊的輸出(經過交互后的輸出)。
這篇論文的核心思路是采用兩個 BERT 模型,一個 offline 模型提前向量化;一個online 的模型實時在線計算 query 的詞級別向量表示,最后再用一層 Transformer 做線上相關性預測。
ColBERT
論文名稱:SIGIR 2020 | ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT
arxiv地址:
https://arxiv.org/pdf/2004.12832.pdf
ColBERT 提出了一種新穎的后期交互范式。為了同時兼顧匹配的效率和doc中的上下文信息,ColBERT 提出了基于上下文(contextualized)的后期交互的排序模型,用于估計查詢 query 和文檔 doc 之間的相關性。query 和doc 分別通過各自的 encoder 編碼,得到兩組 token level 的 embedding 集合;然后,評估 query 和 doc 中的每個 item 的關聯,得到快速排序的目的。
ColBERT 的模型結構整體還是類似于 Siamese 結構,分為 Query 端和 Doc 端,最后在進行交互計算文本分相似度。模型主體上分為 Query Encoder 、Document Encoder? 、以及之后的 Late Interaction 部分。
每個查詢嵌入都通過 MaxSim 運算符與所有文檔嵌入進行交互,該運算符會計算最大相似度(如余弦相似度),并且這些運算符的標量輸出會在查詢條件中相加。這種范例使 ColBERT 可以利用基于 LMs的深度表示,同時將離線編碼文檔的成本轉移到所有排序文檔中,并一次攤銷編碼查詢的成本。
Query Encoder
Query Encoder計算如下:
(向右滑動查看完整公式)
通過在查詢 query 之前添加特殊標記?,在文檔之前添加另一個標記?,來區分與查詢和文檔相對應的輸入序列。BERT 是編碼器,CNN 是做維度變換,用來對 BERT 輸出降維,Normalize 為了之后計算余弦相似度而做的正則化處理。
值得注意的是,文章對 query 填充掩碼標記的另外一個目的是做 query augmentation,這一步驟允許 BERT 在與這些掩碼相對應的位置上生成基于查詢的新嵌入,這一機制旨在對 query 中新術語或者重要詞進行重新編碼學習。
Document Encoder
結構與query encoder類似,主要區別如下:
添加篩選器 Filter。因為 Doc 一般比較長,Filter 通過一個預定義的列表對文檔中一些特殊的 token 以及標點符號進行過濾。
沒有添加 mask token。
(向右滑動查看完整公式)
Late Interaction
這一步操作則是針對與Representation-Based方法的改進,對 query 和 doc 的信息進行了交互,具體公式如下:
計算 query 中每個 term 與 doc 的每個 term 的最大相似度,然后累加得到 score。由于之前進行過 Normalize,我們只需要計算 inner-products 得到的即為余弦相似度。
實驗結論
文章采用了 Microsoft 于 2016 年引入的閱讀理解的數據集 MS MARCO,它是從網頁中收集的800萬個段落的集合,這些段落是從必應收集到100萬個實際查詢的結果。
通過實驗數據對比可以看出,ColBERT 的效果比傳統 ConvKNRM 明顯要好,此外檢索的速度比 BERT-base 模型要快幾個數量級。
Poly-encoders
論文名稱:ICLR 2020 | Poly-encoders: Transformer Architectures and Pre-training Strategies for Fast and Accurate Multi-sentence Scoring
arxiv地址:
https://arxiv.org/pdf/1905.01969.pdf
在 BERT 興起之后,基于 concat 的 self-attention 模型大量涌現。如下圖所示,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 架構的一種折中,其基本結構如下圖:
Poly-encoder的思想非常簡單。將給定的候選標簽用Bi-encoder中的一個向量表示,從而可以緩存候選 doc 的內容以加快推理時間。在推理階段,將 query 的多種語義編碼利用 attention 機制與候選 content 共同作用,從而可以提取更多信息。content 是 doc 文本經過離線 Candidate Encoder 編碼得到語義向量。
具體來講:
Poly-encoder首先是通過初始化多個attention模塊,對每一個query產生不同的,以此獲取 query 中一詞多義或切詞帶來的不同語義信息;
(向右滑動查看完整公式)
將這些具有相同維度的query語義向量進行動態組合成最終的;
(向右滑動查看完整公式)
最后計算? 與每一個由 Bi-encoder 編碼的候選? 的匹配程度。
很顯然,Poly-encoder 架構在實際部署時是可以離線計算好所有 candidates 的向量?,線上部分只需要計算 query 對應的 m 個? 向量,再通過簡單的 dot product 就可以快速計算 query 對應每個 candidate 的動態的得分?。看起來 Poly-encoder 享有 Bi-encoder 的速度,同時又有實現更精準匹配的潛力。
實驗效果
本文選擇了檢索式對話數據集 ConvAI2、DSTC 7、Ubuntu v2 以及Wikipedia IR 數據集進行實驗。負采樣方式為:在訓練過程中,使用同一個 batch 中的其他 query 對應的 response 作為負樣本,而 Cross-encoder 的負采樣方式為:在開始訓練之前,隨機采樣 15 個 responses 作為負樣本[2]。
實驗結果已經表明 Poly-encoder 明顯優于 Bi-encoder架構,且性能逼近 Cross-encode 架構的效果。在檢索耗時方面,其速度比 Cross-encoder 足足快了約 2600-3000倍!
本文提出的 Poly-encoder 的核心思想雖然非常簡單,但是卻十分有效,確實在很多場景下可以作為 Bi-encoder 的替代,甚至在一些對速度要求較高的場景下可以作為 Cross-encoder 的替代。
文末福利
后臺回復關鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
有頂會審稿人、大廠研究員、知乎大V和妹紙
等你來撩哦~
參考文獻
[1] 基于表征(Representation)文本匹配、信息檢索、向量召回的方法總結
https://zhuanlan.zhihu.com/p/140323216
[2] PolyEncoder-Facebook的全新信息匹配架構-提速3000倍
https://zhuanlan.zhihu.com/p/119444637
總結
以上是生活随笔為你收集整理的2020深度文本匹配最新进展:精度、速度我都要!的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 不讲武德,只用标签名就能做文本分类
 - 下一篇: 26岁!年入100万,两周把 Githu