---
tags: [AI-Agent, RAG]
---

# BM25

> 단어 빈도와 희소성에 기반해 문서와 질의의 어휘적 관련성을 점수화하는 고전 검색 랭킹 함수.

## 핵심 개념

BM25(Best Matching 25)는 TF-IDF를 개선한 **희소(sparse) 어휘 검색** 알고리즘이다. 의미 임베딩과 달리 **정확한 키워드 일치**에 강하다. 고유명사, 코드 식별자, 제품번호, 약어처럼 임베딩이 놓치기 쉬운 토큰을 잘 찾는다. Elasticsearch/OpenSearch의 기본 랭킹 함수이기도 하다.

## 직관: TF와 IDF

BM25 점수는 두 신호의 곱을 항(term)별로 합산한다.

- **TF (Term Frequency, 단어 빈도)**: 질의 단어가 문서에 자주 나올수록 관련성이 높다. 단, 무한히 비례하지 않고 **포화(saturation)** 한다 — 10번이 5번보다 관련 있지만 2배만큼은 아니다.
- **IDF (Inverse Document Frequency, 역문서빈도)**: 전체 문서 중 드물게 등장하는 단어일수록 가중치가 높다. "the", "그리고" 같은 흔한 단어는 변별력이 거의 없어 점수가 낮다.

### 수식

```
score(D,Q) = Σ_t∈Q  IDF(t) · [ f(t,D)·(k1+1) ] / [ f(t,D) + k1·(1 - b + b·|D|/avgdl) ]
```

- `f(t,D)`: 문서 D에서 단어 t의 빈도(TF).
- `|D|`: 문서 길이, `avgdl`: 평균 문서 길이 → **길이 정규화**로 긴 문서의 빈도 이점을 보정.
- `k1` (보통 1.2~2.0): TF 포화 정도 조절.
- `b` (보통 0.75): 길이 정규화 강도.

## 장단점

| 장점 | 단점 |
|------|------|
| 정확한 키워드 일치에 강함 | 동의어·의미 이해 못 함 ("자동차" ≠ "차량") |
| 학습 불필요, 빠르고 가벼움 | 오탈자·표현 차이에 취약 |
| 결과 해석이 쉬움 | 문맥적 의미 검색 불가 |

## RAG에서의 활용

의미 검색([[Embedding]])이 놓치는 정확 일치를 BM25가 보완하므로, 둘을 결합한 [[Hybrid Retrieval]]이 단독 방식보다 강건하다.

## 관련 노트

- [[Embedding]]
- [[Hybrid Retrieval]]
- [[Vector Database]]
- [[Re-ranking]]
- [[BM25]] (용어사전)
