TF-IDF는 여전히 고전적인 키워드 검색 알고리즘이지만, 실제 retriever 대부분이 쓰는 표준은 BM25다. 이번 편은 BM25가 TF-IDF에 무엇을 더했는지, 그리고 키워드 검색 전체의 강점과 한계까지 정리한다.
1. BM25란
BM25는 Best Matching 25의 줄임말이다. 개발자들이 제안한 점수 함수 시리즈의 25번째 변형이라 이런 이름이 붙었다. 기본적으로 TF-IDF와 매우 비슷하게 작동하되, 몇 가지 핵심 개선을 더한 것이다.

2. BM25 공식
공식은 특정 문서에 대해 하나의 keyword가 갖는 관련성 점수를 계산한다. 이 점수를 프롬프트의 모든 keyword에 대해 합산하면 그 문서의 전체 점수가 되고, 이를 순위화에 쓴다.

TF-IDF와 뼈대는 같다(IDF로 드문 단어에 가중, TF로 빈도 반영). 차이는 k₁과 b라는 두 요소, 그리고 그것들이 만들어 내는 두 가지 동작이다.

3. 개선점 두 가지
① 빈도 포화 (Term Frequency Saturation)
문서가 keyword를 더 많이 포함할수록 점수는 오르지만, 증가폭이 점점 줄어든다(diminishing returns). 핵심 아이디어는 pizza를 20번 담은 문서가 10번 담은 문서보다 실제로 2배 더 관련 있는 건 아니라는 것이다. 이렇게 추가 등장의 가치를 점점 깎는 동작을 term frequency saturation이라 한다. (TF-IDF는 등장 횟수에 그대로 비례해 과대평가할 수 있다.)
② 문서 길이 정규화 (Document Length Normalization)
긴 문서는 TF-IDF에서처럼 여전히 패널티를 받지만, BM25에서는 그 패널티도 점점 완만해진다. 긴 문서에 패널티를 주는 것 자체는 중요하지만, TF-IDF는 너무 강하게 깎아 긴 문서를 과도하게 저평가할 수 있다. BM25는 길이가 늘어도 추가 패널티를 점점 줄여서, 긴 문서라도 keyword 빈도가 충분히 높으면 여전히 높은 점수를 받게 한다.

4. 두 개의 하이퍼 파라미터 (k₁, b)
BM25는 TF-IDF와 달리 조정 가능한 두 hyperparameter를 갖는다. 이 둘로 위의 두 동작이 얼마나 빨리 일어나는지를 제어한다.
- k₁ — 빈도 포화 정도 — 반복 keyword에 대한 보상이 얼마나 빨리 줄어드는지. 보통 1.2~2.0 사이 값을 쓴다. 값이 클수록 빈도의 영향이 오래 유지된다.
- b — 길이 정규화 정도 — 문서 길이 패널티를 얼마나 강하게 적용하는지. 0(정규화 없음)에서 1(완전 정규화) 사이. 값이 클수록 긴 문서에 더 불리하다.
운영 환경에서는 knowledge base의 데이터에 가장 잘 맞도록 이 두 값을 튜닝한다.

5. BM25 vs TF-IDF
운영 retriever의 표준 키워드 검색 알고리즘은 BM25다. TF-IDF와 비교하면 이렇다.


6. 키워드 검색 정리 — 강점과 한계
키워드 검색의 핵심은 프롬프트의 keyword가 각 문서에 얼마나 자주 등장하는지로 매칭하는 것이다. 그 과정에서 프롬프트와 문서를 모두 sparse vector로 변환하고, TF-IDF나 BM25는 그 벡터를 처리해 점수·순위를 매기는 서로 다른 방법일 뿐이다. 두 방법 모두 keyword의 희귀성 · 빈도 · 문서 길이를 고려한다. 그중 BM25는 수십 년간 검증되어 가장 널리 쓰이는 알고리즘으로, 복잡성과 성능 사이의 좋은 균형을 준다.

강점
- 단순성 — 직관적이면서 실제로 잘 작동한다. 단독으로도 꽤 좋은 성능을 내고, 더 고급 기법이 넘기 어려운 경쟁력 있는 baseline이 되는 경우가 많다.
- 정확한 keyword matching 보장 — 검색된 문서가 사용자 프롬프트의 keyword를 반드시 포함한다. 사용자가 전문 용어나 정확한 제품명을 쓸 것으로 예상되는 상황에서 특히 중요하다.

한계
결국 키워드 검색은 query에 문서와 정확히 일치하는 단어가 있어야 한다. 사용자가 문서와 의미는 비슷하지만 다른 단어로 프롬프트를 보내면, 그 매칭을 찾지 못한다.

바로 그 한계를 푸는 것이 다음 편 주제다 — 단어가 아니라 의미로 문서를 찾는 시맨틱 검색(semantic search).
'AI > RAG' 카테고리의 다른 글
| How to train Embedding Model (0) | 2026.07.02 |
|---|---|
| Semantic Search & Embedding (0) | 2026.07.02 |
| TF-IDF (키워드 검색) (0) | 2026.07.02 |
| Metadata Filtering(메타데이터 필터링) (0) | 2026.07.02 |
| Retriever의 구조 (0) | 2026.07.02 |
