슬기로운 연구생활

3-3. BoW + SVM 본문

프로젝트 : 영화리뷰 분류

3-3. BoW + SVM

vhrehfdl 2019. 7. 25. 15:06

[0] 서론

- 처음에 SVM 분류 모델을 만들 때, 약 30만개의 학습데이터( 단어수 60만개 )를 사용해 만들려했다.

하지만 모델을 만드는 시간이 너무 오래 걸려 끝을 볼 수 없었다.

그래서 단어수를 500개로 줄여 진행했었다.

하지만 단어수를 줄여도 시간이 너무 오래 걸려서 학습데이터 수를 2만개로 줄여 진행했다.

SVM을 사용할 때는 학습 데이터가 너무 많거나 단어의 수가 너무 많으면 아예 생성이 안 될만큼 시간이 오래 걸릴 수 있다.

- 전체 코드와 데이터는 아래 github에 있다.

/data/data_small.py로 작은 데이터 셋을 만들어 SVM 모델을 만들었다.

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

[1] 실험1

- 실험1에서는 sklearn의 svm.SVC를 사용하였다.

C-Support-Vector-Classification 이다.

 

[1-1] DataSet

- Train Data ( train_small.csv )

긍정 리뷰 : 10,000 / 부정 리뷰 : 10,000

- Test Data ( validation.csv )

긍정 리뷰 : 10,338 / 부정 리뷰 : 30,586

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

[1-2] Text To Vector

- Bag of Word를 방법을 사용해 Text를 Vector로 변환한다.

실험1 의 Vector의 차원수는 68,839 이다.

[1-3] Support Vector Machine

- SVM은 ML 중에서도 기대했던 알고리즘은데 성능이 좋지 않아 의외였다.

하지만 실험2에서 rbf 커널을 추가하니 성능이 많이 올라갔다...

 

( 그림1 ) 실험1 결과

​실험1 accuracy : 0.57

[2] 실험2

- 실험2에서는 SVM에 rbf 커널을 추가학고 gamma=0.1 / C=10으로 설정했다.

rbf 커널을 추가하면 비선형 분할평면을 만들 수 있다.

parameter의 역할은 아래 이미지에서 확인할 수 있다.

( 출처 )  https://medium.com/@pushkarmandot/what-is-the-significance-of-c-value-in-support-vector-machine-28224e852c5a

​즉. Parameter의 C의 값이 크면 경계 margin이 작아지고 C의 값이 작으면 margin이 커진다.

가장 우측에 이미지를 보면 몇 몇 데이터를 포기하면서까지 margin을 키웠다.

어떻게 보면 일반화를 시켰다고 생각할 수도 있을 것 같다.

[2-1] DataSet ( train_small.csv / validation.csv )

데이터 셋 설정을 실험1과 동일하다.

[2-2] Text To Vector

실험1과 동일하다.

[2-3] Support Vector Machine

우선 rbf 커널을 이용하면 학습데이터에 좀 더 특화된 hyperplane이 만들어진다는 것을 알 수 있다.

( 그림2 ) 실험2 결과

​실험1 accuracy : 0.57

실험2 accuracy : 0.76

[3] 정리

C-Support-Vector-Classification를 그냥 사용하는 것보다 rbf 커널을 추가하는 방법이 성능이 더 좋게 나온다.

그렇지만 대용량 데이터에서 SVM은 엄청난 학습시간 때문에 사용하기 적절하지 않은 것 같다.

 

  BoW
NB 0.86
SVM ver.1 0.57
SVM ver.2 0.76

 

SVM ver.1 : 기본 SVM

SVM ver.2 : version1에 rbf 커널 추가 ( C=10, gamma = 0.1 )

 

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

3-5. BoW + XGBoosting  (0) 2019.07.25
3-4. BoW + Random Forest Classifier  (0) 2019.07.25
3-2. BoW + NB + Komoran  (0) 2019.07.25
3-1. BoW + NB  (0) 2019.07.24
2. 데이터 가공  (0) 2019.07.24
Comments