임베딩

Python으로 배우는 Natural Language Processing (NLP)

Fouad Trad

Machine Learning Engineer

BoW와 TF-IDF의 한계

  • 유사한 단어를 완전히 무관하게 취급
  • 텍스트의 의미를 포착하지 못함

 

BoW/TF-IDF가 여러 텍스트의 데이터셋을 고유 단어가 특징인 구조화된 데이터셋으로 변환하는 이미지.

Python으로 배우는 Natural Language Processing (NLP)

임베딩

임베딩이 단어를 벡터로 변환하는 이미지.

  • 단어를 의미를 담은 벡터로 표현
Python으로 배우는 Natural Language Processing (NLP)

임베딩

car, movie, film, king 네 단어의 임베딩 벡터를 보여주는 이미지.

  • 단어를 의미를 담은 벡터로 표현
    • 각 단어에 임의의 값을 부여
Python으로 배우는 Natural Language Processing (NLP)

임베딩

"I enjoyed watching the" 같은 문장을 알맞은 단어로 완성하는 과제를 보여주는 이미지.

  • 단어를 의미를 담은 벡터로 표현
    • 각 단어에 임의의 값을 부여
    • 문장 내 누락 단어 예측으로 값 개선
Python으로 배우는 Natural Language Processing (NLP)

임베딩

movie와 film처럼 유사한 의미의 두 단어로 문장을 완성할 수 있음을 보여주는 이미지.

  • 단어를 의미를 담은 벡터로 표현
    • 각 단어에 임의의 값을 부여
    • 문장 내 누락 단어 예측으로 값 개선
    • 유사한 문맥에 나타난 단어는 비슷한 표현을 가짐
Python으로 배우는 Natural Language Processing (NLP)

단어를 GPS 좌표처럼 표현하는 임베딩

지도에 GPS 위치가 표시된 이미지.

Python으로 배우는 Natural Language Processing (NLP)

Gensim

  • 널리 쓰이는 임베딩 모델 제공
    • Word2Vec
    • GloVe
word2vec-ruscorpora-300
word2vec-google-news-300
glove-wiki-gigaword-50
glove-wiki-gigaword-100
glove-wiki-gigaword-200
glove-wiki-gigaword-300
...

 

  Gensim 로고.

Python으로 배우는 Natural Language Processing (NLP)

임베딩 모델 불러오기

import gensim.downloader as api

model = api.load('glove-wiki-gigaword-50')
print(type(model))
print(model['movie'])
<class 'gensim.models.keyedvectors.KeyedVectors'>

[ 0.30824 0.17223 -0.23339 0.023105 0.28522 0.23076 -0.41048 -1.0035 -0.2072 1.4327 -0.80684 0.68954 -0.43648 1.1069 1.6107 -0.31966 0.47744 0.79395 -0.84374 0.064509 0.90251 0.78609 0.29699 0.76057 0.433 -1.5032 -1.6423 0.30256 0.30771 -0.87057 2.4782 -0.025852 0.5013 -0.38593 -0.15633 0.45522 0.04901 -0.42599 -0.86402 -1.3076 -0.29576 1.209 -0.3127 -0.72462 -0.80801 0.082667 0.26738 -0.98177 -0.32147 0.99823 ]
Python으로 배우는 Natural Language Processing (NLP)

유사도 계산

similarity = model.similarity("film", "movie")

print(similarity)
0.9310100078582764
Python으로 배우는 Natural Language Processing (NLP)

가장 유사한 단어 찾기

similar_to_movie = model.most_similar('movie', topn=3)

print(similar_to_movie)
[('movies', 0.9322481155395508), 
 ('film', 0.9310100078582764), 
 ('films', 0.8937394618988037)]
Python으로 배우는 Natural Language Processing (NLP)

임베딩 시각화

  • 주성분 분석(PCA):
    • 고차원 벡터 → 2D 또는 3D 벡터

3D 지도를 2D로 펼치는 비유 이미지.

1 DALL-E로 생성한 이미지
Python으로 배우는 Natural Language Processing (NLP)

PCA로 임베딩 시각화

from sklearn.decomposition import PCA

words = ["film", "movie", "dog", "cat", "car", "bus"]
word_vectors = [model[word] for word in words]
pca = PCA(n_components=2)
word_vectors_2d = pca.fit_transform(word_vectors)
plt.scatter(word_vectors_2d[:, 0], word_vectors_2d[:, 1])
for word, (x, y) in zip(words, word_vectors_2d): plt.annotate(word, (x, y))
plt.show()

임베딩 공간에서 유사/연관 단어가 서로 가깝게 위치하는 이미지.

Python으로 배우는 Natural Language Processing (NLP)

임베딩 비교

Word2Vec 모델에서 유사/연관 단어가 임베딩 공간에서 가깝지만 GloVe와는 다르게 배치된 이미지.

word2vec-google-news-300

GloVe 모델에서 유사/연관 단어가 임베딩 공간에서 가깝게 위치하는 이미지.

glove-wiki-gigaword-50
Python으로 배우는 Natural Language Processing (NLP)

연습해 봅시다!

Python으로 배우는 Natural Language Processing (NLP)

Preparing Video For Download...