[![Contributors][contributors-shield]][contributors-url] [![Forks][forks-shield]][forks-url] [![Stargazers][stars-shield]][stars-url] [![Issues][issues-shield]][issues-url]
新闻和更新
- [2024/05/26] 添加对 GPT-4o 的支持。
- [2024/03/13] 添加对多模态模型和数据集的支持。
- [2024/01/05] 添加对 BigBench Hard, DROP, ARC 数据集的支持。
- [2023/12/16] 添加对 Gemini, Mistral, Mixtral, Baichuan, Yi 模型的支持。
- [2023/12/15] 添加详细的用户添加新模块(模型、数据集等)的说明 examples/add_new_modules.md。
- [2023/12/05] 发布 promptbench 0.0.1。
简介
PromptBench 是一个基于 Pytorch 的用于评估大语言模型 (LLMs) 的 Python 包。它提供了用户友好的 API,供研究人员进行 LLMs 的评估。查看技术报告:https://arxiv.org/abs/2312.07910。
PromptBench 目前提供哪些功能?
- 快速模型性能评估: 我们提供了一个用户友好的界面,可以快速构建模型、加载数据集并评估模型性能。
- Prompt 工程: 我们实现了几种 prompt 工程方法。例如:少样本思维链 [1], 情感提示 [2],专家提示 [3] 等等。
- 评估对抗性提示: PromptBench 集成了 提示攻击 [4],使研究人员能够模拟黑盒对抗性提示攻击并评估它们的稳健性(详细信息见 这里)。
- 动态评估以减轻潜在的测试数据污染: 我们集成了动态评估框架 DyVal [5],它可以生成具有可控复杂性的即兴评估样本。
安装
通过 pip
安装
我们提供了一个 Python 包 promptbench,供想快速开始评估的用户使用。只需运行以下命令:
pip install promptbench
注意,pip 安装可能比最新更新有所滞后。因此,如果您想使用最新功能或基于我们的代码进行开发,您应该通过 GitHub 安装。
通过 GitHub 安装
首先,克隆仓库:
git clone git@github.com:microsoft/promptbench.git
然后,
cd promptbench
要安装所需的软件包,可以创建一个 conda 环境:
conda create --name promptbench python=3.9
conda activate promptbench
然后使用 pip 安装所需软件包:
pip install -r requirements.txt
请注意,这只是安装了基本的 python 包。对于提示攻击,您还需要安装 TextAttack。
使用
PromptBench 易于使用和扩展。通过以下示例可以帮助您快速熟悉 PromptBench,以便快速使用、评估现有数据集和 LLMs,或创建自己的数据集和模型。
请参见 安装 以首先安装 PromptBench。
如果通过 pip
安装 PromptBench,您只需执行:
import promptbench as pb
如果您是从 git
安装 PromptBench 并想在其他项目中使用它:
import sys
# 将 PromptBench 的目录添加到 Python 路径
sys.path.append('/home/xxx/promptbench')
# 现在可以通过名称导入 PromptBench
import promptbench as pb
我们提供的教程包括:
- 在现有基准上评估模型: 请参阅 examples/basic.ipynb 以构建您的评估管道。对于多模态评估管道,请参阅 examples/multimodal.ipynb
- 测试不同提示技术的效果:
- 检查提示攻击的稳健性: 请参阅 examples/prompt_attack.ipynb 构建攻击。
- 使用 DyVal 进行评估: 请参阅 examples/dyval.ipynb 构建 DyVal 数据集。
已实现的组件
PromptBench 目前支持不同的数据集、模型、提示工程方法、对抗性攻击等。欢迎您添加更多。
数据集
- 语言数据集:
- GLUE: SST-2, CoLA, QQP, MRPC, MNLI, QNLI, RTE, WNLI
- MMLU
- BIG-Bench Hard (布尔逻辑、有效括号、日期...)
- Math
- GSM8K
- SQuAD V2
- IWSLT 2017
- UN Multi
- CSQA (常识性 QA)
- Numersense
- QASC
- Last Letter Concatenate
- 多模态数据集:
- VQAv2
- NoCaps
- MMMU
- MathVista
- AI2D
- ChartQA
- ScienceQA
模型
语言模型:
- 开源模型:
- google/flan-t5-large
- databricks/dolly-v1-6b
- Llama2 系列
- vicuna-13b, vicuna-13b-v1.3
- Cerebras/Cerebras-GPT-13B
- EleutherAI/gpt-neox-20b
- Google/flan-ul2
- phi-1.5 和 phi-2
- 专有模型
- PaLM 2
- GPT-3.5
- GPT-4
- Gemini Pro
多模态模型:
- 开源模型:
- BLIP2
- LLaVA
- Qwen-VL, Qwen-VL-Chat
- InternLM-XComposer2-VL
- 专有模型
- GPT-4v
- Gemini Pro Vision
- Qwen-VL-Max, Qwen-VL-Plus
提示工程
- 思维链 (COT) [1]
- 情感提示 [2]
- 专家提示 [3]
- 零样本思维链
- 生成知识 [6]
- 从易到难 [7]
对抗性攻击
- 字符级攻击
- DeepWordBug
- TextBugger
- 词汇级攻击
- TextFooler
- BertAttack
- 句子级攻击
- CheckList
- StressTest
- 语义级攻击
- 人工设计攻击
协议与分析
- 标准评估
- 动态评估
- 语义评估
- 基准测试结果
- 可视化分析
- 可迁移性分析
- 词频分析
基准测试结果
请参阅我们的基准测试网站以获取关于提示攻击、提示工程和动态评估DyVal的基准测试结果。
致谢
- TextAttack
- README模板
- 感谢志愿者:张瀚源、李灵睿、周亚婷在提示攻击基准测试中进行语义保留实验。
参考文献
[1] Jason Wei, et al. "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models." arXiv preprint arXiv:2201.11903 (2022).
[2] Cheng Li, et al. "Emotionprompt: Leveraging psychology for large language models enhancement via emotional stimulus." arXiv preprint arXiv:2307.11760 (2023).
[3] BenFeng Xu, et al. "ExpertPrompting: Instructing Large Language Models to be Distinguished Experts" arXiv preprint arXiv:2305.14688 (2023).
[4] 朱开杰, et al. "PromptBench: Towards Evaluating the Robustness of Large Language Models on Adversarial Prompts." arXiv preprint arXiv:2306.04528 (2023).
[5] 朱开杰, et al. "DyVal: Graph-informed Dynamic Evaluation of Large Language Models." arXiv preprint arXiv:2309.17167 (2023).
[6] 刘健, 刘安, 陆晓, 等. "用于常识推理的生成知识提示" [J]. arXiv preprint arXiv:2110.08387, 2021.
[7] 周东升, Schärli N, 侯亮, 等. "从少到多提示促进大语言模型中的复杂推理" [J]. arXiv preprint arXiv:2205.10625, 2022.
引用PromptBench及其他研究论文
如果您发现此项目对您的项目/论文有帮助,请引用我们:
@article{zhu2023promptbench2,
title={PromptBench: A Unified Library for Evaluation of Large Language Models},
author={Zhu, Kaijie and Zhao, Qinlin and Chen, Hao and Wang, Jindong and Xie, Xing},
journal={arXiv preprint arXiv:2312.07910},
year={2023}
}
@article{zhu2023promptbench,
title={PromptBench: Towards Evaluating the Robustness of Large Language Models on Adversarial Prompts},
author={Zhu, Kaijie and Wang, Jindong and Zhou, Jiaheng and Wang, Zichen and Chen, Hao and Wang, Yidong and Yang, Linyi and Ye, Wei and Gong, Neil Zhenqiang and Zhang, Yue and others},
journal={arXiv preprint arXiv:2306.04528},
year={2023}
}
@article{zhu2023dyval,
title={DyVal: Graph-informed Dynamic Evaluation of Large Language Models},
author={Zhu, Kaijie and Chen, Jiaao and Wang, Jindong and Gong, Neil Zhenqiang and Yang, Diyi and Xie, Xing},
journal={arXiv preprint arXiv:2309.17167},
year={2023}
}
@article{chang2023survey,
title={A survey on evaluation of large language models},
author={Chang, Yupeng and Wang, Xu and Wang, Jindong and Wu, Yuan and Zhu, Kaijie and Chen, Hao and Yang, Linyi and Yi, Xiaoyuan and Wang, Cunxiang and Wang, Yidong and others},
journal={arXiv preprint arXiv:2307.03109},
year={2023}
}
贡献
本项目欢迎贡献和建议。大多数贡献要求您同意一份贡献者许可协议(CLA),声明您有权利并实际上授予我们使用您的贡献的权利。有关详情,请访问 https://cla.opensource.microsoft.com。
当您提交拉取请求时,CLA机器人会自动确定您是否需要提供CLA,并适当装饰PR(例如,状态检查、评论)。只需按照机器人提供的说明操作即可。在所有使用我们CLA的仓库中,您只需做一次。
本项目采用了Microsoft开源行为准则。有关更多信息,请参阅行为准则常见问题或联系opencode@microsoft.com以获得任何其他问题或评论。
如果您有使PromptBench更好的建议,请fork此仓库并创建拉取请求。您也可以简单地打开一个标有“enhancement”标签的问题。不要忘记给这个项目加星!再次感谢!
- Fork该项目
- 创建您的分支(
git checkout -b your_name/your_branch
) - 提交您的更改(
git commit -m 'Add some features'
) - 推送到该分支(
git push origin your_name/your_branch
) - 打开一个拉取请求
商标
本项目可能包含项目、产品或服务的商标或徽标。授权使用Microsoft商标或徽标必须遵守并遵循Microsoft的商标和品牌指南。使用微软商标或徽标的修改版本不得引起混淆或暗示微软赞助。任何第三方商标或徽标的使用均受第三方政策的约束。