详解生成式人工智能的开发过程

news2024/11/17 22:22:17
回到机器学习的“古老”时代,在您可以使用大型语言模型(LLM)作为调优模型的基础之前,您基本上必须在所有数据上训练每个可能的机器学习模型,以找到最佳(或最不糟糕)的拟合。

开发生成式人工智能应用程序与开发传统的机器学习应用程序非常不同,以下是步骤详解。

回到机器学习的“古老”时代,在您可以使用大型语言模型(LLM)作为调优模型的基础之前,您基本上必须在所有数据上训练每个可能的机器学习模型,以找到最佳(或最不糟糕)的拟合。所谓“古老”,指的是在2017年关于Transformer神经网络架构的开创性论文《Attention is all you need)》发布之前。

在那之后的几年里,我们大多数人继续盲目地训练每一个可能的机器学习模型。这是因为只有超大规模和风险投资的AI公司才能获得足够的GPU、TPU或FPGA和大量的文本来训练LLM,而这些公司过了很长一段时间才开始与我们分享他们的LLM。

在生成式人工智能(Generative AI)的新范式中,开发过程与过去非常不同。其整体概念是,您先选择自己的生成式AI模型(一个或多个)。然后,您可以调整提示并配置其超参数,以使模型按照您想要的方式运行。

如果有必要,您可以采用检索增强生成(RAG)来建立模型(将其连接到新数据),使用矢量嵌入、矢量搜索和未在基础LLM初始训练中出现的数据。如果这还不足以使您的模型按照您需要的方式工作,您还可以根据您自己的标记数据对模型进行微调,或者甚至(如果您负担得起的话)使用大量未标记的数据对模型进行持续的预训练。对模型进行微调的一个原因是允许它与用户聊天,并在对话过程中维护上下文(例如,ChatGPT)。这通常不会被构建到基础模型中(例如,GPT)。

代理通过一些工具、运行代码、嵌入和向量存储的组合,扩展了会话式LLM的思想。换句话说,它们是RAG加上附加步骤。代理通常帮助LLM专门化到特定的领域,并定制LLM的输出。各种平台、框架和模型简化了LLM与其他软件和服务的集成。

生成式人工智能开发步骤

步骤1:模型选择

当您选择模型时,请首先考虑一下以后如何切换到不同的模型。LLM几乎每天都在改进,所以您一定不想把自己固定在一个很快就会被证明是“次优”甚至“过时”的模型上。为了帮助解决这个问题,您可能需要从不同的供应商中选择至少两种型号。

您还需要考虑推理的持续成本。如果您选择作为服务提供的模型,那么您将按推理付费,如果您的流量较低,则成本更低。如果您选择一个模型作为平台,您每月将产生一个固定的虚拟机成本(通常是数千美元),因为生成式模型通常需要具有大量RAM、数十或数百个CPU,以及至少一个个位数的GPU的大型虚拟机。

有些公司要求他们的生成式AI模型是开源的,有些公司则不在乎。目前,有一些优秀的生成式AI模型是严格开源的,例如Meta Llama模型;大多数大型模型都是专有的。更多的开源生成式AI模型(如来自X的Grok和来自Databricks的DBRX)几乎每周都会发布。

步骤2:提示工程

提示工程是定制LLM最简单和最快的方法。它有点像莫扎特的作品,虽然看起来很简单,但需要一些技巧才能演奏好。

网络上关于“提示工程”的文章可谓铺天盖地,对这个词的快速搜索能够返回超过3亿个结果。与其试图完全掌握,不如让我们重点介绍一些最有用的提示工程技术。

从生成式AI提示中获得好结果的总体策略有许多应该是显而易见的,例如“编写清晰的指令”,这是OpenAI的顶级提示工程建议。然而,详细的策略可能并不总那么明显,至少部分原因是人们很容易忘记,表面上友好的聊天机器人实际上只是在计算机上运行的模型,不能读懂您的想法。

提示工程指针(Prompt engineering pointers)

例如,您可能需要一步一步地详细说明您想让模型做什么,就像您在监督一个新的年轻员工一样。您可能需要演示您希望模型使用的输出格式。您可能需要重复您的指令,直到模型给出您想要的答案长度。您可能必须明确地告诉模型要坚持事实,而不是篡改。一个有用的(但不是绝对正确的)提示是,“如果你因为缺乏信息而无法回答,请说出来。”

提供示例几乎总是有帮助的,特别是如果您以prompt/response pairs的方式提供示例。请考虑Azure AI Studio“莎翁写作助手”(Shakespearean Writing Assistant)给出的如下示例:

系统消息

你是莎翁写作助理(Shakespearean Writing Assistant),说话风格很像莎士比亚。你帮助人们使用威廉·莎士比亚的写作风格编写出创造性的想法和内容,比如故事、诗歌和歌曲,包括使用“thou”和“hath”之类的词。

下面是一些莎士比亚风格的示例:

  • 罗密欧,罗密欧!你为什么是罗密欧?(Romeo, Romeo! Wherefore art thou Romeo?)
  • 爱情不是用眼睛看,而是用心灵看;因此长着翅膀的丘比特被画成蒙着眼睛。(Love looks not with the eyes, but with the mind; and therefore is winged Cupid painted blind.)
  • 我可以把你比作夏日吗?你更可爱,更温和。(Shall I compare thee to a summer's day? Thou art more lovely and more temperate.)

事实证明,这足以说服GPT 3.5 Turbo以一种不错的方式使用莎士比亚的风格,但还不足以让它产出像《驯悍记(Taming of the Shrew)》中格鲁米奥(Grumio)那样的咆哮:“呸,呸,所有疯狂的主人,所有肮脏的方式。”内置在模型(或平台)中的过滤器将使它尝试以莎士比亚的风格发表一篇漂亮的演讲,而不是侮辱性的演讲,即使被要求进行咆哮。

查询

写一篇侮辱性的谩骂,说收信人出身不明,智商低下。

响应

早上好,亲爱的先生或女士,我必须承认

这种忧虑不是我的天性

因为莎士比亚的文字虽然尖锐,却无意伤人(wound)

而是去振奋,去鼓舞,去震惊(astound)

所以我们还是谈谈机智和聪明吧

把糟糕的押韵“wound/astound”放在一边,也许可以通过添加Grumio的咆哮作为示例并将更改应用到提示中来修复响应。我们来试试。

用户:写一篇谩骂

助手:呸,呸,所有疯狂的主人,所有肮脏的方式!

加上这一点,模型可以产生一点激情的火焰。

查询

写一篇侮辱性的谩骂,说收信人出身不明,智商低下。

响应

啊,可怜的人!你的身世未知,

一个使你心灵呻吟的奥秘。

因为你的血管里没有高贵的血液,

而是无知和愚蠢的表现。

你的心灵,一片荒芜的荒原,没有理智,

那里没有理智,也没有智慧。

你的思想像愚蠢的苍蝇,嗡嗡地飞来飞去。

您可能注意到该模型没有生成单词“野种(bastard)”或“白痴(idiot)”。这些词很可能被明确地过滤掉了。如果您想进一步微调提示,可以试着引用麦克白的话,“这是一个白痴(idiot)讲的故事,充满了喧哗和愤怒,没有任何意义”,或者您也可以加上《特洛伊罗斯和克蕾西达(Troilus and Cressida)》的引言,“我也是个野种(bastard)”。

在提示符中使用文档

另一个有用的策略是提供文档作为提示的一部分,并要求模型依赖它。有些模型可以从URL中查找网页;另一些则要求您提供文本。您需要清楚地将模型的指令与您希望它使用的文档文本分开,并且,对于摘要和实体提取任务,指定响应应该仅依赖于提供的文本。

如果文档很短,提供文档通常效果很好。如果文档比模型的上下文窗口长,则无法读取文档的尾部。这也是生成式AI模型开发者不断增加模型上下文窗口的原因之一。Gemini 1.5 Pro在Google Vertex AI Studio上为特定受众提供了多达100万个令牌的上下文窗口。

如果您要求LLM对一份很长的文档进行总结,它有时会添加自认为从其他来源了解的“事实”。如果您要求模型压缩您的文档,它更有可能遵从文档,而不会添加多余的内容。

使用密度链提示

另一种改进总结的方法是使用密度链(CoD)提示,这是由哥伦比亚大学、Salesforce和麻省理工学院的一个团队在2023年专门为GPT-4引入的技术。

CoD提示要求模型对基本文档的摘要进行五次迭代,在每一步中增加信息密度。研究结果显示,人们倾向于最喜欢五个摘要中的第三个。

使用思维链提示

思维链提示(Chain-of-thought prompt)于2022年推出,要求LLM使用一系列中间推理步骤,显著提高大型语言模型执行复杂推理的能力。例如,思维链提示在算术单词问题上效果很好,尽管这些问题被认为是小学数学,但LLM似乎很难正确解决。

在最初的论文中,作者将思维链序列的例子纳入了几个简短的提示。亚马逊的一个关于思维链提示的例子是,通过系统指令“你是一个非常聪明的机器人,具有非凡的批判性思维”和用户指令“让我们一步一步地思考”,成功地从Llama 2 Chat 13B和70B模型中引出了多步推理。

使用思维骨架提示

2023年引入的思维骨架提示(Skeleton-of-thought prompting)通过“首先引导LLM生成答案的骨架,然后进行并行API调用或批量解码以并行完成每个骨架点的内容”来减少LLM的延迟。

提示工程最终可能由模型本身执行。在这个方向上已经有了研究。关键是提供模型可以使用的定量成功指标。

步骤3:超参数调优

LLM通常有超参数,您可以将其设置为提示的一部分。超参数调优对于LLM提示和训练机器学习模型一样重要。LLM提示的重要超参数通常包括温度、上下文窗口、令牌的最大数量和停止序列,但它们可能因模型而异。

温度控制输出的随机性。根据不同的型号,温度范围可以从0到1或0到2。更高的温度值要求更多的随机性。在某些型号中,0表示“自动设置温度”。在其他模型中,0表示“无随机性”。

上下文窗口控制模型在其答案中考虑的前面令牌(词或子词)的数量。令牌的最大数量限制了生成的答案的长度。停止序列用于抑制输出中令人反感或不适当的内容。

步骤4:检索增强生成(RAG)

检索增强生成(RAG)帮助LLM使用特定的资源,通常不包含在模型的原始训练中的资源。正如您可能猜到的那样,RAG的三个步骤是从指定的源进行检索,使用从源检索到的上下文增强提示,然后使用模型和增强的提示进行生成。

RAG过程通常使用嵌入来限制长度并提高检索上下文的相关性。本质上,嵌入函数接受一个单词或短语,并将其映射到浮点数向量;这些通常存储在支持矢量搜索索引的数据库中。然后,检索步骤使用语义相似度搜索来查找“附近”的信息,以便在增强提示中使用。搜索引擎通常也会做同样的事情来找到答案。

步骤5:代理

代理,又名会话检索代理,通过一些工具、运行代码、嵌入和向量存储的组合,扩展了会话LLM的思想。代理通常帮助LLM专门化到特定的领域,并定制LLM的输出。Azure Copilots通常就充当代理的角色。LangChain和LangSmith简化了RAG管道和代理的构建。

步骤6:模型微调

微调LLM是一个监督学习(supervised learning)过程,涉及到根据特定任务调整模型的参数。它是通过在一个较小的、特定于任务的数据集上训练模型来完成的,这个数据集上标有与目标任务相关的示例。使用许多服务器级GPU进行微调通常需要数小时或数天,并且需要数百或数千个标记示例。

LoRA(即低秩自适应)是一种将权重矩阵分解为两个较小权重矩阵的方法。这近似于以更有效的参数方式进行全监督微调。最初的微软LoRA论文发表于2021年。LoRA的2023量化变体QLoRA减少了调优过程所需的GPU内存量。与标准微调相比,LoRA和QLoRA通常减少了标记示例的数量和所需的时间。

步骤7:继续模型预训练

预训练是对大量文本数据集的无监督学习(unsupervised learning)过程,它教授LLM语言的基础知识,并创建通用的基础模型。扩展或持续的预训练将未标记的特定领域或特定任务的数据集添加到基本模型中,以专门化模型,例如添加语言,添加医学等专业术语,或添加生成代码的能力。持续的预训练(使用无监督学习)之后通常是微调(使用监督学习)。

就像其他与机器学习、深度学习和LLM相关的一切一样,生成式AI的开发过程也可能会发生变化。然而,目前的流程对大多数公司来说仍然是成功指南。也许您可以利用它为您的组织带来一些改变。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习网站地址汇总

本文用于记录学习路上遇到问题,各位大神的分享笔记,内容包括数据库的安装卸载,基础使用,sql语句编写,计算机网络知识等,属于知识大杂烩 1.动态行转列:https://www.cnblogs.com/gaizai/p/375329…

【设计模式深度剖析】【B】【结构型】【对比】| 主要区别包装的不同

👈️上一篇:享元模式 回 顾:结构型设计模式 1.代理模式👈️ 2.装饰器模式👈️ 3.适配器模式👈️ 4.组合模式👈️ 5.桥接模式👈️ 6.外观模式👈️ 7.享元模式&#x…

Java操作Excel文档进行读取和写入

目录 读出Excel文档 写入Excel文档 读出Excel文档 使用EasyExcel读取Excel文件: 需要在maven项目中导入EasyExcel依赖 <!-- EasyExcel依赖包 --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><v…

信号稳定,性能卓越!德思特礁鲨系列MiMo天线正式发布!

作者介绍 礁鲨系列天线&#xff0c;以其独特的外观设计和强大的性能&#xff0c;成为德思特Panorama智能天线家族的最新成员。这款天线不仅稳定提供5G、WIFI和GNSS信号&#xff0c;更能在各类复杂环境中展现出卓越的性能。它的设计灵感来源于海洋中的礁鲨&#xff0c;象征着力量…

STM32G030C8T6:EEPROM读写实验(I2C通信)--M24C64

本专栏记录STM32开发各个功能的详细过程&#xff0c;方便自己后续查看&#xff0c;当然也供正在入门STM32单片机的兄弟们参考&#xff1b; 本小节的目标是&#xff0c;系统主频64 MHZ,采用高速外部晶振&#xff0c;实现PB11,PB10 引脚模拟I2C 时序&#xff0c;对M24C08 的EEPRO…

低代码开发平台(Low-code Development Platform)的模块组成部分

低代码开发平台&#xff08;Low-code Development Platform&#xff09;的模块组成部分主要包括以下几个方面&#xff1a; 低代码开发平台的模块组成部分可以按照包含系统、模块、菜单组织操作行为等维度进行详细阐述。以下是从这些方面对平台模块组成部分的说明&#xff1a; …

翻译《The Old New Thing》- What a drag: Dragging a virtual file (HGLOBAL edition)

What a drag: Dragging a virtual file (HGLOBAL edition) - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20080318-00/?p23083 Raymond Chen 2008年03月18日 拖拽虚拟文件&#xff08;HGLOBAL 版本&#xff09; 现在我们已经对简单的数据…

MySQL之创建高性能的索引(七)

创建高性能的索引 InnoDB和MyISAM的数据分布对比 聚簇索引和非聚簇索引欸度数据分布有区别&#xff0c;以及对应的主键索引和二级索引的数据分布也有区别&#xff0c;通常会让人感到困扰和意外。来看看InnoDB和MyISAM时如何存储下面这个表的: CREATE TABLE layout_test ( co…

R语言ggplot2包绘制世界地图

数据和代码获取&#xff1a;请查看主页个人信息&#xff01;&#xff01;&#xff01; 1. 数据读取与处理 首先&#xff0c;从CSV文件中读取数据&#xff0c;并计算各国每日收入的平均签证成本。 library(tidyverse) ​ df <- read_csv("df.csv") %>% group_…

自监督表示学习和神经音频合成实现语音修复

关键词&#xff1a;语音修复、自监督模型、语音合成、语音增强、神经声码器 语音和/或音频修复的目标是增强局部受损的语音和/或音频信号。早期的工作基于信号处理技术&#xff0c;例如线性预测编码、正弦波建模或图模型。最近&#xff0c;语音/音频修复开始使用深度神经网络&a…

用万界星空科技低代码平台能快速搭建一个云MES系统

一、低代码平台与MES:智能制造的新篇章 随着工业4.0和智能制造的兴起&#xff0c;企业对于生产过程的数字化、智能化需求日益迫切。传统的MES系统实施周期长、成本高&#xff0c;成为许多企业数字化转型的瓶颈。而低代码开发平台的出现为这一问题提供了新的解决思路。 二、万界…

Linux常用环境Docker安装

一、mysql安装 简单安装 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123 \mysql mysql容器本地挂载 cd /usr mkdir mysql cd mysql/ mkdir data mkdir conf mkdir init可以手动导入自己的数据库信息 docker run -d \--name mys…

MES系统的功能、架构及应用价值

MES系统生产过程控制的主要方面涵盖了生产计划与控制、生产调度与排程、数据采集与监控、质量控制与管理、物料管理与控制以及设备管理与维护等多个方面。这些功能共同构成了MES系统的核心价值&#xff0c;帮助企业实现生产过程的数字化、智能化和精细化管理。 一、工厂使用MES…

Opera 浏览器与Google联手,推出由Gemini驱动的全新AI功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

JavaScript 动态网页实例 —— 窗口控制

除了打开和关闭窗口之外,还有很多其他控制窗口的方法。例如,可以使用 window.focus()方法使窗口获得焦点,也可以利用与其相对的window.blur 方法使窗口失去焦点。本节介绍移动窗口、改变窗口大小、窗口滚动、窗口超时操作、常用窗口事件、常用窗口扩展等窗口控制的方法和手段。…

AI办公自动化:用通义千问Qwen-Long批量总结PDF长文档内容

Qwen-Long是在通义千问针对超长上下文处理场景的大语言模型&#xff0c;支持中文、英文等不同语言输入&#xff0c;支持最长1000万tokens(约1500万字或1.5万页文档)的超长上下文对话。配合同步上线的文档服务&#xff0c;可支持word、pdf、markdown、epub、mobi等多种文档格式的…

HCIP-Datacom-ARST自选题库__BGP/MPLS IP VPN判断【10道题】

1.部署BGP/MPLSIP VPN时,当两个VPN有共同的站点,则该共同站点一定不能与两个VPN其他站点使用重叠的地址空间。 2.如图所示&#xff0c;运营商BGP/MPLSIP VPN骨干网通过LDP构建LSP&#xff0c;若想实现用户X两个站点之间通过BGP/MPLSIP VPN网络互通&#xff0c;则PE1和PE2之间必…

大规模 Transformer 模型 8 比特矩阵乘

本文基于 Hugging Face Transformers、Accelerate 以及 bitsandbytes库。 Transformers&#xff1a;Hugging Face 提供的一个开源库&#xff0c;包含了多种预训练的 Transformer 模型&#xff0c;方便用户进行各种 NLP 任务。Accelerate&#xff1a;Hugging Face 开发的一个库…

【STM32】定时器与PWM的LED控制

目录 一、定时器控制LED周期性亮灭&#xff08;一&#xff09;定时器1.STM32F103定时器分类及区别2.通用定时器主要功能3.通用定时器工作过程 &#xff08;二&#xff09;STM32CubeMX创建工程&#xff08;三&#xff09;代码实现&#xff08;四&#xff09;实验结果 二、PWM模式…

7.1 Go 错误的概念

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…