1,前言
語義相似度計算是信息檢索,自動問答中常用的技術。語義相似度計算通常可以分為表示型和交互型兩種類型,表示型模型如DSSM,孿生網絡,這類模型可以離線計算doc的編碼,在線上運行時只需要編碼query,效率很高,但是精度不如交互型模型,而交互型模型需要在線編碼query和doc,當需要比較的doc很多時,效率是非常低的。bert中的句子對任務其實就是一種交互式語義相似度計算模型,句子對任務需要拼接query和doc后一起編碼,實際的應用中非常耗時,但僅僅使用bert來分別表示query和doc,然后通過點積或余弦相似度計算query和doc的分數的方法精度又不夠,本文帶來的幾篇論文就是結果表征式的效率和交互式的精度來處理語義相似度計算的問題,可以看作是一種弱交互式的模型。
2,相關工作
論文一:DC-BERT: DECOUPLING QUESTION AND DOCUMENT FOR EFFICIENT CONTEXTUAL ENCODING
模型結構:本文提出了一種弱交互的方法 — DC-BERT來提升模型的效率。整個模型分為三層,Dual-BERT component;Transformer component;Classifier component。具體結構如下圖
Dual-BERT component
Dual-BERT就是使用兩個不同的bert分別對query和doc編碼,可以采用預訓練好的bert中前面的層(因為bert中前面的層可以提取文本中的詞性,語法結構信息。而后面的層可以提取上下文交互的語義信息。),兩個不同的bert不共享參數,可以在訓練時被fine-tuning。
Transformer component
Transformer層用來對query和doc交互編碼,不過為了效率一般層數都比較少(取一層都有不錯的效果),transformer層也不是從零開始訓練的,而是取bert中后面的層的參數初始化,另外為了引入更多的全局信息,在transformer層引入全局位置向量,也就是query和doc拼接后的位置向量,以及句子編碼用來區分query和doc。
Classifier component
分類層將query和doc中的[CLS]位置上的向量拼接,然后經二分類層。優化函數采用二元交叉熵。
從模型結構看,整體思想還是比較簡單的,接下來看下實驗效果,作者和bert,int8-bert,distill-bert做了對比,對比結果如下
在SQuAD Open和Natural Questions Open的數據集上表明DC-BERT的推斷速度提升明顯,是bert-base的10倍,且同時能保持較好的精度。整體上來看是要優於distillBERT和int8-bert。但從結構上來看DC-BERT的參數量應該不少,畢竟使用了兩個bert,在服務端模型大小倒不是問題,但是要在手機端上部署就成問題了,即使只使用了bert中的幾層也會很大,所以這種方法基本只能在服務端上使用。
論文二:Poly-encoders: architectures and pre-training strategies for fast and accurate multi-sentence scoring
本篇論文同上面的一樣,在最后時刻做交互,但是方法還是有蠻大差異。首先作者認為表征式的方法之所以不好是因為將query和doc映射到了一個固定的向量,而這個向量涵蓋的信息可能只是部分重要的特征,導致在和doc計算分數時沒那么准確,所以作者在這里的做法就是更加充分的提取query的特征信息,具體怎么做的呢?我們來看下面這張圖:
上面的圖a,圖b分別是表征式和交互式語義相似度計算的范式,作者分別將其命名為bi-encoder,cross-encoder。圖c是作者提出的poly-encoder的方法,為了充分提取query的信息,作者對一個query計算出m個encoder的向量,在transformer層的最后輸出位置再接一層用來將最后的一層的輸出做m次attention池化得到m個encoder 向量。具體表達式如下:
$y_{ctxt}^i$表示第i個encoder 向量,$c_i$是隨機初始化出來,后來隨着訓練的過程被訓練,所以這一步的操作和bilstm-attention中的attention一樣,只不過執行了m次,這樣就得到m個encoder 向量,那么又該怎么和doc交互呢?表達式如下:
交互就是把doc作為attention中的q,然后對m個encoder 做attention,得到一個固定的向量$y_{ctxt}$。然后計算分數。
模型的表現結果還是可以的,而且速度和精度都收query的encoder向量的數量的影響,這也說明單個encoder向量的信息確實有限
如上,當encoder 向量的數據為360時,模型的結果相比交互式模型的差距是非常小的,然后看推斷速度:
query的encoder向量的數量影響其實也沒那么大,總的來說還是不錯的工作。
論文三:ColBERT: Eicient and Eective Passage Search via Contextualized Late Interaction over BERT
本篇論文提出了一種細粒度的基於token級的交互模式,被稱為MaxSim。在這里query和doc是共享同一個transformer encoder的,在最后再做交互取代直接計算dot求解query和doc的分數,模型結構如下:
因為query和doc共享同一個transformer encoder,所以為了做區分,分別在query和doc引入一個用於識別的token [Q] 和 [D]。這個token放在[CLS]后面。另外就是query會固定要某一個固定長度,而doc不做任何截斷和補全的,在編碼完之后會對向量做歸一化(這一步主要是為了后面計算MaxSim的方便),並且在計算MaxSim時去掉了doc中的一些標點符號,具體的表達式如下:
計算query和doc的方式如下:
query中的每個token和doc中的每個token求點積,因為前面做過一次歸一化,所以這里的結果就是余弦相似度值,然后取query中的token和doc中的token的余弦相似度的最大值之和,在這里這一步也稱為MaxSim。在這里doc的向量時可以離線計算好的,且MaxSim時沒有需要訓練的參數,所以可以直接接如faiss這類的框架進行排序,類似於將召回和排序結合在一起了。
整體來看效果不錯,而且速度也非常快,具體使用細節見論文。
參考文獻:
DC-BERT: DECOUPLING QUESTION AND DOCUMENT FOR EFFICIENT CONTEXTUAL ENCODING
Poly-encoders: architectures and pre-training strategies for fast and accurate multi-sentence scoring
ColBERT: Eicient and Eective Passage Search via Contextualized Late Interaction over BERT