Study/자연어처리

1. Bag-of-Words(BoW)

우당탕탕코린이 2024. 2. 13. 17:55

 

 

"John really really loves this movie", "Jane really likes this song"

 

위와 같은 문장들이 있다고 가정하자.

 

이 문장들을 표현하기 위해서 우리는 다음과 같은 step들을 거칠 수 있다.

 

  • step1 : unique한 단어들을 모아 vocabulary 형태로 저장한다.
    • Vocabulary : { "John" , "really", "this", "movie", "Jane", "likes", "song"}
  • step2 : unique한 단어들을 one-hot vector들로 encoding한다.
    • vocabulary의 단어들을 일종의 categorical 변수들로 취급할 수 있다.
    • 컴퓨터가 자연어로 된 categorical 변수들을 이해하도록 하기 위해 해당 변수들을 one-hot vector들로 변환한다.
    • John : [1 0 0 0 0 0 0 0]
    • really : [0 1 0 0 0 0 0 0]
    • loves : [0 0 1 0 0 0 0 0]
    • this : [0 0 0 1 0 0 0 0]
    • movie : [0 0 0 0 1 0 0 0]
    • Jane : [0 0 0 0 0 1 0 0]
    • likes : [0 0 0 0 0 0 1 0]
    • song : [0 0 0 0 0 0 0 1]
    • 8차원의 좌표 공간에 단어를 표현.
    • 이 벡터 공간에서 모든 단어들간의 거리는 루트2가 되고, 모든 단어들 간의 cosine similarity는 0이 된다.
    • 즉, 단어의 의미와 관계 없이 모두가 동일한 의미를 가졌다고 가정하고 인코딩을 진행하는 것이다.
  • Result
    • Sentence1 : "John really really loves this movie"
      • John + really + really + loves + this + movie 
      • = [1 2 1 1 1 0 0 0]
    • Sentence2 : "Jane really likes this song"
      • Jane + really + likes + this + song
      • = [0 1 0 1 0 1 1 1]

이렇게 one hot vector들을 더해서 문장과 문서 단위도 표현 가능한데, 이러한 벡터를 bag-of-words 벡터라고 한다. 이를 bag-of-words라고 부르는 이유는 구성하고 있는 단어들을 가방에 순차적으로 정리한 후 가방의 단어들을 one hot vector를 활용하여 숫자로 변환하는 방법을 사용하기 때문이다.

 

 

 

 

 

 

 

Reference

  • 부스트코스, 자연어 처리의 모든 것, 주재걸 교수님