license: mit
该模型是一个130亿参数的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_13b", 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".format(指令)
或含附加输入时:
### 指令:\n{指令}\n\n### 输入:\n{输入}\n\n### 响应:\n"
段落内容可插入在### 响应:\n"
之后的任意位置,但需用段落标记包裹(即<paragraph>{0}</paragraph>
)。
训练细节
训练数据详见HuggingFace数据集selfrag_train_data。训练使用Stability HPC服务器的8块A100 40GB显卡,具体配置参见官方代码库。
引用与联系
使用本模型请引用:
@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}
}