Upload README.md with huggingface_hub
Browse files
README.md
CHANGED
|
@@ -1,106 +1,91 @@
|
|
| 1 |
---
|
| 2 |
language:
|
| 3 |
- ko
|
| 4 |
-
base_model:
|
| 5 |
-
library_name: peft
|
| 6 |
tags:
|
| 7 |
-
-
|
| 8 |
-
-
|
| 9 |
-
- sft
|
| 10 |
- korean
|
| 11 |
-
-
|
| 12 |
-
-
|
| 13 |
- mental-health
|
| 14 |
-
license:
|
| 15 |
-
pipeline_tag: text-
|
| 16 |
---
|
| 17 |
|
| 18 |
-
# CT-NLP
|
| 19 |
|
| 20 |
-
**Safe Sustained Disagreement** ํ๋ก์ ํธ์
|
| 21 |
-
|
| 22 |
-
๋ฐํ ์คํ์ผ๊ณผ ๋น์๋ ด ํ ๋ก ํ๋์ ์ฃผ์
ํ์ต๋๋ค.
|
| 23 |
|
| 24 |
## ๋ชจ๋ธ ๊ฐ์
|
| 25 |
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
์ธ์ง ์ฌ๊ตฌ์ฑ์ ์ด๋๋ค๋ ๊ฐ์ค์ ๊ฒ์ฆํ๋ ์ฐ๊ตฌ์ฉ ๋ชจ๋ธ์
๋๋ค.
|
| 29 |
|
| 30 |
-
|
|
| 31 |
|---|---|
|
| 32 |
-
|
|
| 33 |
-
|
|
| 34 |
-
|
|
| 35 |
-
|
| 36 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
|
| 38 |
## ํ์ต ์ ๋ณด
|
| 39 |
|
| 40 |
| ํญ๋ชฉ | ๊ฐ |
|
| 41 |
|---|---|
|
| 42 |
-
| Base model |
|
| 43 |
-
|
|
| 44 |
-
|
|
| 45 |
-
|
|
| 46 |
-
|
|
| 47 |
-
|
|
| 48 |
-
|
|
| 49 |
-
|
|
| 50 |
-
|
|
| 51 |
-
| Eval mean token accuracy | 61.2% |
|
| 52 |
-
| ํ๋ฅด์๋ special token | `<persona:๊ธฐ์จ>` โฆ `<persona:๊น์น >` (5์ข
, mean-init) |
|
| 53 |
-
|
| 54 |
-
### Framework versions
|
| 55 |
-
|
| 56 |
-
- PEFT 0.19.1
|
| 57 |
-
- TRL 1.3.0
|
| 58 |
-
- Transformers 5.8.0.dev0
|
| 59 |
-
- PyTorch 2.7.0+cu128
|
| 60 |
-
- Datasets 4.8.5
|
| 61 |
|
| 62 |
## ์ฌ์ฉ๋ฒ
|
| 63 |
|
| 64 |
```python
|
|
|
|
| 65 |
import torch
|
| 66 |
-
from transformers import AutoTokenizer, AutoModelForCausalLM
|
| 67 |
-
from peft import PeftModel
|
| 68 |
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
tok = AutoTokenizer.from_pretrained(ADAPTER)
|
| 73 |
-
model = AutoModelForCausalLM.from_pretrained(BASE, torch_dtype=torch.bfloat16, device_map="auto")
|
| 74 |
-
model.resize_token_embeddings(len(tok), mean_resizing=False)
|
| 75 |
-
model = PeftModel.from_pretrained(model, ADAPTER)
|
| 76 |
model.eval()
|
| 77 |
|
| 78 |
-
|
| 79 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
f"<persona:{persona}> {persona}\n"
|
| 84 |
-
f"์ด ์๋๋ฆฌ์ค์ ๋ํด {persona}์ ๊ทน๋จ์ ๊ด์ ์ผ๋ก ๋ฐํํ์ธ์."
|
| 85 |
-
)
|
| 86 |
-
text = tok.apply_chat_template(
|
| 87 |
-
[{"role": "user", "content": prompt}],
|
| 88 |
-
tokenize=False, add_generation_prompt=True)
|
| 89 |
-
input_ids = tok(text, return_tensors="pt").input_ids.to(model.device)
|
| 90 |
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
```
|
| 95 |
|
| 96 |
## ์ฃผ์์ฌํญ
|
| 97 |
|
| 98 |
-
- ์ด ๋ชจ๋ธ์ **
|
| 99 |
-
-
|
| 100 |
-
|
| 101 |
-
- ์์ ๋๋ ์๊ธฐ ๊ฐ์
๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ง์ญ์์ค.
|
| 102 |
|
| 103 |
## ํ๋ก์ ํธ
|
| 104 |
|
| 105 |
- ์ฝ๋: [CT-NLP-project](https://github.com/thlee00/CT-NLP-project)
|
| 106 |
-
-
|
|
|
|
| 1 |
---
|
| 2 |
language:
|
| 3 |
- ko
|
| 4 |
+
base_model: klue/bert-base
|
|
|
|
| 5 |
tags:
|
| 6 |
+
- bert
|
| 7 |
+
- text-classification
|
|
|
|
| 8 |
- korean
|
| 9 |
+
- safety
|
| 10 |
+
- harm-detection
|
| 11 |
- mental-health
|
| 12 |
+
license: cc-by-4.0
|
| 13 |
+
pipeline_tag: text-classification
|
| 14 |
---
|
| 15 |
|
| 16 |
+
# CT-NLP Harm Direction Classifier
|
| 17 |
|
| 18 |
+
**Safe Sustained Disagreement** ํ๋ก์ ํธ์ 1๋จ๊ณ ํตํฉ ์ธ์ดํ๊ฐ๋ ํต์ฌ ๋ถํ.
|
| 19 |
+
KLUE-BERT-base๋ฅผ fine-tuneํด ํ๋ฅด์๋ ๋ฐํ๊ฐ **์น๋ฃ์ ๊ณผ์ฅ์ธ์ง ํด๋ก์ด ์ฆํญ์ธ์ง** ๋ฐฉํฅ์ ํ์งํฉ๋๋ค.
|
|
|
|
| 20 |
|
| 21 |
## ๋ชจ๋ธ ๊ฐ์
|
| 22 |
|
| 23 |
+
๋ฐํ์ **๊ฐ๋๊ฐ ์๋ ๋ฐฉํฅ**์ผ๋ก ๋ถ๋ฅํฉ๋๋ค. ๊ฐํ ๋ถ์ ์ ์ ์์ฒด๋ ์น๋ฃ์ ์ผ ์ ์์ผ๋ฉฐ,
|
| 24 |
+
๋ฌด๋ง๊ฐยท์๊ธฐ๋ฌด๊ฐ์นยท์ํด ๋ฐฉํฅ์ผ๋ก์ ์ด๋๋ง ํด๋กญ์ต๋๋ค.
|
|
|
|
| 25 |
|
| 26 |
+
| ๋ผ๋ฒจ | ์ค๋ช
|
|
| 27 |
|---|---|
|
| 28 |
+
| `therapeutic_exaggeration` (0) | ์น๋ฃ์ ๊ณผ์ฅ โ ๊ฐํ์ง๋ง ํ์ ยท๊ฐ์ญ์ , ๊ด์ ๋ณต๊ท ๊ฐ๋ฅ |
|
| 29 |
+
| `borderline` (1) | ๊ฒฝ๊ณ โ ๋ฐฉํฅ ๋ชจํธ, ๋ณด์์ ์ฒ๋ฆฌ ํ์ |
|
| 30 |
+
| `harmful_amplification` (2) | ํด๋ก์ด ์ฆํญ โ ๋ฌด๋ง๊ฐยท๋ฌด๊ฐ์นยท์ํด ๋ฐฉํฅ์ผ๋ก ์ด๋ |
|
| 31 |
+
|
| 32 |
+
### 5์ถ ํ๋ณ ๊ธฐ์ค
|
| 33 |
+
|
| 34 |
+
1. **๊ท์ธ ๋ฐฉํฅ** โ ์์ยท์ ๋ฐยท๋ด๋ถ ๊ท์ธ โโ ์ํฉ์ ยท์ผ์์
|
| 35 |
+
2. **ํฌ๋งยทํ์์ฑ** โ "๋ฐฉ๋ฒ ์๋ค/๋๋ฌ๋ค" โโ ๊ฐ๋ฅ์ฑยทํต์ ๊ฐ ๋ณด์กด
|
| 36 |
+
3. **์๊ธฐ๊ฐ์น** โ ๋ฌด๊ฐ์นยท์๊ธฐ๊ฒฝ๋ฉธ โโ ํ์ ๋ ์๊ธฐ๋นํ
|
| 37 |
+
4. **์ํดยท์๋จ** โ ์ํด ์ฌ๊ณ ยท๋ฐฉ๋ฒ ์ธ๊ธ (๊ท์น ๊ธฐ๋ฐ ํ๋๊ฒ์ดํธ)
|
| 38 |
+
5. **๊ฐ์ญ์ฑยทํด์ arc** โ ์ด์ฒดํยท๋ฌดํด์ โโ ํ์ ยท๊ฐ์ญยท๊ด์ ๋ณต๊ท
|
| 39 |
|
| 40 |
## ํ์ต ์ ๋ณด
|
| 41 |
|
| 42 |
| ํญ๋ชฉ | ๊ฐ |
|
| 43 |
|---|---|
|
| 44 |
+
| Base model | klue/bert-base |
|
| 45 |
+
| ํ์ต ๋ฐ์ดํฐ | ํ๊ตญ์ด ๊ทน๋จ ํ๋ฅด์๋ ํ ๋ก ๋ฐํ 9,756๊ฑด (group-split) |
|
| 46 |
+
| Epochs | 4 |
|
| 47 |
+
| Weighted CE | ํด๋์ค ๋ถ๊ท ํ ๋ณด์ |
|
| 48 |
+
| Accuracy | 0.786 |
|
| 49 |
+
| Macro F1 | 0.733 |
|
| 50 |
+
| **Harmful F1** | **0.842** (recall 0.81) |
|
| 51 |
+
| Therapeutic F1 | 0.870 |
|
| 52 |
+
| Borderline F1 | 0.488 (๋ผ๋ฒจ ๋
ธ์ด์ฆยท๊ฒฝ๊ณ ํด๋์ค) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
|
| 54 |
## ์ฌ์ฉ๋ฒ
|
| 55 |
|
| 56 |
```python
|
| 57 |
+
from transformers import AutoTokenizer, AutoModelForSequenceClassification
|
| 58 |
import torch
|
|
|
|
|
|
|
| 59 |
|
| 60 |
+
tok = AutoTokenizer.from_pretrained("thlee00/ct-nlp")
|
| 61 |
+
model = AutoModelForSequenceClassification.from_pretrained("thlee00/ct-nlp")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
model.eval()
|
| 63 |
|
| 64 |
+
text = "์ด์ฐจํผ ๋๋ ๋ญ ํด๋ ์ ๋ผ. ์ด๋ฒ์๋ ๋งํ๊ณ ์์ผ๋ก๋ ๊ทธ๋ด ๊ฑฐ์ผ."
|
| 65 |
+
inputs = tok(text, return_tensors="pt", truncation=True, max_length=512)
|
| 66 |
+
with torch.no_grad():
|
| 67 |
+
logits = model(**inputs).logits
|
| 68 |
+
label = model.config.id2label[logits.argmax(-1).item()]
|
| 69 |
+
print(label) # harmful_amplification
|
| 70 |
+
```
|
| 71 |
+
|
| 72 |
+
### ํตํฉ ์ธ์ดํ๊ฐ๋๋ก ์ฌ์ฉ
|
| 73 |
|
| 74 |
+
```python
|
| 75 |
+
from ctnlp.safeguard.safeguard import Safeguard
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 76 |
|
| 77 |
+
sg = Safeguard() # models/harm_direction ์๋ ๋ก๋
|
| 78 |
+
result = sg.gate_input("๊ฑฑ์ ๋ฌธ์ฅ")
|
| 79 |
+
# {"action": "allow" | "route" | "block", "label": ..., "score": ...}
|
| 80 |
```
|
| 81 |
|
| 82 |
## ์ฃผ์์ฌํญ
|
| 83 |
|
| 84 |
+
- ์ด ๋ชจ๋ธ์ **ํ ๋ก ๋ฐํ**๋ก ํ์ต๋์ด ์ฌ์ฉ์ ์
๋ ฅ๊ณผ ๋ ์ง์คํฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค (๋๋ฉ์ธ ์ํํธ).
|
| 85 |
+
- ์
๋ ฅ ๊ฒ์ดํธ ์ ์ฉ ์ ์๊ณ๊ฐ **0.4** ๊ถ์ฅ (๋ฌด๋ง๊ฐ ์ฌํ์จ 100% @ ์คํ 2.3%).
|
| 86 |
+
- ์์ ์ง๋จ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ง์ญ์์ค.
|
|
|
|
| 87 |
|
| 88 |
## ํ๋ก์ ํธ
|
| 89 |
|
| 90 |
- ์ฝ๋: [CT-NLP-project](https://github.com/thlee00/CT-NLP-project)
|
| 91 |
+
- SFT ๋ชจ๋ธ: [thlee00/ct-nlp-sft](https://huggingface.co/thlee00/ct-nlp-sft)
|