표제어
BM25
Okapi BM25
검색·지식 시스템 · 만들 때·이해할 때 · 변화 중인 개념
쉽게 이해하기
검색 시스템은 수많은 문서 중에서 사용자의 질의와 ‘가장 관련 있는’ 문서를 앞에 세워야 한다. 단순 TF‑IDF만 쓰면 같은 단어가 많이 반복되거나 문서가 길다는 이유로 점수가 과도해질 수 있다. 이 때문에 짧고 정확한 문서가 묻히고, 긴 문서가 필요 이상으로 상위에 오르는 현상이 나타난다. BM25는 이 문제를 “과유불급” 원칙으로 풀어낸다. 같은 단어가 추가로 등장해도 효용이 점점 줄어들도록 포화(saturation) 곡선을 적용하고, 너무 긴 문서에는 길이 정규화로 페널티를 준다. 또 드문 단어일수록 더 큰 가중치를 주는 IDF를 결합해, 흔한 단어의 과도한 영향력을 줄인다. 구체적으로는 두 개의 파라미터가 핵심 역할을 한다. k1은 단어 빈도에 대한 포화 정도를, b는 문서 길이 보정의 강도를 조절하며, 실무에서는 k1≈1.2–2, b≈0.75 값이 자주 소개된다. 한마디로, BM25는 질의의 각 용어별로 ‘포화된 TF × IDF × 길이 보정’으로 계산한 기여도를 더한 점수이며, k1과 b가 이 포화와 정규화의 강도를 정한다.
비유와 예시
- 긴 문서 재랭킹에서 스니펫 선별: retriever가 문서를 조각으로 나눈 뒤 임시 인덱스에 넣고 BM25로 상위 조각을 찾아 cross‑encoder에만 전달한다. 재랭커가 토큰 윈도우로 인해 문서 후반을 잘라내는 경우의 관련성 저하를 줄이는 데 도움이 된다.
- 하이브리드 RAG 파이프라인: 사용자 질문을 벡터 DB와 BM25 인덱스에 동시에 조회하고, Reciprocal Rank Fusion(RRF)으로 결과를 합친다. 규정·정책처럼 키워드가 중요한 문서는 BM25가, 표현이 다양한 질문은 벡터 검색이 보완한다.
- 검색 품질 디버깅: 검색 엔진의 explain을 켜고 특정 문서의 낮은 순위를 조사한다. IDF, TF 포화, 길이 정규화의 기여도가 분리돼 보여서 어떤 요소가 점수를 깎았는지 추적할 수 있다.
한눈에 비교
| BM25 | TF‑IDF | Dense Retrieval | |
|---|---|---|---|
| 표현 방식 | 용어 기반(희소) | 용어 기반(희소) | 임베딩 기반(밀집) |
| 의미 대응 | 정확·근접 어휘 중심 | 정확 어휘 중심 | 동의어·의미 대응 |
| 계산 비용 | 대체로 낮음(역색인 조회) | 대체로 낮음 | 대체로 높음(임베딩·ANN) |
| 해석 가능성 | 높음(수식·기여 분해) | 높음(단순 가중) | 낮음(내부 가중 불투명) |
| 저장/인덱싱 | 희소 역색인 | 희소 역색인 | 고차원 벡터+ANN |
| 전형적 용도 | 1차 후보 추출 | 간단한 키워드 검색 | 재랭킹 또는 전체 검색 |
비용과 지연은 인덱스 크기와 ANN 설정 등에 좌우되며, BM25는 TF 포화와 길이 정규화 덕분에 키워드 중심 1차 검색에 유리하고 Dense는 의미 대응과 재랭킹에 강하다.
어디서 왜 중요한가
- 긴 문서 처리: 청크로 나눈 뒤 BM25로 상위 스니펫을 선별해 재랭커/LLM에 전달하면, 절단으로 인한 핵심 구간 손실을 줄일 수 있다.
- 1단계 후보 수집의 표준: BM25로 상위 후보를 뽑고, 이후 신경 재랭커로 의미와 문맥을 보완하는 방식이 널리 쓰인다.
- 파라미터 가이드: 교육 자료에서 k1≈1.2–2, b≈0.75가 빠른 베이스라인을 만드는 기준으로 소개된다.
- 해석 가능 디버깅: explain 출력으로 IDF·TF 포화·길이 정규화 항을 확인하며 원인별로 조치한다.
자주 하는 오해
- ❌ 오해: BM25는 TF‑IDF와 사실상 같다 → ✅ 실제: TF 포화와 문서 길이 정규화로 반복·장문 편향을 줄인다.
- ❌ 오해: BM25는 구문·단어 순서까지 반영한다 → ✅ 실제: 가방‑단어 가정이라 순서·근접도는 기본 점수에 없다.
- ❌ 오해: Dense 검색이 항상 BM25보다 낫다 → ✅ 실제: 의미 매칭엔 강하지만 비용·해석성 트레이드오프가 있어, 키워드 중심 1차 검색에는 BM25가 유리할 수 있다.
대화에서는 이렇게
- "초기 후보는 BM25 top‑K로 뽑고, 그다음 reranker 붙입시다."
- "이번 릴리스는 k1=1.5, b=0.75로 시작하고 로그에 explain 남겨요."
- "긴 문서는 chunk로 나눠 BM25로 상위 조각만 reranker에 보내죠."
- "질의 정제에서 IDF 낮은 불용어는 과감히 빼는 게 좋겠습니다."
- "하이브리드에선 BM25와 벡터 결과를 RRF로 합치죠."
함께 읽으면 좋은 용어
개념 지도
최근 뉴스에서
참고 자료
- Cross-Encoder Rediscovers a Semantic Variant of BM25
교차 인코더와 BM25류 신호의 관계를 분석해, BM25와 neural reranker 연결 맥락을 보강한다.
- CS276 Lecture 12: BM25, BM25F, and User Behavior
BM25/BM25F 수식, k1·b 파라미터 해석, 길이 정규화 설명을 담은 Stanford 강의자료.
- Apache Lucene BM25Similarity
Lucene의 BM25Similarity 구현 문서로, k1·b 파라미터와 IDF/평균 필드 길이 계산을 확인할 수 있다.
- Configure BM25 relevance scoring in Azure AI Search
실제 검색 서비스에서 BM25 k1·b를 설정하는 방법과 full-text ranking 적용 범위를 설명하는 공식 문서.
- Okapi BM25: a non-binary model
BM25의 확률적 IR 배경, TF·문서 길이 보정, Okapi weighting을 설명하는 Stanford IR book 장.