亚马逊云科技:向量数据存储在生成式人工智能应用程序中的作用

生成式人工智能深受大众喜爱,并且由于具备回答问题、写故事、创作艺术品甚至生成代码的功能,推动了行业的转变,那么如何才能在自己的企业中充分地利用生成式人工智能等应运而生问题。许多客户已经积累了大量特定领域的数据(财务记录、健康记录、基因组数据、供应链等),这为他们提供了独特而有价值的视角,有助于他们深入探究自身的业务及更广泛的行业。对于生成式人工智能策略而言,这些专有数据可以带来优势,成为差异化因素。

 同时,许多客户还注意到,在生成式人工智能应用程序中,向量数据存储或向量数据库的使用越来越普遍。他们想知道,这些解决方案如何适应他们围绕着生成式人工智能的整体数据战略。在这篇文章中,介绍了向量数据库在生成式人工智能应用程序中的作用,以及亚马逊云科技解决方案如何帮助您充分利用生成式人工智能的强大功能。

 生成式人工智能应用程序

 所有生成式人工智能应用程序的核心都是大型语言模型(LLM)。LLM是一种机器学习(ML)模型,利用大量的内容(例如可通过互联网访问的所有内容)进行训练。在利用海量可公开访问的数据训练之后,LLM被视为基础模型(FM)。这些模型可以针对各种使用场景进行调整和优化。Amazon SageMaker JumpStart提供各种预先训练的专有开源基础模型,可以在此基础上进行构建。这样的模型包括Stability AI的Text2Image(用于根据文本提示生成逼真的图像),以及Hugging Face的Text2Text Flan T-5(用于文本生成)。Amazon Bedrock是使用FM构建和扩展生成式人工智能应用程序的最简单方法。借助该服务,可以通过API访问AI21 Labs、Anthropic、Stability AI和Amazon Titan的模型。

 尽管生成式人工智能应用程序单纯依赖FM就可以获得广泛的现实世界知识,但是,要想针对特定领域的主题或者专业化主题获得准确的结果,就需要对其进行定制。此外,互动内容越专业,出现幻觉(结果缺乏准确性,但看起来似乎非常正确)的频率就越高。那么,如何自定义生成式人工智能应用程序以实现领域专业化呢?

 使用向量数据存储带来领域专业化

 提示工程(也称为情境内学习)可能是最简单的一种方法,用于将生成式人工智能应用程序植根到特定领域的环境中并提高准确性。尽管这种技术无法完全消除幻觉,但是可以将语义含义范围缩小到您的特定领域。

 就其内核而言,FM根据一组输入词元来推断出下一个词元。在这种情况下,词元是指任何具有语义含义的元素,例如文本生成中的单词或短语。提供的情境相关性越高,推断出的下一个词元与情境相关的可能性也就越大。查询FM时使用的提示应包含输入词元,以及尽可能多的情境相关数据。

 情境数据通常来自内部数据库或数据湖,这是托管特定领域数据的系统。只需通过附加这些数据存储中的其他特定领域数据就可以扩充提示,但是向量数据存储可帮助您使用语义相关的输入来设计提示。此方法称为检索式增强生成(RAG,Retrieval Augmented Generation)。在实际应用中,可能会设计一个提示,使用与情境相关的个性化数据(例如用户个人资料信息)和具有相似语义的数据。

 对于生成式人工智能的使用,特定领域数据必须编码为一组元素,每个元素在内部表示为向量。该向量包含跨一组维度(数字数组)的一组数值。下图演示的示例中,首先将情境数据转换为语义元素,然后再转换为向量。

 这些数值用于在多维向量空间中,映射元素彼此之间的关系。当向量元素具有语义(它们表达了一种含义)时,邻近度就会成为情境关系的指标。以这种方式使用时,此类向量被称为嵌入。例如,在表示杂货或烹饪数据领域情境的多维空间中,“Cheese”的语义元素可以放在“Dairy”的语义元素附近。根据特定领域情境,语义元素可以是单词、短语、句子、段落、整个文档、图像或其他完全不同的东西。将特定领域的数据集拆分为有意义的元素,这些元素可以相互关联。例如,下图说明了在烹饪情境中简化的向量空间。

 

 因此,要为提示生成相关的情境,需要查询数据库,并在向量空间中查找与输入密切相关的元素。借助向量数据存储系统,可以大规模存储和查询向量,并使用高效的最近邻查询算法以及合适的索引来改善数据检索。任何具有这些向量相关功能的数据库管理系统都可以是向量数据存储。许多常用的数据库系统都提供了这些向量功能以及其他功能。在具备向量功能的数据库中存储特定领域数据集,这种做法可以带来的一个好处是,向量将位于源数据附近。您可以使用其他元数据来扩充向量数据,而无需查询外部数据库,还可以简化数据处理管道。

 为了快速开始使用向量数据存储,亚马逊云科技公布了Amazon OpenSearch无服务器的向量引擎。在正式发布后,该引擎会提供一个简单API,用于存储和查询数十亿个嵌入。此外,还有以下选项可用于满足更高级的向量数据存储需求:

  • Amazon Aurora PostgreSQL兼容版关系数据库,带有pgvector开源向量相似度搜索扩展插件

  • 带有k-NN(k-最近邻)插件的Amazon OpenSearch Service(一种分布式搜索和分析服务),以及Amazon OpenSearch无服务器的向量引擎

  • Amazon Relational Database Service(Amazon RDS)for PostgreSQL关系数据库,带有pgvector扩展插件

 嵌入应存储在靠近源数据的位置。因此,决定哪种选项适合您的因素包括:目前存储数据的位置以及对这些数据库技术的熟悉程度、向量维度的扩展、嵌入数量、性能需求。

 为RAG使用向量数据存储

 可以使用嵌入(向量)来提高生成式人工智能应用程序的准确性。下图展示了此数据流。

 获取特定领域的数据集(上图的右侧,用蓝色表示),将其拆分为语义元素,然后使用FM计算这些语义元素的向量。然后,将这些向量存储在向量数据存储中,这样就能够执行相似度搜索。

 在生成式人工智能应用程序(上图的左侧,用橙色表示)中,获取最终用户提出的问题,使用与数据集相同的算法将其拆分为语义元素(词元化),然后在向量数据存储中,查询输入元素在向量空间中的最近邻。借助存储,可以获得具有情境相似性的语义元素,然后将其添加到设计的提示中。此过程进一步使得LLM建立在特定领域情境之上,这样LLM更有可能输出准确且与情境相关的内容。

 在向量数据存储中,在最终用户的关键路径上,使用并发读取查询执行相似度搜索。使用嵌入来填充向量数据存储以及保持更新数据更改的批处理过程,主要是对向量数据存储的数据写入。这种使用模式的各个方面以及前面提到的注意事项(例如熟悉度和规模)决定了哪种服务适合您:是Aurora PostgreSQL兼容数据库、OpenSearch Service、OpenSearch无服务器的向量引擎还是Amazon RDS for PostgreSQL。

 向量数据存储注意事项

 对于向量数据存储,本次介绍的使用模式还带来了一些独特而重要的注意事项。

 使用的特定领域的数据量,以及用于将这些数据拆分为语义元素的过程,决定了向量数据存储需要支持的嵌入数量。特定领域的数据随着时间的推移不断增长和变化,向量数据存储也必须适应这种增长。在大规模使用时,这会影响索引效率和性能。特定领域的数据集产生数亿甚至数十亿个嵌入的情况并不少见。可以使用分词器来拆分数据,自然语言工具包(NLTK,Natural Language Toolkit)提供了多个可供使用的通用分词器。不过也可以使用其他工具。归根结底,合适的分词器取决于特定领域数据集中包含何种语义元素,如前所述,这可能是单词、短语、文本段落、整个文档或具有独立含义的任何数据细分。

 另一个需要考虑的重要因素是嵌入向量的维数。不同的FM生成具有不同维数的向量。例如,all-MiniLM-L6-v2模型生成的向量有384个维度,而Falcon-40B向量有8192个维度。向量的维度越大,它所能表示的情境就越丰富,直至达到某个临界点。最终会看到收益递减和查询延迟增加。这最终会导致维数灾难(对象似乎稀疏分布且不相似)。要执行语义相似度搜索,通常需要具有密集维数的向量,但您可能需要减小嵌入维度,以便数据库能够高效地处理此类搜索。

 另一个考虑因素是否需要精确相似的搜索结果。向量数据存储中的索引功能可显著加快相似度搜索的速度,但它们也会使用近似最近邻(ANN,Approximate Nearest Neighbor)算法来生成结果。ANN算法以性能和内存效率换取准确性。这些算法无法保证每次都返回最近邻。

 最后要考虑的是数据治理。特定领域数据集可能包含高度敏感的数据,例如个人数据或知识产权。在向量数据存储接近现有特定领域数据集的情况下,可以将访问权限、质量和安全控制扩展到向量数据存储,从而简化操作。在许多情况下,无法在不影响数据的语义含义的情况下剥离此类敏感数据,这随之会降低准确性。因此,对于创建、存储和查询嵌入的系统,了解和控制流经其中的数据流非常重要。

 使用Aurora PostgreSQL或Amazon RDS for PostgreSQL及pgvector

 Pgvector是一款开源的PostgreSQL扩展插件,由社区提供支持,可用于Aurora PostgreSQL和Amazon RDS for PostgreSQL。该扩展插件对PostgreSQL进行扩展,提供了名为vector的向量数据类型,三个用于相似度搜索的查询运算符(Euclidian、负内积和余弦距离),以及ivfflat(倒向文件和存储向量)索引机制,使向量可以更快地执行近似距离搜索。尽管可以存储最多1.6万个维度的向量,但只能对2000个维度进行索引以提高相似度搜索性能。实际上,客户倾向于使用具有较少维度的嵌入。使用Amazon SageMaker和pgvector在PostgreSQL中构建人工智能驱动的搜索一文深入研究了这个扩展插件,是一个不错的资源。

 如果已经在关系数据库(尤其是PostgreSQL)上进行了大量投入,并且在该领域拥有丰富的专业知识,那么应该考虑为向量数据存储使用Aurora PostgreSQL与pgvector扩展插件。此外,高度结构化的特定领域数据集本质上也更适合使用关系数据库。如果需要使用特定社区版本的PostgreSQL,Amazon RDS for PostgreSQL也是一个不错的选择。相似度搜索查询(读取)同样可以水平扩展,但需要遵循单个数据库集群中Aurora支持的最大只读副本数(15),以及复制链中Amazon RDS支持的最大只读副本数(15)。

 Aurora PostgreSQL还支持Amazon Aurora Serverless v2,这是一种按需自动扩展配置,可以根据负载自动调整数据库实例的计算和内存容量。此配置简化了操作,因为在大多数使用场景中,不再需要针对峰值进行预置或执行复杂的容量规划。

 借助Amazon Aurora机器学习(Aurora ML)功能,可以通过SQL函数调用托管在Amazon SageMaker中的机器学习模型。可以使用该功能来调用FM,直接从数据库生成嵌入。可以将这些调用打包到存储过程中,也可以将它们与其他PostgreSQL功能集成,这样向量化过程就可以完全从应用程序中抽象出来。借助Aurora ML内置的批处理功能,甚至可能无需从Aurora导出初始数据集,即可对其进行转换来创建初始向量集。

 将OpenSearch Service与k-NN插件和OpenSearch无服务器

 的向量引擎结合使用

 k-NN插件使用自定义knn_vector数据类型,扩展OpenSearch这一开源的分布式搜索和分析套件,使您能够将嵌入存储在OpenSearch索引中。该插件还提供了三种执行k最近邻相似度搜索的方法:近似k-NN、Script Score k-NN(准确)和无痛扩展(准确)。OpenSearch包括非度量空间库(NMSLIB,Non-Metric Space Library)和Facebook AI Research的FAISS库。您可以使用不同的距离搜索算法来找到最适合需求的算法。这个插件也可以在OpenSearch Service中使用。Amazon OpenSearch Service的向量数据库功能说明一文是很好的资源,可使用其来深入了解这些功能。

 由于OpenSearch的分布式特性,对于具有大量嵌入的向量数据存储库来说,这是一个很好的选择。索引可以水平扩展,这样就可以处理更多的吞吐量,用于存储嵌入和执行相似度搜索。对于想要更深入地控制执行搜索所用的方法和算法的客户而言,这也是一个很好的选择。搜索引擎专为低延迟、高吞吐量的查询而设计,为此在事务行为上进行了权衡。

 OpenSearch无服务器是一种按需的无服务器配置,消除了预置、配置和调整OpenSearch域的操作复杂性。只需先创建索引集合,然后就可以开始填充索引数据。新公布的OpenSearch无服务器的向量引擎作为一种新的向量集合类型提供,同时还包括了搜索和时间序列集合。该引擎提供了一种简便的方法,可以着手使用向量相似度搜索。这为Amazon Bedrock提供了易于操作的配对方法,无需机器学习或向量技术方面的高级专业知识,即可将提示工程集成到生成式人工智能应用程序中。借助向量引擎,可以在单个API调用中轻松查询向量嵌入、元数据和描述性文本,从而获得更准确的搜索结果,同时降低应用程序堆栈的复杂性。

 在带有k-NN插件的OpenSearch中,向量在使用nmslib和faiss引擎时最多支持1.6万个维度,在使用Lucene引擎时最多支持1024个维度。Lucene提供OpenSearch的核心搜索和分析功能,以及向量搜索。OpenSearch使用自定义的REST API执行大多数操作,包括相似度搜索。它在与OpenSearch索引交互时实现了更好的灵活性,同时可以重复利用现有的构建分布式Web应用程序的技能。

 如果需要将语义相似度搜索与关键字搜索使用场景相结合,OpenSearch也是一个很好的选择。生成式人工智能应用程序的提示工程涉及情境数据的检索和RAG。例如,客户支持座席应用程序可以提供以前具有相同关键字的支持案例,以及具有相似语义的支持案例,以此来构建提示,这样推荐的解决方案就会基于合适的情境。

 通过Neural Search插件(实验版本),可以将机器学习语言模型直接集成到OpenSearch工作流中。使用此插件,OpenSearch会自动为在摄取和搜索期间提供的文本创建向量。然后,它会无缝地将向量用于搜索查询。这可以简化RAG中使用的相似度搜索任务。

 此外,如果偏好特定领域数据上的完全托管式的语义搜索体验,则应考虑使用Amazon Kendra。该服务提供了开箱即用的语义搜索功能,具备先进的文档和段落排名功能,消除了管理文本提取、段落拆分、获取嵌入和管理向量数据存储的开销。可以使用Amazon Kendra来满足语义搜索需求,并将结果打包到设计的提示中,从而以最少的操作开销最大限度地发挥RAG的优势。使用Amazon Kendra、LangChain和大型语言模型,在企业数据上快速构建高精度的生成式人工智能应用程序一文更深入地探讨了这个使用场景。

 最后,LangChain支持带有pgvector的Aurora PostgreSQL和Amazon RDS for PostgreSQL、OpenSearch无服务器的向量引擎以及带有k-NN的OpenSearch Service。LangChain是一个流行的Python框架,可基于LLM开发具备数据感知能力的代理式应用程序。

 小结

 嵌入应在靠近特定领域数据集的位置存储和管理。这样一来,就可以将嵌入数据与其他元数据组合,而无需使用额外的外部数据来源。同样,数据不是静态的,而是会随着时间的推移发生变化,将嵌入存储在靠近源数据的位置可以简化数据管道,从而使嵌入保持最新状态。

 带有pgvector的Aurora PostgreSQL和Amazon RDS for PostgreSQL,OpenSearch无服务器的向量引擎以及带有k-NN插件的OpenSearch Service,是满足向量数据存储需求的理想选择,但哪种解决方案最为适合最终将取决于使用场景和优先事项。如果选择的数据库没有向量功能,这篇文章中讨论的选项涵盖了熟悉的SQL和NoSQL范围,而且很容易上手,没有太多的操作开销。无论选择哪个选项,向量数据存储解决方案都需要维持由应用程序调度的并发吞吐量。使用完整的嵌入集合大规模验证解决方案,以确保相似度搜索响应延迟符合预期要求。

 同时,可以将提示工程与SageMaker JumpStart和Amazon Bedrock提供的基础模型结合使用,以便能够构建创新的生成式人工智能解决方案,且无需投资于大量的机器学习技能即可让客户满意。

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

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

相关文章

LangChain学习二:提示-实战(下半部分)

文章目录 上一节内容:LangChain学习二:提示-实战(上半部分)学习目标:提示词中的示例选择器和输出解释器学习内容一:示例选择器1.1 LangChain自定义示例选择器1.2 实现自定义示例选择器1.2.1实战&#xff1a…

静态路由的原理和配置

一.路由器的工作原理 首先我们知道路由器是工作在网络层的,那就是三层设备。网络层的功能主要为:不同网段之间通信、最佳路径选择也就是逻辑地址(ip地址)寻址、转发数据。 1.路由器是什么 路由器是能将数据包转发到正确的目的地…

【QT 5 调试软件+(Linux下验证>>>>串口相关初试串口)+Windows下qt代码在Linux下运行+参考win下历程+基础样例】

【QT 5 调试软件Linux下验证>>>>串口相关初试串口参考win下历程基础样例】 1、前言2、实验环境3、先行了解4、自我总结-win下工程切到Linux下1、平台无关的代码:2、依赖的库:3、文件路径和换行符:4、编译器差异:5、构…

什么是防抖与节流?应用场景举例

防抖节流如何处理防抖与节流 防抖节流防抖例子节流例子Vue Axios全局接口防抖、节流封装实现 小结 防抖 防抖:触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间 应用场景: 提交按钮、用户注册…

QEMU源码全解析 —— virtio(2)

接前一篇文章: 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 特此致谢! 上一回对于virtio进行了简介,并说明了其基本原理以及框架。对…

【JVM入门到实战】(三) 查看字节码文件的工具

一、 javap -v命令 javap是JDK自带的反编译工具,可以通过控制台查看字节码文件的内容。适合在服务器上查看字节码文件内容。直接输入javap查看所有参数。输入javap -v 字节码文件名称 查看具体的字节码信息。(如果jar包需要先使用 jar –xvf 命令解压&a…

mmyolo的bbox_loss和检测bbox都是空

最近用mmyolo训练自己的数据集的时候发现训练的时候loss_bbox0,测试和eval的时候结果也全是空的,排除了数据集读取的问题,最后发现是config中自定义了自己的类别但是没有传给dataset。。。 简而言之,在自定义了数据集里的metainf…

【C语言】一个RDMACM、Verbs API与epoll一起使用的例子

一、epoll介绍 epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。 以下是epoll的主要使用方法和优点: epo…

2023-12-05 Qt学习总结10

点击 <C 语言编程核心突破> 快速C语言入门 Qt学习总结 前言二十六 学生信息管理系统插入介绍: QTableView和QSqlTableModelQTableViewQSqlTableModel 程序所用数据库表格程序组成以及界面学生端源码:管理员端源码: 总结 前言 要解决问题: 学习qt最核心知识, 多一个都不…

Android : BottomNavigation底部导航_简单应用

示例图&#xff1a; 1.先创建底部导航需要的图片 res → New → Vector Asset 创建三个矢量图 图片1 baseline_home.xml <vector android:height"24dp" android:tint"#000000"android:viewportHeight"24" android:viewportWidth"24…

nrm 的使用 可以快速切换下载(npm)镜像,解决资源下载慢和运行失败

nrm是什么&#xff1f; 介绍 nrm(npm registry manager) 是 npm 的镜像源管理工具. 有时候国外资源太慢,使用 nrm 可以快速的在 npm 源之间切换 安装 npm install -g nrm 基本使用 查看可选择的源 nrm ls 切换到对应的镜像源 nrm use 对应的镜像 删除镜像源 nrm del 名字 …

深入理解 SVG:开启向量图形的大门(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

ArcGIS pro与SuperMap根据属性自动填充颜色步骤

GIS项目经常会接触到控规CAD数据&#xff0c;想要把数据转换成GIS图层并发布&#xff0c;需要进行专题配图。研究了一下ArcGIS pro和SuperMap iDesktop的配图&#xff0c;整理一下用到的一些技术思路。 1、Excel表格根据RGB值添加单元格填充颜色 要实现如上效果图&#xff0c;…

【C语言程序设计】循环结构程序设计

目录 前言 一、程序设计第一题 二、程序设计第二题 三、程序设计第三题 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da…

Armv8/Armv9从入门到精通-课程介绍

通知&#xff0c;Arm二期&#xff0c;咱们也有大合集PDF了&#xff0c;共计1587页&#xff0c;还未完成&#xff0c;后续持续更新和优化中。为了方便大家阅读、探讨、做笔记&#xff0c;特意整了此合集PPT&#xff0c;为了增加标签目录&#xff0c;还特意开了福兮阅读器会员。 …

宇视科技视频监控 main-cgi 文件信息泄露漏洞

宇视科技视频监控 main-cgi 文件信息泄露漏洞 一、产品简介二、漏概述三、复现环境四、漏洞检测手工抓包自动化检测 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#…

【C语言程序设计】选择结构程序设计

目录 前言 一、程序阅读 二、程序改错 三、程序设计 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f4e3;如…

[Linux] Tomcat

一、Tomcat相关知识 1.1 Tomcat的简介 Tomcat 是 Java 语言开发的&#xff0c;Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器&#xff0c;是 Apache 软件基金会的 Jakarta 项目中的一个核心项目&#xff0c;由 Apache、Sun 和其他一些公司及个人共同开发而成。Tomc…

19.java绘图

A.Graphics类 Graphics类是java.awt包中的一个类&#xff0c;它用于在图形用户界面&#xff08;GUI&#xff09;或其他图形应用程序中进行绘制。该类通常与Component的paint方法一起使用&#xff0c;以在组件上进行绘制操作。 一些Graphics类的常见用法和方法&#xff1a; 在组…

Flask维护者:李辉

Flask维护者&#xff1a;李辉&#xff0c; 最近看b站的flask相关&#xff0c;发现了这个视频&#xff1a;[PyCon China 2023] 濒危 Flask 扩展拯救计划 - 李辉_哔哩哔哩_bilibili 李辉讲他在维护flask之余&#xff0c;开发了apiflask这个依托flask的框架。GitHub - apiflask/a…