项目介绍:Generative Representational Instruction Tuning (GRIT)
GritLM 项目专注于提升语言模型在生成及嵌入任务上的表现。通过一种名为“生成表征指令调优”(GRIT)的方法,项目中的大型语言模型能够根据指令差异同时处理生成和嵌入任务。这一方法在 Massive Text Embedding Benchmark (MTEB) 上取得了新的最高记录,并在各规模生成任务上表现优异。
项目背景
现代的语言模型通常只能在生成或嵌入任务中表现良好,但难以兼顾二者。为了解决这一问题,GRIT 提出了一种统一的方法,将生成和嵌入任务结合而不影响性能。此方法不但加快了检索增强生成(RAG)的速度(超过60%),而且省去了单独的检索和生成模型。
推理
GritLM 提供了直观的使用接口,通过简单的 pip install gritlm
,用户可以载入模型,进行各种文本生成和嵌入任务。模型具备以下特点:
- 嵌入/表征:模型能够根据指令从文本中提取表征,适用于文档检索和文本匹配。
- 生成:模型可根据用户提示进行文本生成,例如撰写诗歌。
示例代码
以下 Python 代码展示了如何使用 GritLM 进行文本生成任务:
from gritlm import GritLM
model = GritLM("GritLM/GritLM-7B", torch_dtype="auto")
messages = [{"role": "user", "content": "请用莎士比亚风格为我最近的富士山半夜徒步写一首诗。"}]
encoded = model.tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt")
encoded = encoded.to(model.device)
gen = model.generate(encoded, max_new_tokens=256, do_sample=False)
decoded = model.tokenizer.batch_decode(gen)
print(decoded[0])
训练
GritLM 提供了灵活的训练框架,用户可根据需要应用到不同数据集上。项目提供了几种数据集用于训练,包括嵌入类的 MEDI, MEDI2 和 MEDI2BGE,以及生成类数据集 Tulu2。
使用指南
进入项目文件夹后,运行以下命令来安装必要的环境:
git clone https://github.com/ContextualAI/gritlm
cd gritlm
pip install -e .
项目提供了丰富的训练示例和数据格式,用户可以根据自己的需求配置参数来进行训练。
模型性能
- GritLM-7B:结合双向注意力用于嵌入和因果注意力用于生成,基于 Mistral-7B 微调,在 MTEB 上取得了 66.8 的嵌入性能和 55.5 的生成性能。
- GritLM-8x7B:类似地,8x7B 模型在 MTEB 上取得了 65.7 的嵌入和生成双重性能,是目前开放模型中表现最好的之一。
评价方法
项目使用多种任务类型来评估模型性能,包括分类、聚类、检索排序和文本相似度评估等。此外,提供了不同测试脚本用于验证生成模型的效果。
已知问题
在大规模多节点训练和使用 FSDP 时可能会出现一些超时和整合问题;此外,与深度加速相关的一些功能还未充分测试。可能需要根据具体情况进行调整。
参与和贡献
GritLM 项目持续开发中,欢迎各方参与和贡献,无论是代码改进、模型评测,还是文档完善等方面。