Spicy Tuna Sushi
본문 바로가기
부스트캠프 AI Tech

Bag-of-Words, NaiveBayes Classifier

by 말린malin 2022. 10. 11.

<Bag-of-Words>

Step 1. Constructing the vocabulary containing unique words

Example sentences: “John really really loves this movie“, “Jane really likes this song”
Vocabulary: {“John“, “really“, “loves“, “this“, “movie“, “Jane“, “likes“, “song”}

-중복 단어 제거

 

- 8개의 단어이므로 8차원 벡터 공간을 설정하여 해당 차원의 값만을 1, 나머지는 0으로 설정하여 나타낼 수 있음

- 단어 의미에 상관 없이 동일 관계를 가진 벡터로 설정

- 이러한 one-hot vector들을 더한 것으로 문장/문서를 표현할 수 있음. 이를 Bag-of-Words라고 부름

- 단어장 속에서 존재하는 word별로 가방을 준비하고, 문장에서 나타난 단어들을 순차적으로 그에 해당하는 가방에 넣어준 후, 최종적으로 가방에 들어간 단어의 수를 세어 최종 벡터로 나타낸다고 생각할 수 있기 때문

 

 

<NaiveBayes Classifier>

ex) 정해진 문서 d를 정치, 경제, 문화, 스포츠 4개 중 하나로 분류하는 경우 c=4

가장 높은 확률을 가지는 c를 택하는 방식

- 문서 d는 word 1~n까지의 동시 사건으로 볼 수 있음

- 클래스 c가 고정되어 있는 경우 각 단어가 등장할 확률은 독립으로써 곱한 형태로 나타낼 수 있음

 

- 문서가 주어지기 이전 각 클래스가 나타날 확률과 특정 클래스가 고정되어 있을 때 각 단어가 나타날 확률을 추정함으로써 NaiveBayes Classifier가 필요로 하는 parameter를 추정할 수 있음

 

예시

- 가장 확률값이 큰 class로 분류 예측값을 내어주게 됨

- Test 문장에서 특정 단어가 학습 데이터에 없다면 다른 단어가 아무리 밀접한 관련이 있다 하더라도 0을 곱하게 됨으로써 그 클래스로 분류하는 것이 불가능해짐

 

<실습>

<NaiveBayes Classifier>
1. 주어진 데이터 전처리
2. NaiveBayes 분류기 모델을 구현, 학습 데이터로 이를 학습
3. 간단한 test case로 결과를 확인

 

- 긍정( 1 ), 부정( 0 ) 2가지 class로 구성

- KoNLPy 패키지에서 제공하는 Twitter(Okt) 토큰화기를 사용하여 토큰화

- 토큰화된 단어들을 숫자로 변환할 수 있도록 학습 자료의 모든 단어들을 vocaburary에 추가하고, 단어를 숫자로, 숫자를 단어로 바꾸는 객체 만들기

 

- 모델 구현

- 모델 학습

- 테스트

 

<말뭉치 정돈 및 텍스트 전처리>

 

한국어 말뭉치 전처리 모듈

- 한나눔(Hannanum), 크마(Kkma) 모듈을 이용하여 한국어 문장의 품사 분석 진행

- 카카오에서 만든 CNN (Convolutional Neural Network) 기반 오픈소스 한국어 형태소 분석기, Khaiii 사용

- 부적절한 띄어쓰기가 포함된 문장을 전처리하기 위한 심층학습을 이용한 전처리기들이 두각을 드러내고 있음

- 그 중 하나인 PyKoSpacing 사용! RNN (Recurrent Neural Network) 중 하나인 Gated Recurrent Unit (GRU)와 CNN을 사용하여 모델을 구성 및 학습한 전처리기임

- 네이버 한국어 맞춤법 검사기를 기반으로 하여 제작된 Py-Hanspell을 사용

 

정규 표현식 (Regular Expression)

댓글