반응형

🤔 1. BM25는 왜 등장했는가? (TF-IDF의 한계 복습)

BM25를 이해하려면 먼저 TF-IDF가 해결하지 못한 문제점들을 알아야 합니다.

  1. TF의 선형적 증가 문제: TF-IDF에서는 특정 단어가 문서에 10번 나오면 1번 나올 때보다 TF 점수가 10배 높습니다. 하지만 실제로는 단어의 중요도가 그렇게 무한정 비례해서 증가하지 않고 어느 정도 **포화(saturate)**됩니다.
  2. 문서 길이 문제: 다른 조건이 같다면, 내용이 긴 문서가 짧은 문서보다 더 높은 TF-IDF 점수를 가질 확률이 높습니다. 이는 불공평한 비교로 이어질 수 있습니다.

BM25는 바로 이 두 가지 핵심 문제를 정교한 방식으로 해결하기 위해 탄생한 알고리즘입니다.


📊 2. BM25의 직관적인 해석

BM25의 복잡한 공식을 이해하기 전에, 각 부분이 어떤 역할을 하는지 직관적으로 파악하는 것이 중요합니다.

이 공식은 크게 세 부분으로 나눌 수 있습니다.

  1. IDF 항 (단어의 희귀성):
    • TF-IDF와 동일한 역할을 합니다. 전체 문서에서 희귀한 단어일수록 높은 가중치를 부여합니다. "이 단어가 얼마나 중요한 정보를 담고 있는가?"를 측정합니다.
  2. TF 스케일링 항 (단어 빈도의 포화):
    • TF-IDF의 'TF 선형 증가 문제'를 해결합니다. 단어 빈도(f(q,D))가 증가하더라도, 점수가 무한정 커지지 않고 일정 수준에서 점차 포화되도록 설계되었습니다.
  3. 문서 길이 보정 항 (문서 길이의 공정성):
    • TF-IDF의 '문서 길이 문제'를 해결합니다. 문서의 길이(|D|)를 **전체 문서의 평균 길이(avgdl)**와 비교하여 점수를 보정합니다. 문서가 평균보다 길면 페널티를, 짧으면 어드밴티지를 주는 방식입니다.

🔬 3. BM25 공식 상세 해부 (★시험 핵심★)

이제 공식의 각 부분을 자세히 뜯어보겠습니다.

1. IDF (Inverse Document Frequency) 항

BM25에서 사용하는 IDF는 기존의 IDF를 살짝 변형한 공식을 사용합니다.

  • : 전체 문서의 수
  • : 단어 가 포함된 문서의 수
  • 핵심 특징: 스무딩(Smoothing)
    • 분자와 분모에 +0.5를 더해주는 것을 스무딩이라고 합니다.
    • 목적 1 (0으로 나누기 방지): 어떤 단어가 한 번도 등장하지 않았을 때 발생할 수 있는 오류를 막습니다.
    • 목적 2 (음수 값 방지): 단어가 전체 문서의 절반 이상에 등장할 경우, 기존 IDF 공식에서는 안의 값이 1보다 작아져 음수가 나올 수 있습니다. BM25의 IDF는 이를 방지하여 항상 양수 값을 갖도록 보정합니다.
    • 결과적으로 매우 드문 단어에 대해 더 민감하게 반응하고, 일반적인 단어의 IDF 값은 더 빠르게 감소시키는 효과가 있습니다.
  • IDF 음수 나오는 예시
    • 1. 문제의 IDF 공식
      • : 전체 문서의 수
      • : 해당 단어가 등장한 문서의 수
      이제 "단어가 전체 문서의 절반 이상에 등장"하는 상황을 가정해 봅시다.
      • 전체 문서(N): 100개
      • 어떤 단어가 60개의 문서에 등장했다고 해보죠. ()
      • 이 경우, (즉, ) 조건을 만족합니다.
      3. 공식에 대입해보기로그 함수()는 다음과 같은 중요한 특징을 가집니다.
      • 가 1보다 크면, 는 **양수(+)**가 됩니다. (예: )
      • 가 1이면, 0이 됩니다. (예: )
      • 가 1보다 작고 0보다 크면, 는 **음수(-)**가 됩니다. (예: )
      따라서, 위에서 계산한 $\log(0.667)$의 값은 반드시 음수가 나오게 됩니다.
  • 4. 로그 함수의 특징 (핵심!)
  • 위의 숫자를 공식에 넣어보면, 안의 값이 어떻게 변하는지 알 수 있습니다.
  • 2. '절반 이상'의 조건
  • BM25 IDF의 기반이 된 확률론적 IDF 공식은 다음과 같습니다.

2. TF 및 문서 길이 보정 항

이 부분이 바로 BM25의 독창성이 드러나는 곳입니다.

  • : 문서 D에서 단어 의 빈도 (TF)
  • : 문서 D의 길이
  • avgdl: 전체 문서의 평균 길이
  • 파라미터 k1 (TF 포화도 조절):
    • 이 값은 TF 점수가 얼마나 빨리 포화될지를 결정합니다. k1이 작을수록 TF 값은 더 빨리 최대치에 가까워집니다.
    • 일반적으로 1.2 ~ 2.0 사이의 값을 사용하며, 이 값을 통해 단어 빈도가 점수에 미치는 영향을 조절할 수 있습니다.
  • 파라미터 b (문서 길이 보정 강도 조절):
    • 이 값은 문서 길이에 대한 정규화(normalization)를 얼마나 강하게 적용할지 결정합니다.
    • b = 0 이면: 문서 길이 보정을 전혀 하지 않습니다 (TF-IDF와 유사).
    • b = 1 이면: 문서 길이에 대한 보정 효과를 최대로 적용합니다.
    • 일반적으로 0.75를 기본값으로 많이 사용하며, 문서의 길이를 얼마나 점수에 반영할지를 조절하는 중요한 역할을 합니다.

🎓 시험 대비 최종 요약

특징 TF-IDF BM25
핵심 사상 단어 빈도와 희귀성의 곱 TF-IDF를 개선한 검색 순위(Ranking) 모델
TF 스케일링 선형적 (무한정 증가 가능) 비선형적 (일정 수준에서 포화)
문서 길이 고려하지 않음 평균 문서 길이와 비교하여 정규화/보정
주요 파라미터 없음 k1 (TF 포화도 조절), b (문서 길이 보정 강도 조절)
주요 용도 범용적인 단어 가중치 계산, 키워드 추출 정보 검색, 검색 엔진의 랭킹 알고리즘
Sheets로 내보내기

결론적으로, BM25는 TF-IDF의 단점인 TF의 과대평가와 문서 길이 편향 문제를 k1과 b라는 두 개의 파라미터를 도입하여 정교하게 해결한, 현대 검색 시스템의 표준과도 같은 알고리즘이라고 할 수 있습니다.

 

TF-IDF와의 비교

슬라이드 우측의 TF-IDF 코드는 코사인 유사도를 계산하는 반면, BM25는 직접적인 **관련도 점수(relevance score)**를 계산합니다. 두 방법 모두 문서 순위를 매길 수 있지만, BM25는 TF의 포화도와 문서 길이를 정교하게 보정하기 때문에 일반적으로 검색 및 랭킹 성능이 더 우수합니다.

 

🔬 2. BM25 공식 심층 분석 (★시험 핵심★)

BM25의 성능 비결은 공식에 숨겨진 두 개의 핵심 파라미터, k1과 b에 있습니다.

상세 해석 1: TF와 k1 파라미터 (단어 빈도 포화 조절)

  • f(q, D): 문서 D에 포함된 단어 q의 빈도(raw count)입니다.
  • 파라미터 k1: 이 값은 TF 점수가 얼마나 빨리, 그리고 어느 정도까지 증가하다가 포화될지를 조절하는 '포화 컨트롤러' 입니다. (일반적으로 1.2 ~ 2.0 사용)
    • k1이 작을수록: TF 점수가 더 빨리 포화됩니다. 즉, 단어가 몇 번만 등장해도 금방 높은 점수를 받고, 그 이상 반복되어도 점수가 거의 오르지 않습니다.
    • k1이 클수록: TF 점수가 포화되는 정도가 약해져, 단어 빈도수가 점수에 미치는 영향이 더 커집니다 (선형 증가에 가까워짐).
  • 결론: k1은 "한 문서에서 단어가 반복되는 것을 얼마나 더 가치있게 쳐줄 것인가?"를 조절하는 중요한 변수입니다.

상세 해석 2: 문서 길이 보정과 b 파라미터

  • |D| / avgdl: 현재 문서의 길이(|D|)가 전체 문서의 평균 길이(avgdl)에 비해 얼마나 긴지 혹은 짧은지를 나타내는 비율입니다.
  • 파라미터 b: 이 값은 문서 길이 보정을 얼마나 강하게 적용할지를 조절하는 '정규화 강도 컨트롤러' 입니다. (0과 1 사이의 값, 일반적으로 0.75 사용)
    • b = 0 이면: 문서 길이 보정을 전혀 사용하지 않습니다. 문서 길이에 따른 유불리가 사라집니다.
    • b = 1 이면: 문서 길이에 대한 보정 효과를 최대로 적용합니다. 평균보다 긴 문서는 강한 페널티를 받게 됩니다.
  • 결론: b는 "문서의 길이가 검색 결과에 미치는 영향을 얼마나 제어할 것인가?"를 조절하는 변수입니다.

🎓 시험 대비 최종 요약

구분 역할 핵심 파라미터 파라미터의 의미
IDF 항 단어의 전역적 희귀성(정보량) 측정 (스무딩 값 +0.5) 안정적인 계산 보장
TF 항 단어의 지역적 빈도(중요도) 측정, 단 포화 k1 TF 점수의 포화도 조절
문서 길이 항 문서 길이에 따른 점수 왜곡 보정 b 문서 길이 정규화 강도 조절
Python 구현 BM25 알고리즘의 간편한 사용 rank_bm25 BM25Okapi()로 초기화, get_scores()로 랭킹
Sheets로 내보내기

BM25는 TF-IDF를 기반으로 하되, k1과 b라는 파라미터를 도입하여 단어 빈도의 과대평가와 문서 길이 편향 문제를 모두 해결한, 매우 정교하고 실용적인 검색 랭킹 알고리즘입니다. 이 점을 명확히 이해하는 것이 시험의 핵심입니다.

 

🥊 BM25 vs. TF-IDF: 무엇이, 왜 더 뛰어난가? (★시험 핵심★)

결론부터 말하면, BM25는 TF-IDF의 핵심적인 문제점 3가지를 파라미터(k1, b)와 개선된 공식을 도입하여 해결한, 훨씬 더 정교하고 현실적인 검색 순위(Ranking) 모델입니다.

슬라이드의 요약처럼, BM25의 개선점은 정확히 3가지 포인트로 나눌 수 있습니다.


1. TF 선형 증가 문제 → k1 파라미터로 해결

  • TF-IDF의 문제점: TF-IDF에서는 단어의 등장 횟수(TF)가 늘어날수록 점수가 끝없이 선형적으로 증가합니다. 하지만 현실에서는 단어의 중요도가 그렇게 무한정 커지지 않습니다. 예를 들어, 한 문서에서 '컴퓨터'라는 단어가 10번 등장했다면 이미 중요한 키워드인데, 100번 등장한다고 해서 그 중요도가 정확히 10배가 되지는 않습니다. 중요도는 어느 시점에서 **포화(saturate)**됩니다.
  • BM25의 해결책 (k1 파라미터): BM25는 **k1**이라는 파라미터를 사용해 단어 빈도(TF)의 영향력이 일정 수준에서 포화되도록 설계했습니다.
    • 그래프 해석: 위 그래프에서 빨간색 TF-IDF 선은 단어 빈도(x축)가 늘어남에 따라 점수가 계속해서 올라갑니다. 반면, 파란색과 검은색 BM25 선은 초반에는 점수가 빠르게 오르다가 점차 완만해지며 특정 값에 수렴(포화)하는 것을 볼 수 있습니다. k1은 이 곡선이 얼마나 빨리, 얼마나 높이까지 도달할지를 조절하는 역할을 합니다.

2. 문서 길이 문제 → b 파라미터로 해결

  • TF-IDF의 문제점: 표준 TF-IDF는 문서의 길이를 직접적으로 고려하지 않습니다. 하지만 상식적으로 100단어로 이루어진 짧은 문서에서의 '핵심'이라는 단어 한 번이, 10,000단어로 이루어진 긴 문서에서의 '핵심'이라는 단어 한 번보다 훨씬 더 중요합니다. TF-IDF는 이러한 문서 길이에 따른 중요도 차이를 반영하지 못합니다.
  • BM25의 해결책 (b 파라미터): BM25는 **b**라는 파라미터를 통해 문서의 길이를 점수에 반영하여 보정(정규화)합니다. 현재 문서의 길이를 전체 문서의 평균 길이와 비교하여 점수를 조정합니다.
    • 그래프 해석: 아래 그래프에서 빨간색 TF-IDF 선은 문서 길이(x축)가 변해도 점수가 일정한 것을 보여줍니다. 즉, 문서 길이에 둔감합니다. 하지만 파란색과 검은색 BM25 선은 문서의 길이가 길어질수록 점수가 점차 감소하는 것을 볼 수 있습니다. 이것이 바로 '문서 길이에 대한 페널티'이며, b는 이 페널티의 강도를 조절합니다.

3. IDF 분포 문제 → 스무딩(Smoothing) IDF 사용

  • TF-IDF의 문제점: 전통적인 IDF 공식()은 아주 드물게 특정 상황(단어가 절반 이상의 문서에 등장)에서 음수 값을 가질 수 있고, 전체 문서 집합에 없는 단어에 대한 처리가 불안정할 수 있습니다.
  • BM25의 해결책 (Smoothing IDF): BM25는 분자와 분모에 작은 값(보통 0.5)을 더해주는 스무딩(Smoothing) 기법이 적용된 IDF 공식을 사용합니다. 이를 통해 IDF 값이 항상 양수가 되도록 보장하고, 전체적으로 더 안정적인 점수 분포를 만들어냅니다.

🎓 시험 대비 최종 요약

문제점 (Problem) TF-IDF BM25의 해결책 (Solution)
TF의 선형적 증가 점수가 제한 없이 증가하여 중요도를 과대평가 k1 파라미터 도입, 점수가 일정 수준에서 **포화(Saturate)**되도록 설계
문서 길이 편향 문서 길이를 고려하지 않아 공정한 비교가 어려움 b 파라미터 도입, 평균 문서 길이와 비교하여 점수 보정/정규화
IDF 분포 특정 경우 불안정한 값을 가질 수 있음 **스무딩(Smoothing)**을 추가한 안정적인 IDF 공식 사용
결론 범용적인 키워드 추출 방법 **검색 순위(Ranking)**에 최적화된 정교한 점수 모델
Sheets로 내보내기

이 세 가지 핵심적인 개선점 덕분에, BM25는 단순 TF-IDF보다 훨씬 더 성능이 뛰어난 검색 랭킹 알고리즘으로 인정받으며 Elasticsearch와 같은 현대 검색 엔진의 표준으로 자리 잡게 되었습니다.

 

🏛️ BM25 vs TF-IDF 최종 요약: BM25를 구성하는 세 개의 기둥

BM25는 TF-IDF를 기반으로 하지만, 크게 세 가지 측면에서 정교한 개선을 이루어냈습니다. 이 세 가지가 바로 BM25의 핵심입니다.

1. 문서 길이 문제 → b 파라미터로 해결 (공정한 문서 길이 보정)

  • TF-IDF의 한계: 문서의 길이를 고려하지 않아, 내용이 긴 문서가 검색어에 더 높은 점수를 받을 수 있는 불공평함이 있었습니다.
  • BM25의 해결책: b 파라미터를 도입하여, 현재 문서의 길이를 전체 문서의 평균 길이와 비교하여 점수를 보정(정규화)합니다.
    • b의 역할: 이 보정을 얼마나 강하게 적용할지 조절하는 '스위치'입니다.
      • b=0이면 문서 길이 보정을 전혀 하지 않습니다.
      • b=1이면 문서 길이 보정 효과를 최대로 적용하여, 평균보다 긴 문서는 강한 페널티를 받습니다. (일반적으로 0.75 사용)
    • 결론: 문서 길이에 따른 유불리를 없애 공정한 비교를 가능하게 합니다.

2. TF 선형 증가 문제 → k1 파라미터로 해결 (지능적인 TF 스케일링)

  • TF-IDF의 한계: 단어가 문서에 나올수록 TF 점수가 끝없이 비례하여 증가했습니다. 이는 단어의 실제 중요도가 어느 정도 이상부터는 크게 늘지 않는 현실(수확 체감의 법칙)을 반영하지 못했습니다.
  • BM25의 해결책: **k1**이라는 파라미터를 도입하여, 단어 빈도(TF)가 점수에 미치는 영향이 일정 수준에 도달하면 **포화(saturate)**되도록 설계했습니다.
    • k1의 역할: TF 점수가 얼마나 빨리, 어느 정도까지 증가하다가 완만해질지를 조절하는 '곡선 조절기'입니다.
      • k1이 작을수록 점수가 더 빨리 포화됩니다 (단어의 반복에 둔감해짐).
      • k1이 클수록 점수가 더 늦게 포화됩니다 (단어의 반복을 더 중요하게 여김).
    • 결론: 단어 빈도가 점수에 미치는 영향을 현실적으로 모델링하여, 특정 단어가 과도하게 반복되는 것에 대한 점수 인플레이션을 막습니다.

3. IDF 분포 문제 → 스무딩(Smoothing) IDF 사용 (정교해진 IDF)

  • TF-IDF의 한계: 전통적인 IDF 공식은 매우 드물게 음수 값을 갖거나, 특정 단어 분포에서 불안정한 모습을 보일 수 있습니다.
  • BM25의 해결책: 분자와 분모에 작은 상수(0.5)를 더해주는 스무딩(Smoothing) 기법을 적용한 IDF 공식을 사용합니다.
    • 결론: 이를 통해 IDF 값이 항상 양수가 되도록 보장하고, 전체적으로 더 안정적이고 신뢰도 높은 희귀성 점수를 부여합니다.

📈 점수 계산 방식의 차이

마지막 요약 포인트는 두 모델의 근본적인 접근 방식 차이를 보여줍니다.

  • TF-IDF: 2단계 방식입니다.
    1. 모든 문서와 검색어를 각각의 TF-IDF 벡터로 변환합니다.
    2. 이 벡터들 사이의 코사인 유사도를 별도로 계산하여 최종 유사성을 구합니다.
  • BM25: 1단계 방식입니다.
    • BM25 공식 그 자체가 검색어(Query)와 문서(Document)를 입력받아 최종 **관련도 점수(Relevance Score)**를 직접 계산해내는 하나의 완성된 **랭킹 함수(Ranking Function)**입니다.
    • 벡터화와 유사도 계산이 분리된 것이 아니라, 점수 계산 과정에 유사도 개념이 통합되어 있습니다.

🎓 시험 대비 최종 암기 테이블

문제점 (Problem) TF-IDF BM25의 해결책 (Solution) BM25의 "비밀 병기"
TF의 선형적 증가 점수가 무한정 증가하여 중요도 왜곡 k1 파라미터 도입, 점수가 일정 수준에서 **포화(Saturate)**되도록 설계 k1 (TF 포화도 조절)
문서 길이 편향 문서 길이를 고려하지 않아 불공평 b 파라미터 도입, 평균 문서 길이와 비교하여 점수 보정/정규화 b (길이 보정 강도 조절)
IDF 분포 특정 경우 불안정한 값을 가질 수 있음 **스무딩(Smoothing)**을 추가한 안정적인 IDF 공식 사용 안정성 확보
결론 범용적인 키워드 추출 방법 **검색 순위(Ranking)**에 최적화된 정교한 점수 모델 랭킹에 특화된 성능
반응형

+ Recent posts