[python] gensim을 활용한 텍스트 데이터 분류 결과 시각화 방법

텍스트 데이터는 매우 복잡하고 비구조적인 특성을 가지고 있어, 이를 효과적으로 분석 및 시각화하는 것은 중요한 과제입니다. Gensim은 Python에서 자연어 처리를 위한 라이브러리로, 토픽 모델링 및 데이터 분류에 널리 사용됩니다. 이번 블로그에서는 Gensim을 활용하여 텍스트 데이터를 분류한 결과를 시각화하는 방법을 살펴보겠습니다.

1. 텍스트 데이터의 전처리

Gensim을 활용하여 텍스트 데이터를 분류하기 전에, 데이터의 전처리가 필수적입니다. 이는 토큰화, 불용어 제거, 특수 문자 제거 등의 작업을 포함합니다. 적합한 전처리가 이뤄지지 않은 데이터는 정확한 분류 및 시각화가 어려울 수 있습니다.

from gensim.utils import simple_preprocess
from gensim.parsing.preprocessing import remove_stopwords

# 예시 텍스트 데이터 전처리
def preprocess_text(text):
    result = simple_preprocess(text, deacc=True)  # 단어 토큰화 및 구두점 제거
    result = [word for word in result if word not in stop_words]  # 불용어 제거
    return result

2. 텍스트 데이터의 벡터화

Gensim을 활용하여 텍스트 데이터를 분류하기 위해서는, 텍스트를 수치형 벡터로 변환해야 합니다. 대표적인 방법으로는 TF-IDF(term frequency-inverse document frequency)나 Word2Vec을 활용할 수 있습니다.

from gensim.models import TfidfModel
from gensim.corpora import Dictionary
from gensim.models import Word2Vec

# TF-IDF 모델 학습
dictionary = Dictionary(processed_texts)
corpus = [dictionary.doc2bow(text) for text in processed_texts]
tfidf = TfidfModel(corpus)

# Word2Vec 모델 학습
w2v_model = Word2Vec(processed_texts, min_count=1)

3. 분류 결과 시각화

분류된 텍스트 데이터를 시각적으로 표현하기 위해서는, 주로 차원 축소 기법인 t-SNE(t-distributed stochastic neighbor embedding)를 활용합니다.

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

# t-SNE를 활용한 시각화
def visualize_tsne(vectors, labels):
    tsne_model = TSNE(n_components=2, random_state=0)
    np.set_printoptions(suppress=True)
    tsne_vectors = tsne_model.fit_transform(vectors)
    
    plt.figure(figsize=(10, 6))
    for label in set(labels):
        plt.scatter(tsne_vectors[labels==label, 0], tsne_vectors[labels==label, 1], label=label)
    plt.title('t-SNE Visualization')
    plt.legend()
    plt.show()

4. 결론

Gensim을 활용하여 텍스트 데이터를 분류하고 시각화하는 방법을 살펴보았습니다. 적절한 전처리와 벡터화를 통해, 텍스트 데이터의 복잡한 패턴을 파악하고 시각적으로 표현할 수 있습니다. 이를 통해 텍스트 데이터의 특성을 더 잘 이해하고 분석할 수 있게 됩니다.

이상으로 Gensim을 활용한 텍스트 데이터 분류 결과 시각화 방법에 대해 알아보았습니다. 감사합니다.

참고 자료: Gensim Documentation, Scikit-learn Documentation