LangChain+LLM实战---向量数据库介绍

news2024/11/25 11:43:39

原文:Vector Databases

Embeddings是由人工智能模型(如大型语言模型)生成的,具有大量的属性或特征,使其表示难以管理。在人工智能和机器学习的背景下,这些特征代表了数据的不同维度,这些维度对于理解模式、关系和底层结构至关重要。

这就是为什么我们需要一个专门为处理这类数据而设计的专门数据库。向量数据库通过为Embeddings提供优化的存储和查询功能来满足这一要求。向量数据库具有传统数据库独立向量索引所不具备的能力,并且具有传统基于标量的数据库所缺乏的处理向量Embeddings的专门化能力。

使用向量Embeddings的挑战在于,传统的基于标量的数据库无法跟上此类数据的复杂性和规模,从而难以提取见解并执行实时分析。这就是向量数据库发挥作用的地方——它们被有意设计为处理这类数据,并提供充分利用数据所需的性能、可伸缩性和灵活性。

向量数据库是如何工作的?

我们都知道传统数据库是如何工作的(或多或少)——它们将字符串、数字和其他类型的标量数据存储在行和列中。另一方面,向量数据库对向量进行操作,因此它的优化和查询方式是完全不同的。

在传统数据库中,我们通常查询数据库中值通常与查询完全匹配的行。在向量数据库中,我们应用相似度度量来找到与我们的查询最相似的向量。

向量数据库使用不同算法的组合,这些算法都参与了近似最近邻(ANN)搜索。这些算法通过散列、量化或基于图的搜索来优化搜索。

这些算法组合成一个管道,提供查询向量的邻居的快速和准确的检索。由于向量数据库提供了近似的结果,我们主要考虑的是准确性和速度之间的权衡。结果越准确,查询速度就越慢。然而,一个好的系统可以提供近乎完美的超快速搜索。

下面是向量数据库的常见管道::

img

  1. 索引:向量数据库使用PQ、LSH或HNSW等算法对向量进行索引。这一步将向量映射到一个数据结构,以实现更快的搜索;
  2. 查询:向量数据库将索引的查询向量与数据集中的索引向量进行比较,以找到最近的邻居(应用该索引使用的相似性度量);
  3. 后处理:在某些情况下,向量数据库从数据集中检索最后最近的邻居,并对它们进行后处理以返回最终结果。这一步可以包括使用不同的相似度度量对最近的邻居重新排序。

有了向量数据库,我们可以为我们的人工智能添加高级功能,比如语义信息检索、长期记忆等等。上图让我们更好地理解了向量数据库在这类应用中的作用。

为什么使用向量数据库?

在生产中,向量搜索是使用向量数据库的最常见原因。向量搜索将多个对象与搜索查询或主题项的相似性进行比较。为了找到相似的匹配项,您可以使用用于创建向量Embeddings的相同ML embedding模型将主题项或查询转换为向量。向量数据库比较这些对象的相似性以找到最接近的匹配,提供准确的结果,同时消除传统搜索技术可能返回的不相关结果。

让我们看看向量搜索的一些常见用例:

1. 语义搜索

搜索文本和文档通常可以通过两种方式完成。词汇搜索查找模式和精确的单词或字符串匹配,而语义搜索使用搜索查询或问题的含义并将其置于上下文中。向量数据库存储和索引来自自然语言处理模型的向量Embeddings,以理解文本字符串、句子和整个文档的含义和上下文,从而获得更准确和相关的搜索结果。

使用自然语言查询来查找相关结果是一种更好的体验,并允许用户更快地找到他们需要的内容,而无需了解数据分类的具体方式。

2. 对图像、音频、视频、JSON和其他形式的非结构化数据进行相似性搜索

图像、音频、视频和其他非结构化数据集在传统数据库中分类和存储非常具有挑战性。这通常需要手动将关键字、描述和元数据应用于每个对象。一个人对一个复杂数据对象进行分类的方式对另一个人来说可能并不明显。因此,搜索复杂的数据可能非常容易出错。这种方法要求搜索者了解数据的结构,并构建与原始数据模型匹配的查询。

3. 排名和推荐引擎

向量数据库是为排名和推荐引擎提供动力的一个很好的解决方案。对于在线零售商来说,它们可以用来推荐与过去购买的商品相似的商品,或者客户正在研究的当前商品。流媒体服务可以应用用户的歌曲评级,为个人量身定制完美匹配的推荐,而不是依赖于协同过滤或流行列表。

基于最接近匹配找到相似项目的能力使向量数据库成为提供相关建议的理想选择,并且可以很容易地根据相似性分数对项目进行排名。

4. 重复数据删除和记录匹配

向量相似性搜索的另一个用例是记录匹配和重复数据删除。使用相似性服务查找几乎重复的记录可以在各种应用程序中使用。考虑一个应用程序,它从目录中删除重复项,以使其更可用和更相关。

5. 数据质检

向量数据库在查找相似对象方面做得很好,但它们也可以查找与预期结果相距甚远或不同的对象。这些异常在用于威胁评估、欺诈检测和IT操作的应用程序中是有价值的。可以识别出最相关的异常以进行进一步分析,而不会因高假警报率而占用大量资源。

最受欢迎的向量数据库:

Pinecone

Pinecone就是这样一个向量数据库,它在整个行业中被广泛接受,用于解决复杂性和维度等挑战。Pinecone是一个云原生向量数据库,用于处理高维向量数据。Pinecone的核心基础方法是基于近似最近邻(ANN)搜索,它可以有效地定位更快的匹配并在大型数据集中对它们进行排序。

Pinecone的一些主要特征包括:

  1. 高度可扩展:Pinecone可以处理数十亿个高维向量和水平缩放,使其适用于最苛刻的机器学习工作负载。

  2. 实时数据摄取:松果支持实时数据摄取,允许您存储和索引新数据,因为它变得可用而没有任何停机时间

  3. 低延迟搜索:Pinecone的高级索引算法确保最近邻查询和相似性搜索操作以低延迟执行,提供快速准确的结果。

  4. 易于集成:Pinecone的API设计简单直观,使其易于与现有的机器学习工作流程和数据管道集成。

  5. 完全管理的服务:Pinecone是一个完全管理的平台,这意味着您不必担心基础设施管理或维护,让您专注于开发和部署机器学习应用程序。

Weavite

Weaviate是一个向量数据库和搜索引擎。它是一个低延迟的向量搜索引擎,支持各种媒体类型(文本、图像等)。Weaviate使用机器学习对数据进行向量化和存储,并找到对自然语言问题的回答。它包括语义搜索、问答提取、分类和可定制模型(PyTorch/TensorFlow/Keras)。您还可以使用Weaviate在生产中扩展自定义机器学习模型。

Weaviate存储媒体(文本,图像。等)对象及其相应的向量,允许将向量搜索与结构化过滤与云原生数据库的容错相结合。编织搜索可以通过不同的方法执行,例如GraphQL、REST和各种语言客户机。Python、Javascript、Go和Go是支持Weaviate客户端的流行编程语言。

如今,Weaviate被软件工程师用作其应用程序的ml优先数据库,数据工程师使用以人工神经网络为核心的向量数据库,数据科学家使用MLOps部署他们的搜索应用程序。

Weaviate特性:

快速查询 -在不到100毫秒的时间内,Weaviate在数百万个项目上运行10个最近邻(NN)搜索。

不同的媒体支持 -使用最先进的AI模型推理(例如变形金刚)图像,文本等。

结合标量和向量搜索 - Weaviate保存您的对象和向量,确保检索始终快速。不需要第三方对象存储系统。

水平可扩展性 - Weaviate可以根据用例在生产中水平扩展。

类图连接 -在数据项之间建立类图连接,以模拟数据点之间的实际连接。GraphQL用于遍历这些连接。

Milvus

Milvus是一个开源向量数据库,为用户提供高效、可扩展的解决方案,用于存储、管理和搜索大规模、高维数据。它的设计目标是满足对高级数据分析和机器学习应用快速增长的需求,这些应用需要快速准确地计算大量复杂数据。Milvus可用于各种行业,包括金融、电子商务、医疗保健等。在本文中,我们将深入了解Milvus及其关键特性、用例和优点。

Milvus的主要功能:

Milvus是一个高度可扩展和灵活的数据库,支持广泛的向量数据类型,包括图像,音频和文本数据。它的主要特点包括:

快速高效: Milvus可以处理大量的向量数据,低延迟和高吞吐量。它使用最先进的算法和技术来优化存储和检索速度,使其成为需要快速响应时间的实时应用的理想选择。

可扩展: Milvus设计为水平扩展,允许用户随着数据增长向集群添加新节点。这使得用户即使使用大量数据集也能获得高性能和可伸缩性。

搜索和相似度: Milvus提供了一个强大的搜索和相似度查询引擎,允许用户在他们的数据集中搜索相似的向量。这对于图像和面部识别、自然语言处理和推荐系统等应用程序尤其有用。

多接口: Milvus支持多种编程接口,包括Python, Java和Go,使其易于与现有的数据分析和机器学习工具集成。

FAISS

Faiss背后的科学原理有详细的描述在这里。Faiss的想法是,向量可以被转换成更像我们习惯搜索的文本的东西——一种码字。一旦有了这个码字,就可以使用标准的颠倒索引技术来检索类似的结果。使用精确的向量比较,结果可以基于这个近似结果集重新排序。

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

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

相关文章

win10 + cmake3.17 编译 giflib5.2.1

所有源文件已经打包上传csdn,大家可自行下载。 1. 下载giflib5.2.1,解压。 下载地址:GIFLIB - Browse Files at SourceForge.net 2. 下载CMakeLists.txt 及其他依赖的文件 从github上的osg-3rdparty-cmake项目: https://github.…

加密解密基础知识Crypto Basics

base64编码 编码不是真正的密码学,但它在围绕加密功能的各种标准中被大量使用。尤其是 Base64 编码。 Base64 编码是一种用于将各种字节转换为特定字节范围的技术。此特定范围是 ASCII 可读字节。 这样,您可以更轻松地传输二进制数据,例如密…

QML 仪表盘小示例

本次项目已发布在CSDN->GitCode,下载方便,安全,可在我主页进行下载即可,后面的项目和素材都会发布这个平台。 个人主页:https://gitcode.com/user/m0_45463480怎么下载:在项目中点击克隆,windows:zip linux:tar.gz tar # .pro TEMPLATE = appTARGET = dialcontrol​#…

【Unity】2D角色跳跃控制器

最近加了学校的Nova独游社,本文是社团出的二面题,后续有时间优化下可能会做成一个二维冒险小游戏。本文主要涉及相关代码,参考教程:《勇士传说》横版动作类游戏开发教程 效果演示 【Unity】2D角色跳跃模拟器 主要实现功能&#xf…

【从0到1设计一个网关】重试与限流的实现

文章目录 重试限流上文已经讲到了如何设计一个高可用的稳定的网关,那么这里就实现其中两种比较常用的方法。 重试 这里的重试,我将会在IO异常以及请求超时的时候进行一个请求重试。 首先,我们在路由过滤器中添加一个重试的函数,用于在请求出现如上两个异常的时候进行重试。…

帧间快速算法论文阅读

Low complexity inter coding scheme for Versatile Video Coding (VVC) 通过分析相邻CU的编码区域,预测当前CU的编码区域,以终止不必要的分割模式。 𝐶𝑈1、𝐶𝑈2、𝐶𝑈3、&#x…

论文阅读—— CEASC(cvpr2023)

arxiv:https://arxiv.org/abs/2303.14488 github:https://github.com/Cuogeihong/CEASC 为了进一步减轻SC中的信息损失,使训练过程更加稳定,我们在训练过程中除了稀疏卷积之外,还保持了正常的密集卷积,生成…

JAVA- 面向对象编程(上)

🌈个人主页: Aileen_0v0🔥系列专栏:PYTHON学习系列专栏💫个人格言:"没有罗马,那就自己创造罗马~" 目录 面向对象的特征及理解 new Static Summary: 面向对象的特征及理解 面试题:oop的三大特征是什么? ---> 封装,继承,…

Gorm 中的迁移指南

探索使用 GORM 在 Go 中进行数据库迁移和模式更改的世界 在应用程序开发的不断变化的景观中,数据库模式更改是不可避免的。GORM,强大的 Go 对象关系映射库,通过迁移提供了一种无缝的解决方案来管理这些变化。本文将作为您全面的指南&#xf…

【数据结构】败者树的建树与比较过程

文章目录 前置知识归并段 建树过程比较过程疑问为什么比较次数减少了?如果某个归并段的元素一直获胜,没有元素了怎么办?处理方法 1处理方法 2 前置知识 归并段 外部排序算法通常用于处理大规模数据,其中数据量远超过计算机内存的…

社区牛奶智能售货机为你带来便利与实惠

社区牛奶智能售货机为你带来便利与实惠 低成本:社区牛奶智能货机的最大优势在于成本低廉,租金和人工开支都很少。大部分时间,货柜都是由无人操作来完成销售任务。 购买便利:社区居民只需通过手机扫码支付,支付后即可自…

哈希表----数据结构

引入 如果你是一个队伍的队长,现在有 24 个队员,需要将他们分成 6 组,你会怎么分?其实有一种方法是让所有人排成一排,然后从队头开始报数,报的数字就是编号。当所有人都报完数后,这 24 人也被分…

【Python环境管理工具】Anaconda安装及使用教程

Anaconda安装及使用教程 1 Anaconda简介2 Anaconda下载及安装2.1 下载及安装2.2 手动配置环境变量(重点)2.3 测试Anaconda环境是否配置成功 3 Anaconda使用教程3.1 Anaconda Prompt环境管理的常用命令3.1.1 检查conda3.1.2 管理运行环境 4 Pycharm与Anac…

C++ STL 迭代器失效

一、学习资料 STL迭代器的使用 二、vector容器获取值是下标法和at()的区别 vector<int> vA; int array[]{0,1,2,3,4}; vA.assign(array,array5); cout<<vA[6]<<endl; cout<<va.at(6)<<endl;如上述代码&#xff0c;当使用vA[6]的方式出现访问越…

EASYX播放音频文件

添加winmm.lib的依赖 选中链接器中的输入选项&#xff1a;添加附加依赖项winmm.lib并且应用即可 添加音频相关代码 #include <easyx.h> #include <stdio.h> #include <math.h> // 宏定义 #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600 #define MAX_…

K8s学习笔记——资源组件篇

引言 前一篇文章我们介绍了K8s的概念理解和常用命令&#xff0c;这篇我们重点介绍K8s的资源组件和相关配置使用。 1. Node & Pod Node: 是 Pod 真正运行的主机&#xff0c;可以是物理机&#xff0c;也可以是虚拟机。为了管理 Pod&#xff0c;每个 Node 节点上至少要运行…

剖析 Tomcat 线程池与 JDK 线程池的区别和联系

文章目录 引言JDK 线程池Tomcat 线程池Tomcat 连接器Tomcat 的 ExecutorTomcat 线程池配置 区别和联系区别联系 结论 &#x1f389;欢迎来到Java面试技巧专栏~剖析 Tomcat 线程池与 JDK 线程池的区别和联系 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a…

qt报错permission denied

写fk项目的时候&#xff0c;报这个错&#xff0c;然后网上查&#xff0c;说的是因为之前运行的qt进程没有关闭&#xff0c;然后我在任务管理器上查看&#xff0c;却没有看见有我正在运行的qt程序&#xff0c;我再出现清除 qmake也不可以&#xff0c;然后我再去删除out目录下的所…

软件提示msvcp110.dll丢失的5个修复方法,快速解决dll丢失问题

你是否曾遇到过msvcp110.dll文件丢失的情况&#xff1f;msvcp110.dll是Microsoft Visual C 2012运行时库中的一个动态链接库文件&#xff0c;它是Visual Studio 2012编译的程序所必需的。它包含了许多C标准库函数的实现&#xff0c;如字符串处理、数学运算等。当我们运行一个程…

C# 文件 文件夹 解除占用

文件/文件夹 解除占用或直接删除。 编程语言&#xff1a;C# 这个就不用过多功能描述了。 注册windows 文件/文件夹 右键菜单。 文件夹解除占用&#xff1a;遍历文件夹所有文件&#xff0c;判断是否被占用&#xff0c;先解除文件占用&#xff0c;后解除文件夹占用&#xff0…