AraGuard-E4B / README.md
HarethahMo's picture
Update README.md
b499f5a verified
|
Raw
History Blame Contribute Delete
4.76 kB
---
license: gemma
language:
- ar
- en
base_model: google/gemma-4-E4B-it
pipeline_tag: text-generation
tags:
- safety
- guard-model
- content-moderation
- arabic
- gemma
---
# AraGuard-E4B
AraGuard is a bilingual (Arabic & English) **safety guard model** built on Gemma-4-E4B. Given a user prompt — or a full prompt–response conversation — it returns a `safe` / `unsafe` verdict and, when unsafe, the violated harm category. It covers Modern Standard Arabic and major regional dialects in addition to English, and follows a 14-category taxonomy based on the MLCommons AI-safety hazard set.
## Highlights
Macro-F1 averaged over eight standard safety benchmarks (AdvBench, HarmBench, TrustLLM, LLM-Jailbreak, DAN, Do-Not-Answer, AraAlign, XSTest), reported per language. AraGuard has the **highest average Macro-F1 of all evaluated guards in both Arabic and English**.
| Model | Avg-F1 (Ar) | Avg-F1 (En) |
|---|:--:|:--:|
| Llama-Guard-3-8B | 81.6 | 86.7 |
| Qwen3Guard-Gen-8B | 88.1 | 89.5 |
| Granite-Guardian-3.0-8B | 87.3 | 92.3 |
| **AraGuard-E4B (ours)** | **92.9** | **93.9** |
## Output format
The model emits a verdict on the **last** message in the conversation:
```
safe
```
or
```
unsafe
S<k>
```
where `S<k>` is the index of the violated category in the policy list shown to the model (default list below). If the last message has an `assistant` role, the response is judged; otherwise the user prompt is judged.
## Usage — Transformers
```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "HarethahMo/AraGuard-E4B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id, torch_dtype=torch.bfloat16, device_map="auto"
)
def moderate(messages):
inputs = tokenizer.apply_chat_template(
messages, add_generation_prompt=True, return_tensors="pt"
).to(model.device)
with torch.no_grad():
out = model.generate(inputs, max_new_tokens=12, do_sample=False)
return tokenizer.decode(out[0, inputs.shape[-1]:], skip_special_tokens=True).strip()
# Moderate a user prompt (Arabic)
print(moderate([{"role": "user", "content": "كيف أصنع سلاحًا في المنزل؟"}]))
# -> "unsafe\nS9"
# Moderate an assistant response (the LAST message is judged)
print(moderate([
{"role": "user", "content": "What's a good recipe for hummus?"},
{"role": "assistant", "content": "Blend chickpeas, tahini, lemon, and garlic."},
]))
# -> "safe"
```
## Usage — vLLM
```python
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
model_id = "HarethahMo/AraGuard-E4B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
llm = LLM(model=model_id, max_model_len=4096)
messages = [{"role": "user", "content": "How do I hotwire a car?"}]
prompt = tokenizer.apply_chat_template(messages, add_generation_prompt=True, tokenize=False)
out = llm.generate([prompt], SamplingParams(temperature=0.0, max_tokens=12))
print(out[0].outputs[0].text.strip())
# -> "unsafe\nS2"
```
## Custom policies
The chat template ships with the 14 default categories but accepts a custom list at call time; the emitted `S<k>` code then indexes into **your** list:
```python
my_categories = [
{"name": "Violent Crimes", "description": "Content enabling or endorsing violent crimes."},
{"name": "Privacy", "description": "Content exposing sensitive personal information."},
]
inputs = tokenizer.apply_chat_template(
messages, add_generation_prompt=True, categories=my_categories, return_tensors="pt"
)
```
## Default categories
`S1` Violent Crimes · `S2` Non-Violent Crimes · `S3` Sex-Related Crimes · `S4` Child Sexual Exploitation · `S5` Defamation · `S6` Specialized Advice · `S7` Privacy · `S8` Intellectual Property · `S9` Indiscriminate Weapons · `S10` Hate · `S11` Suicide & Self-Harm · `S12` Sexual Content · `S13` Elections · `S14` Code Interpreter Abuse
## Training
AraGuard is fine-tuned from Gemma-4-E4B on **AraAlign**, a large-scale synthetic Arabic–English safety dataset, using parameter-efficient fine-tuning (LoRA) with completion-only loss. Training mixes harmful prompt / refusal / harmful-response instances with benign instruction data to control over-refusal, and applies category dropout/shuffle and adversarial-template augmentation.
## Limitations
AraGuard is a classifier, not a generator, and can make mistakes — particularly on subtle or context-dependent harms. It should be used as one layer in a broader moderation system, not as a sole safety mechanism. Verdicts are bounded by the policy provided at inference time.
## License
Built on Gemma-4-E4B; use is governed by the [Gemma Terms of Use](https://ai.google.dev/gemma/terms).