나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2024-06-12 08:39:51

TF-IDF



1. 개요2. 상세3. 도입배경
3.1. TF3.2. IDF
4. 정의
4.1. TF4.2. IDF4.3. TF-IDF

1. 개요

TF-IDF(term frequency-inverse document frequency)란 코퍼스(corpus, 문서집합)에서 한 단어가 얼마나 중요한지를 수치적으로 나타낸 가중치이다(term-weighting).

2. 상세

자연어 처리에서 정보수집, 텍스트 마이닝 및 유저 모델링의 가중치 계산에 자주 사용된다. TF-IDF 값은 한 문서에서 단어가 등장하는 빈도가 높을수록 커지고(term frequency), 반대로 코퍼스에서 해당 단어를 포함하는 문서가 많을 수록 반비례해서 작아진다(inverse document frequency). 현재 단어의 가중치를 계산할 때에 가장 자주 쓰이는 값 중 하나이다.

검색엔진에서 관련성 순위를 매길때 자주 이용되며, 문서 요약 등에서도 자주 쓰인다고 한다. 관련성 순위를 계산할 때 쓸 수 있는 가장 단순한 방법은 각 문서마다 이용자가 입력한 단어들의 TF-IDF 값을 계산한 뒤 큰 순서대로 우선순위로 표시하는 것이다.

2015년 한 조사에 따르면 전자도서관들이 텍스트 기반 추천시스템을 구축할 때 가장 많이쓰는 것이 이 TF-IDF라고 하며, 그 비율은 83%에 이른다고 한다[1]

3. 도입배경

3.1. TF

영어로 된 문서들중에서 유저가 입력한 검색어 "an apple"과 가장 관련성이 높은 순서대로 순위를 매긴다고 하자. 우선 가장먼저 "an"과 "apple"을 포함하지 않는 문서를 제외한다. 그 뒤에, 각 문서에서 "an"과 "apple"이 각각 몇번씩 등장하는지 빈도를 계산한다. 이 빈도값이 tf(term frequency)가 된다. 이 때 길이가 긴 문서일수록 단어가 많고, "an"과 "apple" 또한 더 자주 등장할것이라 예상할 수 있으므로, 빈도를 정규화할 필요가 생긴다. 단어 가중치(term weighting) 개념을 처음으로 도입한 Hans Peter Luhn(1957)에 따르면 단어 가중치는 다음과 같이 요약될 수 있다:

"한 문서에서 단어의 가중치는 단어 빈도수에 비례한다(The weight of a term that occurs in a document is simply proportional to the term frequency)."[2]

3.2. IDF

영어의 언어 특성상 "an apple"에서 "an"과 "apple"의 빈도를 계산하면 "an"이 압도적으로 많을것으로 예상할 수 있으며, 단순히 TF를 기준으로 순위를 계산한다면 "an"이 가장 많은 문서가 상위에 랭크될 가능성이 높다. 그러나 "an"은 문서를 구분하는데에 있어서 무의미한 키워드이며, 사용자가 원하는 것은 "apple"과 관련된 문서일 것이다. 이때 IDF(inverse document frequency)를 도입하는데, 이 값은 코퍼스(문서집합) 전체에서 특정 단어가 자주 언급될수록 작아지고, 적게 언급될수록 커진다. an apple의 경우에서 보면 an은 코퍼스의 거의모든 문서들에 한번씩은 포함될 것이므로 an의 idf값은 작아지고, 반대로 apple은 코퍼스내의 몇몇 문서들에서만 언급될 것이므로 이 값이 커지게 된다. IDF 개념을 처음으로 소개한 Karen Spärck Jones (1972)에 따르면 IDF는 다음과 같이 요약된다:

"단어의 특이성은 단어가 등장하는 문서의 수에대한 반비례 함수로 정량화될 수 있다."[3]

4. 정의

TF-IDF는 TF와 IDF의 곱이다. TF와 IDF를 계산하는 구체적인 함수에는 여러가지가 있다.

4.1. TF

[math(tf(t,d))] 는 문서 d에서의 단어 t의 상대적 빈도수이다:

[math(tf(t,d) = {f_{t,d}}/{\sum\limits_{t'\in d}f_{t',d}})]

(여기서 [math(f_{t,d})] 는 단어의 절대적인 빈도수이다.)
이외에도 TF를 정의하는 다른 함수들이 존재한다:

(1) binary : [math(0,1)]

(2) raw count : [math(f_{t,d})]

(3) term frequency : [math({f_{t,d}}/{\sum\limits_{t'\in d}f_{t',d}})]

(4) log normalization : [math(log(1+f_{t,d}))]

(5) double normalization 0.5 : [math(0.5 + 0.5 * f_{t,d} / max_{t'\in d}f_{t',d})]

(6) double normalization K : [math(K + (1-K) * f_{t,d} / max_{t'\in d}f_{t',d})]

여기서 (5)와 (6)은 길이가 긴 문서에게 더 큰 TF 값이 부여되는것을 방지하기 위해 정규화되었다.

4.2. IDF

IDF는 주어진 단어가 정보를 얼마나 많이 담고있는지를 측정하며(정보이론에서의 엔트로피와 유사함), 주로 로그함수로 스케일된다:

[math(idf(t,D) = log(N / |{d \in D : t \in d}|))]

여기서 N은 코퍼스(문서집합) D 내에 있는 문서의 총 개수이고, [math(|{d \in D : t \in d}|)]는 단어 t가 등장하는 문서 d의 개수이다(기호 [math(:)] 는 such that 이다). 만약 단어가 코퍼스에 존재하지 않는다면 0으로 나누는 오류가 발생할 수 있기때문에, 분모에 1을 더해서 [math(1 + |{d \in D : t \in d}|)] 를 사용하는 경우가 많다.

이외에도 IDF를 정의하는 여러 함수들이 있다:

[math(n_t = |{d \in D : t \in d}|)] 라고 하면,

(1) unary : 1

(2) inverse document frequency : [math(log(N/n_t) = -log(n_t/N))]

(3) inverse document frequency smooth : [math(log(N/1 + n_t) + 1)]

(4) inverse document frequency max : [math(log(max_{t'\in d}n_{t'} / (1 + n_t)))]

(5) probabilistic inverse document frequency : [math(log((N-n_t)/n_t))]

4.3. TF-IDF

[math(tfidf(t,d,D) = tf(t,d) * idf(t,D))]

TF와 IDF를 적절하게 조합해서 계산하면 된다. 자주 쓰이는 조합은 영문위키 참고.
[1] Breitinger, Corinna; Gipp, Bela; Langer, Stefan (2015-07-26). "Research-paper recommender systems: a literature survey". International Journal on Digital Libraries. 17 (4): 305–338. doi:10.1007/s00799-015-0156-0. ISSN 1432-5012. S2CID 207035184.[2] Luhn, Hans Peter (1957). "A Statistical Approach to Mechanized Encoding and Searching of Literary Information" (PDF). IBM Journal of Research and Development. 1 (4): 309–317. doi:10.1147/rd.14.0309. Retrieved 2 March 2015. There is also the probability that the more frequently a notion and combination of notions occur, the more importance the author attaches to them as reflecting the essence of his overall idea.[3] Spärck Jones, K. (1972). "A Statistical Interpretation of Term Specificity and Its Application in Retrieval". Journal of Documentation. 28: 11–21. CiteSeerX 10.1.1.115.8343. doi:10.1108/eb026526.

분류