Views
No views yet
CrossEntropyLoss에 수동으로 **클래스 가중치(Class Weights)**를 적용하여 데이터 불균형 문제를 완화하고, 소수 클래스(기쁨, 당황 등)의 탐지 성능을 높였습니다.| Label (감정) | ID |
|---|---|
기쁨 | 0 |
당황 | 1 |
분노 | 2 |
불안 | 3 |
상처 | 4 |
슬픔 | 5 |
['기쁨', '당황', '분노', '불안', '상처', '슬픔'] 순서를 따릅니다.)transformers 라이브러리의 pipeline을 사용하여 쉽게 모델을 테스트할 수 있습니다.1from transformers import pipeline
2
3# TODO: '[YOUR-USERNAME]/[YOUR-MODEL-NAME]'을 본인의 허깅페이스 모델 경로로 변경하세요.
4model_name = "[YOUR-USERNAME]/[YOUR-MODEL-NAME]"
5classifier = pipeline("text-classification", model=model_name)
6
7# 예시 문장 테스트
8texts = [
9 "오늘 너무 기분 좋은 일이 생겼어!",
10 "이걸 어떻게 해야 할지 모르겠네...",
11 "진짜 화가 머리 끝까지 난다.",
12 "내일 발표인데 너무 떨리고 불안해."
13]
14
15# 예측 수행
16results = classifier(texts, top_k=1)
17
18for text, result in zip(texts, results):
19 print(f"입력: {text}")
20 print(f"감정: {result[0]['label']} (Score: {result[0]['score']:.4f})")
21 print("-" * 20)
22⚙️ 훈련 상세 (Training Details)
23본 모델은 train_final_v2.py 스크립트를 기반으로 훈련되었습니다.
24
251. 데이터셋 (Dataset)
26training-label.json: 원본 훈련 데이터
27
28test.json: 원본 테스트 데이터
29
30데이터 분리 (v2 전략):
31
32Train Set (90%): training-label.json의 90% (Stratified Split)
33
34Validation Set (10%): training-label.json의 10% (Stratified Split)
35
36Test Set (최종 평가용): test.json (별도 데이터)
37
382. 핵심 훈련 기법 (Key Techniques)
39클래스 가중치 (Class Weights): 데이터 불균형 문제를 해결하기 위해 CustomTrainer와 CrossEntropyLoss의 weight 파라미터를 사용했습니다. 각 클래스에 대해 수동으로 가중치를 부여하여 소수 클래스의 중요도를 높였습니다.
40
41적용된 가중치: [6.00, 4.50, 0.85, 1.80, 1.80, 0.92]
42
43가중치 순서 (라벨): ['기쁨', '당황', '분노', '불안', '상처', '슬픔']
44
45스케줄러 (Scheduler): cosine 학습률 스케줄러를 적용했습니다.
463. 주요 하이퍼파라미터 (Hyperparameters)HyperparameterValuebase_model_nameklue/roberta-basenum_train_epochs10learning_rate1e-5train_batch_size16eval_batch_size64weight_decay0.01max_length128warmup_ratio0.1lr_scheduler_typecosine