AI

TF-IDF & BM25

5사 2023. 4. 7. 16:55

TF-IDF (Term Frequency - Inverse Document Frequency)

어떤 경우에 사용되는가?

  • 문서의 유사도를 구하는 작업
  • 검색 시스템에서 검색 결과의 중요도를 정하는 작업
  • 문서 내에서 특정 단어의 중요도를 구하는 작업

TF-IDFTF(단어 빈도, term frequency)와 IDF(역문서 빈도, inverse document frequency)의 곱이다.

$$ tfidf(t, d, D) = tf(t, d) \times idf(t, D) $$

  • $d$ : 문서, $t$ : 단어, $D$ : 문서 집합
  • $tf(t, d)$ : 이 값을 산출하는 가장 간단한 방법은 단순히 문서($d$) 내에 나타나는 해당 단어($t$)의 총빈도수를 사용하는 것이다.
  • $idf(t, D)$ : 한 단어가 문서 집합 전체에서 얼마나 공통적으로 나타나는지를 나타내는 값, 전체 문서의 수를 해당 단어를 포함한 문서의 수로 나눈 뒤 로그를 취하여 얻을 수 있다. 

  • $\left|D \right|$ : 문서 집합 $D$의 크기 또는 전체 문서 수
  • $\left|\left\{d\in D:t\in d\right\}\right|$ : 단어 $t$가 포함된 문서의 수
  • ⚠️ 만약 단어가 문서집합에 존재하지 않는다면 0으로 나누는 오류가 발생할 수 있기 때문에, 분모에 1을 더해서 $1 + \left|\left\{d\in D:t\in d\right\}\right|$를 사용하는 경우가 많다.
  • 모든 문서에서 자주 등장하는 단어는 중요도가 낮다고 판단하며, 특정 문서에서만 자주 등장하는 단어는 중요도가 높다고 판단한다.
    • TF-IDF 값이 낮으면 중요도가 낮은 것이며, TF-IDF 값이 크면 중요도가 큰 것
    • ex) the나 a와 같이 불용어의 경우에는 모든 문서에 자주 등장하기 마련이기 때문에 자연스럽게 불용어의 TF-IDF의 값은 다른 단어의 TF-IDF에 비해서 낮아지게 된다.

TF-IDF의 문제점

  • TF의 경우 단어 빈도에 따라 지속 증가함
    • 어떤 문서에 200건의 ‘코끼리’가 포함되어 있다면, 해당 문서는 100건의 ‘코끼리’가 포함된 문서보다 두배나 관련 있는 문서일까?
    ⇒ 개선 방향 : We’d like this contribution to increase fast when TF is small and then increase more slowly, approaching a limit, as TF gets very big.

  • 문서의 길이가 길수록 단어 빈도가 높을 가능성이 있음
    • 문서의 길이가 짧고 ‘코끼리’가 한 번 포함된 경우, ‘코끼리’가 문서 내용상 중요한 단어일 것이다. 하지만 문서의 길이가 긴데 ‘코끼리’가 단 한 번만 언급되었을 경우, 이 문서는 아마도 코끼리에 대한 문서가 아닐 가능성이 높다.

 

BM25 (Okapi BM25)

  • $Q$ : 쿼리
  • $q_{i}$ : 쿼리에 포함된 $i$번째 키워드(토큰)
  • $D$ : 문서

 

  • $IDF(q_{i})$ : 쿼리의 $i$번째 키워드에 대한 inverse document frequency
    • $N$ : 총 문서 수
    • $n(q_{i})$ : $q_{i}$을 포하하고 있는 문서의 수
    • 자주 등장하는 단어는 penalize 하여 지나치게 높은 가중치를 가지게 되는 것을 방지함

 

  • $f(q_{i}, D)$ : 문서 $D$에서 나타나는 키워드 $q_{i}$의 빈도수
  • $\frac{\left|D \right|}{avgdl}$ : 해당 문서가 평균 문서 길이에 비해서 얼마나 긴지를 측정
    • $\left|D \right|$ : 문서 $D$의 길이
    • $avgdl$ : 문서 집합의 평균 문서 길이
    • ex) 300페이지 문서에 이름을 한 번 언급하는 경우보다 짧은 문장에서 이름을 한 번 언급하는 것이 더 유의미할 것이다.
  • $k_{1}$, $b$ : 파라미터, 보통 $k_{i}\in [1.2, 2.0]$, $b = 0.75$를 사용함

  • $k_{1}$ : TF의 saturation를 결정하는 요소, TF가 어느 정도 이상일 경우 점수에 주는 영향이 줄어들도록 함
  • $b$ : $b$가 0에 가까워질수록 문서 길이에 대한 부분이 무시될 것임

 

BM25가 TF-IDF보다 나은 이유

1) TF의 영향이 줄어든다

  • TF-IDF : common words can still influence the score
  • BM25 : limits influence of term frequency

 

2) IDF의 영향이 커진다

  • BM25는 DF(document frequency)가 높아질수록 점수가 0으로 급격히 수렴하므로, 불용어가 점수에 영향을 덜 미친다.

3) 문서 길이의 영향이 줄어든다

  • BM25에서는 $avgdl$(문서 집합의 평균 문서 길이)를 계산에 사용하며, 문서의 길이가 검색 점수에 영향을 덜 미친다.