#AIGC##VDB# 【一篇入门VDB】矢量数据库-从技术介绍到选型方向

文章概览: 这篇文章深入探讨了矢量数据库的基本概念、工作原理以及在人工智能领域的广泛应用。

首先,文章解释了矢量的数学和物理学概念,然后引入了矢量在数据科学和机器学习中的应用。随后,详细介绍了什么是矢量数据库,以及它在搜索引擎、自然语言处理、图像识别等方面的优势。

接着,文章列举了几种矢量数据库的具体应用,包括图像和视频识别、自然语言处理、推荐系统以及新兴领域如医疗保健和金融。在讨论矢量数据库的工作原理时,文章涵盖了索引结构、簇的概念以及查询算法的选择。

最后,文章以VDB的五大主要方向和六种常用矢量数据库为结尾,总结了矢量数据库的优势,强调了其在高维数据处理、搜索功能增强、可扩展性、速度和准确性、机器学习集成等方面的关键作用。

本文旨在为读者提供对矢量数据库全面而清晰的理解。
在这里插入图片描述

VDB 基础概念介绍

矢量

矢量嘛,就是个有大小和方向的东西。在数学和物理学里,它帮助我们描述东西的位置、速度啥的。比如在平面上,一个矢量可以分成横向(X轴方向)和纵向(Y轴方向)的部分。

在数据科学和机器学习里,矢量是表达数据的一种方式。数据可以是啥都有,比如文本、图像、音频啥的。在这里,矢量通常就是一串数字,每个数字代表数据的某个特征或属性。这样的表示方式方便机器学习算法处理各种类型的数据,搞模式识别、分类啥的。

搞清楚矢量的概念对理解矢量数据库以及在机器学习和数据科学中的应用挺重要的。如果还有啥问题,随时问哈。
请添加图片描述

什么是矢量数据库?​

如果你得搞数据,可能就要玩搜引擎这一套了。最牛的搜引擎软件虽然很炫,但因为它们的内核设定,找你要的数据时有点小限制
以数据对象为例:
{ "data": "The Eiffel Tower is a wrought iron lattice tower on the Champ de Mars in Paris." }
要是放传统搜引擎里,可能就靠倒排索引来整理数据。这就意味着你得输入“埃菲尔铁塔”、“锻铁格子”之类的关键词,才能找到你想要的。但如果你有一大堆数据,想找埃菲尔铁塔的相关文档,可如果你搜“法国地标”呢?传统搜引擎就有点捉襟见肘了,这时候矢量数据库就能展现它的强大之处。
矢量数据库就是用向量索引搞数据。有个矢量化模块,比如NLP模块,把你那些数据对象在矢量空间里搞了个映射,放在“法国的地标”这文本附近。这就意味着Weaviate可不一定百分之百地找到完全匹配的,但总能找到挺接近的匹配,然后给你个结果。
上面的例子是针对文本(NLP)的,但你其实可以对任何矢量化的机器学习模型使用矢量搜索,比如图像、音频、视频,甚至基因数据。就是把你的数据搞成矢量,然后用这套搜寻方法找相似的东西。

矢量数据库管理系统(VDBMS),也就是矢量数据库或者说矢量存储,就是个能存矢量(一串数字的列表)和其他数据的数据库。这玩意一般都搞了一堆近似最近邻算法(ANN:Approximate Nearest Neighbor),所以可以用查询来搜索数据库,找到最接近的匹配记录。
矢量数据库和关系数据库不太一样,它把数据表示成多维空间中的点,不是传统的行和列那一套。特别适合那些需要基于相似性而不是完全一样值来快速匹配数据的应用。你可以把矢量数据库想象成一个超大的仓库,而人工智能就像是个经验丰富的仓库管理员。在这个仓库里,每个项目(数据)都装在一个盒子(矢量)里,整齐地摆在多维空间的货架上,就像《新堆栈》中马克·辛克尔说的那样。

矢量数据库的用例

矢量数据库真的很牛,特别是在搜东西方面。你想找个东西跟某个东西相似,这玩意就能秒搜出来。还有就是它还参与了一些高级玩意,比如产品推荐、图像/音频/视频搜相似的玩意,甚至还能帮你查异常。

另外,它还牛逼地用在了一些叫做检索增强生成 (RAG) 的玩意上,这个东西可以提高在某个领域的查找效果。大概的操作是用户给个提示,计算提示的特征矢量,然后搜数据库找最相关的文档。这些东西自动加到大型语言模型的上下文,让它继续根据上下文生成对提示的响应。挺神奇的。

请添加图片描述

具体使用方向:

图像和视频识别:
视觉内容主导着我们的视觉文化,矢量数据库在其中大放异彩。他们擅长筛选大量图像和视频存储库,以找出与给定输入惊人相似的图像和视频。这不仅仅是逐像素匹配;这是关于理解潜在的模式和特征。这些功能对于面部识别、物体检测,甚至媒体平台中的版权侵权检测等应用至关重要。
请添加图片描述

自然语言处理和文本搜索:
同义词、释义和上下文可能使精确的文本匹配成为一项艰巨的任务。然而,矢量数据库可以辨别短语或句子的语义本质,使它们能够识别措辞可能不相同但上下文相似的匹配。这种能力改变了聊天机器人的游戏规则,确保它们正确响应用户的查询。同样,搜索引擎可以提供更相关的结果,从而增强用户体验。
请添加图片描述

推荐系统:
矢量数据库在个性化中发挥着关键作用。通过了解用户偏好和分析模式,这些数据库可以推荐与听众品味产生共鸣的歌曲或符合购物者偏好的产品。这一切都是为了衡量相似性并提供引起用户共鸣的内容或产品。

新兴应用:
矢量数据库的范围不断扩大。在医疗保健领域,他们通过分析分子结构以获得潜在的治疗特性来帮助药物发现。在金融领域,矢量数据库正在协助异常检测,发现可能表明欺诈活动的异常模式。

随着生成式人工智能的兴起,矢量数据库成为重要的推动者,帮助开发人员将复杂的人工智能蓝图转变为实用的、价值驱动的工具。

矢量数据库如何工作?

高效查询大量矢量需要索引,矢量数据库支持矢量的专用索引。不同于其他数据类型,矢量没有固有的逻辑顺序。最常见的用例是查询在点积、余弦相似度或欧几里得距离等距离度量方面最接近其他某个矢量的 k 个矢量,这就是所谓的“k(精确)最近邻”或“KNN”查询。

虽然没有通用的高效KNN查询算法,但有一些有效的算法可以找到k个近似最近邻(“ANN”)。这些ANN算法牺牲了一些准确性,尤其是召回率,以极大地提高速度。由于很多用例已经认为计算矢量嵌入的过程有一些不精确,所以它们通常可以接受一些召回损失以换取性能的显著提升。
请添加图片描述
为了通过与其他矢量的距离来查询矢量,矢量索引的结构方式是将附近矢量的簇通常分组在一起。常见的矢量索引类型可以构造为一组列表,其中每个列表代表给定簇中的矢量;每个矢量都连接到其最近邻的几个矢量的图;树的分支对应于父节点簇的子集;等等。每种索引类型都在查找速度、召回率、内存消耗、索引创建时间和其他因素之间进行权衡。

不过,大多数数据库查询不仅仅基于语义相似性。例如,用户可能正在找描述类似于“关于孩子和狗的温馨故事”的书,但还希望价格在20美元以下。专用矢量数据库可能提供一些有限的额外过滤功能,有时称为“限制”;而通用数据库可以使用SQL等标准语言组成丰富的谓词,这些谓词可以与矢量相似性排序相结合,实现非常强大、富有表现力的查询。

单词、句子甚至整个文档都可以转换成能捕捉其本质的矢量。比如,Word2Vec就是一种常见的词嵌入方法。通过Word2Vec,有相似含义的单词由多维空间中接近的矢量表示。最有名的例子就是:国王-男人+女人=女王。把“国王”和“女人”相关的矢量加起来,同时减去“男人”相关的矢量,就得到“女王”相关的矢量。
请添加图片描述

使用 VBD

矢量数据库方向

选矢量数据库得权衡一下,这里有五个主要方向:

  1. 纯矢量数据库,比如Pinecone,还有建立在Faiss基础上的。专门搞矢量的。
  2. 全文搜索数据库,比如ElasticSearch,以前搞搜索引擎,现在也搞矢量存储和检索。
  3. 矢量库,像Faiss、Annoy和Hnswlib,虽然不是数据库,但擅长处理矢量。
  4. 支持矢量的NoSQL数据库,比如MongoDB、Cosmos DB和Cassandra,老牌存储但加入了矢量的操作。
  5. 支持矢量的SQL数据库,比如SingleStoreDB或PostgreSQL,和前面不同的是支持SQL语句。

除了这五个,还有一些功能更广泛的东西像Vertex AI和Databricks,这里不深入讨论。看你需求选哪套。
请添加图片描述

AI开发常用的6种VDB(矢量数据库概览)

PGVector

  • 特点:
    • 强调与Postgres的集成,支持矢量与其他数据类型混合存储。
    • 具有通用性,适用于任何带有Postgres客户端的语言。
    • 支持多种距离度量,如L2距离、内积和余弦距离。
  • 注意:
    • 对Postgres的依赖可能不适合所有用例,尤其是对专门的矢量数据库功能有需求的情况。

Weaviate

  • 特点:
    • 人工智能原生矢量数据库,结合了矢量和关键词搜索。
    • 提供双重搜索功能,支持多种神经搜索框架。
    • 提供矢量化模块,增强语义理解和准确性。
  • 注意:
    • 功能丰富,可能对初学者有较高的学习曲线。

ChromaDB

  • 特点:
    • 注重简单性和开发效率,特别适用于构建Python或JavaScript应用程序。
    • 开发者友好,拥有完全类型化、经过测试和文档化的应用程序接口。
    • 可扩展,可在python笔记本中运行,并支持集群扩展。
  • 注意:
    • 简单性可能会限制某些需要复杂数据库操作的高级用例。

Milvus

  • 特点:
    • 云原生矢量数据库,具有高度可扩展性和弹性。
    • 实现毫秒级搜索在大规模数据集上。
    • 支持混合搜索,包括向量和标量数据类型。
  • 注意:
    • 对于小型项目可能显得过于复杂。

Qdrant

  • 特点:
    • 用Rust编写,注重性能和可靠性。
    • 支持扩展过滤,适用于各种应用。
    • 提供生产就绪的应用程序接口。
  • 注意:
    • 基于Rust,可能对不熟悉该语言的团队带来一定困难。

ElasticSearch

  • 特点:
    • 不是专用的矢量数据库,但适用于存储和搜索矢量数据。
    • 具有分布式架构,适用于大型数据集的实时搜索。
    • 通用性,可处理多种搜索需求。
  • 注意:
    • 可能需要额外配置以优化矢量特定用例。
      -请添加图片描述

VDB 优点

矢量数据库在各种人工智能应用中有着关键的优势,特别是涉及到复杂和大规模数据分析的应用。以下是一些主要的优点:

1. 高效处理高维数据
矢量数据库专为高效处理高维数据而设计。相比传统数据库,矢量数据库在存储、处理和检索高维空间的数据时性能更强,不容易受到复杂性和数据规模的影响。

2. 增强的搜索功能
矢量数据库最显著的优势之一是能够执行相似性和语义搜索。它们能够快速找到与给定查询最相似的数据点,这对于推荐引擎、图像识别和自然语言处理等应用至关重要。

3. 可扩展性
矢量数据库必须具备高度可扩展性,能够处理大规模的数据集而不损失性能。这对于那些需要定期生成和处理大量数据的企业和应用程序非常重要。

4. 速度和准确性
相对于传统数据库,矢量数据库提供更快的查询响应,尤其是在处理大规模数据集的复杂查询时。而且,这种速度并不是以准确性为代价的,因为矢量数据库利用先进的算法能够提供高度相关的结果。

5. 改进的机器学习和人工智能集成
矢量数据库特别适合人工智能和机器学习应用。它们能够有效地存储和处理训练以及运行机器学习模型所需的数据,尤其在深度学习和自然语言处理等领域。

6. 促进高级分析和见解
通过支持复杂的数据建模和分析,矢量数据库使组织能够从数据中获取更深入的见解。这对于数据驱动的决策和预测分析至关重要。

7. 个性化
这些数据库通过分析用户行为和偏好来支持个性化用户体验的开发。在营销、电子商务和内容交付平台等领域,个性化可以显著提高用户参与度和满意度。
请添加图片描述

参考文献

Vector database https://en.wikipedia.org/wiki/Vector_database

what-is-a-vector-database https://www.datastax.com/guides/what-is-a-vector-database
https://cloud.google.com/discover/what-is-a-vector-database
https://www.mongodb.com/basics/vector-databases
https://zilliz.com/learn/what-is-vector-database

AssemblyAI (Director). (2022, January 5). A Complete Overview of Word Embeddings. https://www.youtube.com/watch?v=5MaWmXwxFNQ

Grootendorst, M. (2021, December 7). 9 Distance Measures in Data Science. Medium. https://towardsdatascience.com/9-distance-measures-in-data-science-918109d069fa

Langchain. (2023). Welcome to LangChain — 🦜🔗 LangChain 0.0.189. https://python.langchain.com/en/latest/index.html

OpenAI. (2022). Introducing text and code embeddings. https://openai.com/blog/introducing-text-and-code-embeddings

OpenAI (Director). (2023, March 14). What can you do with GPT-4? https://www.youtube.com/watch?v=oc6RV5c1yd0

Porsche AG. (2023, May 17). ChatGPT & enterprise knowledge: “How can I create a chatbot for my business unit?” #NextLevelGermanEngineering. https://medium.com/next-level-german-engineering/chatgpt-enterprise-knowledge-how-can-i-create-a-chatbot-for-my-business-unit-4380f7b3d4c0

Tazzyman, S. (2023). Neural Network models. NLP-Guidance. https://moj-analytical-services.github.io/NLP-guidance/NNmodels.html

https://towardsdatascience.com/all-you-need-to-know-to-build-your-first-llm-app-eb982c78ffac

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

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

相关文章

能见度传感器有什么特点-交通安全的保障

能见度传感器是一种用于测量能见度的设备,通常安装在高速公路、城市道路、桥梁等交通路段,以及隧道、停车场等封闭空间。这种传感器能够实时监测能见度值,并通过数据传输系统将数据发送到控制中心或相关管理部门,为交通安全管理、…

C++结合OpenCV:图像的加法运算

一、图像运算 针对图像的加法运算、位运算都是比较基础的运算。但是,很多复杂的图像处理功能正是借助这些基础的运算来完成的。所以,牢固掌握基础操作,对于更好地实现图像处理是非常有帮助的。本章简单介绍了加法运算、位运算,并…

自学Python笔记总结(更新中……)

自学Python笔记总结 网址数据类型类型查看类型,使用type内置类标识符 输出输入语句format函数的语法及用法数据类型的转换运算符算数运算符赋值运算符的特殊场景拆包 比较运算符逻辑运算符 与 短路位运算符运算符优先级 程序流程控制分支语句pass 占位 循环语句 whi…

DFT新手入门:VASPKIT生成模版INCAR

新手学习VASP计算时一般需要自行准备好VASP所需要的四个输入文件:INCAR POSCAR KPOINTS POTCAR。 其中POSCAR为计算任务的模型文件,POTCAR为与POSCAR中元素所对应的赝势,可根据要求选取。 KPOINTS的设置需要根据精度确定,一般通过vaspkit的1…

实现STM32烧写程序-(4) BIN文件结构

简介 BIN文件是一种二进制文件格式,用于存储和传输二进制数据。它包含了计算机或设备可以直接读取和执行的原始二进制数据。BIN文件通常用于存储程序、固件或其他二进制数据,例如嵌入式系统的固件、操作系统的映像文件等。 BIN文件的起源可以追溯到计算机…

获取本地IP网卡信息

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、获取本地IP,以及全部网卡信息总结 前言 一、获取本地IP,以及全部网卡信息 const os require(node:os) function getIPAdress(){/…

node-red实现ModBus-RTU 通信协议(RS485信号输出)的数据交互

node-red实现485型 - 温湿度变表数据转换 一、介绍二、 通讯协议2.1 通讯基本参数2.2 数据帧格式定义2.3 寄存器地址2.4 通讯协议示例以及解释 三、 node-red实现数据交互3.1 node-red读取数据3.2 node-red写回数据 本文参考《86 壳液晶温湿度变送器使用说明书(485 …

html5+css3+bootstrap+js 新闻网页

新闻网页练习打卡! 一、首页 二、社会 三、财经 四、视频展示 简易新闻网站(期末作业)

Cuda与Torch配置(For 集群服务器)超详细步骤

每次配置模型环境,无论是在windows,linux,集群服务器上都会在这里卡一段,为了未来配置方便,记录下配置注意事项 配置cuda和torch主要有几个要点,分别是: 显卡与驱动(NIVIADA drive…

一刀切转为精细化,门店如何进行「体检式」巡查(一)

在品牌经营过程中,无论是直营店还是加盟商,都需要做好统一的品牌门店管理。比如总部对门店环境卫生、员工服务质量、货品质量等进行定期或不定期的巡检抽查,以确保各门店保持统一标准。 以往,传统巡店只能通过有纸质表格或微信汇报…

前端react入门day03-react获取dom与组件通信

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 受控表单绑定 React中获取DOM 组件通信 父传子 父传子-基础实现 父传子-props说明 父传子 - 特殊的…

FFmpeg之AVFilter

文章目录 一、概述二、重要结构体2.1、AVFilterGraph2.2、AVFilter2.3、AVFilterContext 三、流程梳理3.1、FFmpeg AVFilter 使用整体流程3.2、过滤器构建流程3.2.1、分配AVFilterGraph3.2.2、创建过滤器源3.2.3、创建接收过滤器3.2.4、生成源和接收过滤器的输入输出3.2.5、通过…

Java开发+Intellij-idea+Maven+工程构建

Java开发Intellij-ideaMaven工程构建 Intellij-idea是一款流行的Java集成开发环境,它支持Maven作为项目管理和构建工具。Maven可以帮助开发者自动下载项目依赖的jar包,执行编译、测试、打包等生命周期任务。本资源将介绍如何在Intellij-idea中创建、导入…

精品基于Uniapp+springboot车辆充电桩缴费管理系统管理系统App-地图

《[含文档PPT源码等]精品基于Uniappspringboot充电桩管理系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 开发语言:Java 后台框架:springboot、ssm 安…

element + table 每两行对比相同值列合并

在开始之前先要明确几个概念&#xff1a; 保持不变&#xff1a;{ rowspan: 1, colspan: 1 } 删除一个单元格&#xff1a;{ rowspan: 0, colspan: 0 } 合并一个单元格&#xff1a;{ rowspan: 2, colspan: 1 } <template><div><el-table:data"tableData&quo…

Appium 自动化测试

1.Appium介绍 1&#xff0c;appium是开源的移动端自动化测试框架&#xff1b; 2&#xff0c;appium可以测试原生的、混合的、以及移动端的web项目&#xff1b; 3&#xff0c;appium可以测试ios&#xff0c;android应用&#xff08;当然了&#xff0c;还有firefoxos&#xff09;…

web自动化实现登录的几种方式

目录 前言 一、pythonunittest框架实现登录功能 二、pythonselenium实现登录功能 三、pythonrequests库实现登录功能 前言 今天主要想介绍python语言不同的自动化测试框架的结合方式来模拟登录功能。想了解自动化测试框架的同学不要错过哦&#xff01; 一、pythonunittest框…

Windows 下 QT开发环境的搭建:

下载QT:Index of /archive/qt/5.14 下载Cmake :CMake - Upgrade Your Software Build System (1)QT在windows,C, 打包exe&#xff1a; step1:window上安装QT软件&#xff1a; Windows下的QT系统开发环境搭建_qt windows-CSDN博客. step2:新建一个界面工程&#xff1a; (1)打…

【css】渐变效果

css渐变效果 使用 CSS 渐变可以在两种颜色间制造出平滑的渐变效果。 用它代替图片&#xff0c;可以加快页面的载入时间、减小带宽占用。同时&#xff0c;因为渐变是由浏览器直接生成的&#xff0c;它在页面缩放时的效果比图片更好&#xff0c;因此你可以更加灵活、便捷的调整页…

postgresql16 物理复制与逻辑复制的实现和对比

本文面向想要练习 PostgreSQL 中数据库复制基础知识但可能无法访问远程服务器的初学者。我认为学习新技术时&#xff0c;在自己的机器上运行示例以巩固概念是至关重要的。对于副本来说&#xff0c;这可能很困难&#xff0c;因为许多可用的资源假设用户具有一定的 PostgreSQL 经…