CoolFace
Modelpublic

rkdaldus/ko-sent5-classification

sourceHugging Faceupdated 2y agoView on Hugging Face
1likes297downloads
Model Card

KoBERT 기반 한국어 감정 분류 모델

이 프로젝트는 한국어 텍스트의 감정을 분류하는 KoBERT 기반의 감정 분류 모델을 학습하고 활용하는 코드를 포함합니다. 이 모델은 입력된 텍스트가 분노(Anger), 두려움(Fear), 기쁨(Happy), 평온(Tender), 슬픔(Sad) 중 어떤 감정에 해당하는지를 예측합니다.

1. 모델 학습 과정

Colab 환경 설정 및 데이터 준비

  1. 1.필요 라이브러리 설치: transformers, datasets, torch, pandas, scikit-learn 라이브러리를 설치합니다.
  1. 1.데이터 불러오기: ai hub 에 등록된 한국어 감성 대화 데이터로부터 감정 분류용 CSV 파일을 불러옵니다.
  1. 1.데이터셋 준비:
  2. 2.학습/검증 데이터 분할: 80%는 학습 데이터로, 20%는 검증 데이터로 사용.
  3. 3.HuggingFace Dataset 형식 변환: Pandas DataFrame을 HuggingFace Dataset으로 변환.
  4. 4.레이블 컬럼명 변경: 감정 레이블을 나타내는 label_int 컬럼을 labels로 변경.
  5. 5.데이터 토큰화: monologg/kobert 토크나이저를 이용해 입력 텍스트를 토큰화.
  6. 6.형식 변환: input_ids, attention_mask, labels만 남겨 학습 준비 완료.
  1. 1.모델 및 학습 설정:
  2. 2.모델: monologg/kobert 모델을 불러와 5개의 감정 레이블을 분류하도록 설정.
  3. 3.학습 하이퍼파라미터:
  4. 4.learning_rate=2e-5, num_train_epochs=10, batch_size=16.
  5. 5.F1 스코어를 기반으로 베스트 모델 저장.
  6. 6.Early stopping 적용.
  1. 1.학습 진행 및 모델 저장:
  2. 2.학습 완료 후 모델을 Google Drive에 저장.

성능 평가 및 테스트

  • 평가 지표: Accuracy, F1 score (macro, weighted) 계산.
  • 테스트 데이터 평가: 학습된 모델을 이용해 테스트 데이터셋 평가.

2. 모델 사용 방법

사전 준비

  • HuggingFace Hub에서 학습된 모델을 불러와 사용할 수 있습니다.
  • 모델 및 토크나이저는 monologg/kobert 기반이며, 분류 레이블은 다음과 같습니다:
  • Anger: 😡
  • Fear: 😨
  • Happy: 😊
  • Tender: 🥰
  • Sad: 😢

사용 예시

  1. 1.단순 문장 입력 감정 분석:
  2. 2.사용자가 입력한 텍스트에 대해 모델이 감정을 예측하고, 각 감정의 확률을 함께 출력합니다.
  1. 1.엑셀 파일에서 감정 분석:
  2. 2.엑셀 파일에서 지정한 텍스트 열과 행 범위를 읽어와, 해당 텍스트들에 대해 감정을 분류하고 결과를 출력합니다.

코드 사용 예시

python
# 토크나이저 및 모델 로드
from transformers import AutoTokenizer, AutoModelForSequenceClassification

# KoBERT 토크나이저와 모델 로드
tokenizer = AutoTokenizer.from_pretrained("monologg/kobert", trust_remote_code=True)
model = AutoModelForSequenceClassification.from_pretrained("rkdaldus/ko-sent5-classification")

# 사용자 입력 텍스트 감정 분석
text = "오늘 정말 행복해!"
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
with torch.no_grad():
    outputs = model(**inputs)
predicted_label = torch.argmax(outputs.logits, dim=1).item()

# 감정 레이블 정의
emotion_labels = {
    0: ("Angry", "😡"),
    1: ("Fear", "😨"),
    2: ("Happy", "😊"),
    3: ("Tender", "🥰"),
    4: ("Sad", "😢")
}

# 예측된 감정 출력
print(f"예측된 감정: {emotion_labels[predicted_label][0]} {emotion_labels[predicted_label][1]}")