一文深度剖析 ColBERT

近年來,向量搜索領域經歷了爆炸性增長,尤其是在大型語言模型(LLMs)問世後。學術界開始重點關注如何通過擴展訓練數據、採用先進的訓練方法和新的架構等方法來增強 embedding 向量模型。

在之前的文章中,我們已經深入探討了各種類型的 embedding 向量和專爲高效信息檢索而設計的模型,包括針對具體用例設計的稠密、稀疏和二進制 embedding 向量,它們各自的優勢和劣勢。此外,我們還介紹了各種 Embedding 向量模型,如用於稠密向量生成和檢索的 BERT,以及用於稀疏向量生成和檢索的 SPLADE 和BGE-M3。

本文將深度剖析 ColBERT——專爲高效相似性搜索而設計的創新型 embedding 和排序(ranking)模型。

01.簡要回顧 BERT

ColBERT,是對 BERT 的延伸。讓我們先簡要回顧一下 BERT。這將幫助我們理解 ColBERT 所做出的改進。

BERT 全稱爲 Bidirectional Encoder Representations from Transformers,是一種基於 Transformer 架構的語言模型,在稠密向量和檢索模型方面表現出色。與傳統的順序自然語言處理方法不同,BERT 從句子的左側到右側或相反方向進行移動,通過同時分析整個單詞序列結合單詞上下文信息,從而生成稠密向量。那麼,BERT 是如何生成 embedding 向量的呢?

首先,BERT 將句子轉換爲單詞片段(也稱爲 token)。然後,在生成的 token 序列的開頭添加一個特殊的token[CLS],在末尾添加一個 token[SEP],以分隔句子並指示結束。

接下來是 embedding 和 基於transformer的encoding。BERT 通過 embedding 矩陣將token變爲向量,並且通過多層編碼器將其進行深層次的編碼。這些層根據序列中所有其他token提供的上下文信息,對每個token的表示進行基於注意力機制的細化。

最後,使用池化操作將所有 token 向量轉化成單一的稠密向量。

02.什麼是 ColBERT

ColBERT全稱爲Contextualized Late Interaction over BERT,基於傳統的BERT模型進行了深度創新。BERT將token向量合併爲單一表示(即向量),而ColBERT保留了每個token的表示,提供了更細粒度的相似性計算。ColBERT的獨特之處在於引入了一種新穎的後期交互機制,可以通過在檢索過程的最終階段之前分別處理查詢和文檔,實現高效和精確的排名和檢索。我們在下文中將詳細介紹這種機制。

本質上,雖然BERT或其他傳統的embedding模型爲每個文檔生成一個單一向量,併產生一個單一的數值分數,反映其與查詢句的相關性。而ColBERT提供了一個向量列表,進行查詢中的每個token與文檔中的每個token的相關性計算。這種方法幫助我們更詳細和更細緻的理解查詢和文檔之間的語義關係。

03.ColBERT 架構

下圖展示了ColBERT的架構,包括:

  • 一個查詢編碼器

  • 一個文檔編碼器

  • 後期交互機制

在處理查詢Q和文檔D時,ColBERT利用查詢編碼器將Q轉換爲一組固定大小的Embedding向量,表示爲Eq。同時,文檔編碼器將D轉換爲另一組embedding向量Ed。Eq和Ed中的每個向量都擁有QD中周圍詞的上下文信息。

有了EqEd,ColBERT通過後期交互方法計算QD之間的相關性分數,我們將其定義爲最大相似性(MaxSim)的總和。具體來說,該方法識別每個Eq中的向量與Ed中的向量之間的最大內積,然後通過求和將這些結果組合起來。

從概念上講,這種後期交互機制將每個查詢中的 token embeddingtq與文檔向量列表進行比較,並考慮了在查詢中的上下文。這個過程通過識別tq與文檔中的詞td之間的最高相似度分數來量化"匹配"程度。ColBERT通過聚合所有查詢項之間的最大匹配程度來評估文檔的相關性。

查詢編碼器

在處理查詢Q時,查詢編碼器利用基於BERT的模型將Q tokenize爲單詞片段token,表示爲q1、q2、...、ql。此外,它在BERT的序列起始token[CLS]之後立即插入一個特殊的token[Q]。如果查詢包含的token數量少於預定義的閾值Nq,則使用token[mask]進行填充,直到達到長度Nq。相反,如果超過了Nq個token,則將其截斷爲前Nq個token。然後,將這個調整後的輸入token序列傳入BERT的Transformer架構中,爲每個token生成上下文表示。生成的輸出包括一組Embedding向量,定義如下:

Eq := Normalize( CNN( BERT("[Q], q0, q1, ...ql, [mask], [mask], …, [mask]") ) )

Eq表示通過正則化的token序列(包括特殊的token[Q]和填充token[mask]),即通過BERT的Transformer層,並應用卷積神經網絡(CNN)進行進一步精煉而得到的歸一化輸出。

文檔編碼器

文檔編碼器的操作與查詢編碼器類似,將文檔 D tokenize 爲token,表示爲d1、d2、...、dn。在這個過程之後,文檔編碼器在BERT的起始token[CLS]之後立即插入一個特殊的token[D],以指示文檔的開始。與查詢 tokenize 過程不同,文檔中不添加[mask]

在將這個輸入序列通過BERT和隨後的線性層之後,文檔編碼器需要移除與標點符號所對應的embedding。這個過濾步驟是爲減少每個文檔的embedding 向量數量。輸出一組向量,表示爲Ed

Ed := Filter( Normalize( CNN( BERT("[D], d0, d1, ..., dn") ) ) )

Ed表示將tokenized 的文檔通過BERT的Transformer層、應用卷積神經網絡操作並過濾掉與標點符號相關的Embedding所獲得的歸一化和過濾後的向量列表。

後期交互機制

在信息檢索中,“交互”是指通過比較查詢和文檔的向量表示來評估它們之間的相關性。“後期交互”表示這種比較發生在查詢和文檔已經被獨立編碼之後。這種方法與BERT之類的“早期交互”模型不同——早期交互中查詢和文檔的Embedding在較早的階段相互作用,通常是在編碼之前或期間。

ColBERT採用了一種後期交互機制,使得查詢和文檔的表示可以用於預計算。然後,在末尾使用簡化的交互步驟來計算已編碼的向量列表之間的相似性。與早期交互方法相比,後期交互可以加快檢索時間和降低計算需求,適用於需要高效處理大量文檔的場景。

那麼,後期交互過程是如何實現的呢?

如前所述,編碼器將查詢和文檔轉換爲token級別的embedding列表EqEd。然後,後期交互階段使用針對每個Eq中的向量,找與其產生最大內積的Ed中的向量(即爲向量之間的相似性),並將所有分數求和的最大相似性(MaxSim)計算。MaxSim的計算結果就反映了查詢與文檔之間的相關性分數,表示爲Sq,d

這種方法的獨特價值在於能夠對查詢與文檔token embedding之間進行詳細、細粒度的比較,有效捕捉查詢和文檔中長度不同的短語或句子之間的相似性。這尤其適合需要精確匹配文本片段的應用場景,可以提高搜索或匹配過程的整體準確性。

04.ColBERTv2:基於ColBERT優化檢索效果和存儲效率

ColBERT 通過對查詢和文檔進行單獨編碼,並採用詳細的後期交互進行準確的相似性計算。與Sentence-BERT不同,ColBERT爲句子中的每個 token生成一個向量——這種方法在相似性檢索中更有效,但是模型消耗的存儲空間會呈指數性增長。

ColBERTv2能夠解決這些問題。這個版本通過將乘積量化(PQ)與基於質心的編碼策略相結合來增強ColBERT。PQ使ColBERTv2能夠壓縮token embedding 而不會造成顯著的信息丟失,從而降低存儲成本同時保持模型的檢索效果。這一改進優化了存儲效率,並保留了模型對細粒度相似性評估的能力,使ColBERTv2成爲大規模檢索系統的更可行的解決方案。

ColBERTv2 中的基於質心的編碼

在 ColBERTv2 中,由編碼器生成的token向量被聚類成不同的組,每個組由一個質心表示。這種方法允許質心索引描述每個向量以及捕捉其與質心的偏差的殘差分量。這個殘差的每個維度只需被高效地量化爲一個或兩個比特。因此,原始向量可以通過質心索引和量化的殘差的組合來有效地表示,與實際向量只有輕微的差異。這些差異對整體檢索準確性影響很小。

如何使用基於質心的向量進行相似性檢索

首先,ColBERTv2 利用先前描述的基於質心的方法高效地對文檔進行編碼,其中質心及其相關的量化殘差表示每個文檔。同樣地,編碼器將查詢轉換爲一組token級別的向量,表示爲{q1, q2, q3, ..., qn}

在檢索階段,對於每個查詢向量qi,我們首先檢索預先確定數量的質心,這個是數量稱爲nprobe。然後,我們從這些質心的低比特量化殘差中重建對應的向量,並根據它們的文檔ID將它們組織成組。這種組織方式簡化了後續的匹配過程,圖中反映了nprobe爲3的搜索查找過程,紅圈爲每一個組的質心。

一旦我們按文檔ID對向量進行分類,目標就轉移到識別與每個qi最相似的向量。例如,如果查詢向量q1與文檔1中的向量d1緊密對齊,並且該文檔的組包括{d1, d3, d5},那麼就無需爲{d1, d2, d3, d4, d5}計算完整的MaxSim。這是因爲向量d2d4,不是最初的nprobe羣的一部分,不太可能與任何查詢向量qi緊密匹配。在識別出最相關的分組之後,系統檢索Top-K個最相似的文檔。我們加載這些文檔的所有完整向量進行最終的重新排名,包括最初不在nprobe羣中的向量。

05.總結

文本對 ColBERT 進行了深入的解析。與 BERT 之類的傳統 embedding 模型不同,ColBERT 保留了 token 級別的 embedding,通過其創新的後期交互機制實現了更精確和細粒度的相似性計算。

我們還研究了 ColBERTv2——通過 PQ 和基於質心的編碼來減輕存儲消耗的優化版ColBERT。這些改進有效提高了存儲效率,並保持了模型的檢索效果。ColBERT 模型的持續改進和創新展現了自然語言表徵技術的動態發展,表明未來檢索系統會有更高的準確性和效率。

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