AI 용어집 · 심화 · 전통 ML·추천·검색 · 언어 모델
BM25 키워드 검색 순위 함수
BM25는 검색어에 들어 있는 단어가 문서에 얼마나 자주, 얼마나 드물게 나오는지를 따져 문서마다 점수를 매기는 키워드 검색 순위 함수다. 오래전부터 검색 엔진의 기본 방식으로 쓰였고, 지금도 RAG의 핵심 부품으로 쓰인다.
어떻게 작동하나
BM25는 검색어의 단어마다 세 가지를 따져 점수를 더한다. 첫째, 그 단어가 문서에 자주 나올수록 점수가 오르지만, 너무 많이 나오면 점수 증가가 점점 둔해진다(같은 단어 반복으로 순위를 올리기 어렵게). 둘째, 전체 문서 중 그 단어가 나오는 문서가 적을수록, 즉 드문 단어일수록 가중치가 커진다. 셋째, 문서 길이를 평균과 비교해 긴 문서가 단어 수만으로 유리해지지 않도록 보정한다. 이 계산은 미리 만들어 둔 역색인(단어별로 어느 문서에 나오는지 적어 둔 목록) 덕분에 매우 빠르게 이뤄진다.
왜 중요한가
BM25는 별도 학습 없이 바로 쓸 수 있고, 빠르며, 왜 그 문서가 나왔는지 설명하기 쉽다. 특히 제품 코드, 사람 이름, 오류 메시지, 법 조항 번호처럼 정확한 단어가 중요한 검색에서 강하다. 의미를 기준으로 찾는 임베딩 기반 시맨틱 검색은 이런 고유한 표현을 놓치기 쉬워서, 요즘 RAG 시스템은 BM25와 시맨틱 검색을 함께 쓰는 하이브리드 검색을 많이 쓴다. 새로운 검색 방법을 평가할 때 비교 기준으로도 자주 등장한다.
BM25와 시맨틱 검색
BM25단어 일치로 찾기
- 학습 없이 바로 사용
- 제품 코드·이름 검색에 강함
- 동의어·다른 표현은 놓침
시맨틱 검색의미로 찾기
- 임베딩 모델이 필요
- 표현이 달라도 뜻으로 찾음
- 고유한 단어 일치엔 약할 수 있음
공통 RAG에서 질문과 관련된 문서를 먼저 찾아 오는 검색 단계
알아 둘 점
BM25는 글자 그대로의 단어 일치만 보기 때문에 '자동차'로 검색하면 '차량'만 나오는 문서를 놓칠 수 있다. 한국어처럼 조사가 붙는 언어는 형태소 분석 같은 전처리 품질에 따라 결과가 크게 달라진다. 단어 빈도에 대한 민감도와 문서 길이 보정 정도를 조절하는 설정 값이 있어서 데이터에 맞게 손볼 수 있다. 첫 단계에서 BM25로 후보를 넉넉히 뽑고 리랭커로 다시 순서를 정하는 구성이 흔하다.
예시
Elasticsearch·OpenSearch 같은 검색 엔진은 BM25를 기본 점수 방식으로 쓴다. 사내 문서 챗봇을 RAG로 만들 때도 질문을 BM25 검색과 벡터 DB 검색에 동시에 보내 두 결과를 합친 뒤, 리랭커로 상위 문서를 골라 LLM에 넘기는 구성이 널리 쓰인다.