Hugging Face 的文本生成和大语言模型的开源生态

[更新于 2023 年 7 月 23 日: 添加 Llama 2。]

文本生成和对话技术已经出现多年了。早期的挑战在于通过设置参数和分辨偏差,同时控制好文本忠实性和多样性。更忠实的输出一般更缺少创造性,并且和原始训练数据更加接近,也更不像人话。最近的研究克服了这些困难,并且友好的交互页面能让每个人尝试这些模型。如 ChatGPT 的服务,已经把亮点放在强大的模型如 GPT-4,并且引发了爆发式的开源替代品变成主流如 Llama。我们认为这些技术将持续很长一段时间,并且会越来越集成到日常产品中。

这篇博客分成一下几个部分:

  1. 文本生成的简明背景

  2. 许可证

  3. Hugging Face 的生态中面向大语言模型的服务

  4. 参数高效的微调

文本生成的简明背景

文本生成模型本质上是以补全文本或者根据提示词生成文本为目的训练的。补全文本的模型被称之为条件语言模型 (Causal Language Models),有著名的例子比如 OpenAI 的 GPT-3 和 Meta AI 的 Llama。

d0ddc86d82d58fc453ba0e08c505abe8.png
Causal LM Output

下面你最好要了解型微调,这是把一个大语言模型中的知识迁移到另外的应用场景的过程,我们称之为一个 下游任务 。这些任务的形式可以是根据提示的。模型越大,就越能泛化到预训练数据中不存在,但是可以在微调中学习到的提示词上。

条件语言模型有采用基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback, RLHF)。这个优化过程主要基于答复文本的自然性和忠实性,而不是答复的检验值。解释 RLHF 的工作原理超出了本博客的范围,但是你可以在 这里 了解。

举例而言,GPT-3 是一个条件 基本 语言模型,作为 ChatGPT 的后端,通过 RLHF 在对话和提示文本上做微调。最好对这些模型做区分。

在 Hugging Face Hub 上,你可以同时找到条件语言模型和在提示文本上微调过的条件语言模型 (这篇博客后面会给出链接)。Llama 是最早开源,并且能超过闭源模型的大语言模型之一。一个由 Together 领导的研究团队已经复线了 Llama 的数据集,称之为 Red Pajama,并且已经在上面训练和微调了大语言模型。你可以在 这里 了解。以及在 Hugging Face Hub 上找到 模型。截止本博客写好的时候,三个最大的开源语言模型和其许可证分别为 MosaicML 的 MPT-30B,Salesforce 的 XGen 和 TII UAE 的 Falcon,全都已经在 Hugging Face Hub 上开源了。

最近,Meta 开放了 Llama 2,其许可证允许商业用途。截止目前 Llama 2 能在各种指标上超过任何其他开源模型。Llama 2 在 Hugging Face Hub 上的 checkpoint 在 transformers 上兼容,并且最大的 checkpoint 人们都可以在 HuggingChat 上尝试。你可以通过 这篇博客 学习到如何在 Llama 2 上微调,部署和做提示词。

第二种文本生成模型通常称之为文本到文本的生成模型。这些模型在文本对的数据集上训练,这些数据集或者是问答形式,或者是提示和反馈的形式。最受欢迎的是 T5 和 BART (目前为止以及不是最新的技术了)。Google 最近发布了 FLAN-T5 系列的模型。FLAN 是最近为提示任务设计的技术,而 FLAN-T5 便是完全由 T5 用 FLAN 微调得到的模型。目前为止,FLAN-T5 系列的模型是最新的技术,并且开源,可以在 Hugging Face Hub 上看到。注意这和用条件语言模型在提示任务的微调下是不一样的,尽管其输入和输出形式类似。下面你能看到这些模型的原理。

c76565ac74676ebde66f7bf346cf9090.png
FLAN-T5 Illustration

拥有更多开源的文本生成模型能让公司保证其数据隐私,部署下游更快,并且减少购买闭源 API 的支出。Hugging Face Hub 上所有开源的条件语言模型都能在 这里 找到,并且文本到文本的生成模型都能在 这里 找到。

Hugging Face 用爱和 BigScience 与 BigCode 创造的模型 💗

Hugging Face 引领了两家科研初创 BigScience 和 BigCode。它们分别创造了两个大语言模型 BLOOM 🌸 和 StarCoder 🌟。

BLOOM 是一个以 46 种自然语言和 13 种编程语言训练的条件语言模型,是第一个比 GPT-3 有更多参数量的开源模型。你能在 BLOOM 的文档 上下载所需的所有 checkpoint。

StarCoder 是一个以 GitHub 上可访问的代码作为数据集,以 Fill-in-the-Middle 形式训练的语言模型。它不是以提示文本来微调的,所以它更适合对给定代码做补全任务,比如把 Python 翻译到 C++,解释概念 (什么是递归),或者假扮终端。你可以在 这里 找到 StarCoder 所有的 checkpoints。它也有对应的 VSCode 扩展。

本博客中提及的模型,使用代码段都或者在模型主页,或者在该类模型的文档中。

许可证

许多文本生成模型,要么是闭源的,要么是许可证限制商业使用。幸运的是,开源模型开始出现,并且受社区青睐,用于进一步开发、微调、部署到项目中。下面你能找到一些完全开源的大型条件语言模型。

  • Falcon 40B

  • XGen

  • MPT-30B

  • Pythia-12B

  • RedPajama-INCITE-7B

  • OpenAssistant (Falcon variant)

有两个代码生成模型,BigCode 的 StarCoder 和 Salesforce 的 Codegen。它们提供了不同大小的模型 checkpoint。除了 在提示文本上微调的 Codegen 之外,使用了开源或者 open RAIL 许可证。

Hugging Face Hub 也有许多为提示文本或聊天微调的模型,根据你的需求不同,可以选择不同风格和大小。

  • MPT-30B-Chat,Mosaic ML,使用 CC-BY-NC-SA 许可证,不允许商业用途。但是,MPT-30B-Instruct 使用 CC-BY-SA 3.0 许可证,允许商业使用。

  • Falcon-40B-Instruct 和 Falcon-7B-Instruct 都使用 Apache 2.0 许可证,所以允许商业使用。

  • 另外一系列受欢迎的模型是 OpenAssistant,部分是在 Meta 的 Llama 使用个性化的提示文本微调得到的。因为原本的 Llama 只允许研究用途,OpenAssistant 中使用 Llama 的部分不能完全开源。但是,也有 OpenAssistant 模型建立在完全开源的模型之上,比如 Falcon 或者 pythia。

  • StarChat Beta 是 StarCoder 通过提示文本微调的版本,使用 BigCode Open RAIL-M v1 许可证,允许商用。Salesforce 的用提示文本微调的模型, XGen model,只允许研究用途。

如果你想要用一个现成的提示文本数据集微调模型,你需要知道它是怎么来的。一些现成的提示文本数据集要么是由大量人工编写,要么是现有的模型的输出 (比如 ChatGPT 背后的模型)。Stanford 的 ALPACA 数据集由 ChatGPT 背后的数据集的输出组成。另外,不少人工编写的数据集是开源的,比如 oasst1 (由数千名志愿者输出!) 或者 databricks/databricks-dolly-15k。如果你想自己创建数据集,那你可以看 the dataset card of Dolly 来学习创建提示文本数据集。模型在数据集上微调的过程可以分布式进行。

你可以通过如下表格了解一些开源或者开放的模型。

ModelDatasetLicenseUse
Falcon 40BFalcon RefinedWebApache-2.0文本生成
SalesForce XGen 7B由 C4, RedPajama 和其他数据集混合Apache-2.0文本生成
MPT-30B由 C4, RedPajama 和其他数据集混合Apache-2.0文本生成
Pythia-12BPileApache-2.0文本生成
RedPajama INCITE 7BRedPajamaApache-2.0文本生成
OpenAssistant Falcon 40Boasst1 和 DollyApache-2.0文本生成
StarCoderThe StackBigCode OpenRAIL-M代码生成
Salesforce CodeGenStarcoder DataApache-2.0代码生成
FLAN-T5-XXLgsm8k, lambada, 和 esnliApache-2.0文本到文本生成
MPT-30B ChatShareGPT-Vicuna, OpenAssistant Guanaco 和更多CC-By-NC-SA-4.0聊天
MPT-30B Instructduorc, competition_math, dolly_hhrlhfCC-By-SA-3.0提示任务
Falcon 40B InstructbaizeApache-2.0提示任务
Dolly v2DollyMIT文本生成
StarChat-βOpenAssistant GuanacoBigCode OpenRAIL-M代码提示任务
Llama 2非公开的数据集Custom Meta License (允许商用)文本生成

Hugging Face 的生态中面向大语言模型的服务

文本生成推理

使用这些大模型为多用户提供并发服务时,想要降低响应时间和延迟是一个巨大的挑战。为了解决这个问题,Hugging Face 发布了 text-generation-inference (TGI),这是一个开源的大语言模型部署解决方案,它使用了 Rust、Python 和 gRPC。TGI 被整合到了 Hugging Face 的推理解决方案中,包括 Inference Endpoints 和 Inference API,所以你能通过简单几次点击创建优化过的服务接入点,或是向 Hugging Face 的推理 API 发送请求,而不是直接将 TGI 整合到你的平台里。

7029e9fb1e0d98677413bbb9366d5e56.png
Screenshot from HuggingChat

当前 TGI 助力实现了 HuggingChat,这是 Hugging Face 的开源 LLM 聊天界面。目前这项服务背后是来自 OpenAssistant 的模型。你可以随意和 HuggingChat 聊天,并且使用网页搜索功能来检索当前网页的内容。你还可以为每次响应提供反馈,供模型的作者进行优化训练。HuggingChat 的界面同样也是 开源 的,我们正持续不断完善它,争取加入更多功能,比如在聊天过程中生成图片。

46e42eb3c49a1a54425fe37524bbf1f6.png
HuggingChat Search

最近,Hugging Face Spaces 上发布了用于 HuggingChat 的 Docker 模板。这样一来每个人都可以轻松部署和自定义自己的 HuggingChat 实例了。你可以在 这里 基于众多大语言模型 (包括 Llama 2) 创建自己的实例。

671582bdd37c35de1976e82640300b79.png
HuggingChat Space

如何寻找最佳模型?

Hugging Face 设立了一个 大语言模型排名。该排名是通过社区提交的模型在不同指标上的测试结果在 Hugging Face 的集群上的表现评估的。如果你无法找到你想要的模型或者方向,你可以在 这里 设置过滤条件。

20fb1d01ad679085dc31a02f89169bfd.png
Open LLM Leaderboard

你也能找到 大语言模型的表现排名,它评估了 Hugging Face Hub 上大语言模型输出的中间值。

参数高效的微调 (PEFT)

如果你想用你自己的数据集来微调一个模型,在客户端硬件上微调并部署基本是不可能的 (因为提示模型和原本模型的大小一样)。PEFT 是一个实现参数高效的微调技术的库。这意味着,不需要训练整个模型,你只需要训练少量参数,允许更快速的训练而只有非常小的性能损失。通过 PEFT,你可以使用 LoRA,prefix tuning, prompt tuning 和 p-tuning。

以下更多资源可以帮助你了解和文本生成有关的更多信息。

更多资源

  • 我们和 AWS 一起发布了基于 TGI 的 LLM 开发的深度学习容器,称之为 LLM Inference Containers。戳 这里 了解。

  • 文本生成任务页面。

  • PEFT 发布的 博客。

  • 阅读了解 Inference Endpoints 如何使用 TGI。

  • 阅读 如何用 Transformers,PEFT 和提示词微调 Llama 2。

🤗 宝子们可以戳 阅读原文 查看文中所有的外部链接哟!


英文原文: https://hf.co/blog/os-llms

原文作者: Merve Noyan

译者: Vermillion-de

审校/排版: zhongdongy (阿东)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/67208.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c51单片机16个按键密码锁源代码(富proteus电路图)

注意了:这个代码你是没法直接运行的,但是如果你看得懂,随便改一改不超过1分钟就可以用 #include "reg51.h" #include "myheader.h" void displayNumber(unsigned char num) {if(num1){P10XFF;P10P11P14P15P160;}else if…

论文讲解——TPU-MLIR: A Compiler For TPU Using MLIR

论文讲解——TPU-MLIR: A Compiler For TPU Using MLIR https://arxiv.org/pdf/2210.15016.pdf概览模型转换TranslationCanonicalizeLoweringLayerGroup BufferizationCalibration QuantizationCorrectness Check相关资料 https://arxiv.org/pdf/2210.15016.pdf 本文将对TPU…

vue3 动态导入src/page目录下的所有子文件,并自动注册所有页面组件

main.js添加一下代码: const importAll (modules) > {Object.keys(modules).forEach((key) > {const component key.replace(/src/, /).replace(.vue, );const componentName key.split(/).slice(-2, -1)[0] -page;app.component(componentName, modules…

RocketMQ 5.x如何使用GRPC方式发送消费消息

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 RocketMQ版本 5.1.0 背景 我们都知道RocketMQ 5.x新增了proxy模式部署方式,也就是支持了GRPC的消费方式消费,所以今天我们来试试 本次…

php通过各种函数判断0和空php实例

php通过各种函数判断0和空php实例 本文给大家介绍php同各种函数判断0和空的方法,在文章给大家补充介绍了php 语法里0不等于null为空的解决办法 补充:下面给大家介绍下php 语法里0不等于null为空的解决办法 今天遇到这样一个问题是这样的: php 语句里,我…

Nevron Diagram for .NET Crack

Nevron Diagram for .NET Crack Nevron Diagram for.NET可帮助您快速轻松地在.NET Windows窗体和ASP.NET应用程序中集成和显示复杂的图表。这是一个完整的绘图解决方案,包含许多交互功能、形状、自动布局和令人惊叹的视觉效果,并配备了现成的控件&#x…

Linux常规操作命令

日升时奋斗,日落时自省 目录 1、vim 1.1、工作模式 1.2、末行模式操作相关命令 1.2.1、保存退出操作 1.2.2、查找替换 1.3、输入模式操作相关命令 1.3.1、移动相关命令 1.3.2、删除和剪切命令 1.3.3、复制操作 1.3.4、撤销 2、head 3、tail 4、ps 5、…

策略模式【Strategy Pattern】

刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题, 嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看…

爬虫学习记录(持续更新)

一、问题记录 1.使用webdriver报错AttributeError: str object has no attribute capabilities 解决:目前使用的selenium版本是4.11.2,可以不必设置driver.exe的路径,selenium可以自己处理浏览器和驱动程序,因此,使用…

Shopify平台Fulfillment业务模块升级

上图是销售订单、发货单与配送之间的关系图,销售订单可以创建多个发货单,多个发货单(不同销售订单)可以合并在一个配送订单进行发货 接口请求错误记录: 1. The api_client does not have the required permission(s). 2. Required parameter missing or…

具有吸引子的非线性系统(MatlabSimulink实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

第三章 图论 No.5最小生成树之虚拟源点,完全图与次小生成树

文章目录 虚拟源点:1146. 新的开始贪心或kruskal性质:1145. 北极通讯网络最小生成树与完全图:346. 走廊泼水节次小生成树:1148. 秘密的牛奶运输 虚拟源点:1146. 新的开始 1146. 新的开始 - AcWing题库 与一般的最小…

(MVC)SpringBoot+Mybatis+Mapper.xml

前言:本篇博客主要对MVC架构、Mybatis工程加深下理解,前面写过一篇博客:SprintBoothtml/css/jsmybatis的demo,里面涉及到了Mybatis的应用,此篇博客主要介绍一种将sql语句写到了配置文件里的方法,即Mybatis里…

将大容量机械硬盘克隆到固态硬盘的简单方法!

可以大容量机械硬盘克隆到固态硬盘吗? 随着硬盘使用时间增长,电脑的性能可能会下降。为了追求更快的读写速度,不少用户将目光投向了固态硬盘。 ​众所周知,固态硬盘的读写速度和启动速度比机械硬盘快。用固态硬盘替…

k8s --pod详解

目录 一、Pod基础概念 1、pod简介 2、在Kubrenetes集群中Pod有如下两种使用方式 3、pause容器使得Pod中的所有容器可以共享两种资源:网络和存储。 (1)网络 (2)存储 4、kubernetes中的pause容器主要为每个容器提供…

4.2、Flink任务怎样读取文件中的数据

目录 1、前言 2、readTextFile(已过时,不推荐使用) 3、readFile(已过时,不推荐使用) 4、fromSource(FileSource) 推荐使用 1、前言 思考: 读取文件时可以设置哪些规则呢? 1. 文件的格式(tx…

Babylon.js着色器简明简称【Shader】

推荐:用 NSDT设计器 快速搭建可编程3D场景 为了生成 BabylonJS 场景,需要用 Javascript 编写代码,BabylonJS 引擎会处理该代码并将结果显示在屏幕上。 场景可以通过改变网格、灯光或摄像机位置来改变。 为了及时显示可能的变化,屏…

kubernetes中最小组件——Pod

目录 一、Pod简介 二、Pod的使用方式 三、Pause——Pod中底层基础容器 四、为什么kubernetes这样设计Pod 五、Pod的分类 1.自主式Pod 2.控制器管理的Pod 3.静态Pod 六、Pod容器的分类 1. 基础容器(infrastructure container) 2. 初始化容器&am…

MySQL DAL单表练习一(学生表)

目录 步骤: 1、创建学生表 2、插入数据 1)查询表中所有学生的信息 2)查询表中所有学生的姓名和英语成绩 3) 过滤表中的重复数据 4) 统计每个学生的总分 5) 所有学生总分上加上10 6) 使…