| | --- |
| | 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]}") |