어떤 단어를 vector 로 표현하고 싶음.
(숫자의 나열로 표현)
벡터로 표현 가능하면?
단어의 의미
ongchoi 를 몰라도,, 비슷한 시금치... 등과 비슷하게 등장함..
그러면 Ongchoi가 시금치와 비슷할 거다.. 라고 유추할수 있음
-> 이 과정을 컴퓨터도 할 수 있게 하자..
context word의 정보를 vector 에 담자.
BoW를 이용해 vector semantic 을 담아보자.
4dimention 으 이해하기 위해 일단 2차원으로 floating 해놓음
fool 이랑 wit는 어쨌든 비슷한 위치에 존재하게 됨
Document 기준으로 단어의 등장 횟수를 세는 방식은, 자주 등장하지 않더라도 의미 있는 단어를 충분히 반영하지 못하는 한계가 있다. 반면, window 기반의 context word들과의 동시 등장 빈도(co-occurrence) 를 바탕으로 벡터를 구성하면, 적게 등장한 단어라도 문맥상 중요한 의미를 가질 수 있어 더 풍부한 표현이 가능하다.
context size(window size)을 몇으로 정해야하는가가 중요.
1 * 1.76
idf 로그 취해서 계산
그리고 smoothing도 해줌
sparse 한 결과를 낳는다
벡터를 가지고 왔는데 0이 너무 많은 문제 → 0값은 무의미 하지 않나?
Sparse vector = 대부분의 원소가 0인 벡터
-> 많은 ML 모델에서 입력 벡터로 무난하게 사용 가능
특히 데이터가 작거나 딥러닝을 쓰기 어려운 상황에서 아주 강력한 베이스라인
TF-IDF는 대부분의 벡터 값이 0인 희소(sparse) 벡터를 생성하므로 메모리와 계산 비용 측면에서 문제가 생길 수 있다.
그럼에도 불구하고, 단어 중요도를 반영하는 간단하고 효과적인 벡터화 방법으로, Logistic Regression이나 Naive Bayes 같은 전통적 머신러닝 알고리즘과 자주 결합되어 사용된다.
그러나..
TF-IDF는 단어가 어떤 문맥에서 사용되었는지 고려하지 않고,
문서 전체 통계만 가지고 벡터를 만듦
apple 이 회사이름인지 사과인지 고려 x
단순하게 특정 단어가 한 문서 안에서 몇 번 나왔는지 (TF) 그 단어가 전체 문서에서 얼마나 희귀한지 (IDF) 만 계산에 이용함..
결국 TF-IDF는 단어의 의미를 주변 단어(문맥)와 무관하게 고정된 벡터로 표현하기 때문에, 문맥에 따라 의미가 달라지는 단어들을 구분하지 못한다라고 할 수 있음..
"TF-IDF represents words as fixed vectors regardless of the surrounding context, so it cannot distinguish between words that have different meanings depending on the context."