티스토리 뷰

TF-IDF 설명

TF(용어 빈도)는 문서 내에서 특정 용어가 얼마나 자주 나타나는지를 측정하는 것입니다. 즉, 해당 용어의 등장 횟수를 해당 문서의 총 용어 수로 나눈 값입니다. IDF(역 문서 빈도)는 특정 용어가 전체 문서에서 얼마나 희귀한지를 나타냅니다. 전체 문서 수를 해당 용어를 포함한 문서 수로 나눈 뒤 로그를 취한 값입니다. TF-IDF의 개념은 어떤 단어의 중요도를 측정할 때, 문서 전체에서 많이 나올수록 중요도를 낮게 측정합니다. 즉, 문장에서는 많이 나오지만 문서 전체에서는 적게 나오는 단어일수록 중요도가 높게 평가됩니다. 예를 들어 설명해보겠습니다. "an apple"이라는 문구에서, "apple"이 중요하다면 TF만 고려하면 "an", "a", "the"와 같은 관사는 모든 문서에서 높은 빈도로 나와서 apple 단어가 해당 문서에서 중요하다고 평가할 수 없습니다. TF-IDF는 이러한 문제를 해결하기 위해 단어의 전체 문서에서의 희귀성을 고려하여 중요도를 측정합니다. 이러한 측정이 왜 필요한지에 대해서 예를 들어 설명하자면, 검색 시스템에서 특정 단어로 검색했을 때 더 관련성 높은 문서를 찾기 위해 사용됩니다. TF-IDF는 단어의 상대적인 중요성을 고려하여 문서 간 비교 및 검색 성능을 향상시킵니다. 빈도수 기반으로 주요 단어를 잡아주는 방법을 Counter Vectorizer이라 하며, 이 방법은 의미 없는 단어에 대한 페널티를 주어 중요한 단어를 감지한다는 것이 주요 핵심입니다.

 

TF-IDF의 장단점

장점은 직관적 해석 가능합니다. 또 단어의 상대적 중요성을 고려하여 추천할 수 있습니다. 단점은 대규모 데이터에서 메모리 문제 발생 가능성이 있습니다. 높은 차원과 희소한 데이터 형태를 가지기 때문입니다. 이런 벡터를 sparse vector라고 합니다. 통계 기반 방법인 TF-IDF는 대규모 말뭉치를 다룸으로써 발생하는 메모리 문제가 발생합니다. 10만개 문서가 있다면 등장한 모든 단어를 추출한 후 매트릭스로 만들 때 이 큰 행렬을 처리하기 매우 어렵습니다. GPU 같은 병렬 처리를 기대하기 어렵습니다.

 

Word2Vec과의 비교

이러한 TF-IDF의 단점을 극복하기 위해 Word2Vec 방식이 등장했습니다. Word2Vec은 word to vector라는 이름을 줄인 것이며 말 그대로 단어를 벡터로 표현하는 기법의 알고리즘입니다. 원-핫벡터의 Sparse matrix가 가지는 단점을 보완하여 저차원으로 벡터를 매핑하는 것입니다. 주변 단어가 주어졌을 때 중심 단어를 추측하는 작업을 수행하여 단어 간 유사도를 반영한 임베딩을 제공하는 방식입니다. 즉 "비슷한 위치에 등장하는 단어들은 비슷한 의미를 가진다" 가정에 기반하여 학습을 합니다. 주변 단어를 가지고 중심 단어를 예측하는 방식으로 학습하였기 때문에 임베딩된 단어 벡터를 통해 단어 간 유사도를 계산할 수 있습니다. 예를 들어, "나는 (사과/수박)를 좋아한다"에서 사과 또는 수박이 '나는'과 '좋아한다' 사이에 위치하고 있습니다. 이렇게 위치를 기반으로 어떤 단어가 올지를 예측하고, 사과와 수박이 비슷한 의미를 띠게 되는 방식으로 추론하는 방식입니다. word2vec의 장점은 대규모 말뭉치 다루기 용이하다는 것입니다. TF IDF가 가진 Sparse한 데이터 문제를 해소할 수 있습니다. 잘못 예측 시 학습을 통한 모델 개선도 가능하다는 이점이 있습니다. Word2Vec 학습 방법에는 CBOW과 Skip-gram 모델이 두 가지가 있습니다. CBOW 모델과 Skip-gram 모델 중 주로 Skip-gram을 활용하는 편입니다. 이 방법은 주변 단어를 가지고 중심 단어를 예측하는 방식으로 학습하는 것입니다. 이렇게 TF-IDF의 sparse 한 데이터 표현 방식에서 저차원으로 매핑하여 의미를 추론하는 알고리즘이 계속 나왔습니다. Word2Vec 외에도 Glove라는 알고리즘이 있습니다. 유사하게 고차원에서 저차원으로 단어를 매핑하는 기술입니다.