基於表徵(Representation)形式的文本匹配、信息檢索、向量召回的方法總結(用於召回、或者粗排)


最近系統性的看了一些有關於信息檢索、文本匹配方向的論文,先貼下三篇主角論文:

(ColBERT) Khattab, O., & Zaharia, M. (2020). ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT. ArXiv, abs/2004.12832. [PDF]

(Poly-encoders) Humeau, S., Shuster, K., Lachaux, M., & Weston, J. (2020). Poly-encoders: Architectures and Pre-training Strategies for Fast and Accurate Multi-sentence Scoring. ICLR.[PDF]

Chang, W., Yu, F.X., Chang, Y., Yang, Y., & Kumar, S. (2020). Pre-training Tasks for Embedding-based Large-scale Retrieval. ArXiv, abs/2002.03932.[PDF]

總結

上面三篇論文針對的基礎NLP任務都是文本匹配,文本匹配可以用於許多下游具體任務,例如:

  • 信息檢索(information retrieve) (召回和排序)
  • 釋義識別(Paraphrase Identification)
  • 自然語言推理(NLI)
  • 問答匹配(QA)

上面三篇論文主要是針對信息檢索中的召回和排序,並且使用均爲Representation-based方法,ColBERT、Poly-encoders中使用了弱交互來增強模型的表達能力,一定程度上解決了類似於word2Vec中學習出來的是靜態向量的問題。Pre-training Tasks for Embedding-based Large-scale Retrieval 論文中則是針對信息檢索設計了Inverse Cloze Task(ICT)Body First Selection (BFS)Wiki Link
Prediction (WLP)
三個Pre-train任務來提高模型的效果。

文本匹配的兩種做法

Representation-Based類模型

Representation model
傳統的Representation-Based模型如上圖所示,Query端和Doc端分別計算隱層表示(比如說用BERT計算,取最後一層的向量作爲表示),最後選擇Score function(如dot product,cosine similarity)計算相似度。這種方式由於失去了Query-Doc之間的交互,可能會產生語義漂移,精度相對來說不是太高,所以一般用來做向量召回或者粗排

  • 經典模型:DSSM,SNRM
  • 優點:計算量少,Document可以離線處理得到其表徵,線上運行時,只需要在線計算Query端的隱層表示,而Doc端的隱層表示可以通過查詢得到,非常適合精度要求不高,速度要求較快的場合
  • 缺點:失去了交互信息,類似於Word2Vec的問題,學習出來的是一個靜態向量,不同上下文場景下,都是同一個表達

從上面的分析可以看出,Representation-Based模型問題主要在於學習出來的語義表達有侷限性,Query-Doc沒有交互,沒有上下文的信息。上面三篇論文也就是針對這些問題進行改進

  • ColBERT、Poly-encoders則是在原始的Representation-Based模型中增加了弱交互,這種方法既豐富了模型的表達能力,又不會增加太大的計算量,並且Doc端還是能夠進行預處理,保證了在線運行的速度。
  • 而 Pre-training Tasks for Embedding-based Large-scale Retrieval 則是另闢蹊徑,引入了三種新的Pre-train Task來提高模型對query和Doc語義信息不同粒度的理解。

Interaction-Based 模型

在這裏插入圖片描述
Interaction-Based模型結構如上圖所示,Query和Doc端會做交互運算,這樣可以很好地考慮上下文語境信息,不同query下,同一個Doc的表示是不同的,可以抓住語義焦點,模型的精度較高,經常用於信息檢索中的精排。但是這種方法輸入不同query和Doc都需要重新計算,並不能像Representation模型一樣對Doc進行預處理。

  • 經典模型:DeepMatch、 DRMM、KNRM、基於BERT的交互模型
  • 優點:對上下文環境建模,能夠抓住一些重要信息,模型精度較高,可以用於精排
  • 缺點:速度慢,每次都需要計算Query和Doc的交互,當數據集很大的時候難以上線運行。

Representation-Based改進方法

從信息交互方面思考

從上面的分析可以看出,Representation-Based方法的主要缺陷在於Query端與Doc過於分離,完全沒有進行信息交互,這樣導致模型表達爲一個靜態向量,表達能力受限。但是如果像Interaction-Based方法那樣,對Query和Doc端的每個詞進行交互,將會有大量的運算,整個模型會非常大,訓練時間和預測時間都會很長,難以在線運行。

  • 所以,我們的重點是如何在儘量少的計算量條件下,進行Query與Doc的信息交互

弱交互,我們計算Query與Doc的Representation時,並不進行交互,而是在獲得相應Representation輸出後再進行交互,最後通過交互後的表達計算相似度

論文ColBERT、Poly-encoder中都是使用了這種弱交互的思想,在獲取Representation之後,再進行Interaction這樣既保證了運算的速度,又提高的模型的表達能力,ColBERT和Poly-encoder模型圖如下所示:

  • Col-BERT Late Interaction
    ColBERT

  • Poly-encoder attention
    Poly-encoder
    從上面的結構圖可以看出,這兩個模型在Encoder計算Query、Doc隱層表示時都是單獨計算,而在Represetation輸出時,計算相似度之前加入了Interaction,不同的是兩個模型的Interaction方式不太一樣,這個後面會具體介紹細節。

BERT類模型Pre-train任務

BERT提出之後,許多NLP任務用BERT都可以達到很好的效果,文本匹配也不例外。BERT分爲Pre-train Fine-tune兩階段,因此用BERT類模型做Representation-Based 文本匹配還有個改進方法就是:設計合適的Pre-train任務,提高我們下游Fine-tune時的效果。在Fine-tune時我們的有監督的數據集通常來說比較少(有監督數據需要標註,難以獲取),當加入合適的Pre-train之後,我們就可以用上大量的無監督數據,從而提高我們Fine-tune 的效果,通常來說我們設計Pre-train任務時需要注重以下幾點:

  • Pre-train任務應該與下游任務相關。比如我們需要解決信息檢索的文本匹配問題,那麼我們的模型應該能夠理解Query和Doc之間不同粒度的語義信息。
    • 同一段落之中的局部窗口兩句話之間的語義關聯
    • 一個Document中的全局一致的語義信息(歸納理解)
    • 兩個Document之間的語義信息關聯
  • Pre-train的數據應當容易獲取,不需要額外的人工標註

論文細節

ColBERT

模型結構

ColBERT的模型結構整體還是類似於Siamese結構,分爲Query端和Doc端,最後在進行交互計算文本分相似度,如下圖所示:
ColBERT
模型主體上分爲Query Encoder,fQf_Q 、Document Encoder,fDf_D ,以及之後的Late Interaction部分,從圖中可以看出Document還是可以離線處理的,

Query Encoder

Eq
Query Encoder計算如下,BERT表示爲標準的BERT運算,CNN是做維度變換,用來對BERT輸出降維,Normalize是方便之後計算餘弦相似度。

Document Encoder

Ed
因爲Doc一般比較長,所以和Query Encoder的主要區別是最後加入了Filter,用來去除Doc那麼標點符號,停用詞的Representation,這樣可以減少每個Doc embedding的個數。

Late Interaction

這一步操作則是針對與Representation-Based方法的改進,對Query和Doc的信息進行了交互,具體公式如下:
Representation-Based
由於之前進行過Normalize,我們只需要計算 inner-products得到的即爲餘弦相似度

訓練方式

ColBERT訓練方式用的也是Learning2Rank中的pairwise Loss,最大化相關Doc和無關Doc的分數差。

Poly-encoder

模型結構

Poly-encoder
模型結構和ColBERT大體類似,唯一不同的地方在於獲得Representation之後query和Doc交互方法,這裏用的是基於attention 的方法

Context Encoder

query端的Encoder,對query中的每個詞計算出一個embedding

Candidate Encoder

Candidate端的Encoder,也是對Doc中的每個詞計算出一個embedding,並且會經過Candidate Aggregator操作,將其變爲一個向量,比如BERT中可以取第一個[CLS]的值作爲表示,或者取平均

Context的隱層表示計算(控制模型大小)

poly-encoder中使用m個global features來表示input,m爲超參數,會影響推斷時候的速度。我們學習m個上下文向量(c1,c2,...,cm)(c_1,c_2,...,c_m),其中cic_i用來抽取第ii個隱層表示yctxtiy^i_{ctxt}。計算方法如下:
yctxt
可以知道,上面的m個向量用來做attention中的Query向量,Key向量和Value向量爲計算出來的隱層表示hih_i。上述m個向量隨機初始化,並且在finetuning過程中進行學習。

Context和Candidate交互

最後,要進行Context和Candidate交互,從而獲得Context最後的表達,類似如上面的attention,在這一步,使用ycandy_{cand}作爲Query向量,Key和Value向量爲由上面m個向量計算出來的yctxty_{ctxt},計算方法如下:
xxxx
yctxty_{ctxt}即爲經過交互之後的最終的隱層表達。

Score計算

最終的Score爲yctxtycandy_{ctxt} \cdot y_{cand},我們可以選取 m < N ,N爲context Token數量,這樣就可以大大減少計算量

計算時間比較

這裏貼一張論文中的計算時間比較表格,可以看出Poly-encoder加入Interaction之後,計算時間並沒有太大增加,還是遠遠小於 Cross-encoder(Interaction方式)
在這裏插入圖片描述

PRE-TRAINING TASKS FOR EMBEDDING-BASED LARGE-SCALE RETRIEVAL

模型結構

這篇論文方法模型結構還是標準的Representation結構,主要的改進的是添加了三個針對性的Pre-train Task。
aggregate

訓練方式

論文中假設訓練數據均爲,relevant positive Queryt-Doc 對
在這裏插入圖片描述
我們的訓練目標是最大化Softmax條件概率:

在這裏插入圖片描述
其中D\mathcal D爲所有可能文檔的集合,這樣會有個問題,因爲候選文檔集合可能會非常大,所以論文中使用了Sampled Softmax對訓練過程進行近似,原文如下:

The Softmax involves computing the expensive denominator of Equation (3), a.k.a, the partition function, that scales linearly to the number of documents.In practice, we use the Sampled Softmax, an approximation of the full-Softmax where we replace D by a small subset of documents in the current batch, with a proper correcting term to ensure the unbiasedness of the partition function

關於Sampled Softmax

tf.nn.sampled_softmax_loss(weights, # Shape (num_classes, dim)     - floatXX
                     biases,        # Shape (num_classes)          - floatXX 
                     labels,        # Shape (batch_size, num_true) - int64
                     inputs,        # Shape (batch_size, dim)      - floatXX  
                     num_sampled,   # - int
                     num_classes,   # - int
                     num_true=1,  
                     sampled_values=None,
                     remove_accidental_hits=True,
                     partition_strategy="mod",
                     name="sampled_softmax_loss")

其中 :

  • input 爲輸入,這裏應該爲Query embedding
  • weights,原本是類別輸出變換的全連接層,比如輸出爲十個類別那麼就是(10,dim),這裏的話難道是(num_documents,dims)?不是很理解,num_documents應該是千萬級別的

不太理解到底怎麼使用Sampled Softmax 來對上述任務進行訓練,求大神們指點一下

三個Pre-train task設計

這篇論文針對性的設計了三個Pre-train task,設計的原則如下:

  • Pre-train任務應該與下游任務相關。比如我們需要解決信息檢索的文本匹配問題,那麼我們的模型應該能夠理解Query和Doc之間不同粒度的語義信息。
  • Pre-train的數據應當容易獲取,不需要額外的人工標註

Pre-train數據均爲positive Query-document對.

Inverse Cloze Task(ICT)

  • 同一段落之中的局部窗口兩句話之間的語義關聯
  • 給定一個passage p\bold p有n個句子,p={s1,s2,s3...,sn}\bold p = \{\bold s_1,\bold s_2,\bold s_3...,\bold s_n\},那麼 q\bold q 則是從這n個句子中隨機採樣出來的一個句子q=si\bold q = \bold s_i ,剩餘的句子則是d={s1,s2,s3...,si1,si+1,..sn}\bold d = \{\bold s_1,\bold s_2,\bold s_3...,\bold s_{i-1},\bold s_{i+1},..\bold s_n\}
    在這裏插入圖片描述

Body First Selection (BFS)

  • 一個Document中的全局一致的語義信息(歸納理解)
  • q\bold q是總Wikipage 第一段中隨機選出來的句子,這個句子通常是整個頁面的描述或者總結。d\bold d則是同一頁面中隨機選取的一個passage
    在這裏插入圖片描述

Wiki Link Prediction (WLP)

  • 兩個Document之間的語義信息關聯
  • q\bold q是總Wikipage 第一段中隨機選出來的句子,d\bold d是另外一個頁面中的passage,而該句子中有超鏈接到q\bold q頁面
    在這裏插入圖片描述
    上面三個Task訓練方式則是上面說的極大化Softmax似然

Masked LM (MLM)

論文中也加入了Masked Language Model 的task

後記

  信息檢索中通常需要在大量文檔中進行召回和排序,所以運行速度是一個很重要的因素,Interaction-Based方法由於運算量太大通常不適合在線的場景,而Representation-Based在提高速度的同時也限制了模型表達能力,上面三篇論文針對性地改進了Representation-Based的缺陷。

上面的模型應用於向量召回和粗排應該效果不錯,之後有機會實際跑一下數據,在進行技術的總結,以上都是我自己對論文的理解,有很多細節可能不是很到位,歡迎大家和我討論~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章