슬기로운 연구생활

3-2. BoW + NB + Komoran 본문

프로젝트 : 영화리뷰 분류

3-2. BoW + NB + Komoran

vhrehfdl 2019. 7. 25. 14:12

[1] 서론

- Komoran을 사용하여 데이터 전처리를 적용한 후 Naive Bayes 학습 모델을 만든다.

- 전체 코드와 데이터는 아래의 github에 올려두었다.

https://github.com/vhrehfdl/Blog/blob/master/movie_review_classification/model/BoW%2BNB%2BKomoran.py

 

- /data/data_preprocessing.py 에서 Konlpy의 Komoran을 사용해 전처리를 진행했다.

 

- /model/BoW+NB+Komoran.py 에서 학습을 진행했다.

[2] 실험1

- 전처리 단계에 stemming 적용

ex) "내시간 돌려내" 라는 문장이 있으면 "내 시간 돌리 어 내 어"와 같이 원형복원이 된다. 

원형복원을 실시하면 "좋았습니다"와 "좋아요"라는 동사가 "좋다"라는 동사로 하나로 인식이 되기 때문에 성능이 올라갈 것으로 추측했다.

 

[2-1] DataSet

- Train Data ( train_komoran1.csv )

긍정 리뷰 : 93,042 / 부정 리뷰 : 275,253

- Test Data ( validation_komoran1.csv )

긍정 리뷰 : 10,337 / 부정 리뷰 : 30,584

- 평점이 1점 ~ 3점인 영화리뷰를 부정 리뷰로 분류했고 10점인 리뷰를 긍정 리뷰로 분류했다.

 

[2-2] Text To Vector

텍스트 데이터를 Vector로 변환한다.

[3] BoW + NB 부분과 동일하게 진행하였고 BoW에 대한 설명은 여기에서 자세하게 진행하였다.

기존에 [3] BoW + NB 에서 Vector의 차원수는 602,884 이였다.

실험1 의 Vector의 차원수는 111,249 이다.

[2-3] Naive Bayes

( 그림1 ) 실험1 결과

[3] BoW + NB 보다 정확도가 낮아졌다.

실험1 : 0.86

[3] 실험2

- 형태소 분석을 실시한 후 일반명사(NNG), 고유명사(NNP), 대명사(NP), 수사(NR), 동사(VV), 형용사(VA), 부정 지정사(VCN), 긍정 지정사(VCP)만 사용하였다.

 

ex) "내시간 돌려내" 라는 문장이 있으면 "내 시간 돌리 어 내 어"와 같이 원형복원이 된다. 

원형복원을 실시하면 "좋았습니다"와 "좋아요"라는 동사가 "좋다"라는 동사로 하나로 인식이 된다.

 

 

[3-1] DataSet

train_komoran2.csv 와 validation_komoran2.csv를 사용

[3-2] Text To Vector

실험1 의 Vector의 차원 : 111,249

실험2 의 Vector의 차원 : 38,561

[3-3] Naive Bayes

( 그림2 ) 실험2 결과

실험1 : 0.8620512695

실험2 : 0.8491972336

[4] 실험3

- 실험3 에서는 형태소 분석을 실시한 후 동사(VV), 형용사(VA)만 뽑아내어 사용했다.

 

[4-1] Text To Vector

실험1 의 Vector의 차원 : 111,249

실험2 의 Vector의 차원 : 38,613

실험3 의 Vector의 차원 : 2,675

확실히 동사랑 형용사만 사용하다 보니 단어의 수가 많이 줄어들었다.

 

[4-2] Naive Bayes

( 그림3 ) 실험3 결과

실험1 : 0.8620512695

실험2 : 0.8491972336

실험3 : 0.8001270741

[5] 실험4

실험4 에서는 형태소 분석을 실시한 후 일반 명사(NNG), 고유 명사(NNP)만 뽑아내었다.

 

[5-1] Text To Vector

실험1 의 Vector의 차원 : 111,249

실험2 의 Vector의 차원 : 38,613

실험3 의 Vector의 차원 : 2,675

실험4 의 Vector의 차원 : 36,113

[5-2] Naive Bayes

( 그림4 ) 실험4 결과

실험1 : 0.8620512695

실험2 : 0.8491972336

실험3 : 0.8001270741

실험4 : 0.8243933432

[6] 실험5

- 실험5 에서는 형태소 분석을 실시한 후 일반 명사(NNG), 고유 명사(NNP)만 뽑아내었다. 

그리고 한 단어인 글자는 제외시켰다.

 

ex) "주", "좋" 와 같이 길이가 한 단어인 글자는 제외시켰다.

[6-1] Text To Vector

실험1 의 Vector의 차원 : 111,249

실험2 의 Vector의 차원 : 38,613

실험3 의 Vector의 차원 : 2,675

실험4 의 Vector의 차원 : 36,113

실험5 의 Vector의 차원 : 19,848

[6-2] Naive Bayes

( 그림5 ) 실험5 결과

실험1 : 0.8620512695

실험2 : 0.8491972336

실험3 : 0.8001270741

실험4 : 0.8243933432

실험5 : 0.7654505021

[7] 생각

- 전처리를 했는데도 불구하고 기존의 전처리 안 했을 때보다 성능이 더 떨어졌다. 

이거 Vector의 차원수가 적어질 수록 ( = 단어가 적어질 수록 ) 성능이 떨어지는 경향을 보였다. 

내 생각에는 불필요한 단어 "을", "를" 과 같은 조사를 제외시키면 NB 계산식 흐름상 좋아질 것이라 생각했는데 그게 아닌가보다.

 

'프로젝트 : 영화리뷰 분류' 카테고리의 다른 글

3-4. BoW + Random Forest Classifier  (0) 2019.07.25
3-3. BoW + SVM  (0) 2019.07.25
3-1. BoW + NB  (0) 2019.07.24
2. 데이터 가공  (0) 2019.07.24
1. 소개  (0) 2019.07.24
Comments