๐Ÿงถ

3๊ฐ• - ์ปจํ…์ธ  ๊ธฐ๋ฐ˜ ๋ชจ๋ธ - Word2Vec(CBOW)

ย 

3๊ฐ• ์ปจํ…์ธ  ๊ธฐ๋ฐ˜ ๋ชจ๋ธ

Intoduction

์ปจํ…์ธ  ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์€ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ํ†ตํ•ด ์œ ์‚ฌ์„ฑ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ถ”์ฒœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์—์„œ ์กฐ๊ธˆ ๋ฒ—์–ด๋‚˜ ์ปจํ…์ธ  ์‚ฌ์ด์˜ ์œ ์‚ฌ๋„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ถ”์ฒœ์„ ํ•ด์ฃผ๋Š” ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„์ด์–ธ๋งจ ์˜ํ™”๋ฅผ ์žฌ๋ฐŒ๊ฒŒ ๋ณธ ์‚ฌ๋žŒ์—๊ฒŒ ์ด์™€ ๋น„์Šทํ•œ ์˜ํ™”์ธ ์–ด๋ฒค์ ธ์Šค๋‚˜ ๋งˆ๋ธ”์‹œ๋ฆฌ์ฆˆ ์˜ํ™”๋ฅผ ์ถ”์ฒœํ•ด ์ฃผ๋Š” ๋ฐฉ์‹์ด์ฃ . ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ์ƒˆ๋กœ์šด ์•„์ดํ…œ์ด๋‚˜ ํ‰๊ฐ€๊ฐ€ ์ ์€ ์•„์ดํ…œ์— ์ ์šฉํ•˜๊ธฐ ์ข‹์Šต๋‹ˆ๋‹ค.
ย 

Word2Vec

word2vec๋ชจ๋ธ์€ ๊ธฐ์กด์— ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์•ž ๋’ค ๋‹จ์–ด๋ฅผ ํ†ตํ•ด ๋‹จ์–ด๋ฅผ ์ €์ฐจ์›์˜ ๋ฒกํ„ฐ๋กœ ์ž„๋ฒ ๋”ฉํ•˜๋Š” ๋ฐฉ์‹์ด์ฃ . ์—ฌ๊ธฐ์„œ ๋‹จ์–ด๋ฅผ ์•„์ดํ…œ์œผ๋กœ ๋ฐ”๊พธ๊ฒŒ ๋˜๋ฉด ์ธ์ ‘ํ•œ ์•„์ดํ…œ๋“ค์„ ํ†ตํ•ด ์•„์ดํ…œ์„ ๋ฒกํ„ฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ๊ธ€play์—์„œ๋Š” ์ด์™€ ๊ฐ™์€ ๋‚ด์šฉ์„ Item2vec์ด๋ผ๋Š” ๋ชจ๋ธ๋กœ ์†Œ๊ฐœํ•˜์˜€์Šต๋‹ˆ๋‹ค.
ย 

CBOW

notion image
Word2Vec๋ชจ๋ธ ์ค‘ ํ•˜๋‚˜์ธ CBOW๋ชจ๋ธ์€ ์ฃผ๋ณ€ ๋‹จ์–ด๋“ค์„ ํ†ตํ•ด ์ค‘์‹ฌ ๋‹จ์–ด๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์ฃผ๋ณ€ ๋‹จ์–ด๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ window size๋ผ๊ณ  ๋ถ€๋ฅด๊ณ  window๋ฅผ ๊ณ„์† ์˜ฎ๊ฒจ ๊ฐ€๋ฉฐ ํ•™์Šต์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
notion image
์œ„์˜ ๊ทธ๋ฆผ์—์„œ w(t)๊ฐ€ ์ค‘์‹ฌ ๋‹จ์–ด์ด๊ณ  ๋‚˜๋จธ์ง€ w(t-2) ~ w(t+2)๊นŒ์ง€๊ฐ€ ์ฃผ๋ณ€ ๋‹จ์–ด์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ฃผ๋ณ€๋‹จ์–ด์— ๋Œ€ํ•ด์„œ ๊ฐ™์€ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด ์ฃผ๊ณ  ํ‰๊ท ์„ ๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ์ฃผ๋ณ€ ๋‹จ์–ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋ธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
notion image
์œ„์˜ ๊ทธ๋ฆผ์€ ํ•˜๋‚˜์˜ ์ฃผ๋ณ€ ๋‹จ์–ด์— ๋Œ€ํ•œ ๋ชจ๋ธ์˜ ์„ธ๋ถ€์ ์ธ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด ์„ธ๊ฐœ์˜ layer๊ฐ€ ์žˆ๊ณ  2๊ฐœ์˜ ๊ฐ€์ค‘์น˜ ๋ฒกํ„ฐ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. Input layer์—๋Š” one-hot ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋‹จ์–ด ๋ฒกํ„ฐ๊ฐ€ ๋“ค์–ด์˜ต๋‹ˆ๋‹ค. x๋Š” v์ฐจ์›์˜ ๋ฒกํ„ฐ์ด๊ณ  ์ฒซ๋ฒˆ์งธ ๊ฐ€์ค‘์น˜ ๋ฒกํ„ฐ์™€์˜ ์—ฐ์‚ฐ์„ ํ†ตํ•ด N์ฐจ์›์˜ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. N์ฐจ์›์˜ ๋ฒกํ„ฐ๋Š” ๋‹ค์‹œ ๊ฐ€์ค‘์น˜์™€์˜ ์—ฐ์‚ฐ์„ ํ†ตํ•ด v์ฐจ์›์˜ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์œ„์˜ ํ™•๋ฅ ์„ ์ตœ๋Œ€ํ™” ํ•˜๋Š” ๊ฒƒ์ด ์ด ๋ชจ๋ธ์˜ ๋ชฉ์ ์ž…๋‹ˆ๋‹ค.
hidden layer์— ์†ํ•˜๋Š” ๋ฒกํ„ฐ๋“ค์„ ์œ„์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
output layer์— ์†ํ•˜๋Š” ๋ฒกํ„ฐ๋“ค์€ hidden layer๋ฒกํ„ฐ์— Wโ€™๊ฐ€์ค‘์น˜๋ฅผ ๊ณฑํ•œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
softmaxํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ •๊ทœํ™”๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ ํฌ๋กœ์Šค ์—”ํŠธ๋กœํ”ผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ loss๊ฐ’์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
ย 
notion image
ํฌ๋กœ์Šค ์—”ํŠธ๋กœํ”ผ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ•œ loss๊ฐ’๊ณผ ์—ญ์ „ํŒŒ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉฐ ์˜ค์ฐจ๋ฅผ ์ค„์—ฌ๋‚˜๊ฐ‘๋‹ˆ๋‹ค. optimization ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” SGD๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ย 
ย 

Word2vec ์ถ”์ฒœ์‹œ์Šคํ…œ ๊ตฌํ˜„

#ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ import pandas as pd import numpy as np from sklearn.feature_extraction.text import TfidfVectorizer import gensim
#๊ฒฝ๋กœ์„ค์ •ํ•˜๊ธฐ path_meta = "./drive/MyDrive/machine_learning/movies_metadata.csv" path_ratings = "./drive/MyDrive/machine_learning/ratings.csv"
#ํŒ๋‹ค์Šค๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ, ๋ฐ์ดํ„ฐ ์ •๋ ฌ movie = pd.read_csv(path_ratings) movie = movie.sort_values(by='timestamp', ascending=True).reset_index(drop=True)
#๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ, column์ด๋ฆ„์„ ๋ฐ”๊พธ๊ณ  ๋ฐ์ดํ„ฐ ๋ณ‘ํ•ฉ meta = pd.read_csv(path_meta) meta = meta.rename(columns={'id':'movieId'}) movie['movieId'] = movie['movieId'].astype(str) meta['movieId'] = meta['movieId'].astype(str) movie = pd.merge(movie, meta[['movieId', 'original_title']], how='left', on='movieId'
notion image
movie = movie[movie['original_title'].notnull()].reset_index(drop=True)
#userId๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌถ์–ด์ฃผ๊ธฐ agg = movie.groupby(['userId'])['original_title'].agg({'unique'}) agg.head()
notion image
#๊ฐ๊ฐ์˜ user๊ฐ€ ๋ณธ ์˜ํ™”๋ผ๋ฆฌ ๋ฌถ์–ด์„œ ์ €์žฅํ•˜๊ธฐ sentence = [] for user_sentence in agg['unique'].values: sentence.append(list(map(str, user_sentence)))
#word2vec ๋ชจ๋ธ ํ•™์Šต from gensim.models import Word2Vec embedding_model = Word2Vec(sentence, size=20, window = 5, min_count=1, workers=4, iter=200, sg=1)
#๊ฒฐ๊ณผํ™•์ธ embedding_model.wv.most_similar(positive=['The Phantom of the Opera'], topn=10)
notion image