BM25 (Okapi BM25, 키워드 검색 랭킹 함수)
2026.10.03 · 19분
1. BM25란?
BM25(Best Matching 25)는 질문에 들어 있는 단어가 문서에 얼마나, 어떻게 등장하는지를 보고 문서에 점수를 매기는 키워드 검색 랭킹 함수입니다. 1990년대 런던 시티 대학교의 Okapi 검색 시스템 연구(Stephen Robertson 등)에서 나왔고, 그래서 Okapi BM25라고도 부릅니다.
질문: "연차 이월 규정"
│
▼ 단어로 쪼갠다
[연차] [이월] [규정]
│
▼ 각 단어가 등장하는 문서를 찾고 점수를 더한다
┌──────────────────────────────────────────────┐
│ 문서A: "연차 이월은 최대 5일까지..." 12.4 │
│ 문서B: "취업 규정 제3장 연차 휴가..." 8.1 │
│ 문서C: "규정 개정 이력..." 2.3 │
└──────────────────────────────────────────────┘임베딩 검색이 "뜻이 비슷한 문서"를 찾는다면, BM25는 "질문의 단어가 중요하게 들어 있는 문서"를 찾습니다. 수십 년 된 방법이지만 지금도 Elasticsearch, OpenSearch, Lucene의 기본 랭킹 함수이고, RAG에서도 여전히 핵심 부품입니다.
BM25의 점수 규칙은 이렇게 요약할 수 있습니다.
드문 단어가, 짧은 문서에, 적당히 여러 번 나오면 점수가 높다.
2. 희소 검색과 밀집 검색
2-1. 두 종류의 벡터
검색 방식은 문서를 어떤 벡터로 표현하느냐에 따라 크게 둘로 나뉩니다.
희소 벡터 (Sparse) — BM25, TF-IDF
어휘 사전 크기만큼의 차원 (수만~수십만), 대부분 0
[0, 0, 0, 2, 0, 0, ..., 0, 1, 0, 0, ..., 0]
↑ "연차" ↑ "이월"
→ 어떤 단어가 들어 있는지 그대로 보인다
밀집 벡터 (Dense) — 임베딩
수백~수천 차원, 거의 모든 값이 0이 아님
[0.021, -0.113, 0.087, ..., 0.004]
→ 각 차원이 무슨 뜻인지 사람이 읽을 수 없다| 구분 | 희소 검색 (BM25) | 밀집 검색 (임베딩) |
|---|---|---|
| 일치 기준 | 단어(토큰)가 같아야 한다 | 의미가 비슷하면 된다 |
| 학습 |