开源协议:MIT
语言:
- 英语
库名称:transformers
推理支持:否
训练数据集:
- databricks/databricks-dolly-15k
dolly-v2-3b 模型卡片
概述
Databricks推出的dolly-v2-3b
是一款基于指令微调的大语言模型,训练于Databricks机器学习平台,允许商业用途。该模型基于pythia-2.8b
架构,在约1.5万条指令/响应微调记录(databricks-dolly-15k
)上训练而成。这些数据由Databricks员工根据InstructGPT论文的能力领域生成,涵盖头脑风暴、分类、封闭问答、生成、信息抽取、开放问答和摘要等任务。dolly-v2-3b
虽非顶尖模型,但展现出超越基础模型的高质量指令跟随能力。
Dolly v2还提供以下更大规模的版本:
运行推理的GPU配置建议请参考dolly GitHub仓库。
所有者:Databricks公司
模型概览
dolly-v2-3b
是由Databricks开发的28亿参数因果语言模型,衍生自EleutherAI的Pythia-2.8b,并在约1.5万条指令数据集上微调而成。该数据集由Databricks员工创建,采用宽松许可协议(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
函数加载(需启用trust_remote_code=True
以调用模型库中的自定义InstructionTextGenerationPipeline)。建议添加torch_dtype=torch.bfloat16
以减少内存占用(不影响输出质量),内存充足时可省略该参数。
import torch
from transformers import pipeline
generate_text = pipeline(model="databricks/dolly-v2-3b", 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-3b", padding_side="left")
model = AutoModelForCausalLM.from_pretrained("databricks/dolly-v2-3b", device_map="auto", torch_dtype=torch.bfloat16)
generate_text = InstructionTextGenerationPipeline(model=model, tokenizer=tokenizer)
LangChain集成
在LangChain中使用时需设置return_full_text=True
(默认仅返回新生成文本):
import torch
from transformers import pipeline
generate_text = pipeline(model="databricks/dolly-v2-3b", 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-3b
并非最先进的生成语言模型,其设计目标并非在性能上与现代架构或更大预训练语料的模型竞争。当前已知缺陷包括:处理复杂语法提示、编程问题、数学运算、事实准确性、时间日期、开放问答、内容虚构、指定长度列表生成、风格模仿及幽默感等方面存在不足,且不具备基础模型的某些能力(如规范信件撰写)。
数据集限制
与所有语言模型相同,dolly-v2-3b
反映其训练数据的特性与局限:
- The Pile:GPT-J的预训练语料主要来自公开互联网,可能包含令人反感的内容。模型可能显性或隐性地反映这些缺陷。
databricks-dolly-15k
:微调数据由Databricks员工于2023年3月至4月生成,含维基百科引用段落。虽经筛查不包含淫秽内容、知识产权或非公众人物隐私信息,但仍可能存在笔误、事实错误及维基百科的偏见,并反映特定人群的语义偏好。
Databricks将持续研发有益、诚实、无害的AI技术。
基准测试
下表显示各模型在EleutherAI LLM评估工具集的表现(按几何平均排序)。如预期所示,dolly-v2-3b
性能不及参数翻倍的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 |
databricks/dolly-v2-3b |
0.384 |
0.6115 |
0.5896 |
0.6508 |
0.3703 |
0.7427 |
0.5755 |
0.5449 |
...(其他模型数据保持原样)... |
|
|
|
|
|
|
|
|
引用
@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}
}
祝您探索愉快!