안녕하세요, mj입니다! 오늘은 LSTM(Long Short-Term Memory)을 활용하여 자연어 처리(NLP)를 어떻게 수행할 수 있는지에 대해 알아보겠습니다. LSTM은 시퀀스 데이터를 처리하는 데 매우 효과적인 딥러닝 모델입니다. 이 글에서는 LSTM의 기본 개념과 함께 파이썬을 이용한 코드 예제를 통해 실제로 어떻게 활용할 수 있는지 설명하겠습니다.
LSTM은 RNN(Recurrent Neural Network)의 한 종류로, 장기적인 의존성을 학습할 수 있도록 설계되었습니다. RNN은 시퀀스 데이터를 처리하는 데 유용하지만, 긴 시퀀스에서는 기울기 소실 문제로 인해 학습이 어려워질 수 있습니다. LSTM은 이를 해결하기 위해 ‘셀 상태’라는 개념을 도입하여 정보를 더 잘 기억할 수 있게 합니다.
이제 LSTM을 파이썬으로 구현해 보겠습니다. Keras 라이브러리를 사용하여 간단한 LSTM 모델을 구축하고 자연어 처리 작업을 수행해볼 것입니다.
pip install numpy pandas keras tensorflow
우선, 간단한 데이터셋을 만들어보겠습니다. 여기서는 영화 리뷰 데이터를 사용하여 긍정/부정 감정을 분류하는 모델을 구축하겠습니다.
import numpy as np
import pandas as pd
# 데이터셋 생성
data = {'review': ['이 영화는 정말 좋았다', '별로였다', '최고의 영화', '시간 낭비', '재미있었다'],
'sentiment': [1, 0, 1, 0, 1]}
df = pd.DataFrame(data)
텍스트 데이터를 LSTM 모델에 입력할 수 있는 형태로 변환해야 합니다. 이를 위해 토큰화와 패딩 과정을 수행합니다.
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
tokenizer = Tokenizer()
tokenizer.fit_on_texts(df['review'])
sequences = tokenizer.texts_to_sequences(df['review'])
max_length = max(len(x) for x in sequences)
padded_sequences = pad_sequences(sequences, maxlen=max_length)
from keras.models import Sequential
from keras.layers import LSTM, Dense, Embedding
model = Sequential()
model.add(Embedding(input_dim=len(tokenizer.word_index) + 1, output_dim=8, input_length=max_length))
model.add(LSTM(16))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
X = padded_sequences
y = df['sentiment']
model.fit(X, y, epochs=10, verbose=1)
모델을 평가하고 새로운 리뷰에 대한 감정을 예측해봅시다.
test_reviews = ['최악의 영화', '정말 추천합니다']
test_sequences = tokenizer.texts_to_sequences(test_reviews)
test_padded = pad_sequences(test_sequences, maxlen=max_length)
predictions = model.predict(test_padded)
print(np.round(predictions)) # 출력 결과: [[0.], [1.]]