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

새소식

AI/NLP

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

  • -

 

 

Bag-of-Words

 

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

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

 

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

 

This is the most powerful device.That is the strongest equipment.

 

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

 

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

 

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

 

this:[1 0 0 0 0 0 0 0 0]is:[0 1 0 0 0 0 0 0 0]the:[0 0 1 0 0 0 0 0 0]most:[0 0 0 1 0 0 0 0 0]powerful:[0 0 0 0 1 0 0 0 0]device:[0 0 0 0 0 1 0 0 0]that:[0 0 0 0 0 0 1 0 0]strongest:[0 0 0 0 0 0 0 1 0]equipment:[0 0 0 0 0 0 0 0 1]

 

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

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

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

 

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

 

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

 

"That is the strongest device"=[0 1 1 0 0 1 0 1 0]

 

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개의 각각의 분류에 속할 확률을 나이브 베이즈 정리를 사용하여 구하는 과정은 다음과 같다.

 

CMAP=argmaxcCP(c|d)=argmaxcCP(d|c)P(c)P(d)=argmaxcCP(d|c)P(c)

 

위의 식에서 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가 나타날 확률로 해석된다.

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

 

P(d|c)P(c)=P(w1,w2,,wn|c)P(c)=P(c)wiWP(wi|c)

 

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

 

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

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

 

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

글 주소를 복사했습니다

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