TF-IDF는 여전히 고전적인 키워드 검색 알고리즘이지만, 실제 retriever 대부분이 쓰는 표준 BM25다. 이번 편은 BM25가 TF-IDF에 무엇을 더했는지, 그리고 키워드 검색 전체의 강점과 한계까지 정리한다.

 

1. BM25란

BM25는 Best Matching 25의 줄임말이다. 개발자들이 제안한 점수 함수 시리즈의 25번째 변형이라 이런 이름이 붙었다. 기본적으로 TF-IDF와 매우 비슷하게 작동하되, 몇 가지 핵심 개선을 더한 것이다.

그림 1. BM25는 TF-IDF를 조금 더 정교하게 다듬은(refined) 버전이다.

 

 

2. BM25 공식

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

 

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

그림 2. BM25 공식 — 하나의 keyword에 대한 점수를 구하고, 모든 keyword 점수를 합산해 문서 전체 점수를 만든다.

 

 

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 빈도가 충분히 높으면 여전히 높은 점수를 받게 한다.

그림 3. (위) 빈도 포화 — TF-IDF는 10→20회에서 점수가 비례해 뛰지만, BM25는 완만해진다. (아래) 길이 정규화 — TF-IDF는 긴 문서를 강하게 깎지만, BM25는 완만하게 조정한다.

 

 

4. 두 개의 하이퍼 파라미터 (k₁, b)

BM25는 TF-IDF와 달리 조정 가능한 두 hyperparameter를 갖는다. 이 둘로 위의 두 동작이 얼마나 빨리 일어나는지를 제어한다.

  • k₁ — 빈도 포화 정도 — 반복 keyword에 대한 보상이 얼마나 빨리 줄어드는지. 보통 1.2~2.0 사이 값을 쓴다. 값이 클수록 빈도의 영향이 오래 유지된다.
  • b — 길이 정규화 정도 — 문서 길이 패널티를 얼마나 강하게 적용하는지. 0(정규화 없음)에서 1(완전 정규화) 사이. 값이 클수록 긴 문서에 더 불리하다.

운영 환경에서는 knowledge base의 데이터에 가장 잘 맞도록 이 두 값을 튜닝한다.

그림 4. k₁은 빈도 포화, b는 문서 길이 정규화의 강도를 조절한다.

 

5. BM25 vs TF-IDF

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

그림 5. BM25 = 운영 retriever의 표준. TF-IDF보다 성능이 좋고, 비용은 비슷하며, 더 유연하다.

 

 

6. 키워드 검색 정리 — 강점과 한계

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

그림 6. 키워드 검색 개요 — sparse vector로 변환 후 TF-IDF/BM25로 점수를 매겨 순위화. keyword 희귀성·빈도·문서 길이를 반영한다.

강점

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

그림 7. 키워드 검색의 강점 — 단순성, 그리고 정확한 keyword matching 보장.

한계

결국 키워드 검색은 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

+ Recent posts