데이터 분석/키워드 분석
[실습] 임베딩 시각화 (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()