더 이상 tistory 블로그를 운영하지 않습니다. glanceyes.github.io에서 새롭게 시작합니다.

새소식

AI/NLP

Bag-of-Words와 나이브 베이즈 분류

  • -

 

 

Bag-of-Words

 

텍스트 마이닝 분야에서 딥 러닝 기술이 적용되기 이전에 자주 활용되었던 간단한 기법이다.

단어장에 등록된 단어가 어떠한 문장에 얼마나 등장했는지를 벡터(vector)로 표현하며, 단어장을 구성하는 과정을 필요로 한다.

 

먼저 텍스트 데이터 셋에서 unique한 단어들만 모아서 단어장(사전)을 구축한다.

 

$$ \text{This is the most powerful device.}\\ \text{That is the strongest equipment.} $$

 

$$ \text{단어장(Vocabulary)}: \text{{this, is, the, most, powerful, device, that, strongest, equipment}} $$

 

중복된 단어를 제거하고 최종적으로 단어장에는 9개의 단어를 등록한다.

 

각 단어를 총 8개의 단어 중 하나가 될 수 있는 범주형 변수로 인코딩하는데, 이때 자주 사용하는 방법이 one-hot encoding이다.

 

$$ \begin{align} &\text{this}: \text{[1 0 0 0 0 0 0 0 0]} \qquad \text{is}: \text{[0 1 0 0 0 0 0 0 0]}\\ &\text{the}: \text{[0 0 1 0 0 0 0 0 0]} \qquad \text{most}: \text{[0 0 0 1 0 0 0 0 0]}\\ &\text{powerful}: \text{[0 0 0 0 1 0 0 0 0]} \qquad \text{device}: \text{[0 0 0 0 0 1 0 0 0]}\\ &\text{that}: \text{[0 0 0 0 0 0 1 0 0]} \qquad \text{strongest}: \text{[0 0 0 0 0 0 0 1 0]}\\ &\text{equipment}: \text{[0 0 0 0 0 0 0 0 1]} \end{align} $$

 

단어장에 있는 단어가 총 9개 있으므로, 차원이 9인 벡터 공간을 설정하여 나타낼 수 있다.

이때, 단어를 나타내는 모든 벡터 간의 거리는 $\sqrt{2}$이고, cosine 유사도는 0이다.

이는 단어의 의미에 상관이 없이 모두가 동일한 관계를 가지도록 하는 것이다.

 

여러 단어로 구성되어 있는 문장, 또는 다수의 문장으로 구성된 하나의 문서에 경우에도 word-level의 one-hot vector를 확장해서 나타낼 수 있다.

 

이는 각 문장 또는 문서에 속한 단어들의 one-hot vector를 더하는 방식으로 표현 가능하며, 이를 bag-of-words vector라고 한다.

 

$$ \begin{align} \text{"That is the strongest device"} = \text{[0 1 1 0 0 1 0 1 0]} \end{align} $$

 

Bag-of-Words라고 불리는 이유는 단어장에 존재하는 각 단어별로 가방을 준비하고 특정 문장에서 나타난 단어가 나타날 때마다 순차적으로 각 단어 가방에 넣어준 후, 최종적으로 각 가방에 들어간 단어의 수를 세는 것으로 볼 수 있어서다.

 

 

 

Naive Bayes Classifier with Bag-of-Words

 

Naive Bayes Classifier란?

 

Bag-of-Words로 나타낸 문서 벡터를 정해진 카테고리 또는 클래스 중 하나로 분류하는 기법이다.

 

임의의 문서가 분류될 수 있는 클래스가 총 $C$개 있다고 가정한다. 예를 들어, 뉴스 기사를 분류할 때 정치, 사회, 연예, 과학, 스포츠인 5개의 분류를 사용한다고 하면 클래스 $C$를 5라고 볼 수 있다.

 

 

Naive Bayes Classifier를 사용하는 방법

 

먼저 나이브 베이즈 정리에 관한 자세한 내용은 다음 링크를 참고하면 된다.

https://glanceyes.tistory.com/entry/나이브-베이즈-분류Naive-Bayes-Classification

 

나이브 베이즈 분류(Naive Bayes Classification)

기계 학습(Machine Learning)을 위한 나이브 베이즈 정리와 나이브 베이즈 분류 나이브 베이즈 정리 베이즈 정리란? 두 확률 변수의 사전 확률과 사후 확률 사이의 관계를 나타내는 정리 이 용어의 정

glanceyes.tistory.com

 

요약하면, 나이브 베이즈 정리는 사전확률과 사후확률 간의 관계를 나타낸 것이다.

 

어떤 문서 $d$가 주어졌을 때, 이 문서가 $C$개의 각각의 분류에 속할 확률을 나이브 베이즈 정리를 사용하여 구하는 과정은 다음과 같다.

 

$$ \begin{align} C_{MAP} &= \underset{c\in C}{\text{argmax}}P(c|d)\\ &= \underset{c\in C}{\text{argmax}}\frac{P(d|c)P(c)}{P(d)}\\ &= \underset{c\in C}{\text{argmax}}P(d|c)P(c) \end{align} $$

 

위의 식에서 MAP는 "Maximum A Posterori"의 약자이며, 가장 높은 확률로 속할 클래스를 구하는 것으로 볼 수 있다.

또한 $P(d)$는 어떠한 문서가 뽑힐 확률을 의미하는데, 위의 예시에서는 문서 $d$가 고정되어 있는 상황이므로 이를 상수로 고려하고 $P(d)$를 무시해도 된다.

나이브 베이즈 정리에 의해 $P(c|d)$ 값이 가장 큰 $c$가 결과적으로 문서 $d$가 가장 높은 확률로 속할 클래스인 것이다.

 

$P(c|d)$는 $P(d|c)P(c)$와 같은데, $P(d|c)$는 클래스 $c$에서 문서 $d$가 나타날 확률로 해석된다.

문서 $d$가 $n$개의 단어로 구성된다면, 어떤 클래스 $c$에서 문서 $d$가 등장한다는 것은 문서 $d$를 구성하는 각 단어가 클래스 $c$에서 동시에 등장한다는 것과 같으므로 $P(d|c)P(c)$ 식은 다음과 같이 풀어 쓸 수 있다.

 

$$ P(d|c)P(c) = P(w_1, w_2, \dots, w_n | c)P(c) = P(c) \prod_{w_i \in W} P(w_i|c) $$

 

각 단어가 등장할 확률은 서로 독립이므로 동시에 등장하는 것을 계산하려면 각 클래스별 각 단어의 등장 확률을 모두 곱하면 된다.

 

그러나 특정한 클래스 내에서 문서의 특정 단어가 등장하지 않을 경우 그 문서가 해당 클래스에 속할 확률은 0으로 계산되므로 다른 단어가 그 클래스와 연관이 많다고 하더라도 그 클래스에 속하지 않는다고 예측해 버리는 문제가 있다.

그리고 위에서는 예시를 통해 계산을 직접 하는 과정으로 도출했지만, 수학적으로 $P(w_i|c)$는 어떠한 파라미터의 확률분포에서 나온 것인지를 MLE(Maximum Likelihood Estimation)로도 추정할 수 있다.

 

출처
1. 네이버 커넥트재단 부스트캠프 AI Tech NLP Track 주재걸 교수님 기초 강의
Contents

글 주소를 복사했습니다

부족한 글 끝까지 읽어주셔서 감사합니다.
보충할 내용이 있으면 언제든지 댓글 남겨주세요.