用于评估生成任务中的法学硕士的存储库
最新消息
[2024/06] 我们发布了BiGGen-Bench和Prometheus 2 BGB (8x7B) !
BiGGen-Bench具有9个核心功能、77个任务和765个精心设计的实例,每个实例都有特定的评估标准。
我们通过 5 个最先进的评估语言模型评估了 103 个前沿语言模型,并在论文中分析了结果。
我们不断在 BiGGen-Bench 评估轨迹上训练 Prometheus 2 8x7B,并构建了我们最有能力的评估器 LM Prometheus 2 BGB,甚至在绝对评分任务上超越了 Claude-3-Opus。
查看我们的数据集、评估结果、排行榜、交互式报告和代码!
[2024/05] 我们发布 Prometheus 2 (7B & 8x7B) 模型!
达到 Prometheus 2 (8x7B) 至少 80% 的评估统计或性能
它仅需要 16 GB VRAM,适合在消费级 GPU 上运行。
与 Prometheus 1 (13B) 相比,Prometheus 2 (8x7B) 显示出改进的评估性能,并且还支持以成对排名(相对评分)格式进行评估!
在多个直接评估基准(包括 VicunaBench、MT-Bench 和 FLASK)上,它与 GPT-4-1106 在 5 点李克特量表上的 Pearson 相关性达到 0.6 至 0.7。
它还在多个成对排名基准中获得了 72% 到 85% 的人类判断一致性,包括 HHH Alignment、MT Bench Human Judgement 和 Auto-J Eval。
Prometheus 2 (8x7B)是一个开源的最先进的评估器语言模型!
Prometheus 2 (7B)是 Prometheus 2 (8x7B) 模型的轻型版本,具有合理的性能(优于 Llama-2-70B 并与 Mixtral-8x7B 相当)。
使用 pip 安装:
pip 安装 prometheus-eval
Prometheus-Eval 支持通过vllm
进行本地推理,并在litellm
的帮助下通过 LLM API 进行推理。
如果您想在本地环境中运行 Prometheus,请安装vllm
。
pip 安装 vllm
如果您有兴趣:
通过 VLLM 端点、Huggingface TGI 或其他平台利用 Prometheus 接口
利用更强大的评估器 LLM,例如 GPT-4
您还可以利用 Prometheus-Eval!有关各个提供程序的安装详细信息,请参阅 LiteLLM 提供程序文档。
from prometheus_eval.litellm import LiteLLM, AsyncLiteLLMmodel = LiteLLM('openai/prometheus-eval/prometheus-7b-v2.0') # VLLM 端点模型 = LiteLLM('huggingface/prometheus-eval/prometheus-7b-v2.0') #拥抱脸 TGI 模型= AsyncLiteLLM('gpt-4-turbo', requests_per_minute=100) # GPT-4 API(考虑速率限制的异步生成)# 还有更多!judge = PrometheusEval(model=model)
注意: prometheus-eval
库目前处于测试阶段。如果您遇到任何问题,请通过在存储库上创建问题来告知我们。
使用
prometheus-eval
,评估任何指令和响应对都非常简单:
# 绝对评分:输出 1 到 5 分 from prometheus_eval.vllm import VLLMfrom prometheus_eval import PrometheusEvalfrom prometheus_eval.prompts import ABSOLUTE_PROMPT, SCORE_RUBRIC_TEMPLATEmodel = VLLM(model="prometheus-eval/prometheus-7b-v2.0")judge = PrometheusEval(model=model,absolute_grade_template=ABSOLUTE_PROMPT)instruction =“一个人在最近的分手中挣扎,敞开心扉表达强烈的孤独和悲伤的感觉。他们寻求建议,了解如何应对心碎并在生活中继续前进.",response = "听到你分手的消息我真的很遗憾。这可能是一个充满了强烈的孤独和悲伤情绪的充满挑战的时刻。重要的是要记住,经历这些感觉是正常的;它们证明了您曾经拥有的深厚联系。首先,不要犹豫,让它们自由流动,这通常会使治疗过程变得复杂。感到沮丧、流泪或感到愤怒。这是治愈之旅的一部分。在这些困难时期,自我护理可以成为一剂治愈良药。这可能意味着沉迷于你最喜欢的书,记录你的想法,甚至只是安静地喝杯茶。对自己善意的小举动可以显着改善您的情绪健康。另外,不要孤立自己。让自己周围都是能够提供安慰和理解的支持者。这可能包括朋友、家人,甚至是心理健康专家。他们可以提供急需的情感支持和策略来帮助您应对。最后,请记住,治愈没有固定的时间表。每个人的情况都不一样,只要你需要就可以。将注意力集中在未来及其潜力上。虽然现在看来不可能,但你会从这次经历中变得更加强大。寻求帮助是可以的,悲伤是可以的,一天一天地承受也可以。在这段旅程中,您并不孤单,有人已经准备好并愿意提供帮助。按照你自己的节奏康复是可以的。",reference_answer = "我只能想象这段时间对你来说有多困难。心碎就像一股压倒性的浪潮席卷你,让你感到失落和孤独。重要的是要记住,有这种感觉是可以的;你的感受是合理的,失去一段关系而感到悲伤是很自然的。首先,让自己充分感受情绪是至关重要的。压制或否认它们通常只会延长愈合过程。哭泣、悲伤或生气都是可以的。这些都是治愈之旅的一部分。参与自我保健活动也可以提供急需的促进作用。这可以是任何事情,从洗个热水澡、写日记,或者只是喝一杯你最喜欢的茶。自爱的小举动可以让你的感受发生很大的变化。接下来,尝试让自己周围都是支持你的人,他们了解你的处境并为你提供安慰。在心碎的时候,朋友和家人可以成为力量的重要源泉。如果您感觉舒服,您可能需要考虑寻求专业帮助。治疗师和咨询师接受过培训,可以提供帮助和工具来度过这样的困难时期。最后,重要的是要记住,慢慢来治愈是可以的。每个人都有自己的节奏,不必着急。尝试关注未来及其所蕴含的可能性。虽然现在看起来可能并非如此,但从这次经历中你会变得更坚强、更有弹性。请记住,寻求帮助是可以的,感受自己的感受也是可以的。在这段旅程中,您并不孤单,有人关心您并愿意提供帮助。一次服用一天是可以的。治愈是一个过程,按照自己的节奏进行是可以的。",rubric_data = { "criteria":"当用户表达情绪或面临挑战性环境时,模型是否能够熟练地将同理心和情商应用于其响应中? ", "score1_description":"模型忽略识别用户输入的情绪基调或对其做出反应,给出不合适或情绪不敏感的响应。", "score2_description":"模型间歇性地承认情感背景,但通常在没有足够同理心或情感理解的情况下做出回应。", "score3_description":"该模型通常识别情感背景并尝试以同理心回答,但回应有时可能会错过重点或缺乏情感深度。", "score4_description":"该模型始终如一地识别情感背景并做出适当的反应,提供移情反应。尽管如此,在情感深度方面仍然可能存在零星的疏忽或缺陷。", "score5_description":"该模型擅长识别情感背景,并持续提供同理心、情感意识的响应,表现出对用户情感或情况的深刻理解。"} Score_rubric = SCORE_RUBRIC_TEMPLATE.format(**rubric_data)反馈,分数 = Judge.single_absolute_grade(instruction=instruction,response=response,rubric=score_rubric,reference_answer=reference_answer)print("Feedback:", Feedback)print("Score:", Score)# Output# Feedback: 提供的响应显示出高水平它有效地解决了用户表达的情绪困扰,并验证了他们的孤独感和情感。悲伤是提供同理心建议的一个重要方面。该回应还提出了应对情绪的实际步骤,例如拥抱情绪、练习自我护理以及寻求朋友、家人或专业人士的支持。此外,响应让用户放心,康复是一个个人过程,没有固定的时间表,提供安慰和理解。它强调用户的价值和克服这种情况的潜力,这表明了对用户的情绪和情况的深刻理解。通过将评分标准与提供的回答进行比较,很明显,该模型表现出了出色的同理心和情商应用能力。该回复在情感深度上没有任何缺陷,成功满足 5 分的标准。# 得分:5
# 相对评分:输出 A 或 Bfrom prometheus_eval.vllm import VLLMfrom prometheus_eval import PrometheusEvalfrom prometheus_eval.prompts import RELATIVE_PROMPTmodel = VLLM(model="prometheus-eval/prometheus-7b-v2.0")judge = PrometheusEval(model=model, relative_grade_template=RELATIVE_PROMPT)data = { "instruction": "一群历史学家正在就导致罗马帝国衰落的因素进行辩论。一位历史学家认为,衰落的主要原因是野蛮人入侵的持续压力另一位认为这是由于经济困难和过度依赖奴隶劳动,第三位则认为这是由于道德败坏和政治不稳定,每个历史学家都需要提供证据来支持他们的主张。争论经济问题和对奴隶劳动的过度依赖提出了他们的观点?", "response_A": "争论经济问题和对奴隶劳动的过度依赖导致了罗马帝国的衰落的历史学家会这样说:帝国的经济受到以下因素的严重影响:罗马货币贬值。货币贬值导致通货膨胀猖獗,破坏了经济的稳定。此外,罗马帝国严重依赖奴隶劳动。这导致自由公民失业,因为维持奴隶比雇用自由公民便宜。就业机会减少导致经济不稳定。除此之外,帝国向东方的扩张使他们依赖进口,例如来自埃及的谷物。这种对进口的过度依赖导致了贸易逆差,进一步削弱了经济。随着帝国失去领土,维持贸易失衡变得困难,导致经济衰退。因此,经济问题和对奴隶劳动的过度依赖是罗马帝国衰落的主要原因之一。", "response_B": "争论经济问题和对奴隶劳动的过度依赖的历史学家会引用关键的经济因素来阐述他们的观点:促成了罗马帝国的衰落。 Harper(2016)概述了罗马货币贬值如何导致通货膨胀,破坏经济稳定。此外,Scheidel(2007)强调,过度使用奴隶导致自由公民普遍失业,进一步破坏经济稳定。正如 Temin (2006) 所强调的那样,帝国对从埃及进口谷物的依赖造成了贸易逆差,这也导致了经济衰退。因此,这些因素的结合在罗马帝国的衰落中发挥了至关重要的作用。", "reference_answer": "这一论点集中于经济困境和对奴隶劳动的过度依赖作为罗马帝国衰落的主要原因。首先,重要的证据之一就是罗马货币的贬值。正如哈珀(Harper,2016)所强调的那样,由于货币不断贬值,帝国遭受了严重的通货膨胀,使得经济难以保持稳定。而且,对奴隶劳动的过度依赖也起到了有害的作用。正如 Scheidel (2007) 所指出的,对奴隶的依赖导致了自由罗马公民的失业。这是因为与雇用自由公民相比,维持奴隶的成本要低得多,导致就业机会减少,进而导致经济不稳定。此外,帝国向东方的扩张使他们高度依赖进口,例如来自埃及的谷物。正如 Temin(2006)所指出的,这造成了贸易逆差,进一步削弱了罗马经济。当帝国开始失去领土时,维持这种贸易不平衡变得越来越困难,导致经济衰退。总之,可以说,主要由货币贬值和过度依赖奴隶劳动引起的经济问题是罗马帝国衰落的重要因素。提供的证据,包括对 Harper (2016)、Scheidel (2007) 和 Temin (2006) 的学术参考,支持了本论文。", "rubric":“答案是否得到证据充分支持,包括相关的引用/归属?"}反馈, 分数 = Judge.single_relative_grade(**data)print("反馈:", 反馈)print("分数:", 分数)# 输出#反馈:回答 A 和回答 B 都正确地将经济问题和对奴隶劳动的过度依赖视为罗马帝国衰落的重要因素,但是,回答 B 更有效地表达了历史学家的论点,因为它包含了支持的学术资料。具体来说,它引用了 Harper、Scheidel 和 Temin 的作品,这增加了历史学家论点的可信度,并且与分数标题对证据和引用的强调非常一致,而回应 A 提供了类似的内容。论证中,它缺乏任何形式的引用或归属,这削弱了所提供证据的强度。因此,根据所提供的标题,响应 B 是更好的响应,因为它使用学术证据来支持历史学家的主张。# 分数:B
注意:如果您对成绩有多个响应,请不要使用single_absolute_grade
/ single_relative_grade
- 相反,请使用absolute_grade
和relative_grade
!它将为您带来超过 10 倍的加速。
# 批量绝对成绩instructions = [...] # 指令列表responses = [...] # 响应列表reference_answers = [...] # 参考答案列表rubric = "..." # Rubric stringfeedbacks, Scores = Judge.absolute_grade (instructions=instructions,responses=responses,rubric=rubric,reference_answers=reference_answers)# 批量相对等级instructions = [...] # 指令列表responses_from_a = [...] # 响应列表responses_from_b = [...]reference_answers = [...] # 参考答案列表rubric = "..." # Rubric 字符串反馈, 分数 = Judge.relative_grade(instructions=instructions,responses_A= responses_from_a、responses_B=responses_from_b、rubric=rubric、reference_answers=reference_answers)
Prometheus-Eval是一个存储库,提供了一系列用于训练、评估和使用专门用于评估其他语言模型的语言模型的工具。该存储库包括以下组件:
prometheus-eval
Python 包,提供了一个简单的接口,用于使用 Prometheus 评估指令-响应对。
用于训练和评估 Prometheus 模型的评估数据集的集合。
用于训练 Prometheus 模型或对自定义数据集进行微调的脚本。
Prometheus是一个开源语言模型系列,专门用于评估其他语言模型。通过有效模拟人类判断和专有的基于 LM 的评估,我们的目标是解决以下问题:
公平性:不依赖闭源模型进行评估!
可控性:您不必担心GPT版本更新或通过构建内部评估管道将您的私人数据发送到OpenAI
价格实惠:如果您已经拥有 GPU,则可以免费使用!
与Prometheus 1模型相比,Prometheus 2模型同时支持直接评估(绝对评分)和成对排名(相对评分)。
您可以通过提供不同的输入提示格式和系统提示来切换模式。在提示中,您应该填写说明、响应,并使用您自己的数据进行评分。或者,您还可以添加参考答案,从而获得更好的性能!
prometheus-eval
包prometheus-eval
包提供了一个简单的接口,用于使用 Prometheus 评估指令-响应对。该包包含以下方法:
absolute_grade
:根据给定的说明、参考答案和评分标准评估单个响应。输出 1 到 5 之间的分数。
relative_grade
:根据给定的说明和评分标准评估两个响应。根据更好的响应输出“A”或“B”。
如果您更喜欢直接使用 Huggingface Hub 中上传的权重,您可以直接下载模型权重!
from Transformers import AutoModelForCausalLM, AutoTokenizerdevice = "cuda" # 将模型加载到model = AutoModelForCausalLM.from_pretrained("prometheus-eval/prometheus-7b-v2.0")tokenizer = AutoTokenizer.from_pretrained("prometheus-eval/prometheus- 7b-v2.0")ABS_SYSTEM_PROMPT = "你是公平的法官助理,其任务是根据具体标准提供清晰、客观的反馈,确保每次评估都反映为表现设定的绝对标准。"ABSOLUTE_PROMPT = """###任务描述:一条指令(可能包括其中的输入),给出要评估的回答、得分为 5 的参考答案以及代表评估标准的评分标准。 1. 编写详细的反馈,严格根据给定的评分标准评估回答的质量,而不是在中进行评估。 2. 写完之后反馈,写一个 1 到 5 之间的整数分数。您应该参考分数标准。3. 输出格式应如下所示:“反馈:(写标准反馈)[结果](整数) 1 到 5 之间)”4.请不要生成任何其他开头、结尾和解释。###评估指令:{instruction}###评估响应:{response}###参考答案(分数 5):{reference_answer}###评分标准:{rubric}###反馈: """user_content = ABS_SYSTEM_PROMPT + "nn" + ABSOLUTE_PROMPT.format(...) # 用您的数据消息填充提示= [ {“角色”:“用户”,“内容”:user_content}, ]encodeds = tokenizer.apply_chat_template(messages, return_tensors=”pt”)model_inputs=encodeds.to(device)model.to(device) generated_ids = model.generate(model_inputs, max_new_tokens=1000, do_sample=True)decoded = tokenizer.batch_decode (生成的_ids)打印(解码[0])
部分 | 描述 |
---|---|
BiGGen 基准评估 | 在 BiGGen-Bench 中评估 LM 的说明。您也可以参考您自己的评估基准的实现。 |
训练普罗米修斯 | 复制 Prometheus 2 模型的说明。基于对齐手册存储库。 |
使用 Prometheus 作为数据质量过滤器 | 使用 Prometheus 2 作为合成数据生成中的质量过滤器的手册。非常感谢 distilabel 团队! ? |
使用 Prometheus 作为 RAG 中的评估器 | 使用 Prometheus 2 RAG 应用程序的食谱。非常感谢 LlamaIndex 团队! ? |
训练的底层代码库源自 Huggingface 的对齐手册和超级马里奥合并存储库。此外,为了进行推理,它大量利用了 litellm、vllm 和 Transformer 库。非常感谢这些出色的存储库的所有贡献者! ?
如果您发现我们的工作有用,请考虑引用我们的论文!
@misc{kim2024prometheus, title={Prometheus 2:专门评估其他语言模型的开源语言模型}, 作者={Seungone Kim、Juyoung Suk、Shayne Longpre、Bill Yuchen Lin、Jamin Shin、Sean Welleck、Graham Neubig、Moontae Lee、Kyungjae Lee 和 Minjoon Seo},年份={2024},eprint={2405.01535},archivePrefix={ arXiv},primaryClass={cs.CL}}
@article{kim2023prometheus,title={Prometheus:在语言模型中引入细粒度评估能力},作者={Kim、Seungone 和 Shin、Jamin 和 Cho、Yejin 和 Jang、Joel 和 Longpre、Shayne 和 Lee、Hwaran 和 Yun, Sangdoo 和 Shin、Seongjin 和 Kim、Sungdong 和 Thorne、James 等},journal={arXiv 预印本arXiv:2310.08491},年份={2023}}
@misc{lee2024prometheusvision, title={Prometheus-Vision:视觉语言模型作为细粒度评估的法官}, 作者={Seongyun Lee、Seungone Kim、Sue Hyun Park、Geewook Kim 和 Minjoon Seo},年份={2024},eprint={2401.06591},archivePrefix={arXiv},primaryClass={cs.CL}}
@misc{kim2024biggen, title={BiGGen 基准:使用语言模型对语言模型进行细粒度评估的原则基准}, 作者={Seungone Kim和Juyoung Suk和Ji Yong Cho和Shayne Longpre和Chaeeun Kim和Dongkeun Yoon和Guijin Son和Yejin Cho和Sheikh Shafayat和Jinheon Baek和Sue Hyun Park和Hyeonbin Hwang和Jinkyung Jo和Howon Cho和Haebin Shin和Seongyun Lee 和 Hanseok Oh 和 Noah Lee 和 Namgyu Ho 和 Se June Joo 和 Miyoung Ko 和 Yoonjoo Lee以及 Hyungjoo Chae、Jamin Shin、Joel Jang、Seonghyeon Ye、Bill Yuchen Lin、Sean Welleck、Graham Neubig、Moontae Lee、Kyungjae Lee 和 Minjoon Seo},year={2024},eprint={2406.05761},archivePrefix={arXiv} ,primaryClass={cs.CL}}