首页 > 数据库 >向量数据库简介

向量数据库简介

时间:2024-01-29 11:03:00浏览次数:57  
标签:存储 简介 数据库 搜索 维度 可以 向量

学习一下什么是向量数据库,原文地址:https://www.percona.com/blog/an-introduction-to-vector-databases/

 

设想一下,地球的南半球即将进入冬季,而你想要去 Patagonia 旅行,因此你需要买几件舒适的衣服。你打开谷歌浏览器,并在搜索框输入"适合 Patagonia 天气的夹克衫 ",并没有考虑特定的品牌,但搜索结果却是那个特定的品牌。这是怎么回事?可能是缺乏语境上下文( Patagonia 是一个品牌还是一个地方?) 有人可能会说,可以通过给名称添加类别来完善数据库,这样就可以把"苹果"作为一种水果和一家公司来存储,或者把" Patagonia "作为一个地方和一个品牌来存储。这会增加数据库模型的复杂性,而且可能需要更多时间来执行查询,但这是可行的。

 

现在,你在网上看到了一件漂亮夹克的图片,并想通过图片进行搜索。当搜索条件是图片时,数据库的面罩下会发生什么样的神奇变化,才能解决查询问题?图像的哈希版本?但如何比较形状和颜色?如何知道它是夹克而不是白大褂?如何以高效和可搜索的方式存储所有这些数据?请进入向量数据库。

Math detour

向量是一种数学对象,用于表示具有大小和方向的量。它可以表示为数字数组,其中每个元素对应一个特定维度:

例如,上述向量用 (-2,3) 表示。这是一个二维向量,也可以是三维向量:

这个代表(2,1,3)。正如你所看到的,这里多了一个维度,但实际上你可以从 N 个维度进行计算!这就是线性代数所涵盖的主题。

但这和数据库有什么关系呢?实际上,这不是数据库本身的问题,而是用向量表示的数据的问题。而这些数据都存储在数据库中。

向量和数据库

在向量数据库中,向量以机器可以理解的格式表示文本、图像、声音等复杂数据。它将定性属性转化为定量特征,可以通过数学运算轻松进行比较。

如果我们回到夹克的例子,夹克的每个定性属性,如尺码:M、颜色:蓝色、袖子:长、面料:棉,等等,都可以被机器理解:都可以成为整个向量的一个值,也可以成为一个数字。

另一个很好的例子是面部识别。

将每个面部特征想象成一个维度(嘴、鼻子、眼睛、你隐藏的皱纹)。每个人的这些特征的独特组合就形成了他们的面部向量。

 

当你把照片上传到未来的面部识别系统时,系统会将其向量与存储的已知人物向量进行比较。如果找到一个接近的匹配,Bingo! 人就被识别出来了!

创建向量,也称为"嵌入"(EMBEDDINGS)

Source: https://tge-data-web.nyc3.digitaloceanspaces.com/docs/Vector%20Databases%20-%20A%20Technical%20Primer.pdf

嵌入(EMBEDDINGS)是数据点的向量表示,可以捕捉其语义。关键是"语义"。为什么?因为这样你就可以使用文本的含义与图像的含义进行比较!这就是机器如何判定"冬季夹克"这个短语正确描述了冬季夹克的图片。这就是所谓的"语义搜索"。

嵌入如何生成?机器学习。嵌入过程的实际重任是在一个训练有素的模型中完成的。用户可以创建自己的模型,也可以使用适合自己需要的预训练模型。"Sentence Transformer"是一个很好的嵌入文本和图片的开源库。不过,其用法不在本文讨论范围之内。

嵌入的存储和搜索

现在我们知道,向量数据库存储的是......向量。但这些向量代表实体,包含描述和意义。为了尽可能详细地描述对象,我们可能需要尽可能多的维度。这就是所谓的高维空间。

高维数据

这是指具有大量属性的数据。一首歌可以用节奏、乐器、速度、音高、长度、主题、音调等来描述。每一个属性都是一个新的维度。

随着维数的增加,向量空间的体积也随之增大。增长幅度很大。高维度可以存储大量的细节,但在管理和搜索这些数据时也会付出代价。这就是所谓的"维度诅咒"。随着维度的增加,数据点之间的距离变得意义不大。搜索相似点的计算复杂度会变得非常昂贵,以至于不合理。要缓解这一问题,降维技术是关键。像"特征选择"、"哈希"和"主成分分析(PCA)" 等技术都能很好地解决这个问题。

距离度量(Distance metrics)

好了,我的向量数据库中有了嵌入。现在怎么办?就是现在: 更多数学。

 

距离度量是确定向量空间中两点之间"距离"的数学函数。不同的距离度量可以表示数据不同方面之间的关系。最常用的有:

·欧氏距离(Euclidean Distance): 对向量的大小非常敏感

·曼哈顿距离(Manhattan Distance): 适用于图像检索和金融分析

·余弦距离(Jaccard Similarity): 非常适合评估文本相似性,在这种情况下,单词的频率没有实际意义那么重要。

·Jaccard 相似度: 用于根据购买历史查找相似客户

搜索相似度:最终目标

Source: https://weaviate.io/blog/distance-metrics-in-vector-search

 

归根结底,所有这些都是为了找到相似的东西,快速、准确。这可以通过 K-近邻(KNN)和近似近邻(ANN)等算法来实现,每种算法都各有利弊。这些算法是数据库引擎的一部分,已经实现并可随时使用。但与其他数据库一样,索引是缩短执行时间的关键。

 

通过在特定维度上创建索引,向量数据库可以大大加快相似性搜索操作。一些常用的索引选项包括:

·Flat index
·Inverted File Index (IVF)
·Approximate Nearest Neighbors Oh Yeah (ANNOY)
·Product Quantization (PQ)
·Hierarchical Navigable Small World (HNSW)

向量数据库和向量存储

向量数据库从零开始设计,用于存储、索引和查询向量数据。例如 Pinecone 和 Quadrant。

 

向量存储是一种用于常规传统存储和搜索的数据库,但也能存储和检索向量数据:

ClickHouse (https://clickhouse.com/blog/vector-search-clickhouse-p1) 和使用 pg_vector 扩展的 PostgreSQL(请参阅此处的精彩演示:https://www.percona.com/blog/create-an-ai-expert-with-open-source-tools-and-pgvector/)。

 

总结

人工智能和机器学习正在推动技术的发展,这不仅体现在最终用户所看到的突破性成就上(ChatGPT、Bard、Copilot 等),还体现在其背后所发生的事情上。经过 ML 训练的模型需要特定的数据库来满足其需求,而该行业正在跟上这些要求。摆在我们面前的是一场持久的考验,以及与开源领域的融合,是激动人心的时刻!

 

标签:存储,简介,数据库,搜索,维度,可以,向量
From: https://www.cnblogs.com/abclife/p/17993022

相关文章

  • MySQL数据库连接报错1130 - Host 'xxx' is not allowed to connect to this MySQL ser
    目录现象描述原因分析解决办法:本文解决MySQL数据库连接报错1130-Host'xxx'isnotallowedtoconnecttothisMySQLserver。返回目录返回目录现象描述MySQL数据库,使用Navicat、root用户连接报错:原因分析这个报错原因是权限问题,需要修改连接权限。进入mysql......
  • 通过 dba_hist_active_sess_history 分析数据库历史性能问题
    1.Dump出问题期间的ASH数据SQL>connuser/passwdSQL>createtablet_ashasselect*fromdba_hist_active_sess_historywhereSAMPLE_TIMEbetweenTO_TIMESTAMP('<time_begin>','YYYY-MM-DDHH24:MI:SS')andTO_TIMESTAMP('<t......
  • 『Echarts』简介
    目录一、前言二、『Echarts』简介1.什么是『Echarts』三、数据可视化四、『Echarts』1.『Echarts』的作用2.『Echarts』能绘制哪些图表3.『Echarts』显示图表的原理五、总结一、前言本篇文章是『Echarts』系列文章的第1篇,主要介绍『Echarts』简介经过前面文章的介绍,大......
  • 数据库使用二进制表示的
    2.1——IC是集成电路的简称,有模拟ic和数字ic。IC的一个引脚只能表示0V和5V两种状态。二进制数的位数一般是8的倍数。8位二进制数被称为一个字节。字节是最基本的信息计量单位。2.2——数值的表现方法,进位计数制中各数位上可能有的数值的个数。十进制的基数是10,二进制数的基数是......
  • Mysql数据库更新RedHat/CentOS 从 8.0.14 到 8.0.33,又从8.0.33更新到8.0.35
    sudosystemctlstartmysqldFirstlyweneedbackupalldatabasedataintonewfile,IuseTestPortal.sql/data/VMs_Share/Homes/bell-bash-4.2$mysqldump-uroot-p--databasesTestPortal>TestPortal.sqlEnterpassword:-bash-4.2$2.downloadtheve......
  • 无涯教程-Swift - 简介
    Swift编程语言,支持多编程范式和编译式,用来撰写基于macOS/OSX、iOS、iPadOS、watchOS和tvOS的软件。苹果公司于2014年在苹果开发者年会(WWDC)发布了Swift编程语言。从设计上苹果公司让Swift与Objective-C共存在苹果公司的操作系统上。2010年7月,苹果开发者工具部门总监克里斯·......
  • 1、Git简介
    1.1、概述Git是一个开源免费的分布式版本控制系统,用于快速高效地管理各种小型或大型项目的代码。Git不仅容易学习、占用空间小,而且性能快如闪电。Git具有廉价的本地分支、方便的暂存区域和多个工作流等功能。Git超越了Subversion、CVS、Perforce和ClearCase等SCM(Sof......
  • Apipost数据库连接使用
    Apipost提供了数据库连接功能,在接口调试时可以使用数据库获取入参或进行断言校验。目前的Apipost支持:Mysql、SQLSever、Oracle、Clickhouse、达梦数据库、PostgreSQL、Redis、MongoDB8种数据库的连接操作新建数据库连接:在「项目设置」-「公共资源维护」-「连接数据库」中配置需......
  • Apipost数据库连接使用
    Apipost提供了数据库连接功能,在接口调试时可以使用数据库获取入参或进行断言校验。目前的Apipost支持:Mysql、SQLSever、Oracle、Clickhouse、达梦数据库、PostgreSQL、Redis、MongoDB8种数据库的连接操作新建数据库连接:在「项目设置」-「公共资源维护」-「连接数据库」中配置......
  • 无涯教程-Socket.IO - 简介
    Socket.IO是用于实时Web应用程序的JavaScript库。它支持Web客户端和服务器之间的实时双向通信。它包括两个部分:在浏览器中运行的客户端库和用于node.js的服务器端库,这两个组件具有相同的API。实时应用实时应用程序(RTA)是在用户感知为即时或当前的时段内运行的应用程序。实......