반응형
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을 적용하여 학습된 적 없는 단어를 만났을 때 발생하는 문제 해결 시도
※ 해당 내용은 <파이썬 텍스트 마이닝 완벽 가이드>의 내용을 토대로 학습하며 정리한 내용입니다.
반응형
'텍스트 마이닝' 카테고리의 다른 글
CNN - 이미지 분류를 응용한 문서 분류 (1) (0) | 2023.07.28 |
---|---|
Word2Vec, ELMo, Doc2Vec의 이해 (2) (0) | 2023.07.27 |
RNN-딥러닝을 이용한 문서 분류 (6) (0) | 2023.07.25 |
RNN-딥러닝을 이용한 문서 분류 (5) (0) | 2023.07.24 |
RNN-딥러닝을 이용한 문서 분류 (4) (0) | 2023.07.23 |