[파이썬] 딥러닝을 활용한 텍스트 분류 기법

텍스트 분류는 자연어 처리에서 중요한 작업 중 하나입니다. 딥러닝은 이러한 텍스트 분류 작업에 있어서 강력한 도구로 사용됩니다. 이번 블로그 포스트에서는 Python에서 딥러닝을 활용한 텍스트 분류 기법을 알아보겠습니다.

데이터 전처리

딥러닝 모델을 구축하기 전에, 텍스트 데이터를 전처리해야 합니다. 다음은 텍스트 데이터를 전처리하는 간단한 예제 코드입니다.

import pandas as pd
import re
from nltk.corpus import stopwords
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from sklearn.model_selection import train_test_split

# 데이터 로드
data = pd.read_csv('data.csv')

# 텍스트 정제
def clean_text(text):
    text = text.lower()
    text = re.sub(r'[^a-zA-Z가-힣\s]', '', text)
    text = ' '.join([word for word in text.split() if word not in stopwords.words('english') and word not in stopwords.words('korean')])
    return text

data['cleaned_text'] = data['text'].apply(clean_text)

# 텍스트 토큰화 및 패딩
tokenizer = Tokenizer(num_words=10000, oov_token='<OOV>')
tokenizer.fit_on_texts(data['cleaned_text'])
sequences = tokenizer.texts_to_sequences(data['cleaned_text'])
padded_sequences = pad_sequences(sequences, padding='post', truncating='post', maxlen=100)

# 레이블 분리
labels = data['label']

# 학습 데이터와 테스트 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(padded_sequences, labels, test_size=0.2, random_state=42)

위 코드에서는 데이터를 로드한 후, 텍스트를 정제하는 clean_text 함수를 정의합니다. 텍스트는 영문과 한글이 섞여 있을 수 있으므로, 각각의 언어에 대한 불용어(stopwords)를 제거하기 위해 NLTK 라이브러리의 stopwords를 사용합니다. 마지막으로, 텍스트를 토큰화하고 패딩하여 모델에 입력할 수 있는 형태로 변환합니다.

딥러닝 모델 구축

딥러닝 모델을 구축하기 위해 Keras를 사용합니다. 아래는 간단한 딥러닝 모델을 구축하는 예제 코드입니다.

from keras.models import Sequential
from keras.layers import Embedding, LSTM, Dense

# 모델 정의
model = Sequential()
model.add(Embedding(10000, 128, input_length=100))
model.add(LSTM(64))
model.add(Dense(1, activation='sigmoid'))

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

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

위 코드에서는 Sequential 모델을 생성하고, 모델의 레이어를 정의합니다. 텍스트 데이터는 토큰화 및 패딩된 상태로 입력되므로, Embedding 레이어를 사용하여 임베딩 벡터로 변환합니다. 그 다음, LSTM 레이어를 추가하여 시퀀스 데이터를 처리하고, 최종적으로 Dense 레이어를 추가하여 이진 분류를 수행합니다.

모델 평가

학습이 완료된 모델을 평가해보겠습니다. 아래는 예제 코드입니다.

loss, accuracy = model.evaluate(X_test, y_test)
print('Test Loss:', loss)
print('Test Accuracy:', accuracy)

위 코드에서는 evaluate 함수를 사용하여 테스트 데이터에 대한 손실(loss)과 정확도(accuracy)를 계산합니다.

결론

이번 포스트에서는 Python에서 딥러닝을 활용한 텍스트 분류 기법을 알아보았습니다. 텍스트 데이터를 전처리하고, Keras를 사용하여 간단한 딥러닝 모델을 구축하고, 모델을 평가하는 방법을 살펴보았습니다. 이러한 텍스트 분류 기법은 다양한 자연어 처리 작업에 활용될 수 있으며, 애플리케이션에서 실제로 사용할 수 있습니다.

딥러닝을 활용한 텍스트 분류에 대해 더 배우고 싶다면, Keras의 공식 문서와 자연어 처리 분야에 관한 논문을 참고하는 것을 추천합니다. 감사합니다!