---
title: "BM25부터 E5-Mistral까지 BGE-M3의 비교 기준을 다시 읽었다"
slug: "bm25-mdpr-mcontriever-e5-retrieval-baselines"
category: "RAG"
topic: "rag"
subtopic: "retrieval"
tags: ["BM25","mDPR","mContriever","multilingual-E5","E5-Mistral","BGE-M3","Dense Retrieval","Multilingual Retrieval"]
status: "published"
created: "2026-07-22"
updated: "2026-07-22"
summary: "BGE-M3 논문에 등장하는 BM25·mDPR·mContriever·mE5-large·E5-Mistral-7B의 구조와 학습 조건, 입력 형식, tokenizer 통제와 benchmark 해석을 따로 정리했다."
kind: "Study Note"
evidence: "BGE-M3 v5 표 1·3·부록 C.2와 mDPR·mContriever·E5 공식 model card·config 확인"
---

[M3-Embedding 논문](https://arxiv.org/abs/2402.03216)의 baseline 문단을 읽다가 `mDPR³`, `mContriever⁴`, `mE5large`, `E5mistral-7b`에서 멈췄다.

처음에는 숫자와 저자명이 model version의 일부처럼 보였다. 원문과 각주, checkpoint config를 다시 확인하니 `3`과 `4`는 Hugging Face 링크를 가리키는 각주 번호였고, `Zhang et al., 2023`, `Wang et al., 2022`는 인용 논문이었다.

이 글에서는 BGE-M3 자체보다 비교표에 들어간 baseline을 분리해 본다. 이름만 나열하면 모두 multilingual retrieval model처럼 보이지만, 실제로는 학습하지 않는 lexical 방식부터 7B decoder model까지 조건이 크게 다르다.

## 비교표에 들어간 방식부터 나눴다

```text
lexical retrieval
└─ BM25

single-vector Dense retrieval
├─ mDPR
├─ mContriever
├─ multilingual-E5-large
└─ E5-Mistral-7B-Instruct

M3 retrieval functions
├─ Dense
├─ Sparse
├─ Multi-vector
└─ 세 방식의 결합
```

BM25는 exact term을 바탕으로 점수를 계산한다. 나머지 네 baseline은 query와 document를 각각 하나의 dense vector로 만든다. BGE-M3는 하나의 encoder에서 Dense, learned sparse, multi-vector 표현을 모두 만든다는 점이 다르다.

이 분류부터 해 두지 않으면 `M3 Sparse`를 BM25로 오해하거나, `M3 All`을 하나의 dense retriever와 같은 실행 경로로 비교하게 된다.

## BM25는 학습하지 않는 lexical baseline이다

BM25는 query term이 document에 얼마나 등장하는지, 전체 corpus에서 얼마나 희귀한지, document가 얼마나 긴지를 반영한다.

- term frequency가 늘어도 점수는 계속 선형으로 증가하지 않고 포화된다.
- 여러 document에 흔한 term보다 희귀한 term에 큰 weight를 준다.
- 긴 document가 단지 길다는 이유로 유리해지지 않도록 보정한다.

embedding model이 아니므로 neural inference가 필요 없다. 대신 tokenizer와 analyzer가 실제로 어떤 term을 만들었는지가 품질에 직접 영향을 준다.

BGE-M3 논문의 main table은 일반적인 Lucene analyzer가 아니라 M3와 같은 XLM-RoBERTa tokenizer를 BM25에 적용했다. 같은 tokenizer를 사용했다고 BM25가 Dense retrieval로 바뀌는 것은 아니다. text를 term으로 나누는 조건만 맞추고, 점수는 여전히 BM25 수식으로 계산한다.

## mDPR은 mBERT 기반의 초기 Dense baseline이다

논문은 [`castorini/mdpr-tied-pft-msmarco`](https://huggingface.co/castorini/mdpr-tied-pft-msmarco)를 사용했다.

확인한 config와 MIRACL의 설명을 합치면 다음 구조다.

- mBERT 규모의 12-layer encoder
- 768차원 single vector
- 최대 512 token
- query와 passage를 따로 encoding하는 bi-encoder
- MS MARCO Passage로 pre-fine-tuning

checkpoint 이름도 학습 조건을 담고 있다.

```text
tied
query encoder와 passage encoder가 weight를 공유

pft-msmarco
MS MARCO Passage로 pre-fine-tuning
```

BGE-M3 논문의 `Zhang et al., 2023`은 mDPR을 처음 제안한 논문이라는 뜻이 아니다. MIRACL에서 이 checkpoint를 baseline으로 사용한 구성을 가리킨다. mDPR은 MS MARCO로 학습한 뒤 MIRACL에서 zero-shot으로 평가됐다.

## mContriever는 비지도 pre-training 뒤 MS MARCO를 학습했다

[mContriever 공식 저장소](https://github.com/facebookresearch/contriever)는 29개 언어의 CCNet data로 contrastive pre-training한 multilingual retriever를 공개한다.

- mBERT 기반 12-layer encoder
- average pooling
- 768차원 single vector
- 최대 512 token

여기서 조심할 점은 실제 비교에 사용한 checkpoint다. 논문은 [`facebook/mcontriever-msmarco`](https://huggingface.co/facebook/mcontriever-msmarco)를 사용했다. 이름 그대로 multilingual contrastive pre-training 뒤 영어 MS MARCO로 fine-tuning한 model이다.

따라서 `mContriever는 비지도 model`이라고만 적으면 비교 조건을 잘못 요약하게 된다. pre-training에는 label이 없었지만 최종 checkpoint에는 supervised retrieval 학습이 들어갔다.

## mE5-large는 XLM-R large 기반의 다국어 embedding model이다

논문의 `mE5large`는 [`intfloat/multilingual-e5-large`](https://huggingface.co/intfloat/multilingual-e5-large)를 가리킨다.

- XLM-RoBERTa-large 기반 24-layer encoder
- 1,024차원 single vector
- 최대 512 token
- multilingual text pair의 weakly supervised contrastive pre-training
- labeled retrieval data를 이용한 fine-tuning

E5 계열에서는 입력 prefix도 model 조건이다.

```text
query: 사용자의 검색 질의
passage: 검색 대상 문서
```

공식 model card는 비대칭 retrieval에서 `query:`와 `passage:` prefix를 사용하도록 명시한다. prefix를 빼면 코드가 실패하는 것은 아니지만 학습 때 본 형식과 달라져 성능이 저하될 수 있다.

BGE-M3 논문의 `Wang et al., 2022`는 최초 E5 논문을 인용한다. multilingual E5의 학습 방법과 평가를 정리한 별도 기술 보고서는 2024년에 공개됐다.

## E5-Mistral-7B는 이름만 같은 작은 변형이 아니다

[`intfloat/e5-mistral-7b-instruct`](https://huggingface.co/intfloat/e5-mistral-7b-instruct)는 XLM-R encoder가 아니라 Mistral-7B-v0.1을 embedding model로 바꾼 checkpoint다.

- decoder-only Mistral backbone
- 32 layers와 약 7B parameters
- 마지막 유효 token을 pooling
- 4,096차원 embedding
- query에 task instruction 사용
- document에는 instruction을 붙이지 않음

query 형식은 다음과 같다.

```text
Instruct: Given a web search query, retrieve relevant passages that answer the query
Query: BM25와 Dense retrieval은 어떻게 다른가
```

BGE-M3 논문 표는 이 model의 최대 길이를 8,192로 기록했다. 현재 공식 model card의 예제와 limitation은 4,096 token을 사용하며 그보다 긴 입력을 권장하지 않는다. backbone config의 최대 position과 embedding checkpoint가 실제로 권장하는 길이를 같은 값으로 보면 안 된다.

다국어 data로 fine-tuning했지만 공식 model card는 multilingual use case에 `multilingual-e5-large`를 권장한다. Mistral-7B-v0.1의 pre-training이 영어 중심이기 때문이다. 7B라는 parameter 수만 보고 mE5-large보다 항상 강할 것이라고 예상할 수 없다.

## BGE-M3 Dense와 한 표에 놓으면 차이가 보인다

| 방식 | backbone | 출력 | 입력 길이 | query 형식 |
|---|---|---:|---:|---|
| BM25 | 없음 | sparse term score | neural 제한 없음 | raw query |
| mDPR | mBERT, 12 layers | 768 | 512 | raw query |
| mContriever | mBERT, 12 layers | 768 | 512 | raw query |
| mE5-large | XLM-R large, 24 layers | 1,024 | 512 | `query:` prefix |
| E5-Mistral-7B | Mistral-7B, 32 layers | 4,096 | 논문 8,192·model card 권장 4,096 | task instruction |
| BGE-M3 Dense | XLM-R large, 24 layers | 1,024 | 8,192 | instruction 불필요 |

같은 multilingual retrieval 표에 있지만 model size, input length, pooling, query format, training data가 모두 다르다. 이 표는 같은 크기의 architecture를 통제한 비교가 아니다. 각 시기의 공개 multilingual baseline과 M3의 최종 품질을 함께 비교한 benchmark에 가깝다.

## MIRACL 결과에서 model 크기와 순위가 일치하지 않았다

BGE-M3 논문이 보고한 MIRACL 개발셋 평균 `nDCG@10`은 다음과 같다.

| 방식 | nDCG@10 |
|---|---:|
| BM25, XLM-R tokenizer | 31.9 |
| mDPR | 41.8 |
| mContriever | 43.1 |
| mE5-large | 66.6 |
| E5-Mistral-7B | 63.4 |
| M3 Sparse | 53.9 |
| M3 Dense | 69.2 |
| M3 Multi-vector | 70.5 |
| M3 Dense + Sparse | 70.4 |
| M3 All | 71.5 |

M3 Dense는 비교한 Dense baseline 중 가장 높았다. 그러나 mE5-large와 차이는 2.6점이었고, 7B인 E5-Mistral-7B는 0.6B 규모의 mE5-large보다 3.2점 낮았다.

이 결과만으로 M3가 모든 다국어 검색에서 가장 좋다고 말할 수는 없다.

- M3의 multilingual fine-tuning data에는 MIRACL이 포함됐다.
- model마다 query prefix와 instruction 조건이 다르다.
- parameter와 최대 입력 길이가 통제되지 않았다.
- `M3 Multi-vector`와 `M3 All`에는 candidate reranking 경로가 포함된다.
- MIRACL은 사내 문서가 아니라 다국어 Wikipedia passage retrieval이다.

`nDCG@10 69.2`는 정확도 69.2%라는 뜻도 아니다. query별 상위 10개 ranking quality를 정규화한 뒤 평균한 값이다.

## 같은 tokenizer를 쓴 이유와 빠진 조건을 나눴다

논문 저자들은 BM25와 M3의 비교 가능성을 높이기 위해 양쪽에 XLM-RoBERTa tokenizer를 사용했다고 설명한다. 같은 vocabulary를 사용하면 retrieval latency도 같은 조건에 가깝게 만들 수 있다고 적었다.

의도는 이해할 수 있다.

```text
같은 text
→ 같은 XLM-R tokenizer
→ 같은 token ID 공간
   ├─ BM25는 tf·df·document length로 weight 계산
   └─ M3 Sparse는 neural encoder가 weight 학습
```

tokenizer 차이를 줄였기 때문에 term weighting 방식의 영향을 더 직접적으로 볼 수 있다. 그러나 이것이 실제 서비스의 end-to-end latency가 같다는 뜻은 아니다.

```text
BM25
query tokenization + inverted index search

M3 Sparse
query tokenization + neural encoding + sparse index search
```

같은 vocabulary는 sparse index의 term 공간을 통제한다. M3 query encoder의 forward pass까지 없애 주지는 않는다. 실제 latency를 비교하려면 hardware, query encoding 포함 여부, cache 상태, top-k, p50과 p95를 따로 기록해야 한다.

## Lucene analyzer를 사용하자 BM25 결과가 달라졌다

논문의 부록 C.2는 BM25 tokenizer를 바꿔 다시 평가했다.

| 방식 | tokenizer | MIRACL | MKQA | MLDR |
|---|---|---:|---:|---:|
| BM25 | XLM-R | 31.9 | 39.9 | 53.6 |
| BM25 | Lucene analyzer | 38.5 | 40.9 | 64.1 |
| M3 Sparse | XLM-R | 53.9 | 45.3 | 62.2 |
| M3 All | XLM-R | 71.5 | 75.5 | 65.0 |

MIRACL과 MLDR은 `nDCG@10`, MKQA는 `Recall@100`이므로 서로 다른 dataset 열을 같은 척도로 합치면 안 된다.

MLDR에서는 Lucene analyzer BM25가 64.1로 M3 Sparse 62.2보다 높았다. main table의 XLM-R BM25만 보면 M3 Sparse가 8.6점 높지만 analyzer를 바꾸면 순서가 뒤집혔다.

따라서 두 BM25 baseline은 답하는 질문이 다르다.

```text
BM25 + XLM-R tokenizer
M3 Sparse와 term 조건을 맞춘 통제 실험

BM25 + 언어별 analyzer
실제 서비스에서 달성 가능한 lexical baseline
```

새 learned sparse model을 평가할 때는 둘 다 필요하다. 통제용 baseline만 두면 운영 가능한 BM25를 과소평가할 수 있고, 언어별 analyzer만 두면 learned weight의 효과와 tokenizer 효과를 분리하기 어렵다.

## 실제 선택은 query 유형별로 다시 해야 한다

공개 benchmark를 읽고도 사내 검색에서 무엇을 선택할지는 남는다.

| 조건 | 먼저 볼 후보 | 이유 |
|---|---|---|
| 품번·에러 코드·고유명사 | exact field와 BM25 | 표면형 자체가 relevance인 경우가 많다. |
| 한국어 포함 다국어 의미 검색 | mE5-large와 BGE-M3 Dense | multilingual encoder 기반의 강한 출발점이다. |
| 긴 문서에서 exact term도 중요함 | analyzer BM25와 M3 Sparse | 긴 문서에서는 lexical signal이 Dense보다 강할 수 있다. |
| 영어 중심이고 큰 GPU budget이 있음 | E5-Mistral-7B | instruction으로 retrieval task를 지정할 수 있다. |
| 기존 multilingual baseline 재현 | mDPR와 mContriever | MIRACL과 과거 연구의 비교 기준을 맞출 수 있다. |
| Dense와 Sparse를 한 model에서 비교 | BGE-M3 | 같은 backbone에서 세 retrieval function을 관찰할 수 있다. |

내가 가져갈 결론은 특정 model 이름이 아니다.

> checkpoint 이름, tokenizer, query format, training data, candidate budget을 적지 않은 benchmark 숫자는 운영 결정을 내리기에 부족하다.

다음 실험에서는 같은 query set으로 BM25, mE5-large, BGE-M3 Dense와 Sparse를 먼저 비교하고 각 방식만 찾은 정답을 기록할 생각이다. E5-Mistral-7B는 7B inference 비용이 실제 품질 증가로 이어지는지 별도 budget에서 확인해야 한다.

## Reference

- Jianlv Chen et al. [BGE M3-Embedding](https://arxiv.org/abs/2402.03216). 2024.
- Xinyu Zhang et al. [MIRACL](https://aclanthology.org/2023.tacl-1.63/). 2023.
- Gautier Izacard et al. [Unsupervised Dense Information Retrieval with Contrastive Learning](https://arxiv.org/abs/2112.09118). 2022.
- Liang Wang et al. [Text Embeddings by Weakly-Supervised Contrastive Pre-training](https://arxiv.org/abs/2212.03533). 2022.
- Liang Wang et al. [Multilingual E5 Text Embeddings](https://arxiv.org/abs/2402.05672). 2024.
- Liang Wang et al. [Improving Text Embeddings with Large Language Models](https://arxiv.org/abs/2401.00368). 2024.
