일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 전처리
- 자연어처리
- 수기
- 품사태깅
- 우울증
- NLP
- word embedding
- 인공지능
- CUDA
- Word2Vec
- Classification Task
- naver movie review
- 대학원
- pytorch
- 석사
- sentiment analysis
- Today
- Total
슬기로운 연구생활
3-2. BoW + NB + Komoran 본문
[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
[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
실험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
실험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
실험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
실험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 |