IT

피처 영향력을 이용한 형태소 감성 키워드 분석: Python 코드 예제

rimicode 2023. 4. 16. 21:35
728x90
반응형
SMALL

 

자연어 처리(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 코드 예제를 제공했습니다. 각 감정의 주요 특징을 조사함으로써 다양한 감정과 가장 강하게 연관되는 단어와 구에 대한 통찰력을 얻을 수 있습니다.

728x90
반응형
LIST