[python] scikit-learn을 활용한 텍스트 분류

이번 포스트에서는 scikit-learn을 사용하여 텍스트 데이터를 분류하는 방법에 대해 알아보겠습니다. 텍스트 분류는 주어진 텍스트를 사전에 정의된 카테고리 중 하나로 분류하는 작업을 의미합니다. 예를 들어, 스팸 메일 필터링, 감성 분석 또는 문서 분류 등이 텍스트 분류의 일반적인 예시입니다.

1. 데이터 준비

텍스트 분류를 위해서는 먼저 분류할 데이터를 준비해야 합니다. 이 예제에서는 간단한 스팸 메일 분류를 위해 스팸과 일반 메일로 구성된 데이터셋을 사용하겠습니다.

import pandas as pd

# 데이터셋 로드
data = pd.read_csv('spam.csv')

# 데이터셋 확인
print(data.head())

2. 데이터 전처리

텍스트 데이터를 분류하기 전에 전처리 과정을 거쳐야 합니다. 주요 전처리 단계는 토큰화, 불용어 제거, 정규화 등이 있습니다. 이를 위해 scikit-learn의 CountVectorizer와 TfidfTransformer를 사용할 수 있습니다.

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer

# CountVectorizer를 사용하여 토큰화
count_vectorizer = CountVectorizer()
X_counts = count_vectorizer.fit_transform(data['text'])

# TfidfTransformer를 사용하여 TF-IDF 벡터 생성
tfidf_transformer = TfidfTransformer()
X_tfidf = tfidf_transformer.fit_transform(X_counts)

# 훈련 데이터와 타겟 데이터 분리
X_train = X_tfidf
y_train = data['label']

3. 모델 학습

데이터 전처리가 완료되었으면 이제 분류 모델을 학습시킬 차례입니다. 여기서는 scikit-learn의 MultinomialNB 모델을 사용하겠습니다.

from sklearn.naive_bayes import MultinomialNB

# MultinomialNB 모델 초기화
model = MultinomialNB()

# 모델 학습
model.fit(X_train, y_train)

4. 예측 및 평가

모델이 학습되었으므로 테스트 데이터를 사용하여 예측을 수행하고 모델의 성능을 평가해야 합니다.

# 예측을 위해 테스트 데이터 전처리
X_test_counts = count_vectorizer.transform(test_data['text'])
X_test_tfidf = tfidf_transformer.transform(X_test_counts)

# 예측 수행
y_pred = model.predict(X_test_tfidf)

# 모델 성능 평가
from sklearn.metrics import accuracy_score, classification_report

print("Accuracy:", accuracy_score(test_data['label'], y_pred))
print("Classification Report:")
print(classification_report(test_data['label'], y_pred))

결론

scikit-learn을 사용하여 텍스트 분류를 수행하는 방법에 대해 알아보았습니다. 데이터 준비, 전처리, 모델 학습, 예측 및 평가의 단계를 따라가며 텍스트 분류를 구현할 수 있습니다. scikit-learn은 텍스트 분류뿐만 아니라 다양한 머신 러닝 작업에 유용한 도구입니다. 추가적인 자세한 내용은 scikit-learn의 공식 문서를 참고하시기 바랍니다.

참고 자료