开源协议:MIT
支持语言:
- 英语
库名称:transformers
推理支持:否
训练数据集:
- databricks/databricks-dolly-15k
dolly-v2-12b 模型卡
概述
Databricks推出的dolly-v2-12b
是一款基于指令微调的大语言模型,构建于Databricks机器学习平台之上,允许商业用途。该模型基于pythia-12b
,通过在约15,000条指令/响应微调记录(即databricks-dolly-15k
数据集)上训练而成。这些数据由Databricks员工根据InstructGPT论文的能力领域生成,涵盖头脑风暴、分类、封闭式问答、生成、信息提取、开放式问答和摘要等场景。dolly-v2-12b
虽非当前最先进模型,但展现出超乎基础模型预期的高质量指令跟随能力。
Dolly v2系列还提供以下小规模版本:
不同GPU配置下的推理技巧请参考dolly GitHub仓库。
所有者:Databricks公司
模型概览
dolly-v2-12b
是由Databricks开发的120亿参数因果语言模型,衍生自EleutherAI的Pythia-12b,并在Databricks员工生成的约15K条指令数据集上微调,采用宽松许可协议(CC-BY-SA)。
使用指南
在配备GPU的设备上使用transformers
库时,请确保已安装transformers
和accelerate
库。在Databricks笔记本中可运行:
%pip install "accelerate>=0.16.0,<1" "transformers[torch]>=4.28.1,<5" "torch>=1.13.1,<2"
指令跟随流水线可通过pipeline
函数加载如下。由于使用了模型仓库中的自定义InstructionTextGenerationPipeline
(此处查看),需设置trust_remote_code=True
。为降低内存消耗,推荐支持情况下添加torch_dtype=torch.bfloat16
参数,该设置不影响输出质量,内存充足时可移除。
import torch
from transformers import pipeline
generate_text = pipeline(model="databricks/dolly-v2-12b", torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto")
随后可用流水线回答指令:
res = generate_text("请解释核裂变与核聚变的区别。")
print(res[0]["generated_text"])
若不希望使用trust_remote_code=True
,可下载instruct_pipeline.py到本地,自行构建流水线:
import torch
from instruct_pipeline import InstructionTextGenerationPipeline
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("databricks/dolly-v2-12b", padding_side="left")
model = AutoModelForCausalLM.from_pretrained("databricks/dolly-v2-12b", device_map="auto", torch_dtype=torch.bfloat16)
generate_text = InstructionTextGenerationPipeline(model=model, tokenizer=tokenizer)
LangChain集成
与LangChain配合使用时,必须设置return_full_text=True
,因LangChain需要完整文本返回,而流水线默认仅返回新生成文本。
import torch
from transformers import pipeline
generate_text = pipeline(model="databricks/dolly-v2-12b", torch_dtype=torch.bfloat16,
trust_remote_code=True, device_map="auto", return_full_text=True)
可创建纯指令或带上下文的提示模板:
from langchain import PromptTemplate, LLMChain
from langchain.llms import HuggingFacePipeline
prompt = PromptTemplate(
input_variables=["instruction"],
template="{instruction}")
prompt_with_context = PromptTemplate(
input_variables=["instruction", "context"],
template="{instruction}\n\n输入:\n{context}")
hf_pipeline = HuggingFacePipeline(pipeline=generate_text)
llm_chain = LLMChain(llm=hf_pipeline, prompt=prompt)
llm_context_chain = LLMChain(llm=hf_pipeline, prompt=prompt_with_context)
简单指令预测示例:
print(llm_chain.predict(instruction="解释核裂变与核聚变的区别。").lstrip())
带上下文指令预测示例:
context = """乔治·华盛顿(1732年2月22日[b] - 1799年12月14日)是美国军官、政治家和开国元勋,1789至1797年间担任首任美国总统。"""
print(llm_context_chain.predict(instruction="乔治·华盛顿何时担任总统?", context=context).lstrip())
已知限制
性能限制
dolly-v2-12b
并非最先进生成语言模型,尽管量化评估持续进行中,但其设计目标并非与更现代架构或更大预训练语料的模型竞争。
Dolly模型系列处于积极开发阶段,以下局限性清单可能不完整,但我们通过文档形式与社区分享初步发现:
dolly-v2-12b
在以下方面存在不足:复杂语法提示、编程问题、数学运算、事实错误、日期时间处理、开放式问答、幻觉现象、特定长度列表枚举、风格模仿、幽默感等。此外,原始模型具备的格式化书信写作等能力在本版本中缺失。
数据集限制
与所有语言模型相同,dolly-v2-12b
反映其训练语料的内容与局限:
-
The Pile:GPT-J的预训练语料主要来自公开互联网,与多数网络规模数据集类似,可能包含用户认为不当的内容。因此模型可能直接反映这些缺陷(当明确要求生成不当内容时),或通过隐性偏见/有害关联间接体现。
-
databricks-dolly-15k
:指令微调数据由Databricks员工在2023年3月至4月期间生成,部分分类(如封闭式问答和摘要)引用维基百科段落。据我们所知,数据不含淫秽内容、知识产权或非公众人物隐私信息,但可能存在拼写和事实错误,也可能反映维基百科的偏见,以及Databricks员工群体的兴趣偏好(该群体不能代表全球人口分布)。
Databricks致力于持续研发有益、诚实、无害的AI技术,最大化个人与组织的潜能。
基准测试指标
下表展示不同模型在EleutherAI LLM评估工具集上的表现,按几何平均排序。如上所述,结果表明dolly-v2-12b
未达最先进水平,某些评估中甚至不及dolly-v1-6b
。我们认为这与底层微调数据集的构成和规模有关,但确切原因需进一步研究。
模型 |
openbookqa |
arc_easy |
winogrande |
hellaswag |
arc_challenge |
piqa |
boolq |
gmean |
EleutherAI/pythia-2.8b |
0.348 |
0.5859 |
0.5896 |
0.5912 |
0.3234 |
0.7340 |
0.6382 |
0.5234 |
...(其余模型指标保持原表格格式)... |
|
|
|
|
|
|
|
|
引用
@online{DatabricksBlog2023DollyV2,
author = {Mike Conover等},
title = {免费Dolly:全球首个真正开放的指令微调LLM},
year = {2023},
url = {https://www.databricks.com/blog/2023/04/12/dolly-first-open-commercially-viable-instruction-tuned-llm},
urldate = {2023-06-30}
}
祝您探索愉快!