데이터 분석/키워드 분석

[실습] 임베딩 시각화 (Word2Vec)

toraa 2025. 1. 23. 13:33

품사처리 클렌징한 데이터 로드 

import pandas as pd

data = pd.read_csv('./data/pre_text.csv').dropna()
sentences = data['clean'].apply(lambda x: x.split()).to_list()

# 불용어 리스트
stopwords = ['스타', '벅스', '스', '벅'] 

# 불용어 제거
sentences = [
    [word for word in sentence if word not in stopwords]
    for sentence in sentences
]

# 결과 
sentences[:5]

▷ 불용어('스타', '벅스', '스', '벅') 제거 작업을 추가했다

 

Word2Vec 학습 

from gensim.models import Word2Vec

model = Word2Vec(sentences,
                 vector_size=50,
                 window=5,
                 min_count=2,
                 workers=4,
                 sg=1,
                 epochs=50 
                )

 

상위 키워드 10개 추출 

keywords = model.wv.index_to_key
keywords[:10]


['굿', '친절', '층', '커피', '매장', '자리', '사람', '음료', '공부', '티']

 

키워드 '친절'을 중심으로 

keyword='친절'
similar_words = model.wv.most_similar(keyword, topn=20)
similar_words
keyword= '친절'
similar_words = model.wv.most_similar(keyword, topn=20)
words = [keyword] + [word for word, _ in similar_words]
vectors = [model.wv[word] for word in words]

vectors[0]

 

PCA 차원 축소

from sklearn.decomposition import PCA

pca = PCA(n_components=2)
reduced_vectors = pca.fit_transform(vectors)
reduced_vectors

 

산점도 시각화

키워드를 한개가 아닌 복수로 설정할 수도 있음

두개로 설정하면, 키워드 두개 중심으로 관련 키워드들의 가까운 정도를 관찰할 수 있음

import matplotlib.pyplot as plt
plt.rc('font', family='Malgun Gothic')

plt.figure(figsize=(10,8))

for i, word in enumerate(words):
    plt.scatter(reduced_vectors[i, 0], reduced_vectors[i, 1])
    plt.annotate(word, (reduced_vectors[i, 0] + 0.02, reduced_vectors[i, 1] + 0.02))

plt.title(f'Word2Vec Similarity: {keyword}')
plt.xlabel('PCA Component1')
plt.ylabel('PCA Component 2')
plt.grid(True)
plt.show()