개발/용어 사전

BM25란? 검색 엔진에서 키워드 점수를 매기는 방식

cedis 2026. 6. 11. 23:28
AI 응용 기술 용어 정리

BM25는 문서에 query 단어가 얼마나 의미 있게 등장하는지를 점수화하는 대표적인 검색 랭킹 방식입니다.

핵심 요약

BM25는 lexical search 계열의 랭킹 함수입니다. 단어가 많이 등장한다고 무조건 높은 점수를 주지 않고, 문서 길이와 단어의 희귀성까지 함께 봅니다.

  • TF-IDF
  • BM25
  • 문서 길이 보정
  • 정확 키워드 검색이 필요한 이유

1. 한 줄로 정의하면

BM25는 query에 있는 단어들이 문서에 얼마나 잘 등장하는지 계산해 문서의 관련도를 점수화하는 방식입니다.

TF
Term Frequency. 단어가 문서 안에 얼마나 자주 나오는지 봅니다.
IDF
Inverse Document Frequency. 너무 흔한 단어보다 희귀한 단어에 더 큰 의미를 둡니다.
문서 길이 보정
긴 문서가 단어를 많이 포함한다는 이유만으로 과하게 유리해지지 않도록 조정합니다.
Lexical Ranking
단어의 등장과 분포를 기준으로 순위를 매기는 방식입니다.

2. 왜 이 개념이 필요했나

지식베이스 검색에서 'RAG'를 입력했을 때, RAG라는 단어가 정확히 들어간 문서를 우선 보고 싶을 수 있습니다. 이때 embedding 검색은 의미가 비슷한 다른 문서도 가져올 수 있지만, 정확 단어 검색의 강점은 약합니다.

BM25는 이런 상황에서 유용합니다. query 단어가 문서에 등장하는 정도, 그 단어가 전체 문서에서 얼마나 희귀한지, 문서가 너무 길어서 유리해지는 것은 아닌지를 함께 고려합니다.

즉 BM25는 단순 포함 여부 검색보다 더 똑똑한 키워드 검색입니다.

3. 동작 흐름

1
query 단어 분리
사용자 입력에서 검색할 단어를 뽑습니다.
2
문서 내 등장 확인
각 단어가 문서에 얼마나 등장하는지 봅니다.
3
희귀성 반영
전체 문서에서 흔한 단어보다 드문 단어에 더 큰 가중치를 줍니다.
4
문서 길이 보정
긴 문서가 무조건 유리하지 않도록 점수를 조정합니다.

4. 구조를 그림처럼 보면

순서 흐름
1
사용자 검색어
EmbeddingJobProcessor FAILED
2
query term 분리
3
각 문서에서 term 빈도 확인
4
전체 문서에서 term 희귀성 확인
5
문서 길이 보정
6
BM25 score가 높은 콘텐츠 반환

5. 서비스 예시로 이해하면

지식베이스형 서비스의 초기 구현은 cosine similarity 기반 semantic retrieval이지만, 이후 검색 품질을 높이려면 BM25를 함께 고려할 수 있습니다.

예를 들어 'EmbeddingJobProcessor'처럼 정확한 클래스명을 찾는 경우에는 vector search보다 BM25나 keyword search가 더 적합할 수 있습니다.

query: "EmbeddingJobProcessor FAILED"

BM25가 유리한 이유:
- 정확한 클래스명 등장 여부 중요
- FAILED 같은 상태값 등장 여부 중요
- 의미가 비슷한 문서보다 실제 단어가 있는 문서가 더 중요

6. 헷갈리기 쉬운 비교

방식점수 기준예시
단순 LIKE 문자열 포함 여부 제목에 RAG가 있으면 찾음
TF-IDF 단어 빈도와 희귀성 흔한 단어보다 드문 단어에 가중치
BM25 빈도, 희귀성, 문서 길이 보정 긴 문서가 무조건 유리하지 않게 조정

7. 실무에서 조심할 점

  • BM25는 의미를 이해하는 검색이 아닙니다. 단어가 다르면 놓칠 수 있습니다.
  • 한국어 형태소 분석을 어떻게 하느냐에 따라 품질이 달라질 수 있습니다.
  • RAG 전체 품질을 위해서는 BM25만으로 부족하고 embedding search와 함께 보는 것이 좋습니다.

8. 구현할 때 먼저 볼 코드 책임

BM25 문서는 수식 자체보다 어떤 값이 점수에 영향을 주는지를 이해하는 것이 먼저입니다.

지식베이스형 서비스에서는 정확한 클래스명, 에러 메시지, 상태값 검색에서 BM25가 의미 검색보다 더 나을 수 있습니다.

BM25가 보는 값
  - query term이 문서에 등장하는 횟수
  - 그 term이 전체 문서에서 얼마나 희귀한지
  - 문서 길이가 평균보다 긴지 짧은지

적용 예
  - EmbeddingJobProcessor
  - PROCESSING
  - sourceHash
  - OpenAiEmbeddingClient

스스로 점검

  • BM25와 semantic search의 차이를 설명할 수 있는가?
  • 왜 긴 문서를 보정해야 하는가?
  • 개발 지식베이스에서 BM25가 유리한 검색어를 하나 들 수 있는가?