본문 바로가기
데이터사이언스(Data Science)/ML & DL

[딥러닝] Keras 케라스 완전 기초 4편 - RNN과 LSTM으로 텍스트 감성 분석하기! (Keras로 쉽게 배우는 순환 신경망)

by 데이터 AI 벌집 2025. 4. 16.
반응형

[딥러닝] Keras 케라스 완전 기초 4편 - RNN과 LSTM으로 텍스트 감성 분석하기! (Keras로 쉽게 배우는 순환 신경망)

 

이미지 분류는 CNN이 강했죠?

2025.04.16 - [분류 전체보기] - [딥러닝] Keras 케라스 완전 기초 3편 - 이미지 분류 마스터! CNN으로 딥러닝 모델 만들기 (with Keras)

 

[딥러닝] Keras 케라스 완전 기초 3편 - 이미지 분류 마스터! CNN으로 딥러닝 모델 만들기 (with Keras)

지난 시간에는 Dropout과 Optimizer로 모델을 튜닝해봤습니다. 2025.04.15 - [데이터사이언스(Data Science)/ML & DL] - [딥러닝] Keras 케라스 완전 기초 1편 - 첫 번째 딥러닝 모델 만들기 (10줄) [딥러닝] Keras 케

datasciencebeehive.tistory.com

 

 

그렇다면 텍스트시계열 데이터는 어떤 구조가 좋을까요? 바로 RNN (Recurrent Neural Network)LSTM (Long Short-Term Memory) 입니다. 오늘은 IMDb 영화 리뷰 데이터를 가지고, 긍정/부정 감성 분석 모델을 만들어볼게요! 🎬


🔤 사용할 데이터: IMDb 감성 분석 데이터셋

  • 영화 리뷰 25,000개 (훈련) + 25,000개 (테스트)
  • 긍정/부정 (binary classification)

1. RNN 모델 실습 코드

import tensorflow as tf
from tensorflow.keras.datasets import imdb
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, SimpleRNN, Dense

# 데이터 불러오기 (가장 많이 나오는 단어 10,000개만 사용)
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=10000)

# 시퀀스 길이를 맞춰주기 (리뷰 길이 제각각이기 때문)
x_train = pad_sequences(x_train, maxlen=200)
x_test = pad_sequences(x_test, maxlen=200)

# RNN 모델 구성
model = Sequential([
    Embedding(input_dim=10000, output_dim=32),
    SimpleRNN(units=32),
    Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.summary()
model.fit(x_train, y_train, epochs=5, batch_size=64, validation_split=0.2)
model.evaluate(x_test, y_test)

2️⃣ LSTM으로 업그레이드!

from tensorflow.keras.layers import LSTM

model = Sequential([
    Embedding(input_dim=10000, output_dim=64),
    LSTM(units=64),  # 더 깊고 기억력이 긴 구조
    Dense(1, activation='sigmoid')
])

 

📌 SimpleRNN은 기본 순환 신경망이고, LSTM은 더 긴 문맥을 기억할 수 있는 구조입니다.


🔍 Embedding이란?

  • 단어를 숫자로 바꾸기만 하면 모델이 이해 못해요.
  • 그래서 단어 벡터화 (word embedding) 필요!
  • Embedding 레이어가 이를 자동으로 해줍니다.

📊 결과 예시 (LSTM 기준)

Epoch 5/5
625/625 [==============================] - 45s 71ms/step - loss: 0.3011 - accuracy: 0.8714 - val_loss: 0.3668 - val_accuracy: 0.8432
🧾 테스트 정확도: 0.8520

✅ 정리

  • 텍스트나 시계열 데이터 → RNN, LSTM이 적합
  • 간단한 감성 분석 모델도 Keras로 쉽게 만들 수 있음
  • LSTM은 긴 문맥 정보를 더 잘 반영
반응형