Hugging Face 的开源文本生成与大型语言模型生态系统

发布于 2023 年 7 月 17 日
在 GitHub 上更新

[2023 年 7 月 24 日更新:添加了 Llama 2。]

文本生成和会话技术已经存在很久了。早期使用这些技术面临的挑战是,通过推理参数和判别偏差来控制文本的连贯性和多样性。连贯性更高的输出缺乏创造性,更接近原始训练数据,听起来也不那么像人类。最近的发展克服了这些挑战,用户友好的界面让每个人都能尝试这些模型。ChatGPT 等服务最近让 GPT-4 等强大的模型备受关注,并导致 Llama 等开源替代方案爆炸式普及。我们认为这些技术将长期存在,并越来越多地融入到日常产品中。

本文分为以下几个部分:

  1. 文本生成背景简介
  2. 许可
  3. Hugging Face 生态系统中用于大型语言模型服务的工具
  4. 参数高效微调 (PEFT)

文本生成背景简介

文本生成模型本质上是通过完成不完整的文本或根据给定的指令或问题从头开始生成文本来训练的。完成不完整文本的模型称为因果语言模型,著名的例子有 OpenAI 的 GPT-3 和 Meta AI 的 Llama

Causal LM Output

在我们继续之前,您需要了解一个概念,那就是微调。这是一个采用非常大的模型并将该基础模型中包含的知识转移到另一个用例的过程,我们称之为下游任务。这些任务可以以指令的形式出现。随着模型规模的增长,它可以更好地泛化到预训练数据中不存在但在微调过程中学习到的指令。

因果语言模型通过一种称为人类反馈强化学习 (RLHF) 的过程进行调整。这种优化主要是针对文本听起来有多自然和连贯,而不是答案的有效性。解释 RLHF 的工作原理超出了本博客文章的范围,但您可以在此处找到有关此过程的更多信息。

例如,GPT-3 是一个因果语言基础模型,而 ChatGPT(GPT 系列模型的 UI)后台的模型则是通过 RLHF 对可能包含对话或指令的提示进行微调的。区分这些模型非常重要。

在 Hugging Face Hub 上,您可以找到因果语言模型和经过指令微调的因果语言模型(我们将在本博客文章后面提供链接)。Llama 是首批超越/媲美闭源模型的开源大型语言模型之一。一个由 Together 领导的研究小组创建了 Llama 数据集的复制品,名为 Red Pajama,并在此基础上训练了大型语言模型和指令微调模型。您可以在此处阅读更多相关信息,并在Hugging Face Hub 上找到模型检查点。截至本博客文章撰写时,三个最大的开源许可证的因果语言模型是 MosaicML 的 MPT-30B、Salesforce 的 XGen 和阿联酋 TII 的 Falcon,它们都在 Hugging Face Hub 上完全开源。最近,Meta 发布了 Llama 2,这是一款开放访问的模型,其许可证允许商业用途。截至目前,Llama 2 在不同的基准测试中超越了所有其他开源大型语言模型。Hugging Face Hub 上的 Llama 2 检查点与 transformers 兼容,最大的检查点可在 HuggingChat 供所有人试用。您可以在这篇博客文章中阅读更多关于如何使用 Llama 2 进行微调、部署和提示的信息。

第二种文本生成模型通常被称为文本到文本生成模型。这些模型在文本对上进行训练,可以是问题和答案,也可以是指令和响应。最流行的模型是 T5 和 BART(目前它们都不是最先进的)。谷歌最近发布了 FLAN-T5 系列模型。FLAN 是一种最近开发的指令微调技术,FLAN-T5 本质上是使用 FLAN 进行微调的 T5。目前,FLAN-T5 系列模型是目前最先进的开源模型,可在 Hugging Face Hub 上找到。请注意,这些模型与指令微调的因果语言模型不同,尽管输入-输出格式可能看起来相似。您可以在下面看到这些模型的工作原理图。

FLAN-T5 Illustration

拥有更多不同版本的开源文本生成模型,使公司能够保持数据私密性,更快地将模型适应其领域,并降低推理成本,而不是依赖于付费的封闭式 API。Hugging Face Hub 上的所有开源因果语言模型都可以在此处找到,文本到文本生成模型可以在此处找到。

Hugging Face 与 BigScience 和 BigCode 共同打造的模型💗

Hugging Face 共同领导了两项科学计划:BigScience 和 BigCode。这两项计划的成果是创建了两个大型语言模型:BLOOM 🌸 和 StarCoder 🌟。BLOOM 是一个因果语言模型,训练数据涵盖 46 种人类语言和 13 种编程语言。它是第一个参数超过 GPT-3 的开源模型。您可以在 BLOOM 文档中找到所有可用的检查点。

StarCoder 是一个语言模型,其训练数据来源于 GitHub 上的宽松代码(包含 80 多种编程语言 🤯),训练目标是“填补中间部分”。它没有经过指令微调,因此更多地充当一个编码助手,用于完成给定的代码,例如将 Python 翻译成 C++,解释概念(什么是递归),或者充当终端。您可以在此应用程序中尝试所有 StarCoder 检查点。它还附带一个 VSCode 扩展

本博客文章中提及的所有模型的使用片段都可在模型存储库或 Hugging Face 中该模型类型的文档页面中找到。

许可

许多文本生成模型要么是闭源的,要么其许可证限制商业用途。幸运的是,开源替代方案开始出现,并受到社区的欢迎,成为进一步开发、微调或与其他项目集成的构建块。下面您可以找到一些具有完全开源许可证的大型因果语言模型列表:

有两个代码生成模型,BigCode 的 StarCoder 和 Salesforce 的 Codegen。除了指令微调的 Codegen 之外,这两个模型都有不同大小的检查点,并且都是开源或 open RAIL 许可证。

Hugging Face Hub 还托管了各种针对指令或聊天用途进行微调的模型。它们根据您的需求有不同的风格和大小。

  • Mosaic ML 的 MPT-30B-Chat 使用 CC-BY-NC-SA 许可证,不允许商业用途。但是,MPT-30B-Instruct 使用 CC-BY-SA 3.0 许可证,可以用于商业用途。
  • Falcon-40B-InstructFalcon-7B-Instruct 都使用 Apache 2.0 许可证,因此也允许商业用途。
  • 另一个受欢迎的模型家族是 OpenAssistant,其中一些是基于 Meta 的 Llama 模型使用自定义指令调优数据集构建的。由于原始 Llama 模型只能用于研究,因此基于 Llama 构建的 OpenAssistant 检查点没有完整的开源许可证。但是,有些 OpenAssistant 模型是基于 Falconpythia 等开源模型构建的,它们使用宽松许可证。
  • StarChat Beta 是 StarCoder 的指令微调版本,具有 BigCode Open RAIL-M v1 许可证,允许商业用途。Salesforce 的指令微调编码模型 XGen 模型仅允许研究用途。

如果您想在现有指令数据集上微调模型,您需要了解数据集是如何编译的。一些现有指令数据集是众包的,或使用现有模型(例如 ChatGPT 背后的模型)的输出。斯坦福大学创建的 ALPACA 数据集是通过 ChatGPT 背后的模型输出创建的。此外,还有各种具有开源许可证的众包指令数据集,例如 oasst1(由数千人自愿创建!)或 databricks/databricks-dolly-15k。如果您想自己创建数据集,可以查看 Dolly 的数据集卡片,了解如何创建指令数据集。在这些数据集上微调的模型可以分发。

您可以在下面找到一些开源/开放访问模型的综合表格。

模型 数据集 许可证 用途
Falcon 40B Falcon RefinedWeb Apache-2.0 文本生成
SalesForce XGen 7B C4、RedPajama 及更多混合 Apache-2.0 文本生成
MPT-30B C4、RedPajama 及更多混合 Apache-2.0 文本生成
Pythia-12B Pile Apache-2.0 文本生成
RedPajama INCITE 7B RedPajama Apache-2.0 文本生成
OpenAssistant Falcon 40B oasst1Dolly Apache-2.0 文本生成
StarCoder The Stack BigCode OpenRAIL-M 代码生成
Salesforce CodeGen Starcoder Data Apache-2.0 代码生成
FLAN-T5-XXL gsm8klambadaesnli Apache-2.0 文本到文本生成
MPT-30B Chat ShareGPT-VicunaOpenAssistant Guanaco 及更多 CC-By-NC-SA-4.0 聊天
MPT-30B Instruct duorccompetition_mathdolly_hhrlhf CC-By-SA-3.0 指令
Falcon 40B Instruct baize Apache-2.0 指令
Dolly v2 Dolly MIT 文本生成
StarChat-β OpenAssistant Guanaco BigCode OpenRAIL-M 代码指令
Llama 2 未公开数据集 自定义 Meta 许可证(允许商业用途) 文本生成

Hugging Face 生态系统中用于大型语言模型服务的工具

文本生成推理 (Text Generation Inference)

对于这些大型模型来说,并发用户的响应时间和延迟是一个巨大的挑战。为了解决这个问题,Hugging Face 发布了 Text Generation Inference (TGI),这是一个基于 Rust、Python 和 gRPc 构建的开源大型语言模型服务解决方案。TGI 已集成到 Hugging Face 的推理解决方案 Inference EndpointsInference API 中,因此您可以直接通过几次点击创建带有优化推理的端点,或者简单地向 Hugging Face 的 Inference API 发送请求即可从中受益,而无需将 TGI 集成到您的平台。

Screenshot from HuggingChat

TGI 目前为 Hugging Face 的大型语言模型开源聊天 UI HuggingChat 提供支持。该服务目前使用 OpenAssistant 的一个模型作为后端模型。您可以随心所欲地与 HuggingChat 聊天,并启用网页搜索功能,以获取使用当前网页内容的响应。您还可以向模型作者提供每个响应的反馈,以便他们训练出更好的模型。HuggingChat 的 UI 也是开源的,我们正在为 HuggingChat 开发更多功能,以允许更多功能,例如在聊天中生成图像。

HuggingChat Search

最近,HuggingChat 的 Docker 模板已发布到 Hugging Face Spaces。这允许任何人通过几次点击部署基于大型语言模型的实例并进行自定义。您可以在此处基于各种大型语言模型(包括 Llama 2)创建您自己的大型语言模型实例。

HuggingChat Space

如何找到最佳模型?

Hugging Face 托管了一个 LLM 排行榜。此排行榜是通过在 Hugging Face 的集群上评估社区提交的模型在文本生成基准上的表现而创建的。如果您找不到您正在寻找的语言或领域,您可以在此处进行筛选。

Open LLM Leaderboard

您还可以查看大型语言模型性能排行榜,该排行榜旨在评估 Hugging Face Hub 上可用的大型语言模型的延迟和吞吐量。

参数高效微调 (PEFT)

如果您想在您的指令数据集上微调现有的大型模型,那么在消费级硬件上进行微调并随后部署它们几乎是不可能的(因为指令模型与用于微调的原始检查点大小相同)。PEFT 是一个允许您使用参数高效微调技术的库。这意味着,您无需训练整个模型,而是可以训练少量额外的参数,从而以极小的性能下降实现更快的训练。通过 PEFT,您可以进行低秩适应 (LoRA)、前缀调优、提示调优和 p-tuning。

您可以查看更多资源,了解文本生成的更多信息。

更多资源

  • 我们与 AWS 合作发布了基于 TGI 的 LLM 部署深度学习容器,称为 LLM 推理容器。请在此处阅读相关信息。
  • 文本生成任务页面以了解有关该任务本身的更多信息。
  • PEFT 公告博客文章
  • 在此处阅读有关 Inference Endpoints 如何使用 TGI 的信息:此处
  • 在此处阅读有关如何微调 Llama 2 transformers 和 PEFT,以及提示的信息:此处

社区

注册登录 发表评论