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