Python을 활용한 자연어 처리: TensorFlow와 Keras로 감정 분석 모델 만들기
자연어 처리(NLP)는 인간의 언어를 이해하고 처리하는 기술로, 텍스트 데이터를 활용한 다양한 응용 분야에서 강력한 성능을 발휘하고 있습니다. 이번 포스팅에서는 Python을 활용하여 NLP 기초를 이해하고, TensorFlow와 Keras를 사용해 간단한 감정 분석 모델을 만들어 보겠습니다.
자연어 처리란?
자연어 처리(Natural Language Processing, NLP)는 컴퓨터가 인간의 언어를 이해하고 처리할 수 있도록 하는 인공지능의 한 분야입니다. 이를 통해 텍스트 데이터를 자동으로 분석하거나, 인간과 유사한 대화 기능을 제공하는 등의 작업이 가능합니다. NLP는 감정 분석, 번역, 챗봇, 문서 요약 등에서 널리 활용됩니다.
TensorFlow와 Keras 소개
TensorFlow와 Keras는 딥러닝을 기반으로 NLP 모델을 만들고 학습시키는 데 널리 사용되는 Python 라이브러리입니다.
- TensorFlow: Google에서 개발한 오픈소스 딥러닝 라이브러리로, 대규모 데이터 처리 및 모델 학습을 쉽게 구현할 수 있도록 도와줍니다.
- Keras: TensorFlow 위에서 동작하는 고수준의 API로, 간단하고 직관적인 코드로 딥러닝 모델을 설계하고 학습할 수 있도록 도와줍니다.
이번 예제에서는 IMDB 영화 리뷰 데이터셋을 사용하여 리뷰의 긍정/부정을 분류하는 감정 분석 모델을 만들어 보겠습니다.
환경 설정
먼저 필요한 라이브러리를 설치하고 가져옵니다. 이 예제에서는 TensorFlow와 Keras를 사용하므로, Python 환경에서 다음 명령어로 설치합니다.
pip install tensorflow
이제 Python 코드를 작성해 보겠습니다.
import tensorflow as tf
from tensorflow.keras import datasets, layers, models, preprocessing
데이터셋 로드 및 전처리
IMDB 데이터셋은 영화 리뷰와 해당 리뷰가 긍정적인지 부정적인지에 대한 레이블로 구성되어 있습니다. TensorFlow의 Keras API를 통해 쉽게 로드할 수 있습니다.
# IMDB 데이터셋 로드
(train_data, train_labels), (test_data, test_labels) = datasets.imdb.load_data(num_words=10000)
# 시퀀스 길이 맞추기 (패딩)
train_data = preprocessing.sequence.pad_sequences(train_data, maxlen=256)
test_data = preprocessing.sequence.pad_sequences(test_data, maxlen=256)
여기서는 상위 10,000개의 가장 자주 등장하는 단어들만 사용하며, 각 리뷰의 길이를 256 단어로 맞추기 위해 패딩을 적용합니다.
모델 생성
LSTM(Long Short-Term Memory) 네트워크를 사용하여 감정 분석 모델을 만들어 보겠습니다. LSTM은 순환 신경망(RNN)의 일종으로, 긴 문장이나 시퀀스 데이터의 패턴을 잘 학습할 수 있습니다.
# LSTM 모델 정의
model = models.Sequential()
model.add(layers.Embedding(10000, 32))
model.add(layers.LSTM(32))
model.add(layers.Dense(1, activation='sigmoid'))
- Embedding: 각 단어를 고정된 크기의 벡터로 매핑하는 레이어입니다.
- LSTM: 문맥 정보가 포함된 시퀀스를 처리하기 위해 사용되는 레이어입니다.
- Dense: 출력 레이어로, 감정이 긍정(1)인지 부정(0)인지 예측하기 위해 시그모이드 활성화 함수를 사용합니다.
모델 컴파일 및 학습
모델을 컴파일하고 학습시킵니다. 손실 함수로는 binary_crossentropy
를 사용하며, 옵티마이저로는 adam
을 사용합니다.
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
# 모델 학습
model.fit(train_data, train_labels, epochs=5, validation_data=(test_data, test_labels))
- epochs: 데이터셋을 학습하는 반복 횟수를 의미합니다. 여기서는 5번 반복합니다.
- validation_data: 모델 성능을 평가하기 위한 검증 데이터를 지정합니다.
모델 평가
테스트 데이터를 사용하여 모델의 성능을 평가합니다.
test_loss, test_acc = model.evaluate(test_data, test_labels, verbose=2)
print(f"\n테스트 정확도: {test_acc:.4f}")
모델 예측
학습된 모델을 사용하여 임의의 영화 리뷰에 대한 감정 분석을 수행해 보겠습니다.
sample_review = test_data[0].reshape(1, -1)
prediction = model.predict(sample_review)
if prediction >= 0.5:
print("긍정적인 리뷰입니다.")
else:
print("부정적인 리뷰입니다.")
결론
오늘은 Python을 활용한 자연어 처리의 기본적인 개념과 TensorFlow 및 Keras를 사용한 감정 분석 모델을 만들어 보았습니다. NLP는 매우 흥미로운 분야이며, 간단한 모델이라도 큰 효과를 볼 수 있습니다. 이 글을 통해 자연어 처리의 기초와 딥러닝을 활용한 텍스트 분석 방법에 대한 이해를 돕는 데 도움이 되었기를 바랍니다.
'Python > Python' 카테고리의 다른 글
PyInstaller로 실행 파일 만드는 방법 (0) | 2025.07.17 |
---|---|
Python을 활용한 딥러닝: TensorFlow와 Keras로 이미지 분류 모델 만들기 (0) | 2025.07.15 |
애플리케이션 보안 강화 및 스케일링: 실시간 데이터 분석 애플리케이션 (0) | 2025.07.14 |
Python 애플리케이션 모니터링 및 성능 최적화: 실시간 데이터 분석 애플리케이션 (0) | 2025.07.13 |
Python 통합 프로젝트 확장 및 배포: 실시간 데이터 분석 애플리케이션 (0) | 2025.07.12 |