标签:
- 文本生成文本
数据集:
- kaist-ai/反馈收集集
许可证: apache-2.0
语言:
- 英文
管道标签: 文本生成文本
库名称: transformers
评估指标:
- 皮尔逊相关系数
- 斯皮尔曼相关系数
- 准确率
参考链接
- **主页:**https://github.com/kaistAI/Prometheus
- **代码库:**https://github.com/kaistAI/Prometheus
- **论文:**https://arxiv.org/abs/2310.08491
- **联系人:**seungone@kaist.ac.kr
简介
普罗米修斯(Prometheus)是在对基础大语言模型进行细粒度评估以及人类反馈强化学习(RLHF)奖励模型时,可作为GPT-4评估的替代方案。

普罗米修斯是以Llama-2-Chat为基座模型,并在反馈收集集的10万条反馈数据上微调而成的语言模型。
由于经过大量反馈数据的微调,该模型特别擅长评估长文本回答,其表现超越GPT-3.5-Turbo和Llama-2-Chat 70B,并在多项基准测试中与GPT-4持平。
最关键的是,这一成就源于我们引入了两项参考材料(参考答案和定制化评分标准)。
普罗米修斯是GPT-4评估的经济高效且强大的替代方案,可用于根据定制标准(如儿童可读性、文化敏感性、创造力)评估大语言模型。
同时,它也可作为人类反馈强化学习(RLHF)的奖励模型。
模型详情
模型描述
- 模型类型: 语言模型
- 支持语言: 英语
- 许可证: Apache 2.0
- 相关模型: 所有普罗米修斯检查点
- 更多资源:
普罗米修斯提供两种参数量级版本(7B和13B)。
7B版本模型详见此页面。
我们的数据集也可在此页面获取。
提示格式
普罗米修斯输入需要包含四个要素:指令、待评估回答、评分标准和参考答案。格式如下:
需填写指令、回答、参考答案、标准描述及1-5分的评分描述。
###任务描述:
给定一条指令(可能包含输入内容)、待评估回答、得分为5的参考答案以及代表评估标准的评分准则。
1. 根据给定评分标准(非通用标准)严格评估回答质量,撰写详细反馈。
2. 反馈后给出1-5分的整数评分,需参照评分标准。
3. 输出格式应为:"反馈:(撰写标准反馈) [结果] (1-5的整数)"
4. 请勿生成任何开头、结尾或其他解释性内容。
###待评估指令:
{instruction}
###待评估回答:
{response}
###参考答案(5分):
{reference_answer}
###评分标准:
[{criteria_description}]
1分: {score1_description}
2分: {score2_description}
3分: {score3_description}
4分: {score4_description}
5分: {score5_description}
###反馈:
随后需应用Llama-2-Chat的对话模板(未应用可能导致异常行为)。
对话模板类参见此链接。
conv = get_conv_template("llama-2")
conv.set_system_message("你是一个公正的评估语言模型。")
conv.append_message(conv.roles[0], dialogs['instruction'])
conv.append_message(conv.roles[1], None)
prompt = conv.get_prompt()
x = tokenizer(prompt,truncation=False)
最终将生成以[结果]
分隔的反馈和评分。
许可证
反馈收集集和普罗米修斯受OpenAI生成数据使用条款约束。如发现违规使用,请联系我们。
使用方式
以下是transformers
库的使用示例:
使用PyTorch模型
CPU运行
点击展开
from transformers import AutoTokenizer, LlamaForCausalLM
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf")
model = LlamaForCausalLM.from_pretrained("kaist-ai/Prometheus-13b-v1.0", device_map="auto")
input_text = "###任务描述: ..."
input_ids = tokenizer(input_text, return_tensors="pt").input_ids
outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))
GPU运行
点击展开
import torch
from transformers import AutoTokenizer, LlamaForCausalLM
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf")
model = LlamaForCausalLM.from_pretrained("kaist-ai/Prometheus-13b-v1.0", device_map="auto")
input_text = "###任务描述: ..."
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.to("cuda")
outputs = model.generate(input_ids, sample=True, temperature=1.0, top_p=0.9, max_new_tokens=256, repetition_penalty=1.03)
print(tokenizer.decode(outputs[0]))
不同精度GPU运行
FP16精度
点击展开
import torch
from transformers import AutoTokenizer, LlamaForCausalLM
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf")
model = LlamaForCausalLM.from_pretrained("kaist-ai/Prometheus-13b-v1.0", device_map="auto", torch_dtype=torch.float16)
input_text = "###任务描述: ..."
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.to("cuda")
outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))
INT8精度
点击展开
from transformers import AutoTokenizer, LlamaForCausalLM
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf")
model = LlamaForCausalLM.from_pretrained("kaist-ai/Prometheus-13b-v1.0", device_map="auto", load_in_8bit=True)
input_text = "###任务描述: ..."
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.to("cuda")
outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))
引用
如果觉得本模型有帮助,请引用我们的论文!
BibTeX:
@misc{kim2023prometheus,
title={普罗米修斯:在语言模型中实现细粒度评估能力},
author={金承元 and 申在民 and 赵艺珍 and 张乔尔 and 龙普雷·谢恩 and 李焕 and 尹相道 and 申成镇 and 金成东 and 詹姆斯·索恩 and 徐敏俊},
year={2023},
eprint={2310.08491},
archivePrefix={arXiv},
primaryClass={cs.CL}
}