ColBERT: BERT를 넘어선 효율성과 정확성의 조화
ColBERT(Contextualized Late Interaction over BERT)는 정보 검색(IR) 분야에서 주목받는 랭킹 모델로, 대규모 문서 컬렉션에서 빠르고 정확하게 관련성 높은 정보를 찾아내는 데 뛰어난 성능을 보입니다. 이 모델의 핵심은 기존 BERT 기반 모델이 가진 높은 정확도는 유지하면서, ‘지연 상호작용(Late Interaction)‘이라는 혁신적인 아키텍처를 통해 검색 속도와 계산 효율성을 극적으로 개선한 데 있습니다.
A.1) ColBERT의 핵심 아이디어: 지연 상호작용 (Late Interaction)
기존 검색 모델들은 크게 두 가지 방식으로 나뉩니다. 첫째, 질의(query)와 문서를 각각 하나의 벡터로 압축하여 유사도를 계산하는 방식(Dense Retrieval)입니다. 이 방법은 빠르지만, 문서 전체의 미묘한 의미를 하나의 벡터에 담아내면서 세부 정보를 잃을 수 있습니다. 둘째, BERT와 같은 크로스 인코더(Cross-encoder)는 질의와 문서를 함께 입력하여 단어 수준의 상호작용을 모두 계산합니다. 이 방식은 정확도가 매우 높지만, 모든 문서 쌍에 대해 복잡한 연산을 수행해야 하므로 속도가 매우 느리다는 치명적인 단점이 있습니다.
ColBERT는 이 두 접근법의 장점을 결합한 **‘지연 상호작용’**이라는 독창적인 해법을 제시합니다.
- 독립적인 다중 벡터 인코딩: ColBERT는 질의와 문서를 각각 독립적으로 BERT 인코더에 통과시킵니다. 이때 중요한 차이점은 질의나 문서를 단일 벡터로 압축하는 대신, 텍스트에 포함된 각 토큰(단어 또는 하위 단어)에 대한 개별적인 벡터 표현을 모두 유지한다는 것입니다. 즉, 하나의 문서는 여러 개의 벡터 집합으로 표현됩니다.
- 지연된 상호작용과 MaxSim 연산: 독립적으로 인코딩된 벡터 표현들은 실제 검색이 일어나는 시점에 상호작용을 시작합니다. ColBERT는 질의에 있는 각 토큰의 벡터를 기준으로, 문서에 있는 모든 토큰 벡터와의 유사도를 계산합니다. 그중에서 **가장 높은 유사도 값(Maximum Similarity, MaxSim)**만을 선택합니다. 마지막으로, 질의의 모든 토큰에 대해 찾아낸 이 최대 유사도 값들을 모두 합산하여 질의와 문서 간의 최종 관련성 점수를 도출합니다.
이러한 지연 상호작용 방식 덕분에, 계산 비용이 많이 드는 문서 인코딩 과정을 미리 처리하여 저장해 둘 수 있습니다. 검색 시점에는 사용자의 질의만 빠르게 인코딩한 후, 미리 계산된 문서 벡터들과 간단한 MaxSim 연산만 수행하면 되므로 검색 속도를 획기적으로 향상시킬 수 있습니다.
A.2) ColBERT의 성능 및 활용
ColBERT는 MS MARCO, TREC CAR 등 여러 표준 벤치마크 데이터셋에서 그 효과를 입증했습니다. 활용 방식은 크게 두 가지로 나뉩니다.
A.2.1) 검색 및 재순위화 (Retrieve-and-Rerank)
가장 일반적인 활용 시나리오는 2단계 파이프라인입니다.
- 1단계 (검색): BM25와 같이 매우 빠른 키워드 기반 검색 모델을 사용해 방대한 문서들 중에서 관련성이 있을 만한 상위 후보군(예: 1,000개)을 빠르게 추려냅니다.
- 2단계 (재순위화): ColBERT가 이 후보군을 대상으로 문맥적 의미를 정밀하게 분석하여 최종 순위를 다시 매깁니다. 이 방식은 기존 BERT 기반 재순위화 모델보다 170배 이상 빠른 속도를 보이면서도, 거의 대등한 수준의 정확도를 달성했습니다.
A.2.2) 엔드투엔드(End-to-End) 검색
ColBERT는 BM25와 같은 외부 모델 없이도, 대규모 문서 컬렉션에서 직접 관련 문서를 찾아내는 엔드투엔드 검색이 가능합니다. Faiss와 같은 근사 최근접 이웃(ANN) 탐색 기술을 활용하여, 수많은 토큰 벡터 중에서 효율적으로 후보를 찾고, 이후 정확한 점수를 계산하는 방식으로 작동합니다.
A.2.3) ColBERTv2로의 진화
ColBERT의 후속 버전인 ColBERTv2는 성능을 더욱 개선했습니다. 핵심적인 발전은 잔차 압축(residual compression)과 같은 기법을 도입하여 임베딩이 차지하는 저장 공간을 6배에서 10배가량 줄이면서도 검색 품질은 오히려 향상시켰다는 점입니다. 이로써 ColBERT는 더욱 실용적이고 확장성 있는 정보 검색 시스템의 핵심 기술로 자리 잡게 되었습니다.
결론적으로 ColBERT는 지연 상호작용이라는 혁신을 통해 딥러닝 검색 모델의 정확성과 효율성 사이의 오랜 트레이드오프를 성공적으로 해결했습니다. 이는 검색 엔진, 질의응답 시스템 등 다양한 응용 분야에서 실시간으로 고품질 검색 결과를 제공할 수 있는 새로운 가능성을 열었습니다.
A.2.4) ColBERT의 구체적인 학습 방식
ColBERT는 ‘대조 학습(Contrastive Learning)’ 방식을 사용하여 파인튜닝됩니다. 모델이 ‘관련 있는 쌍’과 ‘관련 없는 쌍’을 잘 구별하도록 가르치는 것입니다.
A.2.4.1) 학습 데이터
학습은 (질의 q, 긍정 문서 d+, 부정 문서 d-) 세 가지로 구성된 ‘트리플렛(triplet)’ 데이터를 사용합니다.
- 질의 (Query, q): 사용자의 검색어
- 긍정 문서 (Positive Document, d+): 해당 질의와 실제로 관련이 있는 문서
- 부정 문서 (Negative Document, d-): 해당 질의와 관련이 없는 문서
A.2.4.2) 학습 목표 및 손실 함수
학습의 목표는 명확합니다: “긍정 쌍의 점수는 높이고, 부정 쌍의 점수는 낮추는 것.”
다시 말해, Score(q, d+)가 Score(q, d-)보다 훨씬 더 높아지도록 모델의 파라미터를 업데이트하는 것입니다.
이를 위해 논문에서는 Pairwise Softmax Cross-Entropy Loss를 사용합니다. 계산 과정은 다음과 같습니다.
-
하나의 트리플렛 (q, d+, d-)이 주어지면, ColBERT는 두 쌍의 점수를 각각 계산합니다.
- 긍정 쌍 점수:
S_pos = Score(q, d+) - 부정 쌍 점수:
S_neg = Score(q, d-) - 여기서 Score 함수는 앞에서 설명한 MaxSim 연산의 합입니다.
- 긍정 쌍 점수:
-
이 두 점수를 가지고 소프트맥스(Softmax) 함수를 통과시켜 손실(loss)을 계산합니다. 이는 S_pos가 S_neg보다 커질 확률을 최대화하는 것과 같습니다. 수식적으로는 -log(exp(S_pos) / (exp(S_pos) + exp(S_neg)))와 유사한 형태가 됩니다.
-
이 손실 값을 역전파(backpropagation)하여 BERT 인코더와 추가된 선형 계층의 가중치를 업데이트합니다.
이 과정을 수많은 트리플렛 데이터에 대해 반복하면서, 모델은 점차 어떤 토큰 상호작용이 관련성을 높이는지를 학습하게 됩니다. 즉, MaxSim 점수를 잘 만들어내는 방향으로 토큰 임베딩을 생성하도록 훈련되는 것입니다.
A.2.5) BERT 기반 Bi-Encoder와의 비교
사용자께서 지적하신 대로, BERT 기반의 Bi-Encoder와 ColBERT를 비교하는 것은 매우 중요하며, 논문의 저자들도 이 부분을 ** ablation study (제거 연구)**를 통해 명확하게 증명했습니다.
A.2.5.1) Bi-Encoder란?
- 구조: 질의 인코더와 문서 인코더가 따로 존재합니다. (이름이 ‘Bi-Encoder’인 이유)
- 표현: 질의와 문서를 각각 **하나의 단일 벡터(Single Vector)**로 압축합니다. 보통 BERT의 [CLS] 토큰 출력을 받아와 전체 텍스트를 대표하는 하나의 벡터로 사용합니다.
- 점수 계산: 두 개의 단일 벡터 간의 유사도(예: 코사인 유사도, 내적)를 계산하여 최종 점수를 얻습니다. DPR, S-BERT(검색용) 등이 대표적인 예입니다.
A.2.5.2) ColBERT 논문의 비교 결과
ColBERT 논문의 **Figure 5 (Ablation results)**를 보면, 이 비교가 명확하게 나타나 있습니다.
- 비교 대상:
BERT [CLS]-based dot-product모델이 바로 전형적인 Bi-Encoder입니다. BERT의[CLS]토큰으로 질의와 문서의 단일 벡터를 만들고, 두 벡터의 내적(dot-product)으로 점수를 계산하는 방식입니다.

- 결과: 아래 그래프에서 볼 수 있듯이, Bi-Encoder 방식인 [A] 모델은 ColBERT([D], [E])에 비해 성능(MRR@10 점수)이 현저하게 낮습니다.
A.2.5.3) 왜 ColBERT가 Bi-Encoder보다 우수한가?
이 성능 차이는 두 모델의 근본적인 구조 차이에서 비롯됩니다.
- 정보 병목 현상 (Information Bottleneck): Bi-Encoder는 질의나 문서의 모든 풍부한 정보를 하나의 고정된 크기의 벡터에 억지로 압축해야 합니다. 이 과정에서 세밀하고 중요한 정보가 손실될 수밖에 없습니다. 이를 ‘정보 병목 현상’이라고 합니다.
- 세밀한 상호작용 (Fine-grained Interaction): 반면, ColBERT는 정보를 압축하지 않습니다. 모든 토큰의 벡터 표현을 그대로 유지한 채, 검색
A.2.6) ColBERT 적용 시 토큰 개수는 어느 정도인가요?
결론부터 말하면, 질의(Query)는 고정된 개수를 사용하고 문서(Document)는 가변적인 개수를 사용합니다.
A.2.6.1) 질의 (Query)
- 고정 길이 사용 (논문 기준 32개): ColBERT 논문에서는 질의를 항상 32개의 토큰(Nq=32)으로 길이를 고정하여 처리합니다.
- 패딩과 잘라내기 (Padding & Truncation):
- 만약 실제 질의 토큰 수가 32개보다 적으면, 나머지는 BERT의 특수 토큰인 [MASK]로 채워 넣습니다(패딩). 이를 논문에서는 **‘질의 증강(Query Augmentation)‘**이라고 부르는데, 이 [MASK] 토큰 위치에서도 학습을 통해 질의를 확장하거나 중요한 단어에 가중치를 부여하는 임베딩이 생성될 수 있습니다.
- 만약 질의가 32개보다 길면, 32개까지만 사용하고 나머지는 잘라냅니다.
A.2.6.2) 문서 (Document)
- 가변 길이 사용: 문서는 내용이 다양하므로 길이를 고정하지 않습니다.
- 일반적인 길이: MS MARCO와 같은 구절 검색(Passage Retrieval) 데이터셋에서 사용되는 문서는 보통 짧은 문단 형태입니다. 일반적으로 토큰화(WordPiece)를 거치면 수십 개에서 100~200개 정도의 토큰으로 표현되는 경우가 많습니다.
- 긴 문서 처리: 만약 위키피디아 전체 페이지와 같이 매우 긴 문서를 처리해야 한다면, BERT의 최대 입력 길이(보통 512 토큰) 제한에 맞춰 여러 개의 작은 구절(passage)로 분할하여 각각을 별도의 문서로 인덱싱하는 전처리 과정이 필요합니다.
| 구분 | 토큰 개수 | 처리 방식 |
| 질의 (Query) | 32개 (고정) | 짧으면 [MASK]로 패딩, 길면 잘라냄 |
| 문서 (Document) | 가변적 (보통 100~200개) | 모델의 최대 길이를 넘으면 여러 구절로 분할 |
A.2.7) ColBERT 방식으로 학습한 모델을 일반적인 단일 벡터 검색 방식으로 쓸 수 있나요?
결론부터 말씀드리면, 그렇게 할 수는 있지만 성능이 매우 안 좋을 것입니다. 즉, 사실상 제대로 동작하지 않을 가능성이 높습니다.
그 이유는 학습 목표가 근본적으로 다르기 때문입니다.
A.2.7.1) 일반적인 단일 벡터 검색 (Bi-Encoder 방식)
- 학습 목표: Bi-Encoder(예: DPR, S-BERT)의 목표는
[CLS]토큰 하나에 질의나 문서 전체의 의미를 잘 압축**하는 것입니다. 모든 학습 과정은 이 [CLS] 벡터가 의미적으로 좋은 대표 벡터가 되도록 집중됩니다. - 손실 함수 적용:
[CLS]벡터끼리의 코사인 유사도나 내적 점수 자체를 가지고 손실(loss)을 계산하고 모델을 업데이트합니다.
A.2.7.2) ColBERT의 학습 방식
- 학습 목표: ColBERT의 목표는 각각의 토큰 임베딩이 MaxSim 연산의 좋은 ‘재료’가 되도록 만드는 것입니다. [CLS] 토큰은 특별한 대우를 받지 않으며, 다른 일반 토큰들과 동등한 역할을 수행합니다.
- 손실 함수 적용: 모든 토큰의 MaxSim 점수를 합산한 최종 점수를 가지고 손실을 계산합니다. 즉, 모델은 [CLS] 토큰 하나를 좋게 만드는 것이 아니라, **모든 토큰 임베딩의 ‘앙상블’**이 좋은 점수를 내도록 학습됩니다.
A.2.7.3) 직관적인 비유
- Bi-Encoder는 한 명의 **‘총괄 매니저’([CLS] 토큰)**를 훈련시키는 것과 같습니다. 이 매니저는 혼자서 팀 전체를 대표하여 다른 팀 매니저와 소통(유사도 계산)해야 합니다.
- ColBERT는 팀의 **‘모든 팀원’(모든 토큰)**을 각자의 분야에서 최고의 **‘전문가’**로 훈련시키는 것과 같습니다. 각 전문가는 상대 팀의 특정 전문가와 소통(MaxSim 연산)하는 데 특화되어 있습니다. 팀 간의 평가는 이 전문가들의 개별적인 소통 결과를 종합하여 이루어집니다.
이 비유에서 알 수 있듯이, 최고의 전문가(ColBERT의 토큰) 한 명을 데려다가 총괄 매니저(Bi-Encoder의 [CLS] 역할)의 일을 시키면 제대로 해낼 수 없는 것과 마찬가지입니다.
따라서 ColBERT 방식으로 학습된 모델의 [CLS] 토큰은 문서 전체를 대표하는 의미 정보를 압축하도록 학습되지 않았기 때문에, 이를 단일 벡터로 사용하여 검색하면 성능이 크게 저하될 수밖에 없습니다. 모델의 아키텍처와 학습 목표는 매우 긴밀하게 연결되어 있어, 하나를 바꾸면 다른 쪽도 함께 고려해야 합니다.
ColBERT 논문에 제시된 연구 질문과 그에 대한 답변을 정리한 내용입니다.
B) ColBERT Research Questions (RQs)
B.1) RQ1: 일반적인 재순위(re-ranking) 설정에서 ColBERT는 고효율 및 고성능 신경망 모델 간의 기존 격차를 얼마나 잘 해소할 수 있는가?
ColBERT는 기존의 고성능 신경망 모델과 비슷한 수준의 효과를 보이면서도 훨씬 높은 효율성을 달성하여 두 모델 간의 격차를 성공적으로 해소합니다.
MS MARCO 데이터셋을 사용한 실험에서 ColBERT의 재순위 성능(MRR@10 기준 34.9)은 당시 최고 성능 모델인 BERT-large(35.9)와 비교했을 때 약간 낮은 수준이지만, 다른 신경망 모델들보다는 월등히 뛰어난 결과를 보여주었습니다.
가장 주목할 점은 비용 측면입니다. ColBERT는 BERT-base 모델에 비해 처리 속도(latency)는 170배 이상 빠르고, 연산량(FLOPs)은 13,900배나 적게 요구합니다. 이는 ColBERT가 기존 모델들의 장점인 높은 정확도와 빠른 속도를 모두 만족시키는 효율적인 아키텍처임을 보여줍니다.
B.2) RQ2: 재순위(re-ranking)를 넘어, ColBERT가 대규모 문서 컬렉션에서 직접 종단 간(end-to-end) 검색을 효과적으로 지원할 수 있는가?
네, ColBERT는 대규모 문서 컬렉션에서 직접 종단 간 검색을 효과적으로 지원하며, 이는 기존의 재순위 방식보다 더 높은 성능을 보여줍니다.
MS MARCO의 880만 개 전체 문서 컬렉션에서 직접 상위 1,000개 문서를 검색하는 실험에서, ColBERT는 36.0(MRR@10)의 점수를 기록했습니다. 이는 전통적인 검색 모델인 BM25(16.7)나 다른 최신 모델들(doc2query, DeepCT 등)보다 훨씬 높은 수치입니다.
특히, 종단 간 검색 방식은 재순위 방식보다 더 많은 관련 문서를 초기 단계에서 찾아내는 ‘재현율(recall)‘이 높기 때문에 최종 정확도(MRR@10) 역시 향상되는 결과를 가져왔습니다. 예를 들어, ColBERT의 Recall@50(상위 50개 재현율)은 BM25의 Recall@1000보다도 높게 나타났습니다.
B.3) RQ3: ColBERT의 각 구성 요소(예: 지연 상호작용, 쿼리 증강)는 성능에 어떤 영향을 미치는가?
ColBERT의 핵심 구성 요소들은 모델의 높은 성능을 달성하는 데 필수적인 역할을 합니다. 각 요소를 제거했을 때 성능이 눈에 띄게 하락하는 것을 통해 이를 확인할 수 있습니다.
- 지연 상호작용(Late Interaction): 이 구조를 단순한 단일 벡터 유사도 계산(dot-product)으로 대체했을 때, ColBERT의 성능은 크게 저하되었습니다. 이는 쿼리와 문서의 각 임베딩을 독립적으로 비교하는 세분화된 상호작용이 성능에 매우 중요하다는 것을 의미합니다.
- 최대 유사도(MaxSim): 각 쿼리 임베딩에 대해 문서 내에서 가장 유사한 임베딩 하나만을 찾는 ‘최대 유사도’ 방식 대신 ‘평균 유사도’를 사용했을 때도 성능이 하락했습니다. 이는 쿼리의 특정 용어가 문서의 특정 부분과 깊게 관련 맺는 방식을 포착하는 것이 중요함을 시사합니다.
- 쿼리 증강(Query Augmentation): 쿼리를 인코딩할 때 특별 토큰([mask])을 추가하여 쿼리를 확장하거나 재가중하는 ‘쿼리 증강’ 기능을 제거하자 MRR@10 점수가 현저히 낮아졌습니다. 이는 쿼리 이해 및 확장이 검색 성능에 미치는 긍정적인 영향을 보여줍니다.
B.4) RQ4: 오프라인 계산 및 메모리 오버헤드 측면에서 ColBERT의 인덱싱 관련 비용은 어느 정도인가?
ColBERT의 인덱싱 비용은 실용적인 수준이며, 효율적인 최적화를 통해 상당한 속도 향상과 메모리 절감을 이룰 수 있습니다.
- 인덱싱 처리량(Throughput): 여러 최적화 기법(다중 GPU 처리, 배치 최적화 등)을 적용했을 때, ColBERT는 MS MARCO의 전체 문서를 약 3시간 만에 인덱싱할 수 있었습니다. 이는 분당 50,000개 이상의 문서를 처리하는 속도입니다.
- 메모리 사용량(Footprint): 인덱싱된 문서 임베딩이 차지하는 공간은 조절 가능합니다. 예를 들어, 표준 설정(임베딩 차원 128, 차원당 4바이트)에서는 286GiB의 공간이 필요했지만, 가장 공간 효율적인 설정(차원 24, 차원당 2바이트)에서는 단 27GiB만으로 전체 MS MARCO 컬렉션을 표현할 수 있었고, 이때 성능 하락은 1%에 불과했습니다.
C) Using ColBERT in ANN
ColBERT를 BM25와 같은 전통적인 검색 엔진 없이 ‘종단 간(end-to-end)’ 검색에 사용할 때, MaxSim 연산의 핵심 아이디어를 ANN(Approximate Nearest Neighbor, 근사 최근접 이웃) 검색을 통해 매우 효율적으로 구현합니다.
단순히 MaxSim을 ANN으로 ‘대체’한다기보다는, ANN을 강력한 필터링(후보군 추출) 도구로 사용하여 MaxSim 계산이 필요한 문서의 수를 극적으로 줄이는 방식입니다.
어떻게 작동하는지 단계별로 설명해 드리겠습니다.
C.1.1) 1단계: 오프라인 인덱싱 (미리 준비하는 과정)
- 컬렉션의 모든 문서(예: 880만 개)를 ColBERT의 문서 인코더에 통과시킵니다.
- 각 문서는 여러 개의 작은 벡터(임베딩) 묶음으로 변환됩니다. (예: 한 문서가 100개의 임베딩으로 표현됨)
- 이때 생성된 수억 개(880만 개 문서 x 평균 100개 임베딩)의 모든 개별 임베딩 벡터를 하나의 거대한 ANN 인덱스(예: Faiss 라이브러리 사용)에 전부 넣습니다.
- 이때, ANN 인덱스에 있는 각 임베딩은 자신이 어떤 문서에서 왔는지 출처 정보를 기억하고 있어야 합니다.
C.1.2) 2단계: 온라인 검색 (실제 쿼리가 들어왔을 때)
사용자가 쿼리를 입력하면 다음과 같은 두 단계의 검색이 이루어집니다.
C.1.2.1) 1. 후보군 필터링 단계 (ANN을 이용한 빠른 가지치기)
-
사용자의 쿼리도 ColBERT의 쿼리 인코더를 통해 여러 개의 쿼리 임베딩 묶음(예: q1, q2, …, q32)으로 변환됩니다.
-
각 쿼리 임베딩(q1, q2 등)에 대해, 오프라인에서 구축한 거대한 ANN 인덱스에서 가장 유사한 문서 임베딩을 k’개씩(예: 1,000개) 빠르게 찾아냅니다.
- q1과 가장 유사한 문서 임베딩 1,000개 검색
- q2와 가장 유사한 문서 임베딩 1,000개 검색
- …
- q32와 가장 유사한 문서 임베딩 1,000개 검색
-
이렇게 찾은 모든 문서 임베딩들의 출처 문서를 확인하고, 중복을 제거합니다. 그러면 수백만 개의 문서 중 단 몇천 개의 유력한 후보 문서 리스트가 만들어집니다.
C.1.2.2) 2. 최종 점수 계산 및 재순위 단계 (정확한 ColBERT 점수 계산)
- 이제 후보군이 수천 개로 크게 줄었으므로, 이 후보 문서들에 대해서만 원래의 ColBERT MaxSim 점수 계산을 수행합니다. 즉, 각 후보 문서에 대해 점수 = Sum(MaxSim(쿼리 임베딩, 문서 임베딩)) 공식을 정확하게 계산합니다.
- 이 점수를 기준으로 최종 순위를 매겨 사용자에게 결과를 보여줍니다.
C.1.3) 결론: 어떻게 한 것인가?
- BM25의 역할 대체: 전통적인 1단계 검색 엔진(BM25)이 키워드 매칭으로 후보 문서를 찾는 역할을 ANN을 이용한 ‘의미 기반’ 유사도 검색으로 대체한 것입니다.
- MaxSim과 ANN의 관계: MaxSim은 쿼리와 단일 문서 간의 최종 점수를 계산하는 ‘채점 공식’이고, ANN은 이 채점을 전체 문서에 대해 다 해보는 대신 “채점해볼 만한 가치가 있는 유망한 문서”를 빠르게 골라내는 ‘필터링 도구’ 입니다.
이러한 2단계 접근 방식을 통해 ColBERT는 키워드가 일치하지 않더라도 의미적으로 관련된 문서를 초기 단계에서부터 찾아낼 수 있어(높은 재현율), BM25 기반의 재순위 방식보다 더 높은 성능을 달성할 수 있습니다.