Deep Learning

Word Vector 훈련 데이터를 키우면 얼마나 도움이 될까?

둔진 2020. 5. 1. 02:44

  지난 테스트(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 모델을 훈련시키 번거로운 분들을 위해 모델을 올려두었습니다.

  형태소 단위로 Tokenize된 데이터로 훈련했기 때문에 사용하실 때도 이전 글(한국어 토큰의 단위는 뭐가 좋을까?)에서 만든 Tokenizer를 사용하셔야합니다.

from konlpy.tag import Mecab

tagger = Mecab()

def tokenize_by_morpheme_char(s):
    return tagger.morphs(s)