Bag of Words란 단어들의 순서는 전혀 고려하지 않고, 단어들의 출현 빈도(frequency)에만 집중하는 텍스트 데이터의 수치화 표현 방법이다. 어떤 문서에서 등장하는 단어들을 전부 가방에 넣는다. 만약 특정 단어가 n번 등장하면 가방에는 그 단어가 n개 존재하게 된다. 가방을 벡터로 표현했을 때, 우리는 이 벡터를 Bag-of-Words(BoW)라 부른다.
유니크한 단어들을 모아서 사전에 등록한다.
예를 들어 "John really really loves this movie","Jane really likes this song." 문장이 있다면 Vocabulary에는 {"John","really","loves","this","movie","Jane","likes","song"}이 등록된다.
이때, 각 단어들과의 유클리드 거리(Euclidean distance)는 모두 동일하게 이고, 코사인 유사도(cosine similarity)는 0이다.
-> 단어의 의미와는 상관없이 모든 단어들이 동일한 관계로 표현된다.
이제 BoW로 나타낸 문서를 어떤 클래스(또는 카테고리)로 분류하는 NaiveBayes Classifier에 대해 알아보자
MAP : Maximum a posteriori(최대 사후 확률)
2->3번째줄: d라는 문서는 이 문제에서 고정된 문서 => P(d)는 상수값이므로 argmax연산에서 무시 가능
(by conditional independence assumption)
: c라는 클래스가 고정되었을 떄, d라는 문서가 나타날 확률
문제가 아래 그림과 같이 주어졌을 때, 5번째 문서가 어느 클래스에 속하는지 묻는 예제이다.
우선 를 구해서 비교해야 할 것이다.
로 표현가능하고 NLP도 마찬가지이다.
여기서 이다.
그리고 각 를 구하면 아래 그림과 같다.
최종적으로 위에 표현된 식을 활용하여 MAP을 계산하면 다음과 같다.
따라서, "Classification task uses transformer"라는 문서는 NLP클래스에 속한다고 답할 수 있다.
위 예제뿐만 아니라 NaiveBayes Classifier는 클래스가 3개 이상인 문제에서도 확장되어 분류가 가능하지만, 특정 단어가 Train 데이터에는 포함되어있지 않고 Test데이터에만 포함되어있는 경우에는 이 되므로 문서가 클래스에 속할 확률이 0으로 계산되는 치명적인 단점이 있다.