|
--- |
|
library_name: transformers |
|
base_model: |
|
- monologg/kobert |
|
--- |
|
# KoBERT ๊ธฐ๋ฐ ํ๊ตญ์ด ๊ฐ์ ๋ถ๋ฅ ๋ชจ๋ธ |
|
|
|
์ด ํ๋ก์ ํธ๋ **ํ๊ตญ์ด ํ
์คํธ์ ๊ฐ์ ์ ๋ถ๋ฅ**ํ๋ KoBERT ๊ธฐ๋ฐ์ ๊ฐ์ ๋ถ๋ฅ ๋ชจ๋ธ์ ํ์ตํ๊ณ ํ์ฉํ๋ ์ฝ๋๋ฅผ ํฌํจํฉ๋๋ค. ์ด ๋ชจ๋ธ์ ์
๋ ฅ๋ ํ
์คํธ๊ฐ **๋ถ๋
ธ(Anger), ๋๋ ค์(Fear), ๊ธฐ์จ(Happy), ํ์จ(Tender), ์ฌํ(Sad)** ์ค ์ด๋ค ๊ฐ์ ์ ํด๋นํ๋์ง๋ฅผ ์์ธกํฉ๋๋ค. |
|
|
|
## 1. ๋ชจ๋ธ ํ์ต ๊ณผ์ |
|
|
|
### Colab ํ๊ฒฝ ์ค์ ๋ฐ ๋ฐ์ดํฐ ์ค๋น |
|
1. **ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น**: |
|
`transformers`, `datasets`, `torch`, `pandas`, `scikit-learn` ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค. |
|
|
|
2. **๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ**: |
|
ai hub ์ ๋ฑ๋ก๋ ํ๊ตญ์ด ๊ฐ์ฑ ๋ํ ๋ฐ์ดํฐ๋ก๋ถํฐ ๊ฐ์ ๋ถ๋ฅ์ฉ CSV ํ์ผ์ ๋ถ๋ฌ์ต๋๋ค. |
|
|
|
3. **๋ฐ์ดํฐ์
์ค๋น**: |
|
- **ํ์ต/๊ฒ์ฆ ๋ฐ์ดํฐ ๋ถํ **: 80%๋ ํ์ต ๋ฐ์ดํฐ๋ก, 20%๋ ๊ฒ์ฆ ๋ฐ์ดํฐ๋ก ์ฌ์ฉ. |
|
- **HuggingFace Dataset ํ์ ๋ณํ**: Pandas DataFrame์ HuggingFace `Dataset`์ผ๋ก ๋ณํ. |
|
- **๋ ์ด๋ธ ์ปฌ๋ผ๋ช
๋ณ๊ฒฝ**: ๊ฐ์ ๋ ์ด๋ธ์ ๋ํ๋ด๋ `label_int` ์ปฌ๋ผ์ `labels`๋ก ๋ณ๊ฒฝ. |
|
- **๋ฐ์ดํฐ ํ ํฐํ**: `monologg/kobert` ํ ํฌ๋์ด์ ๋ฅผ ์ด์ฉํด ์
๋ ฅ ํ
์คํธ๋ฅผ ํ ํฐํ. |
|
- **ํ์ ๋ณํ**: `input_ids`, `attention_mask`, `labels`๋ง ๋จ๊ฒจ ํ์ต ์ค๋น ์๋ฃ. |
|
|
|
4. **๋ชจ๋ธ ๋ฐ ํ์ต ์ค์ **: |
|
- **๋ชจ๋ธ**: `monologg/kobert` ๋ชจ๋ธ์ ๋ถ๋ฌ์ 5๊ฐ์ ๊ฐ์ ๋ ์ด๋ธ์ ๋ถ๋ฅํ๋๋ก ์ค์ . |
|
- **ํ์ต ํ์ดํผํ๋ผ๋ฏธํฐ**: |
|
- `learning_rate=2e-5`, `num_train_epochs=10`, `batch_size=16`. |
|
- F1 ์ค์ฝ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฒ ์คํธ ๋ชจ๋ธ ์ ์ฅ. |
|
- Early stopping ์ ์ฉ. |
|
|
|
5. **ํ์ต ์งํ ๋ฐ ๋ชจ๋ธ ์ ์ฅ**: |
|
- ํ์ต ์๋ฃ ํ ๋ชจ๋ธ์ Google Drive์ ์ ์ฅ. |
|
|
|
### ์ฑ๋ฅ ํ๊ฐ ๋ฐ ํ
์คํธ |
|
- **ํ๊ฐ ์งํ**: Accuracy, F1 score (macro, weighted) ๊ณ์ฐ. |
|
- **ํ
์คํธ ๋ฐ์ดํฐ ํ๊ฐ**: ํ์ต๋ ๋ชจ๋ธ์ ์ด์ฉํด ํ
์คํธ ๋ฐ์ดํฐ์
ํ๊ฐ. |
|
|
|
## 2. ๋ชจ๋ธ ์ฌ์ฉ ๋ฐฉ๋ฒ |
|
|
|
### ์ฌ์ ์ค๋น |
|
- HuggingFace Hub์์ ํ์ต๋ ๋ชจ๋ธ์ ๋ถ๋ฌ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
|
- ๋ชจ๋ธ ๋ฐ ํ ํฌ๋์ด์ ๋ `monologg/kobert` ๊ธฐ๋ฐ์ด๋ฉฐ, ๋ถ๋ฅ ๋ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: |
|
- **Anger**: ๐ก |
|
- **Fear**: ๐จ |
|
- **Happy**: ๐ |
|
- **Tender**: ๐ฅฐ |
|
- **Sad**: ๐ข |
|
|
|
### ์ฌ์ฉ ์์ |
|
1. **๋จ์ ๋ฌธ์ฅ ์
๋ ฅ ๊ฐ์ ๋ถ์**: |
|
- ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ํ
์คํธ์ ๋ํด ๋ชจ๋ธ์ด ๊ฐ์ ์ ์์ธกํ๊ณ , ๊ฐ ๊ฐ์ ์ ํ๋ฅ ์ ํจ๊ป ์ถ๋ ฅํฉ๋๋ค. |
|
|
|
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]}") |