Ko-Edu Classifier 2k
ํ๊ตญ์ด ์ฌ์ ํ์ต ๋ง๋ญ์น ํ๋ฆฌํฐ ํ๊ฐ ๋ชจ๋ธ
์์ธ
๊ธฐ๋ฐ ๋ชจ๋ธ: dragonkue/snowflake-arctic-embed-l-v2.0-ko
ํ์ต ๋ฐ์ดํฐ: werty1248/Ko-Edu-Annotation-500K ๋ฐ AI HUB ๋ฐ์ดํฐ ๋ฑ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ผ๋ฒจ๋ง ํ 100K ๋ฐ์ดํฐ(์ฝ๊ด์ ๋ฐ๋ผ ๊ณต๊ฐ X)
- 100K ๋ฐ์ดํฐ ๋ชฉ๋ก: ๋ ํ๋ชจ ์ฌ์ ํ์ต ๋ฐ์ดํฐ - ํ๊ตญ์ด, ํ๊ตญ์ด ์ฑ๋ฅ์ด ๊ฐ์ ๋ ์ด๊ฑฐ๋AI ์ธ์ด๋ชจ๋ธ ๊ฐ๋ฐ ๋ฐ ๋ฐ์ดํฐ, ๋๋ฌด์ํค ๋ฌธ์ ๋ฐ์ดํฐ
๋ฌธ์์ ์ 512ํ ํฐ์ ๋ฃ๋ ๊ฒ์ด ์๋ ๋ฉด์์ ๊ถ์ฅ๋์ง๋ง, ์ต๋ 2048ํ ํฐ๊น์ง ํ์ต๋์์ต๋๋ค.
ํ๋ฆฌํฐ ์์ธก ํ๊ท ๊ณผ ๋ถ์ฐ์ ํจ๊ป ์ถ๋ ฅํ๋ฏ๋ก ์ผ๋ถ ๋ถ์ฐ์ด ๋์ ๋ฐ์ดํฐ๋ง ๋ ๊ธด ๋ฌธ๋งฅ์ ์ฃผ๊ณ ํ๊ฐ๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค.
- 512ํ ํฐ์์ test accuracy: 69.87%
- 1,024ํ ํฐ์์ test accuracy: 72.92%
- 2,048ํ ํฐ์์ test accuracy: 74.10%
์ฌ์ฉ๋ฒ
- ์ฒซ๋ฒ์งธ head: ํ๋ฆฌํฐ ์์ธก logit (mu = 4 * sigmoid(logit))
- ๋๋ฒ์งธ head: ํ๋ฆฌํฐ ์์ธก์ ๋ถ์ฐ logit (sigma = sqrt(e^(logit)))
- 3-5๋ฒ์งธ head: [์ ์ / ์ฝ๊ฐ์ ํ์ฑ ์ค๋ฅ / ์ฌ๊ฐํ ํ์ฑ ์ค๋ฅ] 3-class classification logit
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("werty1248/Ko-Edu-Classifier-2k")
model = AutoModelForSequenceClassification.from_pretrained("werty1248/Ko-Edu-Classifier-2k")
max_tokens = 512 # or 1024, 2048
model.eval()
text = """๋ ์๋์ฌ๋ ๊ฐ๋ค๋์ ๋ฎ์ ์ด๋ชจ๊ฐ ๋ค์๋ณด๊ฒ๋๋๊ฒ ๋ค์ ๊ทธ๋์ฒ๋ผ ์๋ฎ๊ฒ ์๋ง๋ณด๋ฉด ๋๊ปด์ง๋๊ฑธ์๋ ์๋๊ฑฐ์?
์๋ง๋?"""
text2 = """Ko-Edu-Annotation-500K
ํ๊ตญ์ด ์ฌ์ ํ์ต ๋ฐ์ดํฐ ํ๋ฆฌํฐ ํ๊ฐ ๋ชจ๋ธ ํ์ต ๋ฐ์ดํฐ ์
Annotation ์๊ฐ ๊ธฐ์ค 1x 5090์์ ์ฝ 24์๊ฐ
๋ด์ฉ
quality_score: ์ต์ข
์ด๋
ธํ
์ด์
์ ์
content_score: ํ์ฑ ์๋ฌ๋ฅผ ๋ฌด์ํ์ ๋ ๋ด์ฉ์ ์ ์
critical_error: ํ์ฑ ์๋ฌ(ํต์ฌ ๊ทธ๋ฆผ/ํ/์์ ๋๋ฝ)๋ก ์ธํด ์๋ฌธ์ ์์๋ณด๊ธฐ ํ๋ฆ
noncritical_error: ํ์ฑ ์๋ฌ(ํ๊ฐ plane text๋ก ๋ณํ ๋ฑ)๊ฐ ์์ง๋ง ์๋ฌธ์ ์ดํดํ ์๋ ์์
Annotation Model
LilaRest/gemma-4-31B-it-NVFP4-turbo
Gemma-4-31B ๋ชจ๋ธ์ Attention๊น์ง NVFP4๋ก ์์ํ ํ ๋ชจ๋ธ
Solar Pro 4, Qwen 3.8 Flash Next ๋ชจ๋ธ๊ณผ ํจ๊ป ๋น๊ตํ์ ๋, ์ ์ฑ์ ํ๊ฐ(edge case ํ์ธ) ๋ฐ ์ ๋์ ํ๊ฐ(๋์ผ ๋ชจ๋ธ 3ํ ๋ฐ๋ณต ํ๊ฐ์ Spearman ์๊ด ๊ณ์์ ์๋ก ๋ค๋ฅธ ๋ชจ๋ธ ๊ฐ ํ๊ฐ ๊ฐ Spearman ์๊ด ๊ณ์๊ฐ 0.78->0.73 ์ ๋๋ก ํฐ ์ฐจ์ด ์์)๋ฅผ ๋ค์ด, ํด๋น ๋ชจ๋ธ์ด ์ถฉ๋ถํ ๋ณ๋ณ๋ ฅ์ด ์๋ค๊ณ ํ๋จํ์ต๋๋ค.
"""
input = tokenizer([text, text2], return_tensors='pt', truncation=True, padding=True, max_length=max_tokens)
with torch.no_grad():
output = model(**input)
mu = 4.0 * torch.sigmoid(output.logits[:, 0])
sigma = torch.sqrt(torch.exp(output.logits[:, 1].clamp(-5.0, 2.0)))
# Pass, Non-Critical, Critical
integrity_prob = torch.softmax(output.logits[:, 2:5], dim=-1)
crit_prob = integrity_prob[:, 2]
# if mu < 2.0, final_mu = mu.
# else, final_mu = (1-crit_prob) * mu + crit_prob * 2.0
final_mu = mu - crit_prob * torch.relu(mu - 2.0)
print(f"Value: {final_mu[0].item():.3f}ยฑ{sigma[0].item():.3f}")
print(f"Value: {final_mu[1].item():.3f}ยฑ{sigma[1].item():.3f}")
# ์์ ์ถ๋ ฅ
Value: 0.050ยฑ0.152
Value: 2.344ยฑ0.434
์ฑ๋ฅ
Validation (60K)
512ํ ํฐ truncation
| ์ ์ | Precision | Recall | F1 | Support |
|---|---|---|---|---|
| 0 | 87.53 | 75.56 | 81.11 | 6,735 |
| 1 | 85.79 | 87.25 | 86.52 | 27,932 |
| 2 | 68.29 | 71.22 | 69.73 | 14,252 |
| 3 | 66.76 | 64.30 | 65.51 | 7,830 |
| 4 | 72.18 | 74.93 | 73.53 | 3,251 |
| ํฉ๊ณ | - | macro-F1 | 75.28 | 60,000 |
2048ํ ํฐ truncation
| ์ ์ | Precision | Recall | F1 | Support |
|---|---|---|---|---|
| 0 | 87.63 | 76.39 | 81.63 | 6,735 |
| 1 | 86.92 | 88.58 | 87.74 | 27,932 |
| 2 | 72.43 | 73.95 | 73.18 | 14,252 |
| 3 | 71.18 | 67.94 | 69.52 | 7,830 |
| 4 | 73.30 | 82.01 | 77.41 | 3,251 |
| ํฉ๊ณ | - | macro-F1 | 77.90 | 60,000 |
Test (4,096)
512ํ ํฐ truncation
| ์ ์ | F1 | Support |
|---|---|---|
| 0 | 94.72 | 1,091 |
| 1 | 68.84 | 720 |
| 2 | 59.73 | 975 |
| 3 | 52.77 | 647 |
| 4 | 62.03 | 663 |
| Macro-F1 | 67.62 | 4,096 |
| ์ค์ ๏ผผ์์ธก | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 0 | 1005 | 85 | 0 | 1 | 0 |
| 1 | 18 | 591 | 109 | 2 | 0 |
| 2 | 7 | 260 | 597 | 95 | 3 |
| 3 | 1 | 48 | 215 | 348 | 41 |
| 4 | 0 | 13 | 116 | 220 | 321 |
2048ํ ํฐ truncation
| ์ ์ | F1 | Support |
|---|---|---|
| 0 | 95.24 | 1,091 |
| 1 | 72.93 | 720 |
| 2 | 66.84 | 975 |
| 3 | 54.64 | 647 |
| 4 | 71.37 | 663 |
| Macro-F1 | 72.21 | 4,096 |
| ์ค์ ๏ผผ์์ธก | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 0 | 1010 | 75 | 4 | 1 | 1 |
| 1 | 18 | 578 | 118 | 6 | 0 |
| 2 | 2 | 195 | 635 | 121 | 9 |
| 3 | 0 | 14 | 146 | 362 | 131 |
| 4 | 0 | 3 | 35 | 182 | 450 |
๋ถ์ฐ ํ์ฉ
- 512ํ ํฐ truncation์ผ๋ก 1์ฐจ ์์ธก
- 1์ฐจ ์์ธก์์ ๋ชจ๋ธ์ ์์ธก๊ฐ์ด ํ๋์ ์ ์ ๊ตฌ๊ฐ(0.5 ๋ฏธ๋ง / 0.5-1.5 / 1.5-2.5 / 2.5-3.5 / 3.5 ์ด์) ์์ ๋ค์ด๊ฐ ํ๋ฅ ์ด x% ๋ฏธ๋ง์ธ ๊ฒฝ์ฐ ์ ๋ ฅ ํ ํฐ ๊ธธ์ด๋ฅผ ๋๋ ค 2์ฐจ ์์ธก
์ด๋ก ๋น์ฉ: 512ํ ํฐ ์์ธก ๋น์ฉ์ 1๋ก ๋๊ณ , ํ ํฐ ๊ธธ์ด๊ฐ n๋ฐฐ๊ฐ ๋๋ฉด ์ฐ์ฐ๋์ด n^2์ด ๋๋ค๋ ์ ์ ํ์ ์ถ์ ํ ์ด๋ก ์ ๋น์ฉ
์๋ฅผ ๋ค์ด, **512 -> 1024, x = 50%**์ ๊ฒฝ์ฐ, 20.1% ๋ฐ์ดํฐ๊ฐ 1์ฐจ ์์ธก๋ง์ผ๋ก ๋ผ๋ฒจ์ ํ์ ํ ์ ์์ด 1,024ํ ํฐ ์์ธก์ ์ํํจ. ์์ ๋น์ฉ์ 1.8๋ฐฐ๊ฐ ๋๊ณ (20.1%์ ๋ํด 4๋ฐฐ ๋น์ฉ ์ถ๊ฐ ์์ธก), ๋์ ์ ํ๋๋ 69.87%->72.07%๋ก ์์นํจ.
ํ์ต ์์ธ
ํ๋ฆฌํฐ์ ํ๊ท ๊ณผ ๋ถ์ฐ์ ํจ๊ป ์์ธกํ๋ ๋ถํ์ค์ฑ ๋ชจ๋ธ๋ง + ํ์ฑ ์๋ฌ๋ฅผ ํ๋จํ๋ 3-class classification
- ํ์ต ๋์: ๊ธฐ๋ฐ ๋ชจ๋ธ์ ๋ง์ง๋ง 6๋ ์ด์ด + regression head + variance head + 3-class classification head
- ์์ค ํจ์: GaussianNLLLoss(regression) + CrossEntropyLoss(classification)
- ํ์ต๋ฅ : 3e-5 for 6 layers, 3e-4 for heads
- ๋ฐฐ์น ํฌ๊ธฐ: 256
- ํ์ต ๋ฐ์ดํฐ: 567,552 ๋ฌธ์ (540K ๋ฌธ์ + 4์ ๋ฐ์ดํฐ upsampling)
- epoch: 4 (8,868 steps)
- sequence length: 512, 1024, 2048 (4:2:1 ratio)
- ๋ฐ์ดํฐ ํน์ด์ฌํญ: 4์ ๋ฐ์ดํฐ๋ฅผ upsampling ํ์ฌ ์ ์ฒด ๋ฐ์ดํฐ์ 10% ์ด์์ด ๋๋๋ก ์กฐ์ (์ฝ 2๋ฐฐ upsampling)
1x 5090์์ ์ฝ 8์๊ฐ(0.5 epoch๋ง๋ค validation์ ์์๋ ์ด 3์๊ฐ ํฌํจ)
- Downloads last month
- 6
Model tree for werty1248/Ko-Edu-Classifier-2k
Base model
Snowflake/snowflake-arctic-embed-l-v2.0