BM25BM25
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 장.