[python] gensim을 활용한 텍스트 분류 실전 예제

gensim은 Python에서 자연어 처리를 위한 라이브러리로, 주로 토픽 모델링 및 텍스트 분류 작업에 활용됩니다. 이번 포스트에서는 gensim을 사용하여 영화 리뷰 문서를 긍정적 또는 부정적으로 분류하는 실전 예제를 살펴보겠습니다.

1. 데이터 전처리

우선, 분류를 위해 IMDb에서 수집한 영화 리뷰 데이터를 이용하겠습니다. 데이터를 읽고 전처리하기 위해 다음과 같은 단계를 거칩니다.

데이터 로드

# 데이터 로드
import pandas as pd
data = pd.read_csv('imdb_reviews.csv')

텍스트 전처리

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

def preprocess_text(text):
    tokens = simple_preprocess(text)  # 텍스트를 토큰화
    tokens = [token for token in tokens if token not in STOPWORDS]  # 불용어 제거
    return tokens

2. 텍스트 벡터화

텍스트를 벡터 형태로 바꾸어 모델에 입력할 수 있도록 합니다. 이를 위해 Word2Vec 모델을 사용합니다.

Word2Vec 모델 학습

from gensim.models import Word2Vec
word2vec_model = Word2Vec(sentences=data['review_tokenized'], vector_size=100, window=5, min_count=1, workers=4)

3. 분류 모델 학습

Doc2Vec을 사용하여 텍스트 분류 모델을 학습합니다.

Doc2Vec 모델 학습

from gensim.models import Doc2Vec
from gensim.models.doc2vec import TaggedDocument

tagged_data = [TaggedDocument(words=doc, tags=[str(i)]) for i, doc in enumerate(data['review_tokenized'])]
doc2vec_model = Doc2Vec(tagged_data, vector_size=100, window=5, min_count=1, workers=4, epochs=20)

4. 텍스트 분류

학습한 모델을 사용하여 분류를 진행합니다.

문서 벡터 추출

# 문서의 벡터 추출
doc_vectors = [doc2vec_model.infer_vector(doc) for doc in data['review_tokenized']]

분류 모델 학습 및 예측

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
X_train, X_test, y_train, y_test = train_test_split(doc_vectors, data['sentiment'], test_size=0.2, random_state=42)

clf = LogisticRegression()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)

5. 결과 평가

마지막으로, 모델의 성능을 평가합니다.

정확도 계산

from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print(f'모델 정확도: {accuracy}')

이렇듯, gensim을 사용하여 텍스트 분류 모델을 만들고 성능을 평가하는 과정을 살펴보았습니다. gensim은 텍스트 분류 작업에 유용한 다양한 기능을 제공하므로, 향후 더 복잡한 모델을 구축하는 데에도 도움이 될 것입니다.

참고 자료