2019.06.17
출처 : https://wikidocs.net/book/2155
핵심키워드
- Word2Vec
사전 훈련된 Word2Vec 임베딩(Pre-trained Word2Vec embedding) 사용하기
어떤 자연어 처리 작업을 할 때 임베딩 벡터를 얻고 싶을 경우, 케라스의 Embedding()을 사용하여 갖고 있는 훈련 데이터를 가지고 단어 벡터를 학습하는 방식으로 임베딩 벡터를 만들기도 하지만, 다른 훈련 데이터로 사전에 훈련된 워드 임베딩(Pre-trained Word Embedding)를 갖고와서 원하는 작업에 사용할 수도 있다.
예를 들어서 뉴스 분류 작업을 하는데 뉴스 데이터가 부족한 상황이라면, 위키피디아 등과 같은 데이터를 Word2Vec이나 Glove 등으로 사전에 학습시켜놓은 임베딩 벡터들을 갖고 와서 사용하는 것이 도움이 될 수도 있다.
1. 영어
이번에는 구글이 제공하는 미리 학습된 Word2Vec 모델을 사용하는 방법에 대해서 알아보자. 구글은 사전 훈련된 Word2Vec 모델의 약 3백만 개의 단어 벡터들을 제공한다. 각 벡터의 크기는 300이다. gensim을 통해서 이 모델을 불러오는 건 매우 간단하다. 이 모델을 다운로드하고 파일 경로를 기재하면 된다.
모델 다운로드 경로 : https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit
압축 파일의 용량은 약 1.5GB이지만, 파일의 압축을 풀면 약 3.3GB 정도의 파일이 나온다.
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format('./model/GoogleNews-vectors-negative300.bin', binary=True)model.vectors.shape
(3000000, 300)
# 파일의 크기가 3기가가 넘는 이유를 계산해보면 다음과 같다.
# 3 million words * 300 features * 4byte/feature = ~3.5GBprint(model.similarity('this', 'is'))
print(model.similarity('post', 'book'))0.40797037
0.057204384
2. 한국어
한국어의 미리 학습된 Word2Vec 모델은 박규병님의 깃허브 주소인 https://github.com/Kyubyong/wordvectors에 공개되어져 있다. 박규병님이 공개한 직접적인 다운로드 링크는 아래와 같다.
모델 다운로드 경로 : https://drive.google.com/file/d/0B0ZXk88koS2KbDhXdWg1Q2RydlU/view
위의 링크로부터 77MB 크기의 ko.zip 파일을 다운로드 받아서 압축을 풀면 ko.bin이라는 50MB 크기의 파일이 있다. 이 파일을 로드하고 유사도를 계산해보도록 하자.
ko_model = gensim.models.Word2Vec.load('./model/ko/ko.bin')
a = ko_model.wv.most_similar("강아지")print(a)
[('고양이', 0.7290452718734741), ('거위', 0.7185635566711426), ('토끼', 0.7056223154067993), ('멧돼지', 0.6950401067733765), ('엄마', 0.6934334635734558), ('난쟁이', 0.6806551218032837), ('한마리', 0.6770296096801758), ('아가씨', 0.6750352382659912), ('아빠', 0.6729634404182434), ('목걸이', 0.6512460708618164)]
참고 : Word2Vec 모델은 자연어 처리에서 단어를 밀집 벡터로 만들어주는 단어 임베딩 방법론이지만 최근에 들어서는 자연어 처리를 넘어서 추천 시스템에도 사용되고 있는 모델이다. 우선 적당하게 데이터를 나열해주면 Word2Vec은 위치가 근접한 데이터를 유사도가 높은 벡터로 만들어준다는 점에서 착안된 아이디어이다.