BM25란 무엇인가? 지금도 쓰이는 검색 랭킹 알고리즘의 정체
부스트키워드 팀
검색 데이터로 키워드의 검색량, 트렌드, 검색 의도를 파악하고 마케팅 의사결정을 돕는 도구 부스트키워드를 만듭니다.
앞서 살펴본 TF-IDF는 검색 결과 순위를 매기는 가장 기본적인 방법이지만, 사실 오늘날 많은 실무 검색 시스템은 TF-IDF를 그대로 쓰기보다 이를 한층 발전시킨 BM25라는 알고리즘을 기본 랭킹 방식으로 채택하고 있습니다. Elasticsearch나 Solr 같은 대표적인 검색 엔진 소프트웨어에도 기본값으로 탑재되어 있는 이 알고리즘이, TF-IDF의 어떤 부분을 어떻게 개선했는지 살펴보겠습니다.
TF-IDF만으로는 아쉬운 부분들
단어가 계속 반복될수록 점수가 끝없이 올라가는 문제
TF-IDF는 한 문서 안에서 특정 단어가 등장하는 횟수(TF)가 많을수록 그 단어의 중요도를 더 높게 평가합니다. 그런데 이 방식을 그대로 적용하면, 단어가 등장할 때마다 점수가 거의 비례해서 계속 올라가는 경향이 생깁니다. 예를 들어 어떤 단어가 문서 안에서 5번 등장한 경우와 50번 등장한 경우를 비교하면, 50번 등장한 문서의 점수가 지나치게 높게 평가될 수 있습니다. 하지만 상식적으로 생각해보면, 어떤 단어가 5번 등장하는 것과 6번 등장하는 것의 차이는 크게 느껴지지만, 50번 등장하는 것과 51번 등장하는 것의 차이는 사실상 큰 의미가 없습니다. 이미 그 단어가 문서의 핵심 주제라는 것은 충분히 확인되었기 때문입니다.
문서 길이가 다른 경우를 제대로 반영하지 못하는 문제
또 다른 문제는 문서의 길이입니다. 아주 긴 문서는 짧은 문서에 비해 같은 단어가 등장할 기회 자체가 더 많습니다. 예를 들어 10,000자짜리 긴 문서에서 특정 단어가 10번 등장한 것과, 500자짜리 짧은 문서에서 같은 단어가 10번 등장한 것은 그 의미가 전혀 다릅니다. 짧은 문서에서 10번이나 등장했다는 것은 그 단어가 훨씬 더 집중적으로 다뤄지고 있다는 뜻이지만, 기본적인 TF-IDF 계산은 이런 문서 길이의 차이를 충분히 반영하지 못하는 경우가 많습니다.
BM25의 핵심 아이디어
단어 빈도의 증가 효과를 점점 둔화시키기
BM25는 이 문제를 해결하기 위해, 단어 빈도가 늘어날수록 점수에 미치는 영향이 점점 완만해지도록(포화되도록) 설계되어 있습니다. 즉 단어가 처음 몇 번 등장할 때는 점수가 빠르게 올라가지만, 등장 횟수가 계속 늘어날수록 점수 상승 폭이 점점 줄어들다가 어느 순간부터는 거의 늘어나지 않는 형태를 띱니다. 이렇게 하면 지나치게 많이 반복된 단어가 비정상적으로 높은 점수를 받는 것을 방지할 수 있습니다.
문서 길이를 고려해 점수를 보정하기
또한 BM25는 각 문서의 길이를 전체 문서들의 평균 길이와 비교해서, 평균보다 훨씬 긴 문서에서 등장한 단어의 점수는 조금 낮추고, 평균보다 짧은 문서에서 등장한 단어의 점수는 상대적으로 더 높게 평가하도록 보정합니다. 이를 통해 단순히 문서가 길어서 단어가 많이 등장한 것인지, 아니면 그 단어가 실제로 문서의 핵심 주제라서 자주 등장한 것인지를 좀 더 공정하게 구분할 수 있습니다.
간단한 예제로 이해하는 BM25의 동작
같은 단어가 5번 나온 문서와 50번 나온 문서 비교하기
"흑돼지"라는 단어가 문서 A에는 5번, 문서 B에는 50번 등장한다고 가정해봅시다. 단순한 TF-IDF 방식이라면 문서 B의 점수가 문서 A보다 훨씬 크게(거의 10배 가까이) 높아질 수 있습니다. 하지만 BM25는 등장 횟수가 늘어날수록 점수 상승 폭을 점점 둔화시키기 때문에, 문서 B의 점수가 문서 A보다는 높게 나오더라도 그 격차가 단순 비례만큼 크게 벌어지지는 않습니다. 이미 5번만 등장해도 "흑돼지"가 이 문서의 중요한 주제라는 것은 충분히 드러났다고 보기 때문입니다.
짧은 문서와 긴 문서를 공정하게 비교하는 과정
이번에는 "흑돼지"라는 단어가 문서 C(전체 300자, 매우 짧은 문서)에는 5번, 문서 D(전체 5,000자, 매우 긴 문서)에도 똑같이 5번 등장한다고 가정해봅시다. 두 문서 모두 등장 횟수는 같지만, BM25는 문서 길이를 함께 고려하기 때문에 훨씬 짧은 문서인 C에서 같은 횟수만큼 등장한 것을 더 의미 있게 평가합니다. 결과적으로 같은 등장 횟수라도 문서 C의 점수가 문서 D보다 더 높게 계산될 가능성이 큽니다. 이는 "짧은 글 안에서 특정 단어가 집중적으로 등장했다"는 사실을 더 강한 신호로 받아들이는 것이 합리적이기 때문입니다.
BM25와 TF-IDF, 무엇이 다를까
공통점: 둘 다 단어 빈도와 희소성을 함께 고려
BM25와 TF-IDF는 근본적으로 같은 뿌리를 공유합니다. 두 방법 모두 "한 문서 안에서 자주 등장하면서(단어 빈도), 전체 문서 집합에서는 희소하게 등장하는(역문서 빈도) 단어일수록 더 중요하다"는 핵심 원리를 따릅니다.
차이점: 포화 효과와 문서 길이 보정이라는 두 가지 개선
다만 BM25는 여기에 두 가지 중요한 개선을 더했습니다. 단어 빈도가 늘어날수록 점수 상승 효과를 점점 둔화시키는 포화 효과, 그리고 문서의 길이를 평균과 비교해 점수를 보정하는 문서 길이 정규화입니다. 이 두 가지 개선 덕분에 BM25는 TF-IDF보다 더 현실적이고 안정적인 검색 순위를 만들어내는 것으로 널리 알려져 있습니다.
BM25는 실제로 어디에 쓰일까
Elasticsearch, Solr 같은 실무 검색 엔진의 기본값
BM25는 이론에만 머무르지 않고 실제로 널리 채택된 알고리즘입니다. 많은 웹사이트와 서비스에서 내부 검색 기능을 구현할 때 사용하는 대표적인 검색 엔진 소프트웨어인 Elasticsearch와 Solr는 모두 BM25를 기본 랭킹 알고리즘으로 채택하고 있습니다.
사이트 내 검색, 문서 검색 시스템 등 활용 사례
쇼핑몰의 상품 검색, 회사 내부 문서 검색 시스템, 고객 지원 센터의 FAQ 검색 등 다양한 서비스가 이러한 검색 엔진 소프트웨어를 기반으로 구축되어 있고, 그 뒤에서 BM25가 실제로 어떤 결과를 먼저 보여줄지를 계산하는 역할을 하고 있습니다.
BM25 이후: 최신 검색 기술과의 관계
최근에는 단어의 등장 여부와 빈도만이 아니라, 문장의 의미와 문맥까지 이해하는 딥러닝 기반 검색 기술도 빠르게 발전하고 있습니다. 그럼에도 BM25는 계산이 비교적 빠르고 별도의 복잡한 학습 과정 없이도 안정적인 성능을 낸다는 장점 덕분에, 최신 딥러닝 기반 기술과 함께 결합되어 사용되거나, 여전히 그 자체로 많은 검색 시스템의 기본 방식으로 채택되고 있습니다.
정리하며
BM25는 TF-IDF의 핵심 아이디어를 계승하면서도, 단어가 지나치게 많이 반복될 때 점수가 과도하게 오르는 문제와 문서 길이 차이를 제대로 반영하지 못하는 문제를 개선한 알고리즘입니다. 이러한 정교한 보정 덕분에 BM25는 등장한 지 오랜 시간이 지난 지금도 여전히 여러 실무 검색 시스템에서 신뢰받는 기본 랭킹 알고리즘으로 자리 잡고 있습니다.
Q.BM25의 이름은 무슨 뜻인가요?
Q.BM25는 지금도 최신 기술로 볼 수 있나요?
Q.직접 만드는 검색 기능에도 BM25를 적용할 수 있나요?
Written by

부스트키워드 팀
검색 데이터로 키워드의 검색량, 트렌드, 검색 의도를 파악하고 마케팅 의사결정을 돕는 도구 부스트키워드를 만듭니다.
