Last Updated on 2024-07-25 by Clay
Introduction
ColBERT 是一種專為檢索任務設計的 Embedding Model,它會將 Query 和 Documents 的 tokens 逐項轉換出 embedding 並計算最大相似度。
如圖所示,將所有的 Query tokens(假設有 N 個) 跟 Document tokens 計算餘弦相似度(cosine similarity),並保留最大的 MaxSim 分數(一共會有 N 個)。
接著將 MaxSim 加總,就會得到這個 Query 對 Document 的分數。這個方法被取名為 Late Interaction。
架構
ColBERT 中有兩個編碼器,Query Encoder 和 Document Encoder,兩個都是基於 BERT 或類似的 encoder-only transformer 架構。
Query Encoder 自然是用於轉換 Query 的 tokens、Document Encoder 則是用來轉換 Document 的 tokens。
這種架構跟 cross-encoder 不同,cross-encoder 是將 Query 和 Document 組合成一組單一的輸入序列。
Query Encoder
當給定一個查詢問題 Query 時,除了 tokenize 之後的結果外,也會插入一個特殊符號 [Q]
在 [CLS]
token 右側;除此之外,也會使用 [MASK]
特殊符號填充 Query 直到我們預先指定的長度 Nq(如果 token 序列超過 Nq,則會截斷)。
接著我們會把 BERT 轉換出的每個 token 的表徵向量,輸入一個沒有激活函數的線性層,將其轉換出指定尺寸的 m 維度。
Document Encoder
跟 Query Encoder 進行幾乎一樣的操作,除了前方填入的特殊符號為 [D]
並且不用進行任何 padding。
Late Interaction
所以我們可以使用 Encoders 分別計算 Query 和 Document 的 token embeddings。
實際上計算 Late Interaction 的公式為:
有趣的是,我在看論文時看到他們說雖然可以使用 RNN 或 CNN 來做,但是效果最好的還是 transformer-based encoders (i.e. BERT)。所以不是很確定為什麼列出來的公式中有 CNN 的存在。
但 Normalize 是要做的,畢竟要算 Cosine Similarity;另外查找了一些資料,發現 Filter 是指過濾掉標點符號。
我還沒有去看 GitHub 上的 repo 實現,因為我打算等閱讀完 ColBERTv2 之後再一起看。有點像追連載小說的感覺。
總結
ColBERT 的效果暫時就不看了。一部分原因也是因為這是 2020 的工作,我更應該直接去閱讀 ColBERTv2 的橫向比較評估來得有效率。
但就個人感覺上,我感覺 ColBERT 考慮 Query 跟 Document 之間每個 token 之間的最大相似度,很像是一種更細粒度的相似度計算,在這點上還是跟 cross-encoder 挺像的。
不過跟 cross-encoder 相比,ColBERT 是可以離線做 Document embeddings 的,結合現在(2024)流行的向量資料庫肯定效果更好。
簡單來說,我認為 ColBERT 是另一種意義上的 cross-encoder,只是他是把 Query 跟 Document 分開來做,進而完成可以離線檢索的效果。
References
- ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT
- stanford-futuredata/ColBERT