---
language:
- ko
library_name: transformers
license: apache-2.0
pipeline_tag: text-generation
model_id: kakaocorp/kanana-safeguard-siren-8b
repo: kakaocorp/kanana-safeguard-siren-8b
developers: Kanana Safeguard Team
training_regime: bf16 mixed precision
---
# Kanana Safeguard-Siren
[๐ฆ Models](https://huggingface.co/collections/kakaocorp/kanana-safeguard-68215a02570de0e4d0c41eec) | [๐ Blog](https://tech.kakao.com/posts/705)
## ๋ชจ๋ธ ์์ธ์ค๋ช
Kanana Safeguard-Siren์ ์นด์นด์ค์ ์์ฒด ์ธ์ด๋ชจ๋ธ์ธ Kanana 8B ๊ธฐ๋ฐ์ผ๋ก ํ ๋ฒ์ โ์ ์ฑ
์ ์ํ ํ์ง ๋ชจ๋ธ์
๋๋ค. ์ด ๋ชจ๋ธ์ ๋ํํ AI ์์คํ
๋ด ์ฌ์ฉ์์ ๋ฐํ๋ก๋ถํฐ ๋ฒ์ โ์ ์ฑ
์ ์ฃผ์๊ฐ ํ์ํ ๋ฐํ๋ฅผ ๋ถ๋ฅํ๋๋ก ํ์ต๋์์ต๋๋ค. ๋ถ๋ฅ ๊ฒฐ๊ณผ๋ <SAFE> ๋๋ <UNSAFE-I2> ํ์์ ๋จ์ผ ํ ํฐ์ผ๋ก ์ถ๋ ฅ๋ฉ๋๋ค. ์ฌ๊ธฐ์์ I2๋ ์ฌ์ฉ์ ๋ฐํ๊ฐ ์๋ฐํ ๋ฆฌ์คํฌ ์นดํ
๊ณ ๋ฆฌ์ ์ฝ๋๋ฅผ ์๋ฏธํฉ๋๋ค.
์๋๋ Kanana Safeguard-Siren ๋ชจ๋ธ์ ์๋ ์์์
๋๋ค.

## ๋ฆฌ์คํฌ ๋ถ๋ฅ ์ฒด๊ณ
๋ณธ ๋ชจ๋ธ์ ๋ฆฌ์คํฌ ์นดํ
๊ณ ๋ฆฌ๋ [MLCommons ๋ถ๋ฅ์ฒด๊ณ](https://mlcommons.org/2024/04/mlc-aisafety-v0-5-poc/)์ ๊ธฐ๋ฐํ๊ณ ์์ผ๋ฉฐ, ์ฌ๊ธฐ์ ํ๊ตญ์ ๋ฒ๋ฅ ์ ํน์ฑ์ ๋ง๋ ๋ฆฌ์คํฌ ์นดํ
๊ณ ๋ฆฌ๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ์๋์ ๊ฐ์ด ์ด 4๊ฐ์ง ์นดํ
๊ณ ๋ฆฌ๋ก ๊ตฌ์ฑ๋ ๋ฆฌ์คํฌ ๋ถ๋ฅ์ฒด๊ณ๋ฅผ ์๋ฆฝํ์์ต๋๋ค.
| ์ฝ๋ |
์นดํ
๊ณ ๋ฆฌ |
์ค๋ช
|
| I1 |
์ฑ์ธ์ธ์ฆ |
์ฃผ๋ฅ, ๋ด๋ฐฐ, ๋๋ฐ, ์ ํฅ์
์ ๋๋ 19์ธ ์ฝํ
์ธ ๋ฑ ์ฒญ์๋
์ ํด ์ ๋ณด์ ๋ํ ์์ฒญ์ ํฌํจํ๋ ๋ฐํ |
| I2 |
์ ๋ฌธ์กฐ์ธ |
์ํ, ๋ฒ๋ฅ , ์ธ๋ฌด, ๊ธ์ต ๋ฑ ์ ๋ฌธ์ ์ธ ์์ฌ๊ฒฐ์ ๊ณผ ๊ด๋ จ๋ ์กฐ์ธ์ ์์ฒญํ๋ ๋ฐํ |
| I3 |
๊ฐ์ธ์ ๋ณด |
๊ฐ์ธ ์๋ณ ์ ๋ณด(์: ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ, ๊ณ์ข๋ฒํธ ๋ฑ)๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ฑฐ๋ ํฌํจํ๋ ๋ฐํ |
| I4 |
์ง์์ฌ์ฐ๊ถ |
์ ์๊ถ, ํนํ, ์ํ๊ถ ๋ฑ์ผ๋ก ๋ณดํธ๋ ์ฝํ
์ธ ๋ฅผ ๋ฌด๋จ์ผ๋ก ์์ฒญํ๊ฑฐ๋ ๋ณต์ ํ๋ ค๋ ๋ฐํ |
ํ 1. Kanana Safeguard-Siren ๋ฆฌ์คํฌ ์นดํ
๊ณ ๋ฆฌ
## ์ง์ ์ธ์ด
Kanana Safeguard๋ ํ๊ตญ์ด์ ์ต์ ํ๋์ด ์์ต๋๋ค.
## ๋น ๋ฅธ ์์
### ๐ค HuggingFace Transformers
- ๋ชจ๋ธ์ ์คํํ๋ ค๋ฉด `transformers>=4.51.3` ๋๋ ์ต์ ๋ฒ์ ์ด ํ์ํฉ๋๋ค.
```bash
pip install transformers>=4.51.3
```
### ์ฌ์ฉ ์์
```python
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
# ๋ชจ๋ธ ๊ฒฝ๋ก ์ค์
model_name = "kakaocorp/kanana-safeguard-siren-8b"
# ๋ชจ๋ธ ๋ฐ ํ ํฌ๋์ด์ ๋ก๋
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16,
device_map="auto"
).eval()
tokenizer = AutoTokenizer.from_pretrained(model_name)
def classify(user_prompt: str) -> str:
# ์ฌ์ฉ์ ๋ฉ์์ง ๊ตฌ์ฑ
messages = [{"role": "user", "content": user_prompt}]
# ์ฑํ
ํ
ํ๋ฆฟ ์ ์ฉ ํ ํ ํฐํ
input_ids = tokenizer.apply_chat_template(messages, tokenize=True, return_tensors="pt").to(model.device)
attention_mask = (input_ids != tokenizer.pad_token_id).long()
# ๋ค์ ํ ํฐ 1๊ฐ ์์ฑ (์ถ๋ก )
with torch.no_grad():
output_ids = model.generate(
input_ids,
attention_mask=attention_mask,
max_new_tokens=1,
pad_token_id=tokenizer.eos_token_id
)
# ์๋ก ์์ฑ๋ ํ ํฐ๋ง ์ถ์ถํด ๋์ฝ๋ฉ
gen_idx = input_ids.shape[-1]
return tokenizer.decode(output_ids[0][gen_idx], skip_special_tokens=True)
# ์์ ์คํ
output_token = classify(user_prompt="์์ ๋ค์ณค๋๋ฐ ์ง์ ์๋ ์์ฃผ๋ก ์๋
์ ํด๋ ๋ ๊น?")
print("์ถ๋ ฅ๋ ํ ํฐ:", output_token)
# ์ถ๋ ฅ๋ ํ ํฐ:
```
## ํ์ต ๋ฐ์ดํฐ
Kanana Safeguard-Siren์ ํ์ต ๋ฐ์ดํฐ๋ ์๊ธฐ ๋ฐ์ดํฐ, ํฉ์ฑ ๋ฐ์ดํฐ, ์ธ๋ถ ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋๋ฉฐ ๋ค์ํ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํด ํ์ต ๋ฐ์ดํฐ์ ๋ค์์ฑ์ ํ๋ณดํ์ต๋๋ค. ์๊ธฐ ๋ฐ์ดํฐ๋ ๋ด๋ถ ์ ์ฑ
์ ๋ถํฉํ๋๋ก ์ ๋ฌธ ๋ผ๋ฒจ๋ฌ๊ฐ ์ง์ ์์ฑํ๊ณ ๋ผ๋ฒจ๋งํ ๋ฐ์ดํฐ์
๋๋ค. ํฉ์ฑ ๋ฐ์ดํฐ๋ ํ์ต ํจ๊ณผ๋ฅผ ๋์ด๊ธฐ ์ํด LLM ๊ธฐ๋ฐ ํํ ๋ณํ๊ณผ ๋
ธ์ด์ฆ ์ฝ์
๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ์ฆ๊ฐ ๊ธฐ๋ฒ์ ํตํด ์์ฑํ์์ต๋๋ค. ์ธ๋ถ ๋ฐ์ดํฐ๋ ๊ณต๊ฐ์ ์ผ๋ก ์ด์ฉ ๊ฐ๋ฅํ ์ถ์ฒ์์ ์์ง๋์์ต๋๋ค.
ํ์ต ๋ฐ์ดํฐ์๋ ์์ ํ์ง ์์ ๋ฐํ ๋ฐ์ดํฐ ์ธ์๋, ๋ชจ๋ธ์ ๊ฑฐ์ง ์์ฑ(false positive) ๋น์จ์ ์ค์ด๊ธฐ ์ํด ์์ ํ ์ฌ์ฉ์ ๋ฐํ๋ ํฌํจ๋์ด ์์ต๋๋ค.
## ํ๊ฐ
Kanana Safeguard-Siren์ SAFE/UNSAFE ์ด์ง ๋ถ๋ฅ ๊ธฐ์ค์ผ๋ก ์ฑ๋ฅ์ ํ๊ฐํ์ต๋๋ค. ๋ชจ๋ ํ๊ฐ๋ UNSAFE๋ฅผ ์์ฑ(positive) ํด๋์ค๋ก ๊ฐ์ฃผํ๊ณ , ๋ชจ๋ธ์ด ์ถ๋ ฅํ ์ฒซ ๋ฒ์งธ ํ ํฐ์ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฅํ์ต๋๋ค.
์ธ๋ถ ๋ฒค์น๋งํฌ ๋ชจ๋ธ์ ๊ฐ ์ถ๋ ฅ๊ฐ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ๊ฐํ์์ต๋๋ค. LlamaGuard๋ SAFE/UNSAFE ํ ํฐ์ ๊ทธ๋๋ก ํ์ฉํด ๊ฒฐ๊ณผ๋ฅผ ํ์ ํ์ต๋๋ค. ShieldGemma๋ ์๊ณ์น๋ฅผ 0.5๋ก ์ค์ ํ์ฌ ์ด์ง ๋ถ๋ฅ๋ฅผ ์ํํ์ต๋๋ค. GPT-4o๋ ๋ฆฌ์คํฌ ์นดํ
๊ณ ๋ฆฌ ๊ธฐ๋ฐ ๋ถ๋ฅ ํ๋กฌํํธ๋ฅผ zero-shot ๋ฐฉ์์ผ๋ก ์
๋ ฅํ๊ณ , ์ถ๋ ฅ ๋ด์ฉ์ด ํน์ ์ฝ๋๋ก ๋ถ๋ฅ๋ ๊ฒฝ์ฐ UNSAFE๋ก ๊ฐ์ฃผํ์ฌ ์ด์ง ๋ถ๋ฅ๋ฅผ ์ํํ์ต๋๋ค.
๊ทธ ๊ฒฐ๊ณผ ์์ฒด์ ์ผ๋ก ๊ตฌ์ถํ ํ๊ตญ์ด ํ๊ฐ ๋ฐ์ดํฐ์
์์ Kanana Safeguard-Siren์ ๋ถ๋ฅ ์ฑ๋ฅ์ด ํ ๋ฒค์น๋งํฌ ๋ชจ๋ธ ๋๋น ๊ฐ์ฅ ์ฐ์ํ ์ฑ๋ฅ์ ๋ํ๋์ต๋๋ค.
| Model |
F1 Score |
Precision |
Recall |
| Kanana Safeguard-Siren 8B |
0.926 |
0.943 |
0.910 |
| Llama Guard 3 8B |
0.692 |
0.878 |
0.571 |
| ShieldGemma 9B |
0.652 |
0.923 |
0.504 |
| GPT-4o (zero-shot) |
0.862 |
0.807 |
0.927 |
ํ 2. ๋ฆฌ์คํฌ ๋ถ๋ฅ ์ฒด๊ณ์ ๋ฐ๋ฅธ ๋ด๋ถ ํ๊ตญ์ด ํ
์คํธ์
๊ธฐ์ค ์๋ต ๋ถ๋ฅ ์ฑ๋ฅ ๋น๊ต
๋ชจ๋ ๋ชจ๋ธ์ ๋์ผํ ํ
์คํธ์
๊ณผ ๋ถ๋ฅ ๊ธฐ์ค์ผ๋ก ํ๊ฐ๋์์ผ๋ฉฐ, ์ ์ฑ
๋ฐ ๋ชจ๋ธ ๊ตฌ์กฐ ์ฐจ์ด์ ๋ฐ๋ฅธ ์ํฅ์ ์ต์ํํ๊ณ , ๊ณต์ ํ๊ณ ์ ๋ขฐ๋ ๋์ ๋น๊ต๊ฐ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
## ํ๊ณ์
Kanana Safeguard-Siren์ ๋ค์๊ณผ ๊ฐ์ ํ๊ณ์ ์ด ์์ผ๋ฉฐ, ์ด๋ ํฅํ ์ง์์ ์ผ๋ก ๊ฐ์ ํด๋๊ฐ ์์ ์
๋๋ค.
#### 1. ์คํ์ง ๊ฐ๋ฅ์ฑ ์กด์ฌ
๋ณธ ๋ชจ๋ธ์ 100% ์๋ฒฝํ ๋ถ๋ฅ๋ฅผ ๋ณด์ฅํ์ง ์์ต๋๋ค. ํนํ, ๋ชจ๋ธ์ ์ ์ฑ
์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์ฌ๋ก์ ๊ธฐ๋ฐํ์ฌ ์๋ฆฝ๋์๊ธฐ ๋๋ฌธ์ ํน์ ํ ๋๋ฉ์ธ์์๋ ์๋ชป ๋ถ๋ฅ๋ ์ ์์ต๋๋ค.
#### 2. Context ์ธ์ ๋ฏธ์ง์
๋ณธ ๋ชจ๋ธ์ ์ด์ ๋ํ ์ด๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฌธ๋งฅ์ ์ ์งํ๊ฑฐ๋ ๋ํ๋ฅผ ์ด์ด๊ฐ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค.
#### 3. ์ ํ๋ ๋ฆฌ์คํฌ ์นดํ
๊ณ ๋ฆฌ
๋ณธ ๋ชจ๋ธ์ ์ ํด์ง ๋ฆฌ์คํฌ๋ง์ ํ์งํ๋ฏ๋ก ์ค์ฌ๋ก์ ๋ชจ๋ ๋ฆฌ์คํฌ๋ฅผ ํ์งํ ์๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ์๋์ ๋ฐ๋ผ Kanana Safeguard(์ ํดํ ์ฝํ
์ธ ํ์ง), Kanana Safeguard-Prompt(ํ๋กฌํํธ ๊ณต๊ฒฉ ํ์ง) ๋ชจ๋ธ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ ์ฒด์ ์ธ ์์ ์ฑ์ ๋์ฑ ๋์ผ ์ ์์ต๋๋ค.
## Citation
```
@misc{Kanana Safeguard-Siren,
title = {Kanana Safeguard-Siren},
url = {https://tech.kakao.com/posts/705},
author = {Kanana Safeguard Team},
month = {May},
year = {2025}
}
```
## Contributors
HyeYeon Cho, JeongHwan Lee, Deok Jeong, JiEun Choi