네이버 영화리뷰 데이터의 분류 모델이 한국어 토크나이저에 따라 어떻게 성능이 달라지는지 살펴본다.
- 2-layer 2-directional LSTM with dropout and linear layers
- 에폭별 Loss 및 Accuracy
- 토크나이저별 최고 성능
space | character | syllable | khaiii | mecab | okt | komoran | bert | koelectra | |
---|---|---|---|---|---|---|---|---|---|
loss | 0.432 | 0.307 | 0.315 | 0.319 | 0.303 | 0.320 | 0.312 | 0.351 | 0.320 |
acc | 0.793 | 0.873 | 0.867 | 0.871 | 0.877 | 0.867 | 0.872 | 0.851 | 0.867 |
- 토크나이저별 데이터 로딩 및 훈련 시간
space | character | syllable | khaiii | mecab | okt | komoran | bert | koelectra | |
---|---|---|---|---|---|---|---|---|---|
데이터 로딩 시간 | 1.8 | 2.2 | 6.1 | 125.4 | 10.8 | 275.3 | 98.1 | 19.9 | 18.8 |
평균 훈련 시간 | 17.4 | 52.1 | 119.4 | 33.6 | 31.5 | 26.2 | 32.5 | 37.6 | 33.8 |
- Mecab 토크나이저가 전반적으로 가장 성능이 뛰어난 편이며, 의외로 문자 단위 토크나이저도 괜찮은 편이다. 다만 훈련 시간이 꽤 긴 편이어서 추가적인 원인 파악이 필요할 것으로 보인다.
Python==3.7.3
khaiii==0.4
konlpy==0.5.2
numpy==1.18.5
pandas==1.0.4
torch==1.5.0
torchtext==0.6.0
tqdm==4.46.1
transformers==3.0.2
네이버 영화 리뷰 데이터를 다운 받아 data 폴더 안에 저장한 후 다음 코드를 차례대로 실행한다.
python data_preprocess.py
python main.py [--n_epochs N_EPOCHS] [--max_vocab_size MAX_VOCAB_SIZE]
[--batch_size BATCH_SIZE] [--embedding_dim EMBEDDING_DIM]
[--hidden_dim HIDDEN_DIM] [--n_layers N_LAYERS]
[--bidirectional BIDIRECTIONAL] [--dropout DROPOUT]
모든 토크나이저에 대해 훈련이 끝나고 나면 훈련 결과가 result.json
파일로 저장된다.