BM25는 문서에 query 단어가 얼마나 의미 있게 등장하는지를 점수화하는 대표적인 검색 랭킹 방식입니다.
BM25는 lexical search 계열의 랭킹 함수입니다. 단어가 많이 등장한다고 무조건 높은 점수를 주지 않고, 문서 길이와 단어의 희귀성까지 함께 봅니다.
- TF-IDF
- BM25
- 문서 길이 보정
- 정확 키워드 검색이 필요한 이유
1. 한 줄로 정의하면
BM25는 query에 있는 단어들이 문서에 얼마나 잘 등장하는지 계산해 문서의 관련도를 점수화하는 방식입니다.
2. 왜 이 개념이 필요했나
지식베이스 검색에서 'RAG'를 입력했을 때, RAG라는 단어가 정확히 들어간 문서를 우선 보고 싶을 수 있습니다. 이때 embedding 검색은 의미가 비슷한 다른 문서도 가져올 수 있지만, 정확 단어 검색의 강점은 약합니다.
BM25는 이런 상황에서 유용합니다. query 단어가 문서에 등장하는 정도, 그 단어가 전체 문서에서 얼마나 희귀한지, 문서가 너무 길어서 유리해지는 것은 아닌지를 함께 고려합니다.
즉 BM25는 단순 포함 여부 검색보다 더 똑똑한 키워드 검색입니다.
3. 동작 흐름
4. 구조를 그림처럼 보면
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가 유리한 검색어를 하나 들 수 있는가?
'개발 > 용어 사전' 카테고리의 다른 글
| Job Queue란? 오래 걸리는 작업을 뒤로 미루는 구조 (0) | 2026.06.12 |
|---|---|
| Reranker란? 검색 결과를 다시 정렬하는 모델 (0) | 2026.06.11 |
| Vector DB란? 벡터 검색을 위한 데이터베이스 (0) | 2026.06.11 |
| Embedding이란? 문장을 숫자 벡터로 바꾸는 이유 (0) | 2026.06.11 |
| RAG란? LLM이 모르는 정보를 검색해서 답하는 구조 (0) | 2026.06.11 |