본문 바로가기

텍스트 마이닝

Word2Vec, ELMo, Doc2Vec의 이해 (1)

반응형

11.1 Word2Vec-대표적인 워드 임베딩 기법

11.1.1 Word2Vec 학습의 원리

  • Word2Vec 기법에서 학습의 목적은 단어에 의미적인 정보를 함축함으로써 유사도를 계산하거나 연산을 수행하고, 더 나아가서 학습된 결과를 다른 작업에서도 사용할 수 있는 전이학습을 지원하는 것
  • Word2Vec은 주변의 단어를 이용해 중심에 있는 단어를 예측하도록 학습함(CBOW에 한해서)
  • CBOW(Continuous Bag of Words), Skip-Gram의 두 가지 학습 방식을 가짐
  • CBOW: 문장에서 윈도(앞뒤 단어들을 몇 개씩 예측에 사용할지 결정하는 범위)를 뒤로 이동하며 학습에 사용할 입력과 출력을 만듬

  • Skip-Gram: CBOW와 달리 중심 단어를 입력으로 해서 주변의 여러 단어들을 예측

11.1.2 Word2Vec활용 - 학습된 모형 가져오기

pip install --upgrade gensim
# 미리 학습된 gensim data를 다운로드
import gensim.downloader as api

wv = api.load('glove-wiki-gigaword-50')
type(wv)

"""
[==================================================] 100.0% 66.0/66.0MB downloaded
gensim.models.keyedvectors.KeyedVectors
"""
vec_king = wv['king']
print('#Size of the vector:', len(vec_king))
print('#Vector for king:', vec_king)

"""
#Size of the vector: 50
#Vector for king: [ 0.50451   0.68607  -0.59517  -0.022801  0.60046  -0.13498  -0.08813
  0.47377  -0.61798  -0.31012  -0.076666  1.493    -0.034189 -0.98173
  0.68229   0.81722  -0.51874  -0.31503  -0.55809   0.66421   0.1961
 -0.13495  -0.11476  -0.30344   0.41177  -2.223    -1.0756   -1.0783
 -0.34354   0.33505   1.9927   -0.04234  -0.64319   0.71125   0.49159
  0.16754   0.34344  -0.25663  -0.8523    0.1661    0.40102   1.1685
 -1.0137   -0.21585  -0.15155   0.78321  -0.91241  -1.6106   -0.64426
 -0.51042 ]
"""
print(wv.similarity('king', 'man'), 'vs', wv.similarity('king', 'woman'))
print(wv.similarity('queen', 'man'), 'vs', wv.similarity('queen', 'woman'))
print('미니밴에 가까운 차:', wv.most_similar(positive=['car', 'minivan'], topn=3))
print('여성, 왕에는 가까우면서 남성과는 먼 단어:',
      wv.most_similar(positive=['woman', 'king'], negative=['man'], topn=1))
print('breakfast cereal dinner lunch 중에서 다른 단어들과의 거리가 가장 먼 단어:',
      wv.doesnt_match("breakfast cereal dinner lunch".split()))
      
"""
0.53093773 vs 0.41133785
0.53667 vs 0.60031056
미니밴에 가까운 차: [('truck', 0.9100273251533508), ('suv', 0.904007613658905), ('jeep', 0.8619828820228577)]
여성, 왕에는 가까우면서 남성과는 먼 단어: [('queen', 0.8523604273796082)]
breakfast cereal dinner lunch 중에서 다른 단어들과의 거리가 가장 먼 단어: cereal
"""
print("distance between cat and dog: {:.2f}".format(wv.distance("cat", "dog")))
print("{:.4f}".format(wv.n_similarity(['bulgogi', 'shop'], ['japanese', 'restaurant'])))
print("{:.4f}".format(wv.n_similarity(['bulgogi', 'shop'], ['korean', 'restaurant'])))
print("{:.4f}".format(wv.n_similarity(['bulgogi', 'shop'], ['french', 'restaurant'])))

"""
distance between cat and dog: 0.08
0.5375
0.5627
0.4377
"""

11.1.3 FastText - 워드 임베딩에 N-gram 적용

  • Word2Vec의 단점을 극복하기 위한 방법 중 하나
  • 문자 단위의 N-gram을 적용하여 학습된 적 없는 단어를 만났을 때 발생하는 문제 해결 시도

 

 

 

 

※ 해당 내용은 <파이썬 텍스트 마이닝 완벽 가이드>의 내용을 토대로 학습하며 정리한 내용입니다.

반응형