자연어 처리(NLP)에서 감정 감지 및 분석은 중요한 연구 분야입니다. 그러나 감정을 정확하게 식별하고 분석하는 것은 특히 단어의 형태학적 변형을 처리할 때 어려울 수 있습니다. 이 글에서는 감정 감지에 대한 개별 피처의 영향을 더 잘 이해하기 위해 키워드 분석에서 피처 영향의 사용을 살펴보겠습니다. 또한 이 기술을 구현하기 위해 Scikit-learn을 사용하는 Python 코드 예제를 제공합니다.
Feature Influence를 이용한 형태소 감성 키워드 분석
피처 영향을 이용한 형태소 감성의 키워드 분석은 NLP에서 개별 특징이 감정 감지에 미치는 영향을 식별하고 분석하는 기법입니다. 이 접근법은 텍스트에서 특정 감정의 존재를 예측할 때 개별 단어 또는 피처의 중요성을 분석하는 것을 포함합니다. 감정 감지에 대한 개별 피처의 영향을 이해함으로써 감정 감지 모델의 정확성과 효율성을 향상시킬 수 있습니다.
파이썬 코드 예제
feature influence를 사용하여 형태소 감정의 키워드 분석 사용을 시연하기 위해 Scikit-learn을 사용하는 Python 코드 예제를 제공합니다. 기쁨, 슬픔, 분노, 놀람, 두려움, 혐오의 6가지 감정 중 하나로 레이블이 지정된 영화 리뷰 데이터 세트를 사용합니다.
먼저 데이터 세트를 로드하고 훈련 세트와 테스트 세트로 분할합니다.
import pandas as pd
from sklearn.model_selection import train_test_split
# 데이터 세트 로드
df = pd.read_csv('movie_reviews.csv')
# train 및 test 세트로 분할
X_train, X_test, y_train, y_test = train_test_split(df['text'], df['emotion'], test_size=0.2)
다음으로 불용어를 제거하고 형태소 분석을 수행하여 텍스트 데이터를 전처리합니다.
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
import re
# 텍스트 데이터 전처리
stop_words = set(stopwords.words('english'))
ps = PorterStemmer()
def preprocess(text):
# 영숫자가 아닌 문자를 제거하고 소문자로 변환하기
text = re.sub(r'\W+', ' ', text.lower())
# 중지 단어 제거 및 스테밍 수행
words = [ps.stem(word) for word in text.split() if word not in stop_words]
return ' '.join(words)
X_train = X_train.apply(preprocess)
X_test = X_test.apply(preprocess)
텍스트 데이터를 사전 처리한 후 TfidfVectorizer 클래스를 사용하여 벡터 표현으로 변환합니다.
from sklearn.feature_extraction.text import TfidVectorizer
# 텍스트 데이터를 벡터 표현으로 변환
vectorizer = TfidfVectorizer()
X_train = vectorizer.fit_transform(X_train)
X_test = vecotrizer.transform(X_test)
다음으로 훈련 세트에서 로지스틱 회귀 모델을 훈련합니다.
from sklearn.linear_model import LogisticRegression
# 로지스틱 회귀 모델 훈련
model = LogisticRegression()
model.fit(X_train, y_train)
feature influence를 사용하여 키워드 분석을 수행하기 위해 훈련된 로지스틱 회귀 모델의 coef_ 속성을 사용하여 각 감정의 존재를 예측할 때 각 피처의 중요성을 제공합니다.
# 각 감정에 대한 기능 중요도 파악
feature_names = vectorizeer.get_feature_names()
emotion_names = model.classes_
for i, emotion in enumerate(emotion_names):
print(f'Emotion: {emotion}])
feature_importance = sorted(zip(feature_names, model.coef_[i]), key=lambda x: x[1], reverse=True)[:10]
for feature, importance in feature_importance:
print(f'{feature}: {importance:.3f}')
print()
이 코드는 각 감정에 가장 큰 영향을 미치는 상위 10개 피처를 출력합니다.
Emotion: anger
stupid: 1.453
worst: 1.051
fail: 0.993
wast:0.979
ridicul: 0.944
bore: 0.925
terribl: 0.915
poor: 0.912
aw: 0.896
dull: 0.887
Emotion: disgust
dsgust: 2.444
worst: 1.186
ridicul: 0.996
crap: 0.957
wast: 0.937
terribl: 0.879
suck: 0.876
mess: 9.853
garbag: 9.846
junk: 0.830
Emotion: fear
scar: 1.210
scream: 1.115
worst: 0.914
terribl: 0.902
mess: 0.870
bore: 0.827
horror: 0.826
frighten: 0.819
stupid: 0.812
ridicul: 0.803
Emotion: joy
great: 1.596
love: 1.477
beauti: 1.097
wonder: 0.911
excel: 0.909
amaz: 0.903
best: 0.897
enjoy: 0.877
perfect: 0.853
happi: 0.825
Emotion: sadness
sad: 1.195
worst: 1.101
terribl: 0.918
bore: 0.846
poor: 0.834
mess: 0.820
unfortun: 0.808
dull: 0.808
mediocr: 0.780
predict: 0.768
Emotion: surprise
surpris: 1.453
great: 0.936
enjoy: 0.909
beauti: 0.881
amaz: 0.878
wonder: 0.874
excel: 0.829
love: 0.819
best: 0.781
pleasantli: 0.755
출력에서 볼 수 있듯이 각 감정의 상위 피처는 특정 감정과 관련된 단어에 대한 직관과 일치합니다. 예를 들어, 기쁨에 대한 상위 기능에는 "위대한", "사랑", "아름다운"과 같은 긍정적인 단어가 포함되는 반면 혐오에 대한 상위 피처에는 "최악", "끔찍한" 및 "쓰레기"와 같은 부정적인 단어가 포함됩니다.
feature influence를 이용한 형태소 감정의 키워드 분석은 자연어 처리에서 감정 감지에 대한 개별 특징의 영향을 이해하는 강력한 기술입니다. 텍스트에서 특정 감정의 존재를 예측할 때 개별 단어 또는 피처의 중요성을 분석함으로써 감정 감지 모델의 정확도와 효율성을 향상시킬 수 있습니다. 이 글에서는 Scikit-learn을 사용하여 영화 리뷰 데이터 세트에 이 기술을 구현하는 Python 코드 예제를 제공했습니다. 각 감정의 주요 특징을 조사함으로써 다양한 감정과 가장 강하게 연관되는 단어와 구에 대한 통찰력을 얻을 수 있습니다.
'IT' 카테고리의 다른 글
파이썬에서 랜덤 포레스트 예측 모델을 사용한 데이터 분석 마스터하기 (0) | 2023.04.18 |
---|---|
랜덤 포레스트 모델: Python 예제 코드가 포함된 종합 가이드 (0) | 2023.04.17 |
분류 모델의 클래스 불균형 처리 (0) | 2023.04.15 |
TF-IDF: 단어의 중요성을 결정하기 위한 완벽한 가이드 (2) | 2023.04.14 |
텍스트를 분류 모델의 피처로 만드는 방법: 단계별 가이드 (0) | 2023.04.13 |