Bag of Words & Word Embedding

Bag of Words

딥러닝 기술이 본격적으로 적용되기 전에 많이 활용되었다고 한다.

  1. 문장에 나타나는 단어 집합을 만든다.

  2. 사실상 범주형 변수로 나타나게 되는 단어 집합을 one-hot vector로 변환한다.
    • 어떤 단어쌍이든 유클리드 거리는 2**(1/2)
    • cosine 유사도는 0이다. 즉, 의미 상관 없이 모두가 동일한 관계이다.
  3. 위의 과정을 통해 텍스트 데이터를 vector의 합으로 표현할 수 있다. -> Bag of Words

  4. NaiveBayes Classifier : Bag of Words로 나타낸 문서를 정해진 카테고리나 클래스로 분류

결국 다음과 같이 표현할 수 있다.
(각 클래스가 나타날 확률) * (그 클래스에서 특정 단어가 나타날 조건부 확률들의 모든 곱)

다만 위와 같이 독립적이라 가정하고 그냥 다 곱해주니까 어느 한 부분이라도 0이면 최종 결과도 0이되는 현상이 발생한다.


Word Embedding : Word2Vec, GloVe

단어를 특정한 차원으로 이루어진 공간 상의 벡터로 표현한다. 이때 유사 단어라면 서로 가까운 위치의 벡터를 가진다.

Word2Vec

주변 단어를 기반으로 그 단어를 알 수 있다라는 것에 착안한 아이디어로서 가장 많이 쓰이는 알고리즘이다. 슬라이딩 윈도우 기법으로 중심 단어와 그 좌우 단어로 하나씩 단어쌍을 만들게 된다….알고리즘 공부할 때 쓰던 슬라이딩 윈도우를 만나니 반갑다.

  1. 우선 단어 집합의 크기만큼 차원을 가지는 one-hot vector로 표현한다.
  2. 단어를 중심으로 앞뒤에 위치한 단어로 각각 입출력 단어쌍을 만든다.
  3. 내적에 기반한 유사도가 최대한 커지도록 weight update 실시.
  4. 이를 통해 단어 간의 관계를 파악할 수 있을 것이다.

결국 가까운 단어일수록 벡터 값이 비슷하고, 당연히 내적하면 값이 커진다.

GloVe(Global Vectors for word representation)

하나의 윈도우 내에서 단어쌍이 동시에 몇 번 등장했는지 미리 계산한다. 따라서 시간복잡도가 향상된다.

데이터가 적어도 좋다..추천시스템에서도 사용.