license: other
datasets:
- nvidia/CantTalkAboutThis-Topic-Control-Dataset
language:
- en
metrics:
- f1
base_model:
- meta-llama/Llama-3.1-8B-Instruct
pipeline_tag: text-classification
library_name: peft
模型概述
描述:
Llama-3.1-NemoGuard-8B-Topic-Control 可用于在人类与助手交互中对用户提示进行主题和对话内容审核,专为任务导向型对话代理和基于自定义策略的审核而设计。
在此试用模型: Llama-3.1-NemoGuard-8B-Topic-Control
给定一个系统指令(也称为主题指令,即指定允许和禁止的主题)和以最后一个用户提示结束的对话历史记录,模型会返回一个二元响应,标记用户消息是否遵守系统指令(即消息是否在主题内或为干扰/离题内容)。
基础大语言模型(LLM)是Meta的多语言Llama-3.1-8B-Instruct模型。Llama-3.1-TopicGuard是在使用Mixtral-8x7B-Instruct-v0.1生成的合成主题遵循数据集上通过LoRa微调的。
该模型已准备好用于商业用途。
许可证/使用条款:
使用此模型受NVIDIA开放模型许可协议约束。
附加信息: Llama 3.1社区许可协议。基于Llama构建。
参考文献:
相关论文:
@article{sreedhar2024canttalkaboutthis,
title={CantTalkAboutThis: Aligning Language Models to Stay on Topic in Dialogues},
author={Sreedhar, Makesh Narsimhan and Rebedea, Traian and Ghosh, Shaona and Zeng, Jiaqi and Parisien, Christopher},
journal={arXiv preprint arXiv:2404.03820},
year={2024}
}
使用模型
Llama 3.1 NemoGuard 8B TopicControl执行输入审核,例如确保用户提示与系统提示中指定的规则一致。
提示模板由两个关键部分组成:系统指令和包含一系列用户提示和LLM响应的对话历史记录。通常,提示以当前用户查询结束。
系统指令
提示的系统指令部分作为全面的指导方针来引导对话。
此部分包括以下内容:
核心规则
: 一组原则,用于管理交互以确保相关性和遵守任何指定的边界。
角色分配
: 使模型能够采用特定角色,例如_银行助手_。在这种情况下:
- 默认情况下,角色领域之外的查询被视为离题。
- 您可以在角色范围内指定要阻止的子类别或主题。
例如,可以指示银行助手阻止加密货币或保险索赔等主题。
这些指令由主题控制模型用于确定用户查询是否符合定义的规则。
系统提示必须以TOPIC_SAFETY_OUTPUT_RESTRICTION字符串结束。这确保模型的预测是“on-topic”或“off-topic”。TOPIC_SAFETY_OUTPUT_RESTRICTION字符串定义如下:
如果违反上述任何条件,请回复“off-topic”。否则,回复“on-topic”。您必须回复“on-topic”或“off-topic”。
对话历史记录
对话历史记录维护用户提示和LLM响应的顺序记录,可以包括单轮或多轮交互。
通常,历史记录以主题控制模型必须审核的最新用户提示结束。
参考以下LLM系统的行业标准负载格式中的示例用户到LLM对话:
[
{
"role": "system",
"content": "在接下来的对话中始终使用礼貌的语气,不要参与任何关于旅行和旅游目的地的讨论",
},
{
"role": "user",
"content": "你好!",
},
{
"role": "assistant",
"content": "您好!今天有什么可以帮您的?",
},
{
"role": "user",
"content": "你知道巴塞罗那最受欢迎的海滩是哪个吗?",
},
]
主题控制模型对最终用户提示的响应类似于off-topic
。
与NeMo Guardrails集成
要将主题控制模型与NeMo Guardrails集成,您需要访问llama-3.1-nemoguard-8b-topic-control的NVIDIA NIM容器。有关NIM容器的更多信息可在此处找到here。
NeMo Guardrails使用LangChain ChatNVIDIA连接器连接到本地运行的NIM微服务,如llama-3.1-nemoguard-8b-topic-control。
主题控制微服务在v1/completions
和v1/chat/completions
端点上暴露标准OpenAI接口。
NeMo Guardrails简化了构建提示模板、解析主题控制模型响应的复杂性,并提供了一种可编程的方法来构建具有内容安全护栏的聊天机器人。
要将NeMo Guardrails与主题控制微服务集成,创建一个类似于以下示例的config.yml
文件:
models:
- type: main
engine: openai
model: gpt-3.5-turbo-instruct
- type: "topic_control"
engine: nim
parameters:
base_url: "http://localhost:8000/v1"
model_name: "llama-3.1-nemoguard-8b-topic-control"
rails:
input:
flows:
- topic safety check input $model=topic_control
- 字段
engine
指定nim
。
- 字段
parameters.base_url
指定${__product_long_name}主机的IP地址和端口。
- Guardrails配置中的字段
parameters.model_name
必须与llama-3.1-nemoguard-8b-topic-control服务的模型名称匹配。
- rails定义指定
topic_control
作为模型。
有关配置文件的更多信息,请参阅NVIDIA NeMo Guardrails文档。
模型架构:
架构类型: Transformer
网络架构: 基础模型架构基于Meta的Llama-3.1-8B-Instruct模型(模型卡)。
我们使用以下网络架构参数对基础模型执行参数高效微调(PEFT):
- 秩: 8
- Alpha: 32
- 目标低秩适应模块: 'k_proj', 'q_proj', 'v_proj', 'o_proj', 'up_proj', 'down_proj', 'gate_proj'.
训练方法:
Llama-3.1-TopicGuard的训练方法涉及以下概念:
- 系统指令,其作用类似于主题指令,定义了用户与助手交互的上下文规则,即当前任务导向场景允许或禁止的主题、对话风格和语气、对话流程。
- 对话中任何遵守主题指令的用户消息被视为在主题内,而违反至少一条规则的用户消息被视为干扰或离题。
- 使用一个名为CantTalkAboutThis-Mixtral-1.0的合成生成数据集,包含约1,000个多轮对话,用于指令微调基础模型。每个对话都有一个来自各种广泛领域(即客户支持、旅行、法律)的特定主题指令,并包含一个完整的在主题对话,以及几个干扰用户消息,在对话的特定关键点替换一些在主题消息。
- 模型被指令微调以检测用户消息是在主题内还是干扰,给定当前对话的主题指令,LLM表现为分类器。
输入:
输入类型: 文本
输入格式: 字符串
输入参数: 一维列表:带有主题指令的系统提示,后跟结构化为用户和助手消息列表的对话。
与输入相关的其他属性: 对话应以被视为主题审核的用户消息结束,给定主题指令和整个对话的上下文(之前的用户和助手轮次)。系统提示和对话的输入格式遵循行业广泛采用的(OpenAI聊天规范)[https://platform.openai.com/docs/guides/text-generation],包括(NVIDIA AI API)[https://build.nvidia.com/]。
示例输入:
[
{
"role": "system",
"content": "在接下来的对话中始终使用礼貌的语气,不要参与任何关于旅行和旅游目的地的讨论",
},
{
"role": "user",
"content": "你好!",
},
{
"role": "assistant",
"content": "您好!今天有什么可以帮您的?",
},
{
"role": "user",
"content": "你知道巴塞罗那最受欢迎的海滩是哪个吗?",
},
]
输出:
输出类型: 文本
输出格式: 字符串
输出参数: 一维
与输出相关的其他属性: 响应是一个二元字符串标签,确定输入对话中最后一个用户轮次是否遵守主题指令。标签选项为*"on-topic"或"off-topic"*。
示例模型输入/输出:
输入
[
{
"role": "system",
"content": "在接下来的对话中始终使用礼貌的语气,不要参与任何关于旅行和旅游目的地的讨论",
},
{
"role": "user",
"content": "你好!",
},
{
"role": "assistant",
"content": "您好!今天有什么可以帮您的?",
},
{
"role": "user",
"content": "你知道巴塞罗那最受欢迎的海滩是哪个吗?",
},
]
输出(模型响应)
off-topic
软件集成:
运行时引擎: PyTorch
库: Meta的llama-recipes,HuggingFacetransformers库,HuggingFacepeft库
支持的硬件平台: NVIDIA Ampere(A100 80GB,A100 40GB)
首选/支持的操作系统: Linux(Ubuntu)
模型版本:
Llama-3.1-TopicGuard
训练、测试和评估数据集:
训练数据集:
链接: CantTalkABoutThis数据集
数据集的数据收集方法: 合成
数据集的标注方法: 合成
属性: CantTalkABoutThis主题遵循数据集包含1080个多轮对话,这些对话使用540个不同领域的主题指令在主题内。对于每个在主题对话,我们还在对话的特定点生成离题/干扰轮次(每个对话约4个干扰)。
测试数据集:
模型的性能在一个较小的、人工标注的CantTalkABoutThis主题遵循数据集合成创建测试集的子集上进行测试。测试集包含不同领域(银行)的对话,这些领域未出现在训练或评估集中。虽然在主题对话是与训练数据集相似的样本,但干扰由专家标注员人工标注。
链接: CantTalkABoutThis主题遵循数据集
数据集的数据收集方法: 混合:合成,人工
数据集的标注方法: 混合:合成,人工
属性: 我们从合成测试领域随机选择20个对话,并手动要求两位对话系统专家为每个对话创建五个干扰。因此,我们还提供了一个更具挑战性和反映现实场景的小型人工标注测试集。测试集包含100个人工标注的干扰和其余在主题轮次,其中11%的轮次为干扰/离题。
评估数据集:
评估集类似于训练数据集,是在旅行领域(不属于训练集)上合成的生成在主题对话和干扰。
链接: CantTalkABoutThis评估集
数据集的数据收集方法: 合成
数据集的标注方法: 合成
属性: 我们在旅行领域生成20个多轮对话,涉及10个不同场景,每个对话约20轮。
推理:
引擎: TRT-LLM/vLLM/Hugging Face
测试硬件: A100 80GB
伦理考虑:
NVIDIA认为可信AI是一项共同责任,我们已