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