텍스트를 숫자 벡터로 변환(전처리 과정 중 하나)
자연어 처리(Natural Language Processing)나 정보 검색(Information Retrieval)에서 쓰이는 매우 간단한 단어 표현 방법으로, 문서 내의 단어들의 분포를 보고 이 문서의 특성을 파악하는 기법이다.
텍스트를 단어 단위로 토큰화를 한 후 순서를 무시한다. BoW는 중복을 제거하지 않고 단어의 빈도 정보를 보존한다.
# 문서1
doc1 = 'John likes to watch movies. Mary likes movies too.'
# BoW
BoW1 = {"John":1, "likes":2, "to":1, "watch":1, "movies":2, "Mary":1, "too":1}
# 문서2
doc2 = 'Mary also likes to watch football games.'
# BoW
BoW2 = {"Mary":1, "also":1, "likes":1, "to":1, "watch":1, "football":1, "games":1}
BoW에서 각 key는 단어, 각 value는 각 단어가 주어진 문서에 등장한 횟수 이다. 문서 내 단어의 순서는 중요하지 않다.
DTM(Document-Term Matrix) : 여러 문서의 Bag of Words를 하나의 행렬로 구현한 것, 즉 각 문서의 등장한 단어의 빈도수를 하나의 행렬로 통합시킨 것이다. 문서를 행, 단어를 열로 가지는 행렬.
TDM(Term-Document Matrix): 행을 단어로, 단어를 행으로 가지는 행렬
DTM의 각 행을 문서 벡터, 열을 단어 벡터 라고 부른다. 문서의 수가 많아질수록 통합 단어장의 크기도 커지고, DTM의 문서 벡터와 단어 벡터 대부분의 값이 0이 된다.
DTM을 사용해 각 문서를 비교하고 각 문서 간 유사도를 구할 수 있다.
문서1 : I like dog
문서2 : I like cat
문서3 : I like cat I like cat
TF-IDF(Term Frequency-Inverse Document Frequency)는 모든 문서에서 자주 등장하는 단어(예: 불용어)는 중요도가 낮다고 판단하고, 특정 문서에서만 자주 등장하는 단어는 중요도가 높다고 판단해 가중치를 준다. 그러나 TF-IDF가 DTM보다 성능이 뛰어나지는 않다.
TF-IDF는 우선 DTM을 만든 후 TF-IDF의 가중치를 DTM에 적용하는 방식으로 사용한다.
y: 문서, x: 단어, TF: 긱 문서에 등장하는 단어의 빈도, df: x(단어)를 포함하는 문서의 수, N: 총 문서의 갯수, IDF:
계산
Question. 전체 문서의 수가 5개. 단어 'like'가 문서2에서 200번, 문서 3에서 300번 등장했다고 하자. 다른 문서에서 단어 'like'는 등장하지 않음
문서2에서의 'like'의 TF-IDF = 200 x log() = 183.258146375
문서3에서의 'like'의 TF-IDF = 300 x log() = 274.887219562
각 문서에서의 TF-IDF(각 단어의 TF-IDF를 구하고 그것을 행렬로 표현) 행렬을 구하고 코사인 유사도를 통해 각 문서의 유사도를 계산한다.