Selene 1 Mini:最佳小型语言模型裁判

社区文章 发布于2025年1月29日

Atla 团队自豪地推出 Selene mini,这是一款最先进的小型语言模型裁判 (SLMJ)。Selene Mini 是一个开源的 8B 评估模型,在各种评估任务的整体性能上优于 GPT-4o-mini 和顶级 SLMJ(SFR-Judge、Glider、Flow Judge、Prometheus 2)。

image/png

使用现成的 LLM 作为评估器可能会产生有偏见或不准确的结果。相比之下,Selene Mini 是在专用数据集上训练的通用评估器。它支持灵活的提示,并能生成带有推理的分数和评论。它还在医学和金融等实际应用中表现出色。

在下面取自医学数据集的示例中,我们希望评估是否可以从对话中得出单一诊断。GPT-4o mini 和 LLaMa 3.1 8B 都错误地推断可以得出诊断,而 Selene Mini 则正确判断对话中不包含足够的信息进行诊断,这与医学专家的判断一致。

image/png

下载 Selene Mini

Selene 模型家族的更大模型将很快发布。注册我们的等候名单以获得首批访问权限。

基准性能

Selene Mini 在 11 个基准测试中,跨三种不同类型的评估任务,其平均性能优于先前的小型评估模型。

  • 绝对评分,例如“根据 1-5 分制评估此响应的无害性。”
  • 分类,例如“此响应是否解决了用户查询?回答是或否。”
  • 成对偏好,例如“以下哪个响应在逻辑上更一致——A 或 B?”

在某些基准测试中,Selene Mini 击败了比其大数倍的模型,在 RewardBench、EvalBiasBench 和 Auto-J 上优于 GPT-4o。它也是 RewardBench 上得分最高的 8B 生成模型,并且在 Judge arena 上排名最高。

image

我们如何训练 Selene Mini

作为通用评估器,Selene Mini 能够准确地在绝对分数、分类和成对任务中分配评估。

我们通过制定一套原则性的数据整理策略来实现这一目标,该策略通过人工生成的评论来增强公共数据集,并通过过滤和消融研究确保高质量。我们使用这些整理后的数据来微调 Llama-3.1-8B 模型,采用结合了直接偏好优化 (DPO) 和监督微调 (SFT) 优点的损失策略。

技术报告中阅读更多关于我们的方法和结果。

适用于实际用例

Selene Mini 的能力可以迁移到专业领域,而不会失去其广泛适用性。这对于需要在生产环境中部署但可能没有专业评估器的情况至关重要。

实际性能:我们测量了金融 (FinanceBench) 和医学 (CRAFT-MD) 两个由人类专家注释的行业数据集的零样本性能。Selene Mini 分别比基础模型高出 5% 和 10%,显示出与领域专家的高度一致性。

image

对提示格式的鲁棒性:即使提示结构和格式发生变化,Selene Mini 也能在基准测试中保持一致的性能。这种能力表明其学习到的评估能力是健壮的,而不仅仅是模式匹配。

Selene Mini 可以被提示以不同的评分量表进行评估,例如二元通过/失败、1-5 李克特量表、多个类别(“是”、“否”、“可能”)或响应之间的成对偏好。它还可以考虑“真实情况”和“上下文”输入变量(如果可用)。通过这些选项,用户可以提示 Selene Mini 以适应其特定用例的评估标准。

如何使用 Selene Mini

🌕 在 Hugging Face 下载 Selene Mini

以下是 Hugging Face Transformers 的快速入门指南

from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model onto

model_id = "AtlaAI/Selene-1-Mini-Llama-3.1-8B"

model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_id)

prompt = "I heard you can evaluate my responses?" # replace with your eval prompt
messages = [{"role": "user", "content": prompt}]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
model_inputs = tokenizer([text], return_tensors="pt").to(device)

generated_ids = model.generate(model_inputs.input_ids, max_new_tokens=512, do_sample=True)
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]

尝试我们的食谱,了解以下两个热门用例

为了获得最佳结果,我们提供了用于训练的提示此处

更多

您还可以试用 Selene Mini 游乐场

我们很高兴看到您用 Selene 评估什么。要讨论,请加入我们的 Discord

社区

注册登录 以评论