[추천시스템]TF-IDF란?

건너별·2021년 11월 3일
0

NLP 및 추천시스템

목록 보기
1/13

정의

특정 문서 내에서 특정 단어의 빈도인 TF(Term Frequecy) 와,
전체 문서 내에서 특정 단어의 빈도인 DF(Document Frequency)의 역수를 활용하여
어떠한 단어가 얼마나 중요한지를 나타낸 통계적 수치!

이 문서에는 자주 등장하고,
다른 문서에는 덜 등장할수록 그 수치가 크게 부여된다.

code

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
import numpy as np

corpus = [
  '먹고 싶은 사과',
  '먹고 싶은 바나나',
  '길고 노란 바나나 바나나',
  '저는 과일이 좋아요'
] 

vect = CountVectorizer()
document_term_matrix = vect.fit_transform(corpus)       # 문서-단어 행렬 

tf = pd.DataFrame(document_term_matrix.toarray(), columns=vect.get_feature_names())  
                                             # TF (Term Frequency)
D = len(tf)
df = tf.astype(bool).sum(axis=0)
idf = np.log((D+1) / (df+1)) + 1             # IDF (Inverse Document Frequency)

# TF-IDF (Term Frequency-Inverse Document Frequency)
tfidf = tf * idf                      
tfidf = tfidf / np.linalg.norm(tfidf, axis=1, keepdims=True)

장단점

장점 : 일반적인 Bag of words를 통한 단순한 비교보다 더 높은 정확성을 보인다.
단점 : 단어의 빈도로 판단할 뿐 맥락적 유사도는 반영하지 못한다.
-> Word2Vec Embedding, ConceptNet(Knowledge graph)로 개선

Reference

profile
romantic ai developer

0개의 댓글