模型简介
模型特点
模型能力
使用案例
库名称: transformers
语言:
- 西班牙语
基础模型: - Qwen/Qwen2.5-7B-Instruct
流水线标签: 文本生成
许可证: 其他
许可证名称: rigochat-nc
许可证链接: https://huggingface.co/IIC/RigoChat-7b-v2/blob/main/LICENSE
标签: - 聊天
RigoChat-7b-v2 模型卡
RigoChat-7b-v2 是基于 Qwen-2.5 的模型,专门设计用于从西班牙语查询中提供准确响应。具体来说,它基于 Qwen/Qwen2.5-7B-Instruct 模型,并通过直接偏好优化(DPO)进行了微调,以提高西班牙语性能。
该模型仅限非商业用途。如需商业使用,请联系我们或通过 AWS Marketplace 提供的服务使用。您可以在以下链接找到如何使用该基础设施的教程。

模型详情
模型描述
该模型是 RigoChat 家族的第二版,这是一个设计用于解决西班牙语指令的典型 NLP 任务的大型语言模型(LLM),例如:工具使用、摘要、数学、代码、抽象问答等。与 Qwen/Qwen2.5-7B-Instruct 类似,该模型没有特定的用例,可以应用于广泛的任务。实际上,它在西班牙语的通用任务上略有改进,尤其是在西班牙语数据库的 RAG(检索增强生成)系统中,其训练重点是解决上下文问题以防止幻觉并确保安全响应。
该模型的主要优势包括:
- 在西班牙语通用任务上性能提升。
- 在西班牙语文本的 RAG 系统中增强安全性并减少幻觉。
- 可在不同硬件需求下使用,尤其是计算能力有限的硬件。有关如何在有限硬件上使用 RigoChat-7b-v2 的更多信息,请参阅 IIC/RigoChat-7b-v2-GGUF。
值得注意的是,该模型是在单个 A100 GPU 上使用有限计算资源训练的,但在相对较短的时间内(8.5 小时)达到了当前状态。这一成就得益于高质量数据集和先进技术(如 LoRA)的使用以优化内存使用。更多训练细节如下。
- 开发方: 知识工程研究所(IIC)。
- 模型类型: 生成式微调 Transformer。
- 语言(NLP): 西班牙语(BCP-47 es)。
- 许可证: RIGOCHAT 非商业。
- 架构: 我们使用 Qwen 的架构,未作修改。
- 微调基础模型: Qwen/Qwen2.5-7B-Instruct。
模型来源
- 论文: https://arxiv.org/abs/2503.08188
用途
直接使用
您可以通过 AWS Marketplace 的模型包使用和部署 RigoChat-v2 用于商业目的。您可以在以下笔记本中查看说明。
超出范围的使用
该语言模型已适应西班牙语的通用自然语言处理任务和特定用例(如 RAG)。然而,由于其技术和伦理限制,在以下情况下不应使用该模型:
- 非法活动: 不应使用该模型生成与非法活动相关的内容,例如创建恶意软件、欺诈、煽动犯罪或任何非法材料。
- 有害或危险内容: 不应使用该模型生成仇恨言论、暴力、骚扰或任何促进歧视、暴力或虐待的内容。
偏见、风险和限制
尽管该模型已训练用于理解和生成西班牙语文本,但用户应注意以下风险、偏见和限制:
- 偏见: 模型可能反映训练数据中存在的偏见。这些偏见可能与性别、种族、社会阶层、性取向等有关,并可能生成延续刻板印象或歧视的响应。
- 准确性和可靠性: 虽然该模型在许多上下文中生成连贯且有用的文本,但在需要高度确定性的技术、科学或法律问题上,它可能并不总是 100% 准确或可靠。
- 有限或过时的知识: 该模型未训练其训练截止日期之后的信息。因此,它可能无法反映近期事件、研究或进展。
建议
我们建议将该模型用作通用聊天机器人,或用于特定任务的应用程序中,例如 SQL 查询、RAG 系统或作为促进工具使用的自主代理。
如何开始使用该模型
与 Qwen/Qwen2.5-7B-Instruct 或任何使用 chatml
模板的模型类似。
加载模型和分词器
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
)
import torch
model_name = "IIC/RigoChat-7b-v2"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16,
device_map="cuda",
trust_remote_code=True,
)
tokenizer = AutoTokenizer.from_pretrained(
model_name,
trust_remote_code=True,
)
示例生成
messages = [
{"role": "user", "content": "¿Cómo puedo transformar un diccionario de listas en una lista de diccionarios, y viceversa, en Python sin utilizar bucles for?"}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
**model_inputs,
max_new_tokens=1024,
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
为了获得更好的体验,我们建议使用以下生成参数。
工具使用
def obtener_temperatura_actual(location: str) -> float:
"""
获取当前位置的温度。
参数:
location: 位置,格式为 "城市, 国家"。
返回:
该位置的当前温度,单位为摄氏度。
"""
return 22.
messages = [
{"role": "user", "content": "¿Cuál es el tiempo en Madrid ahora mismo?"}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
tools=[obtener_temperatura_actual],
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
**model_inputs,
max_new_tokens=1024
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
有关更多信息,请查看 HuggingFace 的工具使用文档。
如果模型生成了工具调用,您应将其添加到聊天中,如下所示:
import re
import json
tools = {
"obtener_temperatura_actual" : obtener_temperatura_actual,
}
tool_call = re.search(
r"<tool_call>\s*(\{.*?\})\s*</tool_call>",
response,
)
tool_call = json.loads(tool_call.group(1))
# 将工具元数据添加到消息中
messages.append(
{
"role": "assistant",
"tool_calls": [{"type": "function", "function": tool_call}],
},
)
# 将工具结果添加到消息中
messages.append(
{
"role": "tool",
"name": tool_call["name"],
"content": tools[tool_call["name"]](**tool_call["arguments"]),
},
)
上述代码仅适用于模型生成单个函数调用的情况,但同样的逻辑也可用于同时调用多个函数的情况。之后,您可以继续正常生成消息:
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
tools=[obtener_temperatura_actual],
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
**model_inputs,
max_new_tokens=1024
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
训练详情
训练数据
结合了 IIC 设计的公共和私有数据集。数据集包含 21975 个西班牙语对话,格式为 chatml
,结构与 Anthropic/hh-rlhf 数据集相同。每个对话有两个变体:chosen
和 rejected
,仅助理的最后一个回答不同。chosen
变体中的最后一个回答被认为比 rejected
变体中的更好。我们使用了多种技术生成数据集,这些技术在研究中详细说明(即将发布)。
训练过程
我们使用了 Transformer Reinforcement Learning(TRL)库。具体来说,我们应用了他们发布的脚本作为使用 DPO 的示例,对我们生成的数据集进行了训练。
训练超参数
详情
LORA_CONFIG = {
"r": 64,
"lora_alpha": 16,
"lora_dropout": 0.1,
"bias": "none",
"task_type": "CAUSAL_LM",
"target_modules": [
"q_proj",
"k_proj",
"v_proj",
"o_proj",
"up_proj",
"gate_proj",
"down_proj",
],
"use_rslora": True,
}
DPO_CONFIG = {
"num_train_epochs": 2,
"logging_steps": 25,
"eval_steps": 500,
"save_steps": 100,
"save_total_limit": 5,
"per_device_train_batch_size": 1,
"per_device_eval_batch_size": 1,
"gradient_accumulation_steps": 16,
"learning_rate": 5e-6,
"max_length": 8192, # 历史聊天 + 最新助理响应的最大长度。
"max_prompt_length": 6656, # 历史聊天的最大长度:用户-助理-...-助理-用户。
"gradient_checkpointing": True,
"weight_decay": 0.001,
"optim": "rmsprop",
"evaluation_strategy": "steps",
"lr_scheduler_type": "cosine",
"bf16": True,
}
速度、大小和时间
以下是一些有用的参数,显示了最新训练日志的结果。
latest_logs = {'loss': 0.3716, 'grad_norm': 4.989994049072266, 'learning_rate': 1.0380020311950844e-10, 'rewards/chosen': 0.534086287021637, 'rewards/rejected': -0.6236276030540466, 'rewards/accuracies': 0.8899999856948853, 'rewards/margins': 1.1577140092849731, 'logps/rejected': -218.88198852539062, 'logps/chosen': -250.0700225830078, 'logits/rejected': -1.6214849948883057, 'logits/chosen': -1.9585875272750854, 'epoch': 1.99}
final_training_results = {'train_runtime': 30825.7138, 'train_samples_per_second': 1.432, 'train_steps_per_second': 0.089, 'train_loss': 0.483570138469306, 'epoch': 2.0}
从使用的时间可以看出,我们在八个半小时内成功改进了最先进的模型,使用非常有限的硬件,适应了西班牙语任务。更多细节将在以下部分中展示。
评估
测试数据、因素和指标
测试数据
为了评估大型语言模型(LLM)的性能,我们开发并使用了几个针对特定评估需求的高质量语料库:
-
IIC/AQuAS: 由两位计算语言学家手动整理的语料库,用于评估西班牙语抽象问答任务中的语言模型。它包括金融、保险、医疗、法律和音乐等领域的示例。
-
IIC/RagQuAS: 由同一位语言学家手动整理的另一个语料库,用于评估完整的 RAG 系统和西班牙语抽象问答任务中的语言模型。该语料库涵盖广泛的领域,包括爱好、语言学、宠物、健康、天文学、客户服务、汽车、日常生活、文档、能源、滑雪、欺诈、美食、语言、游戏、指甲护理、音乐、滑冰、急救、食谱、回收、投诉、保险、网球、交通、旅游、兽医、旅行和瑜伽。
-
CAM: 专为所有 CAM 任务设计,该语料库包含来自马德里社区网站上消费者相关主题的常见问题(FAQ)。问题分为三个退化级别——E1、E2 和 E3——旨在衡量 LLM 理解和有效响应由于拼写错误、不同程度的口语化等问题导致的表述不佳查询的能力。此任务也属于抽象问答类别。
-
Shops: 一个多轮对话语料库,围绕多家服装公司的政策展开。任务涉及多轮抽象问答。
-
Insurance: 另一个多轮对话语料库,围绕多家保险公司的政策展开。同样涉及多轮抽象问答。
每个语料库包含以下列:问题、答案和包含相关信息的上下文,模型可以从中得出答案。在多轮任务中,还提供了聊天历史记录。
LLM 的评分过程涉及测量原始答案与模型生成的答案之间的相似性。除 AQuAS 和 RagQuAS 外,所有语料库均为私有,但可以作为其他语料库结构和内容的示例。
因素
这些评估非常具体,并未涵盖模型可能面临的所有通用场景,因为所有评估都集中在解决特定领域的 RAG 任务上。
指标
评估基于使用 Llama-3.1-8B-Instruct 对答案进行评分。
结果
模型 | 平均 | AQuAS | RagQuAS | CAM | CAM_E1 | CAM_E2 | CAM_E3 | Shops | Insurance |
---|---|---|---|---|---|---|---|---|---|
RigoChat-7b-v2 | 79.55 | 82.52 | 79.10 | 78.91 | 79.17 | 76.73 | 78.23 | 80.79 | 81.04 |
GPT-4o | 78.26 | 85.23 | 77.91 | 78.00 | 74.91 | 73.45 | 77.09 | 78.60 | 80.89 |
stablelm-2-12b-chat | 77.74 | 78.88 | 78.21 | 77.82 | 78.73 | 77.27 | 74.73 | 77.03 | 79.26 |
Mistral-Small-Instruct-2409 | 77.29 | 80.56 | 78.81 | 77.82 | 75.82 | 73.27 | 73.45 | 78.25 | 80.36 |
Qwen2.5-7B-Instruct | 77.17 | 80.93 | 77.41 | 77.82 | 75.09 | 75.45 | 72.91 | 78.08 | 79.67 |
Meta-Llama-3.1-8B-Instruct | 76.55 | 81.87 | 80.50 | 72.91 | 73.45 | 75.45 | 71.64 | 77.73 | 78.88 |
GPT-4o-mini | 76.48 | 82.80 | 75.82 | 76.36 | 74.36 | 72.36 | 71.82 | 78.25 | 80.08 |
Phi-3.5-mini-instruct | 76.38 | 81.68 | 81.09 | 75.82 | 74.73 | 71.45 | 70.36 | 77.43 | 78.45 |
gemma-2-9b-it | 75.80 | 82.80 | 78.11 | 72.91 | 73.45 | 71.09 | 71.27 | 77.08 | 79.72 |
Ministral-8B-Instruct-2410 | 75.19 | 79.63 | 77.31 | 76.00 | 73.45 | 72.36 | 70.18 | 76.44 | 76.14 |
GPT-3.5-turbo-0125 | 74.78 | 80.93 | 73.53 | 76.73 | 72.55 | 72.18 | 69.09 | 75.63 | 77.64 |
Llama-2-7b-chat-hf | 71.18 | 67.10 | 77.31 | 71.45 | 70.36 | 70.73 | 68.55 | 72.07 | 71.90 |
granite-3.0-8b-instruct | 71.08 | 73.08 | 72.44 | 72.36 | 71.82 | 69.09 | 66.18 | 69.97 | 73.73 |
RigoChat-7b-v1 | 62.13 | 72.34 | 67.46 | 61.27 | 59.45 | 57.45 | 57.64 | 62.10 | 59.34 |
salamandra-7b-instruct | 61.96 | 63.74 | 60.70 | 64.91 | 63.27 | 62.36 | 60.55 | 59.94 | 60.23 |
总结
RigoChat-7b-v2 在间接设计的任务中显著提高了性能,相比 Qwen-2.5。另一方面,它在这些任务中超越了大多数最先进的模型,证明使用有限资源可以针对特定用例对齐 LLM。
环境影响
碳排放量可以使用 Lacoste et al. (2019) 中提出的 Machine Learning Impact 计算器进行估算。
- 硬件类型: A100 PCIe 80GB
- 使用小时数: 8.5
- 云提供商: 私有基础设施
- 计算区域: 西班牙
- 碳排放量: 0.92
硬件
GPU NVIDIA A100,配备 Tensor Core 和 80GB 内存。
软件
Ubuntu 22.04.5 LTS
及以下要求:
python=3.11
flash_attn>=2.5.8
datasets
numpy
trl
peft
huggingface_hub
引用
@misc {instituto_de_ingeniería_del_conocimiento_2025,
author = { {Instituto de Ingeniería del Conocimiento} },
title = { RigoChat-7b-v2 },
year = 2025,
url = { https://huggingface.co/IIC/RigoChat-7b-v2 },
doi = { 10.57967/hf/4158 },
publisher = { Hugging Face }
}
@misc{gómez2025rigochat2adaptedlanguage,
title={RigoChat 2: an adapted language model to Spanish using a bounded dataset and reduced hardware},
author={Gonzalo Santamaría Gómez and Guillem García Subies and Pablo Gutiérrez Ruiz and Mario González Valero and Natàlia Fuertes and Helena Montoro Zamorano and Carmen Muñoz Sanz and Leire Rosado Plaza and Nuria Aldama García and David Betancur Sánchez and Kateryna Sushkova and Marta Guerrero Nieto and Álvaro Barbero Jiménez},
year={2025},
eprint={2503.08188},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2503.08188},
}
免责声明
请注意,该模型可能包含基于训练数据的偏见或其他不希望的扭曲。当第三方实施基于该模型的系统或提供服务,或自行使用该模型时,他们有责任减轻相关风险并确保遵守适用的法规,包括管理人工智能使用的法规。作为模型的所有者和创建者,IIC 不对第三方使用导致的任何结果负责。
模型卡联系人
contacto.iic@iic.uam.es
作者声明
附加信息
- 作者: 知识工程研究所(IIC)。
- 联系人: 如需更多信息,请发送电子邮件至 contacto.iic@iic.uam.es。
- 版权: 版权所有(c) 2024 ADIC。


