TF-IDF (Term Frequency-Inverse Document Frequency)
TF-IDF 에 대해 내용을 정리합니다.
TF-IDF
- Term Frequency * Inverse Document Frequency 의 값을 의미한다.
- 사용하는 경우
1) 문서의 유사도를 구할 때
2) 검색 시스템에서 검색 결과의 중요도를 구할 때
3) 문서 내에서 특정 단어의 중요도를 구할 때 등에 주로 사용된다.
- 특정한 query Q = {q1, q2, … ,qn} 가 어떤 문서에서 해당 점수가 제일 높은지를 봄으로써, 가장 유사도가 있는지 등을 판별해 볼 수 있다.
- 특정한 query Q = {q1, q2, … ,qn} 가 어떤 문서에서 해당 점수가 제일 높은지를 봄으로써, 가장 유사도가 있는지 등을 판별해 볼 수 있다.
-
높을수록 해당 쿼리와 특정 문서 사이의 유사도가 높다, 중요도가 크다. 라고 판단할 수 있다.
-
Term Frequency
documents DOCS = {doc1, doc2, doc3, ,,,,} (m개의 document 로 구성)
query Q = {q1, q2, q3, …} (qn개의 단어로 구성)- $Term Fequency(doc1, q1)$
- 특정 단어 q1이 doc1이라는 문서에서 얼마나 빈번하게 등장했는지를 count하여 return한다.
- $Term Fequency(doc1, q1)$
- Inverse Document Frequency
- Document Frequency 의 역수의 값을 표현하려 함이다.
- Document Frequency
documents DOCS = {doc1, doc2, doc3, ,,,,} 에서 특정한 단어 q1이 몇 개의 문서에서 등장했는지를 count한다.
cnt = 0 for doc in docs : if q1 in doc : cnt +=1
- Document Frequency
-
Inverse DF
N을 총 문서 수라고 할 때, $log (N / 1 + df(q1))$- 분모에 1을 더하는 이유는 df == 0 일 때, 분모가 0이 됨을 막기 위함이다.
- N / df 값을 취함으로써, 다른 문서에 등장하는 회수가 많아질수록 값은 작아짐 -> 중요도가 낮아지게 된다.
반대로, 다른 문서에 등장하는 경우가 적으면 적을수록 값은 커짐 -> 중요도가 커진다. - log scale 을 적용하여 값이 document 가 매우 많아지더라도 값이 기하 급수적으로 커지는 것을 막는다.
- 분모에 1을 더하는 이유는 df == 0 일 때, 분모가 0이 됨을 막기 위함이다.
- Document Frequency 의 역수의 값을 표현하려 함이다.
- 최종 식
TF_IDF(docs, query): scores = [] for doc in docs : score = 0 for q in query.split() : score += term_frequency(doc, q) * inverse_document_frequency(docs, q) scores.append(score)
- 해당하는 doc 마다 query 에 대한 score 가 나옴
- 해당하는 doc 마다 query 에 대한 score 가 나옴
Reference
- https://wikidocs.net/31698