[GD-L2]단어 빈도 이용한 벡터화(BoW, DTM, TF-IDF)

데이터 여행자·2021년 4월 8일
0
post-custom-banner

벡터화 (Vectorization)

텍스트를 숫자 벡터로 변환(전처리 과정 중 하나)

  • 벡터화의 방법
    (1) 통계와 머신 러닝을 활용한 방법(오늘 배울 것)
    (2) 인공 신경망을 활용하는 방법벡터화 (Vectorization): 텍스트를 숫자 벡터로 변환(전처리 과정 중 하나)

단어 빈도를 이용한 벡터화: BoW, DTM, TF-IDF

Bag of Words

자연어 처리(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

  • 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

  • DTM의 2가지 한계점
  1. DTM에서 문서와 단어의 수가 늘어나면 행과 열은 대부분 0이 된다. 이는 저장 공간 차원에서 낭비이며, 차원의 저주라는 문제를 일으킨다.
  2. 단어의 빈도에만 집중하기 때문에 중요한 단어와 중요하지 않은 단어의 구분이 어렵다. (예: 불용어 'the'는 어느 문서에도 자주 등장한다. 그렇다면 모든 문서가 유사한가? NO!)

TF-IDF

TF-IDF(Term Frequency-Inverse Document Frequency)는 모든 문서에서 자주 등장하는 단어(예: 불용어)는 중요도가 낮다고 판단하고, 특정 문서에서만 자주 등장하는 단어는 중요도가 높다고 판단해 가중치를 준다. 그러나 TF-IDF가 DTM보다 성능이 뛰어나지는 않다.

TF-IDF는 우선 DTM을 만든 후 TF-IDF의 가중치를 DTM에 적용하는 방식으로 사용한다.

TF-IDF 계산

y: 문서, x: 단어, TF: 긱 문서에 등장하는 단어의 빈도, df: x(단어)를 포함하는 문서의 수, N: 총 문서의 갯수, IDF: log(Ndf)log(\frac {N}{df})

  • 계산

    Question. 전체 문서의 수가 5개. 단어 'like'가 문서2에서 200번, 문서 3에서 300번 등장했다고 하자. 다른 문서에서 단어 'like'는 등장하지 않음

  • 문서2에서의 'like'의 TF-IDF = 200 x log(52\frac {5}{2}) = 183.258146375

  • 문서3에서의 'like'의 TF-IDF = 300 x log(52\frac {5}{2}) = 274.887219562

각 문서에서의 TF-IDF(각 단어의 TF-IDF를 구하고 그것을 행렬로 표현) 행렬을 구하고 코사인 유사도를 통해 각 문서의 유사도를 계산한다.

  • TF-IDF의 장점: 문서간 유사도를 구하기 쉽다. 중요한 단어의 점수를 유지하고, 여러 문서에 자주 등장하지만 중요하지 않은 단어의 점수는 낮춰줌.
  • 단점: 단어 기반(단어간 유사도는 보지 않음), 문서의 주제를 알 수 없음. 다른 단어지만 같은 의미를 가진 단어를 다루지 못함.(다른 단어로 쓰인 같은 의미의 문장의 유사도는 0)
  • 해결방안: LSA, Word Embedding(Word2Vec, Glove), ConceptNet
post-custom-banner

1개의 댓글