파이썬 Sentiment analysis를 활용한 자연어 처리 기술과 알고리즘 비교

자연어 처리(Natural Language Processing, NLP)는 컴퓨터가 사람의 언어를 이해하고 분석할 수 있도록 하는 기술입니다. Sentiment Analysis는 자연어 처리의 한 분야로, 텍스트의 감성(긍정, 부정, 중립)을 분석하는 작업입니다. 파이썬은 Sentiment Analysis를 수행하는 여러 가지 기술과 알고리즘을 제공하며, 이를 비교해 보고자 합니다.

1. Naive Bayes Classifier

나이브 베이즈 분류기(Naive Bayes Classifier)는 간단하고 효과적인 Sentiment Analysis 알고리즘 중 하나입니다. 이 알고리즘은 Bayes의 정리를 기반으로 하고 있으며, 각 단어가 주어진 문서에 나타날 확률을 계산하여 문서의 분류를 결정합니다.

from sklearn.naive_bayes import GaussianNB
from sklearn.feature_extraction.text import TfidfVectorizer

# 학습 데이터 준비
train_data = [
    ('이 영화 너무 재미있어요', 'positive'),
    ('진짜 지루한 영화였어요', 'negative'),
    ('이 영화 볼만해요', 'positive'),
    ('이 영화 별로에요', 'negative')
]

# TF-IDF 벡터화
vectorizer = TfidfVectorizer()
X_train = vectorizer.fit_transform([data[0] for data in train_data])
y_train = [data[1] for data in train_data]

# Naive Bayes Classifier 학습 및 예측
classifier = GaussianNB()
classifier.fit(X_train.toarray(), y_train)

# 테스트 데이터 준비
test_data = [
    '이 영화 정말 좋았어요',
    '이 영화 너무 실망스러웠어요'
]

# 테스트 데이터 TF-IDF 벡터화
X_test = vectorizer.transform(test_data)

# 예측 결과 출력
y_pred = classifier.predict(X_test.toarray())
print(y_pred)

2. Deep Learning 방법

딥러닝(Deep Learning)은 최근 Sentiment Analysis에 많이 활용되는 기술입니다. 특히, 순환 신경망(Recurrent Neural Network, RNN)과 장단기 메모리(Long Short-Term Memory, LSTM)는 텍스트 데이터의 시퀀스를 처리하고 감성을 분석하는 데 효과적입니다.

from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Embedding, LSTM, Dense

# 학습 데이터 준비
train_data = [
    ('이 영화 너무 재미있어요', 'positive'),
    ('진짜 지루한 영화였어요', 'negative'),
    ('이 영화 볼만해요', 'positive'),
    ('이 영화 별로에요', 'negative')
]

# 텍스트 데이터 전처리
tokenizer = Tokenizer()
tokenizer.fit_on_texts([data[0] for data in train_data])
vocab_size = len(tokenizer.word_index) + 1
X_train = tokenizer.texts_to_sequences([data[0] for data in train_data])
X_train = pad_sequences(X_train)

# Sentiment 분류 결과를 원-핫 인코딩
y_train = []
for data in train_data:
    if data[1] == 'positive':
        y_train.append([1, 0])
    else:
        y_train.append([0, 1])

# 딥러닝 모델 구성
model = Sequential()
model.add(Embedding(vocab_size, 32, input_length=X_train.shape[1]))
model.add(LSTM(32))
model.add(Dense(2, activation='softmax'))

# 모델 컴파일 및 학습
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, batch_size=1)

# 테스트 데이터 준비
test_data = [
    '이 영화 정말 좋았어요',
    '이 영화 너무 실망스러웠어요'
]

# 테스트 데이터 전처리
X_test = tokenizer.texts_to_sequences(test_data)
X_test = pad_sequences(X_test, maxlen=X_train.shape[1])

# 예측 결과 출력
y_pred = model.predict(X_test)
print(y_pred)

위 예제는 Naive Bayes Classifier와 Deep Learning 방법 중 일부를 소개한 것이며, 각각의 장단점이 있습니다. 선택할 알고리즘은 데이터셋의 특성과 분석의 목적에 따라 달라질 수 있습니다. 파이썬은 다양한 Sentiment Analysis 알고리즘과 라이브러리를 제공하므로, 문제에 맞는 적절한 방법을 선택하여 활용할 수 있습니다.