데이터 사이언스 - 10. 자연어 처리 (NLP) (10.3 감성 분석 (Sentiment Analysis))

2025. 3. 20. 17:20데이터 분석/데이터 사이언스

10.3 감성 분석 (Sentiment Analysis)

감성 분석(Sentiment Analysis)은 텍스트 데이터에서 감정(긍정, 부정, 중립 등)을 분석하는 자연어 처리(NLP) 기법이다.
소셜 미디어, 리뷰, 고객 피드백 등의 텍스트 데이터를 활용하여 의견 분석, 제품 평가, 여론 조사 등에 활용된다.

이 장에서는 LSTM(Long Short-Term Memory)과 Transformer 기반의 BERT 모델을 활용한 감성 분석 기법을 다룬다.


10.3.1 감성 분석 개요

1) 감성 분석이란?

  • 텍스트 데이터에서 긍정(Positive), 부정(Negative), 중립(Neutral) 감정을 분류하는 작업
  • 머신러닝 및 딥러닝 모델을 활용하여 감성 패턴을 학습
  • 예시:
    • "이 영화 너무 재밌었어요!" → 긍정(Positive)
    • "너무 지루하고 재미없어요." → 부정(Negative)

감성 분석 주요 응용 분야

  • 소셜 미디어 분석 → 트위터, 유튜브 댓글, 뉴스 댓글 등
  • 고객 피드백 분석 → 제품 리뷰, 서비스 만족도 조사
  • 금융 및 주가 예측 → 뉴스와 소셜 미디어 감정 분석 활용

10.3.2 LSTM 기반 감성 분석

1) LSTM이란?

LSTM(Long Short-Term Memory)은 RNN(Recurrent Neural Network)의 장기 의존성 문제(Long-Term Dependency)를 해결한 모델이다.
기본 RNN은 긴 문장을 학습하는 과정에서 이전 정보가 손실되는 문제가 있지만,
LSTM은 셀 상태(Cell State)와 게이트(Gate) 구조를 통해 장기 의존성을 유지할 수 있도록 설계되었다.

LSTM의 특징

  • 문장의 문맥(Context)을 학습하는 데 효과적
  • 과거 정보를 유지하면서 중요한 단어를 선택적으로 기억
  • 감성 분석, 번역, 음성 인식 등에서 활용

2) LSTM을 활용한 감성 분석 구현

📌 Python 코드 예제 (IMDB 영화 리뷰 감성 분석 - LSTM 모델 구현)

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.datasets import imdb

# 데이터 로드 (IMDB 영화 리뷰 감성 분석 데이터셋)
max_features = 10000  # 사용 단어 개수 제한
max_len = 200  # 패딩할 최대 문장 길이

(X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=max_features)

# 패딩 처리 (문장 길이를 맞추기 위해)
X_train = pad_sequences(X_train, maxlen=max_len)
X_test = pad_sequences(X_test, maxlen=max_len)

# LSTM 모델 생성
model = keras.Sequential([
    layers.Embedding(input_dim=max_features, output_dim=128, input_length=max_len),
    layers.LSTM(64, return_sequences=False),
    layers.Dense(1, activation="sigmoid")
])

# 모델 컴파일
model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"])

# 모델 학습
model.fit(X_train, y_train, epochs=5, batch_size=32, validation_data=(X_test, y_test))

# 모델 평가
test_loss, test_acc = model.evaluate(X_test, y_test)
print(f"테스트 정확도: {test_acc:.4f}")

LSTM 감성 분석 모델 특징

  • Embedding Layer → 단어를 벡터로 변환 (Word2Vec과 유사)
  • LSTM Layer → 문맥(Context) 정보를 유지하면서 감성을 학습
  • Dense Layer (Sigmoid Activation) → 이진 감성 분류 (긍정/부정)

10.3.3 Transformer 기반 BERT 활용

1) Transformer와 BERT란?

  • Transformer는 자연어 처리에서 가장 강력한 모델 구조이며,
    병렬 학습이 가능하고 장기 의존성을 효과적으로 처리할 수 있다.
  • BERT(Bidirectional Encoder Representations from Transformers)는 Transformer를 기반으로 한 사전 학습 모델로,
    양방향 문맥(Bidirectional Context)을 학습하여 뛰어난 감성 분석 성능을 발휘한다.

BERT의 특징

  • 사전 학습(Pretrained Model) 후 미세 조정(Fine-tuning) 가능
  • 문맥을 양방향으로 학습하여 단어의 의미를 정확하게 이해
  • 감성 분석, 문서 분류, 개체명 인식 등 다양한 NLP 태스크에 적용 가능

2) BERT 기반 감성 분석 구현 (Hugging Face Transformers 활용)

📌 Python 코드 예제 (BERT를 활용한 감성 분석)

from transformers import BertTokenizer, TFBertForSequenceClassification
import tensorflow as tf

# 사전 학습된 BERT 모델과 토크나이저 로드
model_name = "nlptown/bert-base-multilingual-uncased-sentiment"
tokenizer = BertTokenizer.from_pretrained(model_name)
model = TFBertForSequenceClassification.from_pretrained(model_name)

# 샘플 문장
text = "이 영화 정말 감동적이었어요!"

# 텍스트 토큰화 및 인코딩
inputs = tokenizer(text, return_tensors="tf", padding=True, truncation=True, max_length=512)

# 감성 분석 예측 수행
outputs = model(inputs["input_ids"])
predictions = tf.nn.softmax(outputs.logits, axis=-1)

# 결과 출력
labels = ["부정", "중립", "긍정"]
predicted_label = labels[tf.argmax(predictions, axis=1).numpy()[0]]
print(f"감성 분석 결과: {predicted_label}")

BERT 감성 분석 모델 특징

  • 사전 학습된 모델을 바로 활용 가능 (Hugging Face Transformers 라이브러리 사용)
  • 한글 및 다국어 지원 가능 (Multilingual BERT 모델 활용)
  • 긴 문장도 정확하게 분석 가능

10.3.4 LSTM vs BERT 비교

비교 항목 LSTM BERT
학습 방식 순차적(Sequential) Transformer 기반 병렬 학습
문맥 학습 단방향(한 방향만 기억) 양방향(Bidirectional Context)
처리 속도 상대적으로 느림 병렬 연산으로 빠름
데이터 필요량 적은 데이터로도 학습 가능 대량의 사전 학습 필요
사전 학습 모델 직접 학습해야 함 사전 학습 모델 사용 가능
성능 문맥을 이해하지만 한계 있음 최신 NLP 모델 중 최강 성능

언제 어떤 모델을 사용할까?

  • 데이터가 많지 않고 간단한 감성 분석 → LSTM 추천
  • 사전 학습된 강력한 모델을 사용하고 싶다면 → BERT 추천
  • 긴 문장과 복잡한 문맥 분석이 필요한 경우 → BERT 추천

결론

감성 분석은 텍스트에서 감정을 분류하는 자연어 처리(NLP) 기법
LSTM은 RNN의 한계를 극복하여 감성 분석에 자주 사용됨
BERT는 Transformer 기반 사전 학습 모델로 최고의 성능을 제공
사전 학습된 BERT 모델을 활용하면 빠르고 정확한 감성 분석 가능

LSTM과 BERT를 적절히 활용하면 텍스트 기반 감성 분석 모델의 성능을 극대화할 수 있다.