"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]
- Sentence1 : "John really really loves this movie"
이렇게 one hot vector들을 더해서 문장과 문서 단위도 표현 가능한데, 이러한 벡터를 bag-of-words 벡터라고 한다. 이를 bag-of-words라고 부르는 이유는 구성하고 있는 단어들을 가방에 순차적으로 정리한 후 가방의 단어들을 one hot vector를 활용하여 숫자로 변환하는 방법을 사용하기 때문이다.
Reference
- 부스트코스, 자연어 처리의 모든 것, 주재걸 교수님