File size: 3,663 Bytes
2725cc1 d3c07ea 2725cc1 d3c07ea | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | ---
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]}") |