DOCS/troubleshooting/250808_happybell80_감정분류모델학습.md

2.8 KiB

250808 한국어 감정 분류 모델 학습

오후 5시 13분

한국어 감정 분류 모델 학습 및 배포

배경

  • 로빙의 감정 인식 기능 필요
  • 한국어 텍스트에서 7가지 감정 분류 (공포, 놀람, 분노, 슬픔, 중립, 행복, 혐오)
  • KLUE-BERT 기반 모델 학습

작업 과정

1. 환경 구성
  • WSL2 환경에서 학습 진행
  • 하드웨어: i9-12900KF, RTX 3060 x2, CUDA 12.6
  • emotion_training 폴더 생성 후 training_emotion으로 변경
  • uv 패키지 매니저로 가상환경 구성
2. 데이터 준비

KOTE 데이터셋

  • Hugging Face에서 다운로드
  • 6개 감정, 심각한 클래스 불균형
  • 학습 결과: F1 35.8%

AI Hub 데이터셋

  • 한국어_단발성_대화_데이터셋.xlsx
  • 한국어_연속적_대화_데이터셋.xlsx
  • 38,594개 샘플, 7개 감정 균형 분포
  • 학습 결과: F1 56.3%
3. 주요 문제 해결

TrainingArguments 파라미터 변경

# 기존 (오류)
evaluation_strategy="epoch"
# 수정
eval_strategy="epoch"

compute_loss 시그니처 오류

# WeightedTrainer 클래스에 추가
def compute_loss(self, model, inputs, return_outputs=False, num_items_in_batch=None):
    # num_items_in_batch 파라미터 추가 필요

Bash 타임아웃 문제 (중요)

  • 기본 2분 타임아웃으로 학습 중단 반복
  • 사용자 피드백: "타임아웃은 .. 신발.."
  • 해결: 1시간 타임아웃 설정
# Claude Code에서 timeout 설정
timeout=3600000  # 1시간
4. 최종 모델 성능
  • Macro F1 Score: 56.3%
  • ECE (Expected Calibration Error): 0.090
  • Brier Score: 0.564
  • 온도 보정 적용 (T=1.232)
5. Git 저장소 구성
6. 배포 계획
  • 51124 서버에 skill-emotion 서비스 구축
  • 포트 8503 사용
  • FastAPI 기반 API 서버
  • 로빙과 HTTP API로 연동

교훈

  1. 타임아웃 설정의 중요성: 긴 학습 작업 시 충분한 타임아웃 설정 필수
  2. 라이브러리 버전 호환성: transformers 라이브러리 업데이트로 파라미터명 변경 주의
  3. 데이터 품질: KOTE보다 AI Hub 데이터가 균형잡혀 있어 성능 향상 (35.8% → 56.3%)
  4. 파일 인코딩: README 작성 시 UTF-8 인코딩 확인 필요
  5. 브랜치명 규칙: main 브랜치 사용 (master 대신)
  6. uv 패키지 매니저: pip보다 빠르고 의존성 관리 편리

다음 단계

  • skill-emotion 서비스 구현
  • 로빙(rb10508_test)과 통합
  • 실시간 감정 분석 기능 추가