[python] 파이썬 gensim을 이용한 문서 임베딩 결과 시각화 방법

이번 포스트에서는 파이썬의 gensim 라이브러리를 사용하여 문서 임베딩(embedding)을 수행하고, 이를 시각화하는 방법에 대해 알아보겠습니다.

1. 문서 임베딩이란?

문서 임베딩은 텍스트 문서를 벡터 공간에 투영하여 텍스트의 의미와 유사성을 보다 효과적으로 파악할 수 있게 해주는 기술입니다. 이를 통해 문서 간 유사성을 계산하거나 검색과 분류를 위한 기반 데이터로 활용할 수 있습니다.

2. Gensim을 사용한 문서 임베딩

Gensim은 파이썬의 자연어 처리 라이브러리로, Word2Vec과 같은 임베딩 알고리즘을 제공합니다. 이를 사용하여 문서를 임베딩할 수 있습니다.

다음은 Gensim을 사용하여 문서를 임베딩하는 간단한 예제 코드입니다.

from gensim.models import Word2Vec
from gensim.models.doc2vec import Doc2Vec, TaggedDocument
from nltk.tokenize import word_tokenize

# 텍스트 데이터 준비
data = ["문서1의 내용", "문서2의 내용", "문서3의 내용"]

# 텍스트 토큰화 및 태깅
tagged_data = [TaggedDocument(words=word_tokenize(_d.lower()), tags=[str(i)]) for i, _d in enumerate(data)]

# 임베딩 모델 생성
model = Doc2Vec(vector_size=20, window=2, min_count=1, workers=4, epochs=100)
model.build_vocab(tagged_data)
model.train(tagged_data, total_examples=model.corpus_count, epochs=model.epochs)

3. 임베딩 결과 시각화

임베딩된 문서의 결과를 시각화하기 위해, t-SNE(t-distributed Stochastic Neighbor Embedding)과 같은 차원 축소 알고리즘을 사용할 수 있습니다. t-SNE를 사용하면 고차원의 벡터를 2차원 또는 3차원으로 축소하여 시각적으로 나타낼 수 있습니다.

아래는 t-SNE를 사용하여 문서 임베딩을 시각화하는 코드 예시입니다.

from sklearn.manifold import TSNE
import matplotlib.pyplot as plt

# 임베딩된 문서 벡터 추출
vectors = [model.docvecs[str(i)] for i in range(len(data))]

# t-SNE를 사용한 시각화
tsne_model = TSNE(perplexity=40, n_components=2, init='pca', n_iter=2500, random_state=23)
new_values = tsne_model.fit_transform(vectors)

x = [value[0] for value in new_values]
y = [value[1] for value in new_values]

# 시각화
plt.figure(figsize=(10, 6)) 
for i in range(len(x)):
    plt.scatter(x[i],y[i])
    plt.annotate(data[i],xy=(x[i], y[i]),xytext=(5, 2),textcoords='offset points',ha='right',va='bottom')

plt.show()

이렇게 하면 각 문서가 2차원 공간 상에 어떻게 분포하는지를 시각적으로 확인할 수 있습니다.

이상으로, 파이썬의 gensim을 사용하여 문서 임베딩을 수행하고, 해당 결과를 시각화하는 방법에 대해 살펴보았습니다.