1. 머신러닝 및 딥러닝 모델 학습
EDA(탐색적 데이터 분석) 및 전처리를 마쳤으므로, 이제 감성 분석을 위한 머신러닝 및 딥러닝 모델을 학습하고 평가한다.
1.1 머신러닝 모델 개요
감성 분석에서는 여러 머신러닝 및 딥러닝 모델을 사용할 수 있다.
🔹 Naive Bayes (나이브 베이즈)
- 확률 기반 분류기로, 단어 출현 확률을 활용하여 감성을 분류함
- 텍스트 분류에 적합하며, 계산량이 적고 학습 속도가 빠름
- 하지만 단어 간 의존성을 고려하지 않으므로, 문맥을 충분히 반영하지 못하는 한계가 있음
🔹 SVM (Support Vector Machine)
- 고차원 데이터를 효과적으로 분류할 수 있는 머신러닝 모델
- 감성 분석에서 중요한 핵심 단어를 기반으로 최적의 초평면을 찾음
- TF-IDF와 결합하면 높은 정확도를 보이는 특징
🔹 랜덤 포레스트 (Random Forest)
- 여러 개의 결정 트리를 조합하여 예측하는 앙상블 학습 모델
- 데이터의 복잡한 패턴을 학습할 수 있으나, 계산량이 많음
🔹 로지스틱 회귀 (Logistic Regression)
- 확률적 분류 모델로, Naive Bayes보다 유연한 결정 경계를 제공
- 감성 분석에서 TF-IDF 벡터와 함께 자주 사용됨
🔹 LSTM (Long Short-Term Memory)
- 문장의 순서와 문맥을 고려하는 순환 신경망(RNN) 기반 딥러닝 모델
- 과거 정보를 기억하면서 장기 의존성을 처리하는 강점이 있음
- 하지만 훈련 시간이 오래 걸릴 수 있음
🔹 BERT (Bidirectional Encoder Representations from Transformers)
- 사전 훈련된 딥러닝 모델로, 문맥을 양방향으로 학습 가능
- 감성 분석에서 최고 수준의 성능을 보이며, 텍스트 의미를 더욱 깊게 반영 가능
2. 머신러닝 모델 학습 및 평가
from sklearn.naive_bayes import MultinomialNB
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
# 학습/테스트 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Naive Bayes 모델 학습
nb_model = MultinomialNB()
b_model.fit(X_train, y_train)
y_pred = nb_model.predict(X_test)
print("Naive Bayes 정확도:", accuracy_score(y_test, y_pred))
# SVM 모델 학습
svm_model = SVC(kernel='linear')
svm_model.fit(X_train, y_train)
y_pred = svm_model.predict(X_test)
print("SVM 정확도:", accuracy_score(y_test, y_pred))
# Random Forest 모델 학습
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)
y_pred = rf_model.predict(X_test)
print("Random Forest 정확도:", accuracy_score(y_test, y_pred))
# Logistic Regression 모델 학습
lr_model = LogisticRegression(max_iter=2000)
lr_model.fit(X_train, y_train)
y_pred = lr_model.predict(X_test)
print("Logistic Regression 정확도:", accuracy_score(y_test, y_pred))
3. 딥러닝 모델 학습 및 평가
3.1 LSTM 모델 학습
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense
# LSTM 모델 생성
lstm_model = Sequential()
lstm_model.add(Embedding(input_dim=len(vectorizer.vocabulary_), output_dim=128))
lstm_model.add(LSTM(64))
lstm_model.add(Dense(1, activation='sigmoid'))
lstm_model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 모델 훈련
lstm_model.fit(X_train, y_train, epochs=5, batch_size=64, validation_data=(X_test, y_test))
3.2 BERT 모델 학습
from transformers import BertTokenizer, TFBertForSequenceClassification
import tensorflow as tf
# BERT 토크나이저 및 모델 로드
bert_tokenizer = BertTokenizer.from_pretrained('bert-base-multilingual-cased')
bert_model = TFBertForSequenceClassification.from_pretrained('bert-base-multilingual-cased')
# 입력 데이터 변환
def encode_texts(texts):
return bert_tokenizer(texts, padding=True, truncation=True, return_tensors='tf')
X_train_enc = encode_texts(X_train)
X_test_enc = encode_texts(X_test)
# BERT 모델 훈련
bert_model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=2e-5),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
bert_model.fit(X_train_enc['input_ids'], y_train, epochs=3, batch_size=16, validation_data=(X_test_enc['input_ids'], y_test))
4. 모델 성능 비교 및 결론
4.1 모델별 성능 비교
모델 정확도
| Naive Bayes | ? |
| SVM | ? |
| Random Forest | ? |
| Logistic Regression | ? |
| LSTM | ? |
| BERT | ? |
4.2 향후 발전 가능성
- 더 많은 데이터를 활용하여 성능 개선 가능
- 사전 훈련된 한국어 특화 모델(KoBERT 등) 실험 가능
🚀 다음 프로젝트: 뉴스 기사 자동 분류 📊