这门关于大型语言模型及其应用的免费实践课程👷🏼正在持续开发中👷🏼。我会在完成不同的课程和示例后发布它们。
本课程提供使用 OpenAI 和 Hugging Face 库模型的实践体验。我们将看到并使用大量工具,并通过小型项目进行练习,随着我们应用所获得的新知识,这些项目将不断发展壮大。
课程分为三个主要部分: #
1-技术和库: #
在本部分中,我们将通过小示例探索不同的技术,这些技术将使我们能够在下一节中构建更大的项目。我们将学习如何使用大型语言模型领域中最常见的库,始终以实用为重点,同时以已发表的论文为基础。
本节涵盖的一些主题和技术包括:聊天机器人、代码生成、OpenAI API、Hugging Face、矢量数据库、LangChain、微调、PEFT 微调、软提示调优、LoRA、QLoRA、评估模型、知识提炼。
2- 项目: #
我们将创建项目,解释设计决策。每个项目可能有多种可能的实现,因为通常不只有一个完美的解决方案。在本节中,我们还将深入探讨与 LLMOps 相关的主题,尽管这不是本课程的主要重点。
3- 企业解决方案: #
大型语言模型并不是一个独立的解决方案。在大型企业环境中,它们只是拼图中的一块。我们将探讨如何构建能够改变拥有数千名员工的组织的解决方案,以及大型语言模型如何在这些新解决方案中发挥主要作用。
如何使用该课程 #
在每个部分下,您可以找到由不同课程组成的不同章节。课程标题是课程页面的链接,您可以在其中找到课程的所有笔记本和文章。
每节课都由笔记本和文章组成。笔记本包含足够的信息来理解其中的代码,文章则对代码和所涵盖的主题提供更详细的解释。
我的建议是将文章与笔记本一起打开并跟着读。许多文章都提供了一些可以引入笔记本的变体的小技巧。我建议遵循这些技巧来增强概念的清晰度。
大多数笔记本都托管在 Colab 上,少数笔记本托管在 Kaggle 上。与 Colab 相比,Kaggle 在免费版本中提供了更多内存,但我发现在 Colab 中复制和共享笔记本更简单,而且并非每个人都有 Kaggle 帐户。
有些笔记本需要的内存比 Colab 免费版提供的内存要多。由于我们正在使用大型语言模型,因此如果您继续使用它们,这种情况很常见。您可以在自己的环境中运行笔记本,也可以选择 Colab 的专业版。
🚀1-技术和库。 #
每个笔记本都附有一篇 Medium 文章,其中详细解释了代码。
OpenAI 大型语言模型简介 #
在本课程的第一部分中,我们将通过创建两个小项目来学习如何使用 OpenAI API。我们将深入研究 OpenAI 的角色以及如何通过提示向模型提供必要的指令,使其按照我们的意愿运行。
第一个项目是一个餐厅聊天机器人,模型将接受客户订单。在此项目的基础上,我们将构建一个 SQL 语句生成器。在这里,我们将尝试创建一个安全提示,它只接受 SQL 创建命令而不接受其他任何命令。
使用 GPT 3.5、OpenAI、Python 和 Panel 创建您的第一个聊天机器人 #
我们将利用 OpenAI GPT-3.5 和 Panel 开发一款专为快餐店量身定制的简单聊天机器人。在课程中,我们将探索即时工程的基础知识,包括了解各种 OpenAI 角色、操纵温度设置以及如何避免即时注入。
如何使用 OpenAI API 创建自然语言到 SQL 翻译器 #
按照上一篇文章中用于创建 ChatBot 的相同框架,我们进行了一些修改,以开发自然语言到 SQL 的转换器。在这种情况下,需要为模型提供表结构,并对提示进行调整以确保功能顺畅并避免任何潜在故障。通过这些修改,转换器能够将自然语言查询转换为 SQL 查询。@fmquaglia 使用 DBML 创建了一个笔记本来描述表格,这比原始方法要好得多。
OpenAI 的 Prompt Engineering 简介 #
我们将探索快速工程技术,以改进我们从模型中获得的结果。例如,如何使用少量样本格式化答案并获得结构化响应。
具有LLM的矢量数据库 #
简要介绍一下矢量数据库,这是一项将贯穿整个课程的许多课程的技术。我们将使用存储在 ChromaDB 中的各种新闻数据集中的信息来研究检索增强生成的示例。
使用矢量数据库通过个性化信息影响语言模型 #
如果说大型语言模型领域有一个方面变得越来越重要,那就是探索如何利用专有信息。在本课中,我们将探索一种可能的解决方案,即在向量数据库(本例中为 ChromaDB)中存储信息,并使用它来创建丰富的提示。
RAG 系统的语义缓存 #
我们通过引入语义缓存层增强了 RAG 系统,该层能够确定之前是否曾问过类似的问题。如果是,它会从使用 Faiss 创建的缓存系统中检索信息,而不是访问矢量数据库。
本笔记本中语义缓存的灵感和基础代码得益于Hamza Farooq 的课程: https://maven.com/boring-bot/advanced-llm/1/home 。
LangChain #
LangChain 是大型语言模型领域中对这场革命贡献最大的库之一。它允许我们链接对模型和其他系统的调用,使我们能够基于大型语言模型构建应用程序。在课程中,我们将多次使用它,创建越来越复杂的项目。
检索增强生成 (RAG)。将 DataFrames 中的数据与 LLM 结合使用。 #
在本课中,我们使用 LangChain 增强了上一课中的笔记本,其中我们使用了来自两个数据集的数据来创建丰富的提示。这一次,在 LangChain 的帮助下,我们构建了一个管道,负责从向量数据库检索数据并将其传递给语言模型。该笔记本设置为使用两个不同的数据集和两个不同的模型。其中一个模型经过训练用于文本生成,而另一个模型经过训练用于 Text2Text 生成。
使用 LangChain 创建一个审核系统 #
我们将使用由 LangChain 构建的双模型管道创建一个评论响应系统。在此设置中,第二个模型将负责审核第一个模型生成的响应。
防止我们的系统生成不必要的响应的一个有效方法是使用与用户没有直接交互的第二个模型来处理响应生成。
这种方法可以降低第一个模型响应用户输入而产生不良响应的风险。
我将为这项任务创建单独的笔记本。其中一个笔记本将涉及来自 OpenAI 的模型,其他笔记本将利用 Hugging Face 提供的开源模型。这三个笔记本中获得的结果非常不同。该系统与 OpenAI 和 LLAMA2 模型配合使用效果更好。
使用 LLM 代理创建数据分析师助理 #
代理是大型语言模型领域中最强大的工具之一。代理能够解释用户的请求并使用可用的工具和库,直到实现预期结果。
使用 LangChain Agents,我们将仅用几行代码创建一个最简单但功能非常强大的代理。该代理将充当数据分析师助手,帮助我们分析任何 Excel 文件中包含的数据。它将能够识别趋势、使用模型、进行预测。总之,我们将创建一个简单的代理,我们可以在日常工作中使用它来分析数据。
使用 LangChain 和 ChromaDB 创建医疗聊天机器人。 #
在这个例子中,我们结合了之前见过的两种技术:代理和向量数据库。医疗信息存储在 ChromaDB 中,并创建了一个 LangChain 代理,该代理仅在必要时提取信息以创建丰富的提示,并将其发送给模型以回答用户的问题。
换句话说,创建一个 RAG 系统来协助医疗聊天机器人。
注意!!!仅将其用作示例。任何人都不应将引导程序的建议视为真正的医生的建议。我对 ChatBot 的使用不承担任何责任。我仅将其作为不同技术的示例。
评估法学硕士 (LLM) #
用于衡量大型语言模型性能的指标与我们在更传统的模型中使用的指标截然不同。我们正在从准确率、F1 分数或召回率等指标转向 BLEU、ROUGE 或 METEOR 等指标。
这些指标是根据分配给语言模型的特定任务而定制的。
在本节中,我们将探讨这些指标中的几个示例,以及如何使用它们来确定一个模型在给定任务上是否优于另一个模型。我们将深入研究实际场景,在这些场景中,这些指标可帮助我们就不同模型的性能做出明智的决策。
使用 BLEU 评估翻译 #
Bleu 是首批建立的用于评估翻译质量的指标之一。在笔记本中,我们将谷歌的翻译质量与 Hugging Face 的开源模型的其他翻译质量进行了比较。
使用 ROUGE 评估摘要 #
我们将探索如何使用 ROUGE 指标来衡量语言模型生成的摘要的质量。我们将使用两个 T5 模型,其中一个是 t5-Base 模型,另一个是专为创建摘要而设计的经过微调的 t5-base 模型。
使用 LangSmith 监视代理 #
在这个初始示例中,您可以观察如何使用 LangSmith 监控代理的各个组件之间的流量。代理是一个 RAG 系统,它利用矢量数据库构建丰富的提示并将其传递给模型。LangSmith 捕获代理工具的使用情况和模型做出的决策,在真正用户友好的环境中随时提供有关发送/接收数据、消耗的令牌、查询持续时间的信息,所有这些都在真正用户友好的环境中提供。
使用 LangSmith 的嵌入距离评估摘要的质量 #
之前在笔记本《Rouge 指标:评估摘要》中,我们学习了如何使用 ROUGE 来评估哪个摘要最接近人类创建的摘要。这次,我们将使用嵌入距离和 LangSmith 来验证哪个模型生成的摘要更接近参考摘要。
使用 Giskard 评估 RAG 解决方案 #
我们以充当医疗助理的代理为例,并结合 Giskard 来评估其响应是否正确。这样,不仅可以评估模型的响应,还可以评估矢量数据库中的信息检索。Giskard 是一种可以评估完整 RAG 解决方案的解决方案。
微调和优化 #
在微调和优化部分,我们将探索不同的技术,例如即时微调或 LoRA,并使用 Hugging Face PEFT 库来高效地微调大型语言模型。我们将探索量化等技术来减轻模型的权重。
使用 Hugging Face 的 PEFT 库进行快速调整 #
在此笔记本中,使用 PEFT 库中的 Prompt Tuning 训练了两个模型。这项技术不仅允许我们通过修改极少数参数的权重来进行训练,还使我们能够在内存中加载使用相同基础模型的不同专用模型。
提示调整是一种附加技术,预训练模型的权重不会被修改。我们在这种情况下修改的权重是我们添加到提示中的虚拟标记的权重。
使用 Hugging Face 的 PEFT 对 LoRA 进行微调 #
在简要解释微调技术 LoRA 的工作原理之后,我们将对 Bloom 家族的一个模型进行微调,教它构建可用于指导大型语言模型的提示。
使用 QLoRA 在单个 16GB GPU 中对 7B 模型进行微调 #
我们将简要介绍量化,量化用于减小大型语言模型的大小。通过量化,您可以加载大型模型,从而减少所需的内存资源。它也适用于微调过程,您可以在单个 GPU 中微调模型,而无需消耗所有资源。在简要说明之后,我们将看到一个示例,说明如何在 Google Colab 上的 t4 16GB GPU 中微调 Bloom 7B 模型。
🚀2-项目 #
自然语言到 SQL #
在这个简单的初始项目中,我们将开发一个基于自然语言的 SQL 生成器。我们将首先创建提示来实现两个解决方案:一个使用在 Azure 上运行的 OpenAI 模型,另一个使用来自 Hugging Face 的开源模型。
创建并发布 LLM #
在这个小项目中,我们将创建一个将 microsoft-phi-3 模型与 DPO 对齐的新模型,然后将其发布到 Hugging Face。
🚀3-构建企业解决方案。 #
为庞大的企业数据库设计一个 NL2SQL 解决方案。 #
在这个初始解决方案中,我们设计了一个能够操作大型数据库的 NL2SQL 系统架构。该系统旨在与两种或三种不同的模型一起使用。事实上,我们在示例中使用了三种模型。
这是一种能够快速启动项目的架构,它仅为数据库中的几个表提供服务,让我们能够按照自己的速度添加更多表。
解码风险:通过客户嵌入改变银行 #
在此解决方案中,我们探索了嵌入和大型语言模型 (LLM) 在金融行业客户风险评估和产品推荐方面的变革力量。我们将改变存储客户信息的格式,从而改变这些信息在系统内的传输方式,从而实现重要的优势。
对课程的贡献: #
如果您发现任何问题,请打开一个问题。我会尽我所能尽快修复它,并给予您信用。
如果您想做出贡献或提出建议,请随时开始讨论。我很高兴收到任何意见或建议。
不要害羞,在社交网络上与朋友分享课程。在LinkedIn或Twitter上与我联系,随时分享任何您想分享的内容或提出任何您可能有的问题。
给存储库打个星号⭐️。这对我帮助很大,并鼓励我继续添加课程。这是支持像这样的免费开源课程的好方法。
课程中使用的论文: #
大型语言模型是最先进的翻译质量评估工具。用 LLM 评估 LLM。
ReAct:语言模型中的协同推理和行动。LangChain 和代理部分。医疗助理示例。
参数高效快速调整的规模化力量。精细调整和优化部分。快速调整示例。
LoRA:大型语言模型的低秩自适应。微调和优化部分。LoRA 微调示例。
QLoRA:量化 LLM 的有效微调。微调和优化部分。QLoRA 微调示例。
如何提示 LLM 进行文本到 SQL:零样本、单域和跨域设置的研究。项目。自然语言到 SQL。