정보글

BM25와 ElasticSearch 랭킹 알고리즘을 활용한 IR 검색 구현 가이드

BM25와 ElasticSearch 랭킹 알고리즘을 활용한 IR 검색 구현 가이드

정보 검색(IR, Information Retrieval) 분야에서 사용자 쿼리와 문서들 간의 관련성을 평가하는 것은 매우 핵심적인 요소입니다. 그 중에서도 BM25(Okapi BM25)는 키워드 기반의 랭킹 알고리즘으로, TF-IDF 계열의 검색 알고리즘 중 현재까지도 높은 성능과 SOTA(State-Of-The-Art)의 평가를 받고 있습니다. 실제 IR 서비스를 제공하는 대표적인 시스템 중 하나인 ElasticSearch에서도 BM25를 기본 랭킹 함수로 채택하고 있어, BM25의 활용도는 매우 높습니다.

본 포스팅에서는 BM25 알고리즘의 기본 원리와 특징, 그리고 파이썬의 rank_bm25 모듈을 활용하여 문서 검색 시스템을 구현하는 방법을 구체적인 예제와 함께 소개합니다.

1. BM25 알고리즘 개요

BM25는 “Best Matching 25″의 약자로, 확률적 정보 검색 모델에서 발전된 형태의 랭킹 함수입니다. 기본적으로 BM25는 주어진 쿼리의 각 키워드가 문서 내에서 얼마나 중요한지를 반영하여, 문서의 관련성을 정량적으로 평가합니다.

BM25의 주요 특징은 다음과 같습니다.

  • TF와 IDF의 결합: 각 키워드의 빈도(Term Frequency, TF)와 역문서 빈도(Inverse Document Frequency, IDF)를 결합하여, 중요한 단어에 높은 가중치를 부여합니다.
  • 문서 길이 보정: 문서의 길이가 길어질수록 단어 빈도가 자연스럽게 증가하는 현상을 보정하기 위해 문서 길이를 고려합니다.
  • 파라미터 튜닝: 두 가지 파라미터인 k1과 b를 도입하여, TF 포화 효과와 문서 길이 보정 정도를 조정할 수 있습니다. 이를 통해 다양한 종류의 문서와 검색 쿼리에 유연하게 대응할 수 있습니다.

BM25의 수식은 기본적으로 다음과 같이 표현됩니다.

$$
\text{score}(D, Q) = \sum_{t \in Q} \text{IDF}(t) \times \frac{f(t, D) \times (k_1 + 1)}{f(t, D) + k_1 \times \left(1 – b + b \times \frac{|D|}{\text{avgdl}}\right)}
$$

여기서

  • $ f(t, D) $는 문서 D에서 단어 t의 빈도,
  • $ |D| $는 문서 D의 길이,
  • $\text{avgdl}$은 전체 문서의 평균 길이,
  • $ k_1 $과 $ b $는 튜닝 가능한 하이퍼파라미터,
  • $\text{IDF}(t)$는 단어 t의 역문서 빈도입니다.

이와 같이 BM25는 각 단어가 문서 전체에서 가지는 상대적 중요도를 평가하여, 사용자 쿼리와 문서 간의 유사도를 효과적으로 측정합니다.

2. 파이썬 rank_bm25 모듈 소개

파이썬에서는 BM25 알고리즘을 쉽게 구현할 수 있도록 rank_bm25라는 오픈소스 모듈이 제공됩니다. 이 모듈은 간단한 인터페이스를 통해, 텍스트 문서 집합에서 주어진 쿼리에 대해 BM25 랭킹 점수를 계산하고, 관련성 높은 문서를 빠르게 검색할 수 있도록 도와줍니다.

주요 기능은 다음과 같습니다.

  • 문서 집합에 대한 BM25 모델 생성
  • 주어진 쿼리와 각 문서 사이의 BM25 점수를 계산
  • 문서의 순위를 정렬하여 관련성이 높은 문서를 반환

3. rank_bm25 모듈 설치 및 기본 사용법

먼저 rank_bm25 모듈을 설치합니다. 터미널에서 다음 명령어를 실행하세요.

pip install rank-bm25

설치 후, 간단한 사용 예제 코드를 통해 BM25 모델을 구축하고 문서 검색을 수행하는 방법을 살펴보겠습니다.

예제: 기본 BM25 모델을 이용한 문서 검색

from rank_bm25 import BM25Okapi
import nltk
nltk.download('punkt')

# 예제 문서 집합: 각 문서를 토큰화하여 리스트로 변환
documents = [
    "The quick brown fox jumps over the lazy dog",
    "Never jump over the lazy dog quickly",
    "A fast brown fox leaps over a lazy dog in summer"
]
tokenized_docs = [nltk.word_tokenize(doc.lower()) for doc in documents]

# BM25 모델 생성 (Okapi BM25 알고리즘 사용)
bm25 = BM25Okapi(tokenized_docs)

# 검색 쿼리 작성 및 토큰화
query = "quick fox"
tokenized_query = nltk.word_tokenize(query.lower())

# 각 문서에 대해 BM25 점수 계산 및 결과 정렬
scores = bm25.get_scores(tokenized_query)
print("각 문서의 BM25 점수:", scores)

# 점수가 높은 순서대로 문서 정렬
best_doc_index = scores.argmax()
print("가장 관련성 높은 문서:")
print(documents[best_doc_index])

위 예제에서는 nltk를 사용하여 텍스트를 토큰화한 후, BM25Okapi 클래스의 인스턴스를 생성합니다. 그 후, 사용자 쿼리를 토큰화하여, 각 문서에 대한 BM25 점수를 계산하고 관련성이 높은 문서를 검색합니다.

4. 고급 응용: BM25 모델 파라미터 튜닝

rank_bm25 모듈은 기본적인 BM25 알고리즘을 구현하지만, 실제 응용에서는 $k_1$과 $b$ 같은 하이퍼파라미터를 조정하여 성능을 최적화할 수 있습니다. 일부 구현에서는 이들 파라미터를 튜닝할 수 있는 옵션을 제공하기도 하며, 사용자는 실험을 통해 가장 적합한 값을 선택할 수 있습니다.

예를 들어, BM25 모델의 기본 파라미터에서 $,k_1 = 1.5$와 $b = 0.75$를 사용하는 것이 일반적이며, 데이터의 특성과 문서 길이에 따라 이 값을 조정하여 검색 성능을 개선할 수 있습니다.

5. ElasticSearch와 BM25

ElasticSearch는 IR(Information Retrieval) 시스템에서 인기 있는 오픈소스 검색 엔진으로, 기본 랭킹 알고리즘으로 BM25를 사용합니다. ElasticSearch는 분산 저장, 실시간 검색 기능을 제공하며, 대규모 텍스트 데이터를 빠르게 검색할 수 있도록 최적화되어 있습니다.

ElasticSearch에서 BM25는 쿼리와 문서 간의 관련성을 효과적으로 평가하며, 다양한 파라미터 튜닝을 통해 검색 결과의 품질을 조절할 수 있습니다. BM25 알고리즘의 원리를 이해하면, ElasticSearch의 검색 결과를 분석하고 개선하는 데 큰 도움이 됩니다.

6. 결론

BM25 알고리즘은 사용자 쿼리와 문서 간의 관련성 평가에서 강력한 성능을 보이며, IR 시스템에서 높은 평가를 받고 있는 검색 알고리즘입니다. 본 포스팅에서는 해싱 기반의 BM25 알고리즘의 원리와 핵심 개념, 그리고 파이썬의 rank_bm25 모듈을 활용한 문서 검색 구현 방법을 자세히 살펴보았습니다. 또한, ElasticSearch와의 연관성을 통해 BM25의 실제 응용 분야를 이해하고, 하이퍼파라미터 튜닝을 통해 검색 성능을 최적화하는 전략에 대해 논의하였습니다.

개발자 여러분께서는 BM25 알고리즘과 rank_bm25 모듈을 활용하여, 텍스트 검색, 문서 랭킹, 로그 분석 등 다양한 응용 분야에서 효과적인 IR 시스템을 구축해 보시길 바랍니다. 최신 기술 동향과 다양한 사례들을 참고하며, 여러분의 프로젝트에 맞는 최적의 검색 알고리즘을 구현해 보시길 추천드립니다.

spacexo

Recent Posts

DeepSeek-R1: 강화학습으로 스스로 진화하는 추론 특화 언어모델

DeepSeek-R1: 강화학습으로 스스로 진화하는 추론 특화 언어모델 DeepSeek-R1은 순수 강화학습(RL)과 소량의 Cold-start 데이터를 결합한 다단계…

1주 ago

TensorFlow Extended(TFX): 프로덕션 레벨의 E2E 기계학습 파이프라인 플랫폼

TensorFlow Extended(TFX): 프로덕션 레벨의 E2E 기계학습 파이프라인 플랫폼 TensorFlow Extended(TFX)는 구글에서 자체 머신러닝 제품을 안정적으로…

1주 ago

AutoML-Zero: ‘zero’에서부터 스스로 진화하는 기계학습 알고리즘

AutoML-Zero: ‘zero’에서부터 스스로 진화하는 기계학습 알고리즘 기계학습 알고리즘 설계의 혁신, AutoML-Zero 단 몇 줄의 코드도…

2주 ago

TensorFlow Lite: 모바일 & IoT 디바이스를 위한 딥러닝 프레임워크

TensorFlow Lite: 모바일 & IoT 디바이스를 위한 딥러닝 프레임워크 엣지 인텔리전스를 향한 경량화된 딥러닝 TensorFlow…

2주 ago

Graph Convolutional Networks(GCN) 개념 정리

Graph Convolutional Networks(GCN) 개념 정리 최근 비정형 데이터의 대표격인 그래프(graph)를 처리하기 위한 딥러닝 기법으로 Graph…

2주 ago

Graph Neural Networks(그래프 뉴럴 네트워크) 기초 개념 정리

Graph Neural Networks(그래프 뉴럴 네트워크) 기초 개념 정리 딥러닝은 이미지·음성·텍스트와 같은 격자(grid) 형태 데이터에서 뛰어난…

2주 ago