language:
- zh
tags:
- bpo
- llama
- thudm
inference: false
黑盒提示优化:无需模型训练的大语言模型对齐方法
- 代码库: https://github.com/thu-coai/BPO
- 论文: https://arxiv.org/abs/2311.04155
- 数据: https://huggingface.co/datasets/THUDM/BPO
黑盒提示优化(BPO)
BPO是一种区别于基于训练方法(如PPO或DPO)的黑盒对齐技术。BPO仅需训练即插即用模型,通过优化用户输入来改进大语言模型。因此,它可应用于各类开源或基于API的大语言模型。
模型详情
数据
提示优化模型通过蕴含人类偏好特征的提示优化对训练得到,数据集详细信息参见此处。
基座模型
提示偏好优化器基于Llama-2-7b-chat-hf
构建。
语言
英语
性能表现
模型A |
模型B |
A胜率 |
平局 |
B胜率 |
gpt-3.5-turbo + BPO |
gpt-3.5-turbo |
60.0 |
8.7 |
31.3 |
claude-2 + BPO |
claude-2 |
57.5 |
5.0 |
37.5 |
llama-2-13b-chat + BPO |
llama-2-70b-chat |
61.3 |
0.0 |
38.7 |
vicuna-13b + BPO |
vicuna-13b + PPO |
52.5 |
3.7 |
43.7 |
vicuna-13b + BPO |
vicuna-13b + DPO |
53.8 |
2.5 |
43.7 |
vicuna-13b + DPO + BPO |
vicuna-13b + DPO |
60.0 |
2.5 |
37.5 |
使用说明
提示模板
采用如下提示模板:
[INST] 你是一名专业的提示工程师。请帮我优化以下提示以获得更有益且无害的响应:\n{用户提示} [/INST]
推理代码
推理示例代码:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path = '您的模型路径'
prompt_template = "[INST] 你是一名专业的提示工程师。请帮我优化以下提示以获得更有益且无害的响应:\n{} [/INST]"
model = AutoModelForCausalLM.from_pretrained(model_path).cuda()
tokenizer = AutoTokenizer.from_pretrained(model_path)
text = '告诉我关于哈利·波特的信息'
prompt = prompt_template.format(text)
model_inputs = tokenizer(prompt, return_tensors="pt").to("cuda:0")
output = model.generate(**model_inputs, max_new_tokens=1024, do_sample=True, top_p=0.9, temperature=0.6, num_beams=1)
resp = tokenizer.decode(output[0], skip_special_tokens=True).split('[/INST]')[1].strip()
print(resp)
更详细用法(如激进优化模式)请参见GitHub代码库。
已知限制
- 任务覆盖不足:当前仅使用开源数据获得约1.4万优化提示,难以覆盖广泛用户查询,部分提示优化效果可能欠佳
- 长上下文任务和数学问题占比较低,处理此类任务时提示优化器表现较弱
引用
若使用本模型,请引用:
@article{cheng2023black,
title={Black-Box Prompt Optimization: Aligning Large Language Models without Model Training},
author={Cheng, Jiale and Liu, Xiao and Zheng, Kehan and Ke, Pei and Wang, Hongning and Dong, Yuxiao and Tang, Jie and Huang, Minlie},
journal={arXiv preprint arXiv:2311.04155},
year={2023}
}