ML Recap - BM25 & TF-IDF


BM25와 TF-IDF의 관계: 단계별 설명

(1) TF (Term Frequency): 단어 빈도

  • 정의: 특정 문서 내에서 단어가 등장하는 빈도를 측정합니다.
  • 예: 문서 A에 “사과”가 5번 등장 → TF("사과", A) = 5

(2) TF-IDF: TF와 IDF의 결합

단어의 문서 내 중요도(TF)전체 집합에서의 희귀도(IDF)를 곱한 값입니다.

\[TF\text{-}IDF(t, d) = TF(t, d) \times IDF(t)\]

특정 문서에 집중적으로 등장하면서 다른 문서에는 드문 단어를 강조합니다.


TF-IDF의 한계

  1. 문서 길이 정규화 부재:
    • 긴 문서는 단어가 자연스럽게 더 자주 등장하여 TF가 높아지는 경향이 있지만, 실제 관련성은 낮을 수 있습니다.
    • 예: 1000단어 문서에서 “사과” 10회 → TF = 0.01
    • 100단어 문서에서 “사과” 5회 → TF = 0.05 (더 높음)
  2. 단어 빈도 포화 문제:
    • 단어가 특정 횟수 이상 등장해도 점수가 선형적으로 증가합니다.
    • 예: “사과”가 10번 등장한 문서와 20번 등장한 문서의 TF 차이가 큼.
    • 실제로는 10번 이후 추가 등장은 관련성을 크게 높이지 않을 수 있습니다.
  3. 단순한 IDF 계산:
    • 희귀도만 고려하고, 단어 분포의 복잡성을 반영하지 못합니다.

BM25: TF-IDF의 발전형

  • 정의: TF-IDF의 한계를 해결하기 위해 문서 길이 정규화단어 빈도 포화 제어를 도입한 랭킹 함수입니다.
\[\text{BM25}(t, d) = IDF(t) \times \frac{TF(t, d) \times (k_1 + 1)}{TF(t, d) + k_1 \times \left(1 - b + b \times \frac{\text{문서 길이}}{\text{평균 문서 길이}}\right)}\]
  • $k_1$: 단어 빈도 포화 제어 파라미터 (기본값 = 1.2)
  • $b$: 문서 길이 정규화 강도 (기본값 = 0.75)

BM25의 핵심 개선점

(1) 단어 빈도 포화 제어

  • 문제: TF-IDF는 단어 빈도가 높을수록 점수가 무한정 증가합니다.
  • 해결: BM25는 $k_1$ 파라미터로 포화 지점을 조절합니다.

예: $k_1 = 1.2$일 때, 단어 빈도가 5번 이상이면 점수 증가가 둔해집니다.

\[\frac{TF \times (k_1 + 1)}{TF + k_1} \quad \text{(점수 증가율 감소)}\]

(2) 문서 길이 정규화

  • 문제: 긴 문서는 단어가 우연히 더 많이 등장할 수 있습니다.
  • 해결: $b$ 파라미터로 문서 길이 편차를 보정합니다.
    • 문서 길이가 평균보다 길면 TF 점수를 낮춥니다.
\[1 - b + b \times \frac{\text{문서 길이}}{\text{평균 문서 길이}}\]

(3) IDF의 개선된 계산

\[IDF(t) = \log\left(\frac{N - n_t + 0.5}{n_t + 0.5}\right)\]
  • $N$: 전체 문서 수
  • $n_t$: 단어 $t$가 등장한 문서 수
  • $n_t$가 작을 때 안정적인 값을 제공합니다.

요약

기능 TF-IDF BM25
단어 빈도 선형 증가 포화 지점 이후 증가율 감소 ($k_1$)
문서 길이 고려하지 않음 정규화 적용 ($b$)
IDF 계산 $\log(N/n_t)$ 보정된 $\log((N - n_t + 0.5)/(n_t + 0.5))$
적용 분야 기본 검색, 작은 데이터셋 대규모 검색 엔진 (Elasticsearch 등)



    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • Deepseek-R1 모델
  • 학습할때 메모리가 터진다고? Cut Your Losses!
  • GRPO 대신 DAPO: RL 최적화로 LLM 추론 능력 끌어올리기
  • DeepSeek-V3 기술 요약
  • python accelerate 라이브러리 함수 조사기