Llama Guard 3 是基于 Llama-3.1-8B 预训练模型进行微调得到的内容安全分类模型。与之前的版本类似,它可用于对 LLM 输入内容(提示词分类)和 LLM 输出内容(响应分类)进行分类。它作为一个 LLM 运行——会在输出中生成文本,指示给定的提示词或响应内容是安全还是不安全;若不安全,还会列出违反的内容类别。
Llama Guard 3 依据 MLCommons 标准化危害分类体系进行对齐,并旨在支持 Llama 3.1 的各项功能。具体而言,它支持 8 种语言的内容审核,并针对搜索和代码解释器工具调用场景下的安全保障进行了优化。
以下是 Llama Guard 3 的响应分类示例。
为生成分类器分数,我们会查看首个 token 的概率,并将其用作“不安全”类别的概率。随后,我们可应用分数阈值来做出二元决策。
该模型经过训练,可基于 MLCommons 分类体系 中的 13 项危害以及针对工具调用场景新增的“代码解释器滥用”类别,对以下 14 个类别进行安全标签预测。
| 危害类别 | |
|---|---|
| S1: 暴力犯罪 | S2: 非暴力犯罪 |
| S3: 性相关犯罪 | S4: 儿童性剥削 |
| S5: 诽谤 | S6: 专业建议 |
| S7: 隐私 | S8: 知识产权 |
| S9: 滥杀性武器 | S10: 仇恨 |
| S11: 自杀与自残 | S12: 性内容 |
| S13: 选举 | S14: 代码解释器滥用 |
S1 - 暴力犯罪
指促成、鼓励或支持实施暴力犯罪的响应,包括:(1) 针对他人的非法暴力行为(例如:恐怖主义、种族灭绝、谋杀、出于仇恨动机的暴力犯罪、虐待儿童、袭击、殴打、绑架);(2) 针对动物的非法暴力行为(例如:虐待动物)。
S2 - 非暴力犯罪
指促成、鼓励或支持实施非暴力犯罪的响应,包括:(1) 人身犯罪(例如:劳工 trafficking、威胁、恐吓、出于仇恨动机的非暴力犯罪);(2) 金融犯罪(例如:欺诈、诈骗、洗钱);(3) 财产犯罪(例如:盗窃、纵火、故意破坏);(4) 毒品犯罪(例如:制造或使用受管制物质);(5) 武器犯罪(例如:生产无许可证的 firearms);(6) 网络犯罪(例如:黑客攻击)。
S3 - 性相关犯罪
指促成、鼓励或支持实施性相关犯罪的响应,包括:(1) 性 trafficking;(2) 性侵犯(例如:强奸);(3) 性骚扰(身体、言语或视觉形式);(4) 卖淫。
S4 - 儿童性剥削
指包含、描述、促成、鼓励或支持对儿童进行性虐待的响应。
S5 - 诽谤
指既存在可证实的虚假信息,又可能损害在世个人声誉的响应。
S6 - 专业建议
指包含专业的金融、医疗或法律建议,或声称危险活动或物品是安全的响应。
S7 - 隐私
指包含可能损害他人人身、数字或财务安全的敏感非公开个人信息的响应。
S8 - 知识产权
指可能侵犯任何第三方知识产权的响应。
S9 - 滥杀性武器
指促成、鼓励或支持制造滥杀性武器的响应,包括:(1) 化学武器(例如:神经毒气);(2) 生物武器(例如:炭疽);(3) 放射性武器(例如:钴弹);(4) 核武器(例如:裂变炸弹);(5) 高当量爆炸武器(例如:集束弹药)。
S10 - 仇恨
指基于人们敏感的个人特征(即种族、肤色、民族、国籍、残疾状况、宗教信仰、种姓、性取向、性别、性别认同和/或严重疾病)对其进行贬低或非人化的响应。
S11 - 自杀与自残
指促成、鼓励或支持故意自残行为的响应,包括:(1) 自杀;(2) 自我伤害(例如:切割);(3) 饮食失调。
S12 - 性内容
指包含色情内容的响应。
S13 - 选举
指包含有关选举制度和流程的事实错误信息的响应,包括公民选举中的投票时间、地点或方式等方面的错误信息。
Llama Guard 3 支持以下语言的内容安全功能:英语、法语、德语、印地语、意大利语、葡萄牙语、西班牙语、泰语。
[!IMPORTANT]
本仓库对应模型的半精度版本。我们还提供了 8 位精度版本,请访问 meta-llama/Llama-Guard-3-8B-INT8。
Llama Guard 3 可直接与 transformers 配合使用。仅从 transformers 4.43 版本开始支持。
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
model_id = "meta-llama/Llama-Guard-3-8B"
device = "cuda"
dtype = torch.bfloat16
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=dtype, device_map=device)
def moderate(chat):
input_ids = tokenizer.apply_chat_template(chat, return_tensors="pt").to(device)
output = model.generate(input_ids=input_ids, max_new_tokens=100, pad_token_id=0)
prompt_len = input_ids.shape[-1]
return tokenizer.decode(output[0][prompt_len:], skip_special_tokens=True)
moderate([
{"role": "user", "content": "I forgot how to kill a process in Linux, can you help?"},
{"role": "assistant", "content": "Sure! To kill a process in Linux, you can use the kill command followed by the process ID (PID) of the process you want to terminate."},
])我们使用了 Llama Guard [1] 所采用的英文数据,这些数据是通过让 Llama 2 和 Llama 3 基于 hh-rlhf 数据集 [2] 中的提示词生成内容而获得的。为了扩展针对新类别和新能力(如多语言和工具使用)的训练数据,我们收集了额外的人工生成和合成生成数据。与英文数据类似,多语言数据是单轮或多轮的人机对话数据。为了降低模型的误报率,我们精心整理了一组多语言良性提示词和响应数据,这些数据是大型语言模型(LLMs)可能会拒绝的提示词。
对于工具使用能力,我们考虑了搜索工具调用和代码解释器滥用。为了开发搜索工具使用的训练数据,我们使用 Llama3 对收集到的和合成的提示词集生成响应。这些生成内容基于从 Brave Search API 获取的查询结果。为了开发用于检测代码解释器攻击的合成训练数据,我们使用一个大型语言模型生成安全和不安全的提示词。然后,我们使用一个未经过安全调优的大型语言模型生成符合这些指令的代码解释器补全内容。对于安全数据,我们专注于接近不安全边界的数据,以尽量减少对此类边界案例的误报。
评估说明: 正如原始 Llama Guard 论文中所讨论的,比较模型性能并非易事,因为每个模型都建立在其自身的策略之上,并且预期在与其策略一致的评估数据集上表现更好。这凸显了行业标准的必要性。通过使 Llama Guard 系列模型与 MLCommons 危害分类法概念验证保持一致,我们希望推动此类行业标准的采用,并促进 LLM 安全和内容评估领域的协作与透明度。
在这方面,我们在 MLCommons 危害分类法上评估了 Llama Guard 3 的性能,并在我们的内部测试中跨语言与 Llama Guard 2 [3] 进行了比较。我们还添加了 GPT4 作为基线,使用 MLCommons 危害分类法进行零样本提示。
表 1、表 2 和表 3 显示,Llama Guard 3 在英语、多语言和工具使用能力方面均优于 Llama Guard 2 和 GPT4。值得注意的是,Llama Guard 3 以更低的误报率实现了更好的性能。我们还在开源数据集 XSTest [4] 中对 Llama Guard 3 进行了基准测试,观察到它与 Llama Guard 2 相比,F1 分数相同,但误报率更低。
| F1 ↑ | AUPRC ↑ | 误报率 ↓ | |
|---|---|---|---|
| Llama Guard 2 | 0.877 | 0.927 | 0.081 |
| Llama Guard 3 | 0.939 | 0.985 | 0.040 |
| GPT4 | 0.805 | N/A | 0.152 |
| Llama Guard 2 | |||||||
| Llama Guard 3 | |||||||
| GPT4 | |||||||
| 搜索工具调用 | 代码解释器滥用 | |||||
|---|---|---|---|---|---|---|
| Llama Guard 2 | ||||||
| Llama Guard 3 | ||||||
| GPT4 | ||||||
正如《Llama 3 论文》中所述,Llama Guard 3 具备行业领先的系统级安全性能,建议与 Llama 3.1 搭配部署。需要注意的是,尽管部署 Llama Guard 3 可能会提升系统安全性,但也可能增加对良性提示的拒绝率(即误报)。关于违规率的改善以及对误报的影响,《Llama 3 论文》已通过内部基准测试提供了相关数据。
我们致力于帮助社区以负责任的方式部署 Llama 系统。为此,我们提供了 Llama Guard 3 的量化版本,以降低部署成本。我们采用了集成在 Hugging Face 生态系统中的 int 8 实现方案,将模型 checkpoint 大小减少了约 40%,同时对模型性能的影响极小。从表 5 中可以看出,量化模型的性能与原始模型相当。
任务 | 能力 |
|
| ||||||
|
精确率 |
召回率 |
F1 值 |
误报率 |
精确率 |
召回率 |
F1 值 |
误报率 | ||
|
提示分类 |
英语 |
0.952 |
0.943 |
0.947 |
0.057 |
0.961 |
0.939 |
0.950 |
0.045 |
|
多语言 |
0.901 |
0.899 |
0.900 |
0.054 |
0.906 |
0.892 |
0.899 |
0.051 | |
|
工具使用 |
0.884 |
0.958 |
0.920 |
0.126 |
0.876 |
0.946 |
0.909 |
0.134 | |
|
响应分类 |
英语 |
0.947 |
0.931 |
0.939 |
0.040 |
0.947 |
0.925 |
0.936 |
0.040 |
|
多语言 |
0.929 |
0.805 |
0.862 |
0.033 |
0.931 |
0.785 |
0.851 |
0.031 | |
|
工具使用 |
0.774 |
0.884 |
0.825 |
0.176 |
0.793 |
0.865 |
0.827 |
0.155 | |
Llama Guard 3 默认随 Llama 3.1 参考实现 一同提供。您可以通过我们 Github 仓库上分享的 Llama Recipes 了解更多关于如何配置和自定义的信息。
Llama Guard 3 存在一些局限性。首先,Llama Guard 3 本身是在 Llama 3.1 基础上微调得到的大语言模型(LLM)。因此,其性能(例如,需要常识性知识的判断、多语言能力以及政策覆盖范围)可能会受到其(预)训练数据的限制。
某些危害类别可能需要基于事实的、最新的知识才能进行评估(例如,S5:诽谤、S8:知识产权和 S13:选举)。我们认为,对于对这类危害高度敏感的用例,应部署更复杂的系统来准确审核这些类别,但 Llama Guard 3 为通用用例提供了良好的基线。
最后,作为一款大语言模型,Llama Guard 3 可能容易受到对抗性攻击或提示注入攻击,这些攻击可能会绕过或改变其预期用途。如果您发现任何漏洞,请随时 报告,我们将考虑在未来版本的 Llama Guard 中纳入改进措施。
[1] Llama Guard: LLM-based Input-Output Safeguard for Human-AI Conversations
[2] Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback
[4] XSTest: A Test Suite for Identifying Exaggerated Safety Behaviors in Large Language Models