지난 테스트(Tensorflow의 Embedding Layer vs fastText)에서 Tensorflow의 자체 임베딩보다는 아무래도 대용량의 데이터를 사용해서 훈련시킨 fastText가 성능 개선에 도움이 된다는 사실을 확인하고 또 궁금한 점이 생겼습니다.
그렇다면 fastText를 훈련시키는 데이터를 키우면 어떨까요? 한국어 위키피디아도 크기는 하지만 실제로 더 큰 데이터는 나무 위키입니다. 콘텐츠 품질에 대해 논란이 있지만 방대한 텍스트 데이터이기는 하죠. 그리고 다소 심한 구어체와 비속어들이 있지만 어떻게 보면 위키피디아보다 요즘 인터넷 상의 언어 형태를 더 잘 보여준다고 볼 수도 있고요.
그리하여 기존 위키피디아 + 네이버 영화 데이터에 나무위키 데이터까지 더해서 fastText를 훈련시켜보기로 합니다. Tokenize 단위는 기존 테스트에서 성능이 가장 좋았던 형태소와 글자 단위를 사용합니다.
1. 데이터 통계
전체 토큰 수 | Unique 토큰 수 | |
한국어 위키피디아 + 네이버 영화 | 139M | 0.25M |
한국어 위키피디아 + 네이버 영화 + 나무위키 | 1,386M | 0.62M |
네이버 영화 데이터가 다른 두 데이터에 비해 아주 작은 점을 고려하면, 나무 위키의 데이터가 위키피디아의 거의 10배에 달합니다. 하지만 Unique 토큰 수 기준으로 보면 3배 정도 큰 셈이고요. 그래도 무려 약 37만 개의 신규 토큰이 추가됐다는 점은 고무적이기도 하고 신기하기도 합니다. 데이터를 더 들여다봐야겠지만 Open category에 속하는 명사가 주를 이루지 않을까 싶습니다.
2. 실험 결과
실험에는 기존에 사용한 코드와 데이터를 그대로 사용했습니다. fastText 모델만 나무위키를 더한 데이터로 새로 훈련시켰고요. 결과 보시겠습니다.
Accuracy | |
한국어 위키피디아 + 네이버 영화 | 87.07% |
한국어 위키피디아 + 네이버 영화 + 나무위키 | 87.15% |
fastText 훈련 데이터 차이가 엄청난데도 별 차이 없군요.
제 해석은 이렇습니다.
- Sentiment 분석에 주로 영향을 주는 형용사, 동사, 부정/긍정 표현들은 이미 위키피디아를 통해서 대부분 학습이 됐을 것이다.
- 나무 위키 데이터로 추가된 데이터는 주로 명사 위주일 것이고 Sentiment 분석에는 큰 기여를 하지 않았을 것이다.
이 가정이 맞다면 이 태스크 자체에는 큰 효과가 없었지만 절대적인 Vocab 수가 도움이 될 것 같은 태스크에는 효과가 있을 것 같습니다. Language Modeling, Translation, NER, Intent Classification 등이요. 이런 태스크를 하게 되면 한번 또 비교를 해보겠습니다.
혹시 fastText 모델을 훈련시키 번거로운 분들을 위해 모델을 올려두었습니다.
- .bin 파일: https://drive.google.com/file/d/1E5osC_8eZDTMxzH6zz2x9TbOoFLe_BLI/view?usp=sharing
- .vec 파일: https://drive.google.com/file/d/1viffhum1bmxYjLf5KZU_L5BfwTTdAtfa/view?usp=sharing
형태소 단위로 Tokenize된 데이터로 훈련했기 때문에 사용하실 때도 이전 글(한국어 토큰의 단위는 뭐가 좋을까?)에서 만든 Tokenizer를 사용하셔야합니다.
from konlpy.tag import Mecab
tagger = Mecab()
def tokenize_by_morpheme_char(s):
return tagger.morphs(s)
'Deep Learning' 카테고리의 다른 글
CategoricalCrossentropy vs SparseCategoricalCrossentropy (0) | 2020.05.14 |
---|---|
대용량 훈련 데이터 처리 - Generator로 TF Dataset 만들기 (3) | 2020.05.07 |
Tensorflow의 Embedding Layer vs fastText (0) | 2020.04.30 |
한국어 토큰의 단위는 뭐가 좋을까? (4) | 2020.04.28 |
Docker를 이용해서 편리하게 GPU Tensorflow를 사용하자 (0) | 2020.04.25 |