Views
No views yet
| Emotion (Korean) | Emotion (EN) |
|---|---|
| 기쁨 | Joy |
| 설렘 | Excitement |
| 평범함 | Neutral |
| 놀라움 | Surprise |
| 불쾌함 | Disgust |
| 두려움 | Fear |
| 슬픔 | Sadness |
| 분노 | Anger |
1from transformers import AutoTokenizer, AutoModelForSequenceClassification
2import torch
3import torch.nn.functional as F
4
5# 1) Load Model & Tokenizer
6MODEL_NAME = "LimYeri/HowRU-KoELECTRA-Emotion-Classifier"
7
8tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
9model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME)
10
11# GPU 사용 가능 시 자동 전환
12device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
13model.to(device)
14model.eval()
15
16# 감정 라벨 매핑 (id2label)
17id2label = model.config.id2label
18
19
20# 2) Inference Function
21def predict_emotion(text: str):
22 """
23 Returns:
24 - top1_pred: 예측된 감정 라벨
25 - probs_sorted: 감정별 확률(내림차순)
26 - top2_pred: 상위 두 개의 감정
27 """
28
29 # 토크나이징
30 inputs = tokenizer(
31 text,
32 return_tensors="pt",
33 truncation=True,
34 padding=True,
35 max_length=512
36 ).to(device)
37
38 # 추론
39 with torch.no_grad():
40 logits = model(**inputs).logits
41 probs = F.softmax(logits, dim=-1)[0]
42
43 # 정렬된 확률
44 probs_sorted = sorted(
45 [(id2label[i], float(probs[i])) for i in range(len(probs))],
46 key=lambda x: x[1],
47 reverse=True
48 )
49
50 top1_pred = probs_sorted[0]
51 top2_pred = probs_sorted[:2]
52
53 return {
54 "text": text,
55 "top1_emotion": top1_pred,
56 "top2_emotions": top2_pred,
57 "all_probabilities": probs_sorted,
58 }
59
60
61# 3) Example
62result = predict_emotion("오늘 정말 기분이 좋고 행복한 하루였어!")
63print(result)1from transformers import pipeline
2
3MODEL_NAME = "LimYeri/HowRU-KoELECTRA-Emotion-Classifier"
4
5classifier = pipeline(
6 "text-classification",
7 model=MODEL_NAME,
8 tokenizer=MODEL_NAME,
9 top_k=None # 전체 감정 확률 반환
10)
11
12# 예측
13text = "오늘 정말 기분이 좋고 행복한 하루였어!"
14result = classifier(text)
15
16result = result[0]
17
18print("입력 문장:", text)
19print("\nTop-1 감정:", result[0]['label'], f"({result[0]['score']:.4f})")
20print("\n전체 감정 분포:")
21for r in result:
22 print(f" {r['label']}: {r['score']:.4f}")| Metric | Score |
|---|---|
| Eval Accuracy | 0.95 |
| Eval F1 Macro | 0.95 |
| Eval Loss | 0.16 |
1@misc{HowRUEmotion2025,
2 title={HowRU KoELECTRA Emotion Classifier},
3 author={Lim, Yeri},
4 year={2025},
5 publisher={Hugging Face},
6 howpublished={\url{https://huggingface.co/LimYeri/HowRU-KoELECTRA-Emotion-Classifier}}
7}