데이터 과학의 발전으로 인해 다양한 분야에서 텍스트 분석의 중요성이 커지고 있다. 특히 영화 리뷰와 같은 비정형 데이터에서 감성을 분석하는 작업은 사용자 경험을 향상시키는 데 큰 기여를 한다. 본 문서에서는 영화 리뷰 데이터를 통해 감성 분석을 수행하는 과정을 살펴본다. 이를 통해 데이터 준비, 모델 구축, 그리고 평가 단계까지의 전 과정을 이해할 수 있다.
데이터 준비 및 탐색
데이터 로드 및 기본 정보 확인
영화 리뷰 데이터는 자연어 처리의 기초 단계에서 시작된다. 데이터셋을 로드하고, 기본적인 정보를 확인하는 과정은 모든 분석의 첫걸음이다. 예를 들어, pandas 라이브러리를 통해 CSV 파일을 불러오고, 데이터프레임의 구조를 살펴보는 것이 필요하다. 데이터의 행과 열 수, 결측치의 유무를 확인하는 과정은 후속 데이터 처리에 중요한 기초 정보를 제공한다.
“`python
import pandas as pd
nsmc_train_df = pd.read_csv(‘/content/ratings_train.txt’, encoding=’utf8′, sep=’\t’, engine=’python’)
print(nsmc_train_df.head())
print(nsmc_train_df.info())
“`
위 코드를 통해 얻은 데이터프레임의 구조를 확인했을 때, 결측치가 존재함을 알 수 있다. 이를 바탕으로 결측치를 제거하는 작업은 데이터의 품질을 높이는 데 필수적이다.
결측치 처리 및 데이터 정제
데이터셋에서 결측치를 제거하는 것은 필수적이다. 예를 들어, ‘document’ 열에서 결측치를 제거하는 방법은 다음과 같다.
python
nsmc_train_df = nsmc_train_df[nsmc_train_df['document'].notnull()]
이렇게 결측치를 처리한 후 데이터의 분포를 확인하는 것도 중요하다. 예를 들어, 긍정과 부정의 비율을 파악하는 것은 후속 분석에 유용한 정보를 제공한다.
텍스트 전처리 및 모델 구축
텍스트 전처리
텍스트 분석의 또 다른 중요한 단계는 데이터 전처리이다. 한글 외의 문자를 제거하고, 필요한 형태로 데이터를 정제하는 과정이 포함된다. 이 작업은 불필요한 노이즈를 제거하여 모델의 성능을 향상시킨다. 정규 표현식을 활용하여 문자를 필터링하는 방법은 다음과 같다.
“`python
import re
nsmc_train_df[‘document’] = nsmc_train_df[‘document’].apply(lambda x: re.sub(r'[^ ㄱ-힣]+’, ‘ ‘, x))
“`
이러한 전처리 과정을 통해 분석할 텍스트의 품질을 높이고, 모델의 학습 데이터를 효과적으로 준비할 수 있다.
모델 구축
특성 벡터화는 머신러닝 모델을 효과적으로 구축하기 위한 필수 단계이다. TF-IDF 벡터라이저를 사용하여 텍스트 데이터를 벡터로 변환하는 과정은 다음과 같다.
“`python
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(tokenizer=okt_tokenizer, ngram_range=(1, 2), min_df=3, max_df=0.9)
tfidf.fit(nsmc_train_df[‘document’])
nsmc_train_tfidf = tfidf.transform(nsmc_train_df[‘document’])
“`
여기서 TF-IDF는 단어의 중요성을 평가하여 모델의 성능을 향상시키는 데 중요한 역할을 한다.
감성 분석 모델 구축 및 평가
감성 분류 모델 구축
로지스틱 회귀 모델을 사용하여 긍정 및 부정 감성을 분류하는 모델을 구축한다. 이를 통해 감성 분석의 정확도를 높일 수 있다. 모델 구축 후, GridSearchCV를 활용하여 최적의 파라미터를 찾는 과정은 다음과 같다.
“`python
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
SA_lr = LogisticRegression(random_state=0)
params = {‘C’: [1, 3, 3.5, 4, 4.5, 5]}
SA_lr_grid_cv = GridSearchCV(SA_lr, param_grid=params, cv=3, scoring=’accuracy’, verbose=1)
SA_lr_grid_cv.fit(nsmc_train_tfidf, nsmc_train_df[‘label’])
“`
이렇게 최적의 파라미터 조합을 찾은 후, 모델의 성능을 평가하는 것이 필요하다.
모델 평가 및 정확도 확인
평가용 데이터를 통해 구축한 모델의 정확도를 확인하는 과정은 필요하다. 이를 통해 모델이 실제 데이터에 대해 어떻게 작동하는지를 평가할 수 있다.
“`python
nsmc_test_tfidf = tfidf.transform(nsmc_test_df[‘document’])
test_predict = SA_lr_best.predict(nsmc_test_tfidf)
from sklearn.metrics import accuracy_score
print(‘감성 분석 정확도 :’, round(accuracy_score(nsmc_test_df[‘label’], test_predict), 3))
“`
이러한 정확도 평가는 모델의 신뢰성을 높이는 데 중요한 역할을 한다.
새로운 데이터에 대한 감성 예측
모델이 구축되고 평가된 후, 새로운 텍스트를 입력하여 감성을 예측하는 과정도 중요하다. 사용자가 입력한 문장에 대해 모델이 어떻게 반응하는지를 보여주는 것은 실용적인 측면에서 매우 유용하다.
“`python
st = input(‘감성 분석할 문장 입력 >>’)
st = re.compile(r'[ㄱ-힣]+’).findall(st)
st = [” “.join(st)]
st_tfidf = tfidf.transform(st)
st_predict = SA_lr_best.predict(st_tfidf)
if (st_predict == 0):
print(st, “->> 부정 감성”)
else:
print(st, “->> 긍정 감성”)
“`
위 코드를 통해 사용자가 직접 입력한 문장에 대한 감성 분석 결과를 실시간으로 확인할 수 있다. 이는 데이터 과학의 활용 가능성을 보여주는 좋은 예시가 된다.
결론
본 문서에서는 파이썬을 활용한 텍스트 마이닝 및 감성 분석의 기본적인 과정을 살펴보았다. 데이터 준비, 전처리, 모델 구축 및 평가까지의 전체적인 흐름을 이해함으로써, 데이터 과학의 적용 범위가 얼마나 넓은지를 체감할 수 있다. 이러한 과정들은 다양한 산업 분야에서 활용될 수 있으며, 텍스트 데이터를 통해 인사이트를 도출하는 데 기여할 수 있다.
⭐⭐⭐⭐⭐ (5 / 5.0)
