license: mit
该模型是一个70亿参数的Self-RAG模型,能够针对多样化用户查询生成输出结果,并自适应地调用检索系统、自我批判输出内容和检索段落,同时生成反思标记。
Self-RAG通过标准的下一个标记预测目标,在交织段落与反思标记的指令遵循语料库上进行训练,实现了基于细粒度反馈的高效稳定学习。推理阶段则利用涵盖生成内容多维度的反思标记,采样最符合用户偏好的最佳输出。完整说明详见论文。
使用说明
以下展示从HuggingFace快速下载模型并使用vllm
运行的基础方法(需预置段落)。请确保已安装self-rag/requirements.txt列出的依赖项。如需运行包含检索系统和细粒度树解码的完整推理流程,请使用官方代码库。
from transformers import AutoTokenizer, AutoModelForCausalLM
from vllm import LLM, SamplingParams
model = LLM("selfrag/selfrag_llama2_7b", download_dir="/gscratch/h2lab/akari/model_cache", dtype="half")
sampling_params = SamplingParams(temperature=0.0, top_p=1.0, max_tokens=100, skip_special_tokens=False)
def format_prompt(input, paragraph=None):
prompt = "### 指令:\n{0}\n\n### 响应:\n".format(input)
if paragraph is not None:
prompt += "[检索]<paragraph>{0}</paragraph>".format(paragraph)
return prompt
query_1 = "选出不同类项:twitter, instagram, whatsapp。"
query_2 = "能否说明美洲驼与羊驼的区别?"
queries = [query_1, query_2]
preds = model.generate([format_prompt(query) for query in queries], sampling_params)
for pred in preds:
print("模型预测: {0}".format(pred.outputs[0].text))
prompt = format_prompt("能否说明美洲驼与羊驼的区别?", paragraph="羊驼(Lama pacos)是南美骆驼科哺乳动物,常与美洲驼混淆。羊驼体型显著小于美洲驼,且与役用美洲驼不同,羊驼专为纤维养殖。")
preds = model.generate([prompt], sampling_params)
print([pred.outputs[0].text for pred in preds])
输入格式
如format_prompt
函数所示,输入应格式化为:
### 指令:\n{指令}\n\n### 响应:\n"
或含附加输入时:
### 指令:\n{指令}\n\n### 输入:\n{输入}\n\n### 响应:\n"
段落可插入在### 响应:\n"
之后任意位置,但需用段落标记包裹(即<paragraph>{0}</paragraph>
)。
训练细节
训练数据详见HuggingFace数据集selfrag_train_data。具体训练方法请参考官方代码库。训练使用8块A100 40GB显卡在Stability HPC服务器完成。
引用与联系
使用本模型请引用:
@article{asai2023selfrag,
author = {Asai, Akari and Wu, Zeqiu and Wang, Yizhong and Sil, Avirup and Hajishirzi, Hannaneh},
title = {{Self-RAG}: 通过自我反思实现检索、生成与批判的学习},
year = {2023},
journal = { arXiv预印本 arXiv:2310.11511 },
URL = {https://arxiv.org/abs/2310.11511}
}