#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.mfbz.cn/a/323075.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【unity学习笔记】语音驱动blendershape

1.导入插件 https://assetstore.unity.com/packages/tools/animation/salsa-lipsync-suite-148442 1.选择小人,点击添加组件 分别加入组件: SALSA EmoteR Eyes Queue Processor(必须加此脚本):控制前三个组件的脚本。…

基于深度学习的桃子熟度与大小智能检测

基于深度学习的桃子熟度与大小智能检测 基于深度学习的桃子熟度与大小智能检测引言1. 环境搭建与准备2. 数据准备3. 模型准备4. 训练准备5. 服务器端部署结语 基于深度学习的桃子熟度与大小智能检测 引言 随着时代的快速发展,人工智能时代为中国农业带来了新的机遇…

idea修改pom.xml没有重新导入maven的按钮

问题描述: IDEA修改pom.xml配置以后,不会展示 Load Maven Changes弹窗。 解决方法: 方式一、pom.xml右键,Maven--Run Maven--Reimport。但我感觉这个太麻烦了。 方式2、选择Building Tool Settings,点击Auto-Reload …

python -- str 字符串相减

从一个字符串中减去另一个字符串,得到一个新的字符串结果 replace() 方法 host_ip hello world host world ip host_ip.replace(host, "") print(ip)re.sub() 方法 import rehost_ip hello world host world ip re.sub(host, "", host_…

IDEA 启动错误提示:Command line is too long. Shorten command line

IDEA 启动错误提示:Command line is too long. Shorten command line Command line is too long. Shorten command line IDEA 启动错误提示:Command line is too long. Shorten command line快速修改原因解释 快速修改 Edit Configurations->configu…

IPv6路由综合运用

一、基础配置: SWA: sw1(config)#host swA swA(config)#ipv6 ena swA(config)# vlan 100 swA(config-vlan100)#int vlan 100 swA(config-if-vlan100)#ipv6 ena swA(config-vlan100)#ip add 172.16.1.1 255.255.255.252 swA(config-if-vlan100)#int e1/0/24 swA(conf…

C函数详解 | 函数的作用、定义与声明、函数的调用、函数与指针

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

生成式对抗网络GAN

Generative Adversarial Nets由伊恩古德费洛(Ian J.Goodfellow)等人于2014年发表在Conference on Neural Information Processing Systems (NeurIPS)上。NeurIPS是机器学习和计算神经科学领域的顶级国际学术会议之一。 1. GAN在哪些领域大放异彩 图像生…

远程访问及控制

文章目录 远程访问及控制一、SSH远程管理1、SSH(Secure Shell)协议定义2、SSH的优点3、OpenSSHell 二、配置OpenSSH服务端1、sshd_config配置文件的常用选项2、sshd服务支持的两种验证方式2.1 密码验证2.2 秘钥对验证 三、SSH客户端程序的使用1、基本用法…

C# OpenCvSharp DNN 部署yolov3目标检测

目录 效果 yolov3.cfg 项目 代码 下载 C# OpenCvSharp DNN 部署yolov3目标检测 效果 yolov3.cfg [net] # Testing #batch1 #subdivisions1 # Training batch16 subdivisions1 width416 height416 channels3 momentum0.9 decay0.0005 angle0 saturation 1.5 exposure 1…

User-Agent(用户代理)是什么?

User-Agent(用户代理)是什么? User-Agent 即用户代理,简称“UA”,它是一个特殊字符串头。网站服务器通过识别 “UA”来确定用户所使用的操作系统版本、CPU 类型、浏览器版本等信息。而网站服务器则通过判断 UA 来给客…

【Web】什么是 XSS 攻击,如何避免?

🍎个人博客:个人主页 🏆个人专栏:Web ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 常见方法: 结语 我的其他博客 前言 在当今数字化时代,网络安全成为信息技术领域中的一项至关重要的任务。X…

Mac 下载 nvm 后执行nvm -v 命令报错 nvm: command not found

1、问题:Mac 使用命令下载nvm 成功后执行 nvm -v 查看,报错:nvm command not found 2、原因:可能是系统更新后,默认的 shell 是 zsh,所以找不到配置文件 3、解决:可添加编辑.bash_profile 和 …

WebStom中代码美化工具prettier的配置

如果你的项目使用到了prettier代码美化工具之后,使用ctrlaltL调整代码格式的时候会发现,代码没有被正确格式化,这是因为prettier代码美化工具没有设置格式化vue代码的设置。在下面中的run for files的括号里面加上vue即可 最后一步就是确保es…

自媒体必备的8个素材网站,免费可商用。

自媒体必备的8个素材网站,视频、音效、音频、图片等素材非常齐全,免费下载,无需担心侵权,赶紧收藏起来吧~ 视频素材 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库可以找到设计、办公、图片、视频、音频…

11. PCL的搭建

在这里,前期已经在rk3588上搭建好了livox hap的环境,搭建好了ros环境,搭建好了rknn环境,接下来搭建PCL环境,因为后期的点云数据处理基本上都要用到PCL库处理点云数据。这里的搭建是看了下面博主的内容,抄过…

如何解决游戏显示找不到x3daudio1_7.dll,六种修复方法详解分享

一、x3daudio17.dll的作用 x3daudio17.dll是微软公司开发的一个动态链接库文件,它提供了音频处理和渲染的功能。该文件主要负责处理三维音效和多声道音频的输出,使得计算机可以提供更加逼真和立体的音频效果。因此,当x3daudio17.dll丢失时&a…

Linux系统命令 --- seq tr cut sort uniq

目录 一、seq ---- 输出序列化参数 1、seq 数字 按照顺序打印 2、-s 使用指定字符串分割数字 3、计算1-20,并求和 4、-w 在每一列数字前加零 默认补全 二、tr、对数字进行处理 1、替换 2、删除 3、压缩 4、补集 三、cut 截取 四、sort 排序 …

2023 年东北三省一区职业院校技能大赛“云计算应用(高职组)”赛项样题

2023 年东北三省一区职业院校技能大赛“云计算应用(高职组)”赛项样题 目录:需要竞赛软件包环境可练习博主! 2023 年东北三省一区职业院校技能大赛“云计算应用(高职组)”赛项样题 模块一 私有云(30 分) 任务 1. 私有云服务搭建&…

pc-lint plus 屏蔽错误的几种方式

如屏蔽错误530错误 1、全局屏蔽 修改规则文件,屏蔽530错误 2、多行屏蔽 3、单行屏蔽 4、注意项 (1) 支持C90的"// … "注释方式和C99的“/* … */”注释方式 (2) lint必须为小写且紧挨着“//”或“/*” (3) lint后可跟一个或多个Lint选项,…
最新文章