BM25

김동준·2025년 10월 24일

BM25는 정보 검색 분야에서 사용되는 문서 관련도 평가 랭킹 함수로, 검색어(쿼리)와 문서 간의 관련성을 확률적 접근법으로 측정하는 알고리즘입니다. BM은 "Best Matching"의 약자이며, Okapi BM25라는 이름은 1980~90년대 런던 시티 대학의 Okapi 정보 검색 시스템에서 유래했습니다[1][2][3].

주요 개념

  • BM25는 단어 빈도(TF), 역문서 빈도(IDF), 문서 길이 정규화 문항을 결합해 점수를 계산합니다.
  • 일반 TF-IDF의 단순 빈도 계수 대신, 단어 빈도가 너무 많아지면 기여도가 포화(saturation)되는 현상을 반영하여 점수를 조정합니다.
  • 문서 길이가 길면 단어가 많이 등장할 수 있으므로 이를 보정하여, 길이가 다른 문서들 간 공정한 비교를 가능하게 합니다.
  • 두 개의 조절 파라미터 k1k_1bb를 통해 단어빈도 포화와 문서 길이 영향력을 조절할 수 있습니다 (일반적으로 k11.22.0k_1 \approx 1.2\sim 2.0, b0.75b \approx 0.75)[1][2][4][6].

수식 (요약)

score(D,Q)=qiQIDF(qi)f(qi,D)(k1+1)f(qi,D)+k1(1b+bDavgdl)\text{score}(D, Q) = \sum_{q_i \in Q} IDF(q_i) \cdot \frac{f(q_i, D) \cdot (k_1 + 1)}{f(q_i, D) + k_1 \cdot \left(1 - b + b \cdot \frac{|D|}{\text{avgdl}}\right)}
  • f(qi,D)f(q_i, D): 문서 DD 내 쿼리 단어 qiq_i 빈도
  • D|D|: 문서 길이
  • avgdl\text{avgdl}: 전체 코퍼스 평균 문서 길이
  • IDF(qi)IDF(q_i): 단어 희귀도
  • k1,bk_1, b: 하이퍼파라미터[1][4].

활용

  • BM25는 특히 웹 검색, 학술 검색에서 광범위하게 사용되며, TF-IDF에 비해 검색 성능과 정확도가 더 뛰어납니다.
  • 텍스트 기반 검색에서 강력한 기본 기법으로 자리 잡고 있고, 최근에는 신경망 기반 방법과 결합되어 하이브리드 검색에도 활용됩니다[5][6][7].

간단히 말해, BM25는 단어의 등장 빈도, 문서 길이, 단어 희귀도를 종합해 문서와 쿼리 간 관련도를 보다 정교하게 평가하는 "정보 검색 랭킹 알고리즘"입니다.

출처
[1] Okapi BM25 https://en.wikipedia.org/wiki/Okapi_BM25
[2] What is BM25 (Best Matching 25) Algorithm? https://www.geeksforgeeks.org/nlp/what-is-bm25-best-matching-25-algorithm/
[3] BM25란 무엇인가 https://hmdev.vercel.app/BM25%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
[4] Understanding Okapi BM25: A Guide to Modern ... https://adasci.org/understanding-okapi-bm25-a-guide-to-modern-information-retrieval/
[5] BM25-Based Few-Shot Retrieval https://www.emergentmind.com/topics/bm25-based-few-shot-retrieval
[6] BM25 and Its Role in Document Relevance Scoring https://www.sourcely.net/resources/bm25-and-its-role-in-document-relevance-scoring
[7] Mastering BM25: A Deep Dive into the Algorithm and Its ... https://zilliz.com/learn/mastering-bm25-a-deep-dive-into-the-algorithm-and-application-in-milvus
[8] BM25 Retriever | LlamaIndex Python Documentation https://developers.llamaindex.ai/python/examples/retrievers/bm25_retriever/
[9] BM25 - AutoRAG documentation - GitHub Pages https://marker-inc-korea.github.io/AutoRAG/nodes/retrieval/bm25.html

BM25의 이름에서 ‘25’버전 번호나 수학적 의미가 아니라, 오카피(Okapi) 정보검색 시스템 내에서 내부적으로 붙여진 모델 식별 번호에서 유래한 것이다[1][4].

배경 설명

  • BM25는 “Best Matching 25”의 약자로, 1980–1990년대 런던 시티대학교에서 개발된 Okapi 정보 검색 시스템 프로젝트의 일부였다.
  • 이 프로젝트에서 여러 ‘Best Matching (BM)’ 모델이 실험되었는데, BM11, BM15, BM20, BM25 등 다양한 파생 모델 중 가장 성능이 좋았던 버전이 BM25였다[4][5].
  • 따라서 ‘25’는 특정 공식의 수치가 아니라, 내부 개발 순서상 모델 변형 번호를 가리킨다.

요약

  • BM: Best Matching
  • 25: Okapi 프로젝트에서 개발된 여러 실험적 BM 모델 중 25번째 버전 이름
  • 의미: “가장 잘 맞는(score가 높은) 검색 모델 중 25번째 버전”이라는 명칭의 흔적[1][4].

즉, BM25는 ‘Best Matching 25’라는 알고리즘의 이름이며, 25는 단순한 역사적 버전 번호일 뿐 특별한 수학적 뜻은 없다.

출처
[1] BM25알고리즘 완전 정복 - LLM부터 Agent까지 https://wikidocs.net/289869
[2] Okapi BM25란 무엇인가? (TF-IDF와 비교) - 매일 한걸음씩 https://simonezz.tistory.com/41
[3][Elasticsearch 입문] BM25 랭킹 알고리즘 : 네이버 블로그 https://blog.naver.com/shino1025/222240603533
[4] 검색모델, TF-IDF를 대신할 Okapi BM25 https://hyowong.tistory.com/entry/%EA%B2%80%EC%83%89%EB%AA%A8%EB%8D%B8-TF-IDF%EB%A5%BC-%EB%8C%80%EC%8B%A0%ED%95%A0-Okapi-BM25
[5] BM25(Okapi BM25) - 조아하는모든것 - 티스토리 https://uiandwe.tistory.com/1379
[6] 엘라스틱서치(Elasticsearch)의 Okapi BM25 알고리즘 https://blog.naver.com/goreng2/221782081265
[7] 이야기로 설명하는 BM25 수식의 전개 https://www.youtube.com/watch?v=xSwj6-9u-wk
[8] Elasticsearch 유사도 알고리즘 (TF/IDF, BM25 비교) https://velog.io/@mayhan/Elasticsearch-%EC%9C%A0%EC%82%AC%EB%8F%84-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
[9] 실용적인 BM25 - 제2부: BM25 알고리즘과 변수 https://www.elastic.co/kr/blog/practical-bm25-part-2-the-bm25-algorithm-and-its-variables
[10] Okapi BM25 단어 가중치법 적용을 통한 문서 범주화 ... https://koreascience.kr/article/JAKO201008054534296.pdf

profile
Story Engineer

0개의 댓글