소개
Bag of Words란 단어들의 순서는 전혀 고려하지 않고, 단어들의 출현 빈도에만 집중하는 텍스트 데이터의 수치화 표현 방법이다.
예시
세개의 문장이 있다고 가정하고 위의 문장을 Bag of Words로 표현하면 다음과 같다.
- sentence_list = [‘오늘은 즐거운 하루입니다’, ‘오늘은 비가 올 것 같은데 내일은 비가 안 왔으면 좋겠네요.’, ‘내일도 비가 올 것 같아요’ ]
위 세 문장의 전체 단어수는 14개이다.
- ( 오늘은 / 즐거운 / 하루입니다 / 비가 / 올 / 것 / 같은데 / 내일은 / 안 / 왔으면 / 좋겠네요 / 내일도 / 것 /같아요 )
세 문장의 단어 사전은 아래와 같다.
- [ 오늘은 : 1 / 즐거운 : 2 / 하루입니다 : 3 / 비가 : 4 / 올 : 5 / 것 : 6 / 같은데 : 7 / 내일은 : 8 / 안 : 9 / 왔으면 : 10 / 좋겠네요 : 11 / 내일도 : 12 / 것 : 13 / 같아요 : 14 ]
위의 세 문장을 Vector로 표현하면 다음과 같다.
1 1 1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 2 1 1 1 1 1 1 1 0 0 0
0 0 0 1 1 0 0 0 0 0 0 1 1 1
한 문장내에서 중복되는 단어는 카운트하여 표시해준다.
생각
사실 BoW를 공부하면서 가장 이해가 안 되었던 것은 One hot encoding과의 차이점이였다.
- 빈도 수 카운트
- 차원 수
첫번째, one hot encoding은 중복 단어를 카운팅하지 않는다.
즉, 0과 1로만 표현한다.
하지만 BoW는 중복되는 단어를 카운트하기 때문에 빈도수를 측정할 수 있다.
두번째, one hot encoding으로 문장을 표현하면 n x m 과 같이 2차원으로 표현된다.
( n은 문장에 있는 단어 개수 / m은 사전에 있는 단어의 개수 )
BoW는 1 x m 과 같이 1차원으로 표현된다.
( m은 사전에 있는 단어의 개수 이다. )