[python] scikit-learn을 이용한 네이버 영화 리뷰 감성 분석

소개

이번 포스트에서는 scikit-learn이라는 머신 러닝 라이브러리를 사용하여 네이버 영화 리뷰의 감성을 분석하는 방법에 대해 알아보겠습니다. 감성 분석은 텍스트 데이터에서 해당 문장이 긍정적인지 혹은 부정적인지를 예측하는 기술로, 자연어 처리 분야에서 많이 사용됩니다.

데이터 준비

먼저, 네이버 영화 리뷰 데이터를 준비해야 합니다. 데이터는 긍정(평점 9 이상)과 부정(평점 4 이하) 두 가지로 분류되어 있으며, 각 리뷰는 텍스트 형태로 이루어져 있습니다. 데이터는 CSV 파일 형식으로 제공되며, 각 행은 리뷰와 해당 리뷰의 감성(긍정 또는 부정)을 나타냅니다.

데이터 전처리

데이터를 불러온 후, 전처리 작업을 수행해야 합니다. 이닝표를 제거하고, 특수문자와 자릿수를 제거하려면 re.sub() 함수를 사용할 수 있습니다. 또한, 영어 단어의 경우 소문자로 변환하여 일괄적인 처리를 할 수 있습니다. 이러한 전처리 작업은 정규식을 사용하여 간단하게 처리할 수 있습니다.

import re

def remove_special_characters(text):
    text = re.sub('[^A-Za-z0-9가-힣]', ' ', text)
    text = re.sub('[0-9]+', ' ', text)
    return text

def to_lowercase(text):
    text = text.lower()
    return text

# 데이터 전처리 예시
text = "이 영화는 너무 재미있어서 10점을 주고 싶다!"
cleaned_text = remove_special_characters(text)
lowercased_text = to_lowercase(cleaned_text)

print(lowercased_text)
# 출력: "이 영화는 너무 재미있어서 점을 주고 싶다"

피처 추출

전처리된 데이터로부터 피처를 추출해야 합니다. scikit-learn은 여러 가지 피처 추출 방법을 제공합니다. 이 중에서도 텍스트 데이터에서 주로 사용되는 방법은 TF-IDF(Term Frequency-Inverse Document Frequency) 입니다. TF-IDF는 문서에 나타나는 단어의 빈도를 계산하여 각 단어의 중요도를 산정하는 방법입니다.

from sklearn.feature_extraction.text import TfidfVectorizer

# TF-IDF 피처 추출 객체 생성
tfidf_vectorizer = TfidfVectorizer()

# 피처 추출 예시
text_list = ["이 영화는 너무 재미있어서 점을 주고 싶다", "이 영화는 너무 지루해서 별로야"]
tfidf_vectorizer.fit(text_list)
feature_matrix = tfidf_vectorizer.transform(text_list)

print(feature_matrix.toarray())
# 출력: [[0.         0.         0.         0.         0.         0.40993715 0.
#          0.40993715 0.40993715 0.30951895 0.         0.         0.5
#          0.         0.30951895 0.         0.5       ]
#         [0.         0.5        0.5        0.5        0.5        0.
#          0.5        0.         0.         0.         0.5        0.5
#          0.         0.5        0.5        0.         0.        ]]

감성 분석 모델 구축

피처 추출이 완료되면, 이제 감성 분석 모델을 구축해야 합니다. 여기서는 로지스틱 회귀(Logistic Regression) 분류 모델을 사용하겠습니다. 로지스틱 회귀는 이진 분류 문제에 주로 사용되며, 주어진 피처로부터 리뷰의 긍정 혹은 부정을 예측하는 것입니다.

from sklearn.linear_model import LogisticRegression

# 로지스틱 회귀 분류기 객체 생성
clf = LogisticRegression()

# 모델 학습
clf.fit(train_X, train_y)

# 예측
pred = clf.predict(test_X)

모델 성능 평가

마지막으로, 생성한 감성 분석 모델의 성능을 평가해야 합니다. 모델의 성능을 평가하기 위한 여러 가지 평가 지표가 있으며, 예측값과 실제값을 비교하여 정확도, 정밀도, 재현율, F1 점수 등을 계산할 수 있습니다.

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# 정확도 계산
accuracy = accuracy_score(test_y, pred)

# 정밀도 계산
precision = precision_score(test_y, pred)

# 재현율 계산
recall = recall_score(test_y, pred)

# F1 점수 계산
f1 = f1_score(test_y, pred)

결론

이번 포스트에서는 scikit-learn을 사용하여 네이버 영화 리뷰의 감성을 분석하는 방법에 대해 알아보았습니다. 감성 분석은 텍스트 데이터에서 긍정과 부정을 예측하는 중요한 작업입니다. scikit-learn을 활용하여 쉽게 감성 분석 모델을 구축하고 성능을 평가할 수 있습니다.

참고 자료