Information Retrieval (IR) - TF-IDF / BM25 (20250421)

홍윤아·2025년 4월 30일

공부정리

목록 보기
3/7

Sparse Retrieval

기존의 전통적인 검색 방식으로 검색어에 있는 단어가 많이 나오는 문서를 사용자에게 검색 결과로 제공한다. query와 document를 sparse vector로 표현함으로 0으로 대부분 채워져서 희소하고 query와 document간 공통된 단어가 많을 수 록 점수가 높다.

1. TF-IDF

TF-IDF는 단어의 중요도(가중치)를 계산하는 통계적 지표로, 문서에서 단어가 얼마나 중요한지를 수치화할 때 사용된다. 모든 문서에서 등장하는 단어는 중요도가 낮으며, 특정 문서에서만 자주 등장하는 단어는 중요도가 높다.

1-1. TF (Term Frequency, 단어 빈도)

특정 문서 내에서 단어가 얼마나 자주 등장하는지를 나타낸다.
TF(t, d) = (해당 단어 t의 빈도) / (문서 d의 전체 단어 수)

TF(t,d)=ft,dkfk,d\text{TF}(t, d) = \frac{f_{t,d}}{\sum_{k} f_{k,d}}
  • ft,df_{t,d} : 문서 dd 에서 단어 tt 의 등장 횟수
  • kfk,d{\sum_{k} f_{k,d}} : 문서 dd 에 등장한 전체 단어 수

1-2. IDF (Inverse Document Frequency, 역문서 빈도)

단어가 전체 문서 중 얼마나 희귀한지를 측정한다. 이때 특정 단어 t가 문서에 전체 문서에서 등장하지 않는 경우에 분모가 0이 되는 것을 방지하기 위해 분모에 1을 더해준다.
IDF(t) = log(총 문서 수/ 특정 단어 t를 포함한 문서 수)

IDF(t)=log(N1+df(t))\text{IDF}(t) = \log \left( \frac{N}{1+ \text{df}(t)} \right)
  • NN : 전체 문서의 수
  • df(t){\text{df}(t)} : 단어 tt 가 등장한 문서 수

1-3. TF-IDF

TF와 IDF를 곱한 값으로, 특정 문서에서 단어의 중요도를 나타낸다.

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

아래는 적용 예시이다. 예시에서는 3개의 문서로 구성되어 있다. 단어 "apple"은 문서 1에서 3회, 문서 2에서 0회, 문서 3에서 1회 등장하였고, 이 단어의 DF는 2이다. IDF는 전체 문서 수를 해당 단어의 DF로 나눈 값으로, log(3/2) ≈ 0.1761이다.
TF-IDF 결과값을 통해 각 단어의 상대적인 중요성을 알 수 있다.

단어문서 1문서 2문서 3DF (문서 빈도)IDF (역문서 빈도)TF-IDF (단어별 점수)
apple3012log(3/2) = 0.17610.5283
banana2102log(3/2) = 0.17610.3522
cat1213log(3/3) = 00
dog2302log(3/2) = 0.17610.3522
elephant0212log(3/2) = 0.17610.3522

2. BM25

BM25는 문서 검색에서 사용되는 가중치 계산 모델로, 주어진 단어가 문서와 얼마나 관련이 있는지 평가한다. 단어 빈도 (TF)역문서 빈도 (IDF)를 기반으로 계산되며, 각 문서의 관련성 점수를 산출하는 데 사용된다. 즉, 검색어와 문서에 있는 단어가 겹치는 정도를 기준으로 검색 결과를 만들게 되는 것이다.

수식

(k1+1)(k_1+1)k1×(1b+1×davgDL)k_1 \times (1-b+1 \times \frac{|d|}{\text{avgDL}}) 부분은 Smoothing을 위한 항으로 결과 조정을 위해 추가되었다.

BM25(d,q)=tqIDF(t)×TF(t,d)×(k1+1)TF(t,d)+k1×(1b+b×davgDL)\text{BM25}(d, q) = \sum_{t \in q} \text{IDF}(t) \times \frac{\text{TF}(t, d) \times (k_1 + 1)}{\text{TF}(t, d) + k_1 \times \left(1 - b + b \times \frac{|d|}{\text{avgDL}}\right)}
  • dd: 문서
  • qq: 쿼리
  • tt: 쿼리에서 등장하는 단어
  • TF(t,d)\text{TF}(t, d): 문서 dd에서 단어 tt의 빈도
  • IDF(t)\text{IDF}(t): 단어 tt의 역문서 빈도 (IDF)
  • k1k_1, bb: 조정 파라미터 (일반적으로 k1=1.22.0k_1 = 1.2 \sim 2.0, b=0.75b = 0.75 사용)
  • d|d|: 문서 dd의 길이 (단어의 수)
  • avgDL\text{avgDL}: 문서들의 평균 길이

IDF 수식

TF-IDF와 유사하지만 해당 키워드가 등장한다면 가중치를 적게 주고 자주 등장하지 않으면 큰 가중치를 준다.

IDF(t)=log(Ndf(t)+0.5df(t)+0.5+1.0)\text{IDF}(t) = \log \left( \frac{N - \text{df}(t) + 0.5}{\text{df}(t) + 0.5} + 1.0 \right)
  • NN: 전체 문서의 수
  • df(t)\text{df}(t) : 단어 tt 가 등장한 문서 수

계산 과정

  1. 용어 빈도 조정: 문서 내의 각 단어에 대해 용어 빈도를 계산하고, 이를 앞서 설명한 식에 따라 조정합니다.
  2. 역문서 빈도 계산: 쿼리를 구성하는 각 단어에 대해 역문서 빈도를 계산합니다. 희귀 단어일수록 높은 값을 가집니다.
  3. 문서 길이 조정: 문서의 길이가 평균보다 길거나 짧은 경우, 이에 따른 조정을 식에 반영합니다.
  4. 최종 점수 계산: 위에서 계산된 값들을 합산하여 최종 점수를 도출합니다. 이 점수를 기반으로 문서들을 정렬하게 됩니다.

  • 최종적으로 BM25는 문서의 평균 길이를 계산에 사용하여 정규화하므로 문서 길이가 영향을 덜 미친다.
  • BM25는 DF가 높아지면 검색 점수가 0으로 급격히 수렴하기 때문에 불용어가 검색 점수에 영향을 미치는 정도가 적어져 상대적으로 IDF에 영향이 커진다.

reference

bm25

TF-IDF

profile
공부 블로그 입니다!

0개의 댓글