PostgreSQL pgvector:怎样利用向量数据库提升搜索效率和精度 ...

打印 上一主题 下一主题

主题 526|帖子 526|积分 1578

一、介绍

随着基础模子的鼓起,向量数据库的受欢迎程度也飙升。事实上,在大型语言模子环境中,向量数据库也很有用。
在呆板学习范畴,我们常常处置处罚的是向量嵌入。向量嵌入是通过特定的呆板学习模子运行对象的特征,将对象的上下文信息投射到潜伏空间中来创建的。
为了在利用向量嵌入时能够体现得特别好,创建向量数据库是须要的。这方面的工作包罗存储、更新和检索向量。当我们谈论检索时,通常是指检索与查询最相似的向量,这些向量与嵌入到同一潜伏空间并传递到向量数据库中。这个检索过程被称为近似近来邻。
嵌入是由人工智能模子生成的,并且由于它们包含大量属性或特征,因此管理它们的表示大概很困难。在人工智能和呆板学习的背景下,这些特征代表数据的许多元素,全部这些元素对于明白模式、相关性和底层结构都是须要的。
因此,我们需要专门为管理此类信息而开发的数据库。像Chroma-DB这样的向量数据库能够满足这一需求,由于它们提供了经过优化的嵌入式存储和查询功能,并且具备典型数据库所不具备的独立向量索引特性。此外,向量数据库还具备处置处罚向量嵌入的专门本事,这是传统基于标量的数据库所不具备的。
PostgreSQL是一个强大的对象关系数据库体系,可在开源许可下利用。它已经积极开发了超过35年,这使得它在可靠性、妥当性和性能方面建立了精良的声誉。好消息是,除了外部扩展之外,PostgreSQL还支持向量。

 一些盛行的向量数据库包罗:Pinecone、Weviate、Chroma、Milvus、Faiss。尽管Redis、Cassandra等数据库并非向量数据库,但越来越多的数据库提供商开始提供ANN搜索功能。

二、什么是向量数据库

向量数据库是一种专门用于存储、管理和搜索向量数据的数据库。它以向量的情势存储数据,其中向量是抽象实体(如图像、音频文件、文本等)的数学表示。通过存储数据向量并利用向量之间的相似度度量,向量数据库可以实现高效、准确的数据搜索和分析。
下面显示了一个非常简单的示例。虽然顶部的两个句子的含义非常相似,但底部的句子却截然差异。向量数据库能够将这些句子编码为向量,然后找到靠近的句子 - 这意味着它们是相似的。


请记住,在现实应用中,我们拥有的维度远不止 2 个维度 - OpenAI 嵌入目前利用约莫 1500 个维度来进行有意义的语言矢量化。
向量数据库的核心特点如下:
1)、向量表示:向量数据库将复杂的数据类型转换为向量表示,使得高维数据能够以多维空间中的点的情势表示。这种表示不但具有高盘算效率,还简化了数据点之间的比较和关联过程。
2)、基于相似性的搜索:向量数据库善于根据向量表示来搜索与给定查询相似的数据项。它们利用欧氏间隔、余弦相似度或曼哈顿间隔等相似性度量来确定多维空间中数据点之间的靠近程度,从而找到最相关和最相似的结果。
3)、可扩展性:向量数据库被设计成能够处置处罚大规模的数据集,并且在数据集巨细增长时能够保持高搜索精度和响应时间。此外,它们通常提供并行处置处罚和分布式盘算的机制,以满足不断增长的数据需求。
4)、与呆板学习和人工智能兼容:随着人工智能和呆板学习应用的迅速增长,向量数据库的采用也在增加。将复杂数据转换为向量表示可以与这些算法无缝集成,从而得到规模化的有价值洞见和预测。
总之,向量数据库利用向量数据的特性,提供高效、准确的搜索和分析功能。它们在处置处罚高维数据和进行相似性搜索方面具有优势,并且与呆板学习和人工智能应用的兼容性使其在各个范畴中变得越来越重要。
三、向量数据库的应用场景

向量数据库具有多种应用场景,以下是其中一些突出的应用范畴:


  • 天然语言处置处罚(NLP):向量数据库可以有效处置处罚词嵌入或文档向量,促进语义搜索和文本分析。它们可以用于文档分类、情绪分析、关键词提取等使命,资助构造明白来自社交媒体、论坛、客户互动等数据源的大量文本数据。
  • 图像搜索和识别:图像数据库受益于向量数据库的向量表示和基于相似性的搜索功能。通过识别高维数据的相似性和模式,它们可以有效处置处罚反向图像搜索、对象检测、人脸识别等使命。
  • 保举体系:强大的保举引擎是现代电子商务和内容平台的关键组成部门之一。通过利用向量数据库,这些体系可以分析用户偏好和内容特征,实时生成个性化且高度相关的保举。
  • 非常检测和欺诈防备:特定范畴的数据点(如金融生意业务或用户行为)可以转换为向量表示,进行实时分析。基于相似性的搜索功能可以快速识别非常模式或潜伏欺诈,资助构造镌汰风险。
  • 基因组研究:在基因组学范畴,研究职员处置处罚复杂的生物数据,并常常需要识别相似的基因序列或结构。向量数据库的强大搜索功能可以加快这一过程,更准确地进行关键发现和希望。
  • 多媒体内容管理:向量数据库可以通过将音频和视频转换为向量表示来处置处罚各种内容。这种本事使得内容搜索和分析变得更加普遍,实现了基于相似性、模式识别或自动内容标记的媒体无缝检索。
除了上述应用范畴,向量数据库在许多其他行业和范畴中也有广泛的应用。随着对向量数据库潜力认识的增加,其在数据管理和分析方面的采用和探索将继续推动创新和发展。
四、PostgreSQL 向量扩展-pgvector

pgvector 是一个基于 PostgreSQL 的扩展,为用户提供了一套强大的功能,用于高效地存储、查询和处置处罚向量数据。它具有以下特点:


  • 直接集成:pgvector 可以作为扩展直接添加到现有的 PostgreSQL 环境中,方便新用户和恒久用户得到矢量数据库的好处,无需进行庞大体系更改。
  • 支持多种间隔度量:pgvector 内置支持多种间隔度量,包罗欧几里德间隔、余弦间隔和曼哈顿间隔。这样的多功能性使得可以根据具体应用需求进行高度定制的基于相似性的搜索和分析。
  • 索引支持:pgvector 扩展为矢量数据提供高效的索引选项,比方 k-近来邻 (k-NN) 搜索。纵然数据集巨细增长,用户也可以实现快速查询实行,并保持较高的搜索准确性。
  • 易于查询语言访问:作为 PostgreSQL 的扩展,pgvector 利用认识的 SQL 查询语法进行向量操作。这简化了具有 SQL 知识和经验的用户利用矢量数据库的过程,并制止了学习新的语言或体系。
  • 积极的开发和支持:pgvector 常常更新,以确保与最新的 PostgreSQL 版本和功能兼容,并且开发者社区致力于增强其功能。用户可以期待一个受到精良支持的解决方案,满足其矢量数据的需求。
  • 妥当性和安全性:通过与 PostgreSQL 的集成,pgvector 继续了相同级别的妥当性和安全性功能,利用户能够安全地存储和管理其矢量数据。
总之,pgvector 是一个功能强大的 PostgreSQL 扩展,为用户提供了高效、机动和可靠的方式来处置处罚向量数据。它的直接集成、多种间隔度量支持、索引支持和易于访问的查询语言使其成为处置处罚矢量数据的理想选择。
4.1、怎样利用 pgvector



  • 在数据库服务器上安装 pgvector
  1. cd /tmp
  2. git clone --branch v0.4.2 https://github.com/pgvector/pgvector.git
  3. cd pgvector
  4. make
  5. make install # 可能需要sudo
复制代码


  • 在您的数据库中,运行此命令以启用扩展
  1. CREATE EXTENSION IF NOT EXISTS vector;
复制代码


  • 创建一个存储向量的表
  1. CREATE TABLE items (id bigserial PRIMARY KEY, name, features vector(3));
复制代码


  • 添加数据的工作原理如下
  1. INSERT INTO items (features) VALUES ('[1,2,3]'), ('[4,5,6]');
复制代码


  • 由于 pgvector 构建在 postgres 之上,因此许多 PG DML 可用。比方。要更新插入,您可以运行
  1. INSERT INTO items (id, features) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
  2. 2ON CONFLICT (id) DO UPDATE SET features = EXCLUDED.features;
复制代码
4.2、pgvector 查询运算符

在 pgvector 中,可以利用各种查询运算符对矢量数据进行差异的操作。这些运算符主要用于盘算向量之间的相似度或间隔,其中一些运算符利用差异的间隔度量。以下是一些常用的 pgvector 查询运算符:

  • <->:该运算符盘算两个向量之间的欧几里德间隔。欧几里德间隔是多维空间中向量表示的点之间的直线间隔。较小的欧几里德间隔表示向量之间的相似性较大,因此该运算符在查找和排序相似项目时非常有用。
  1. SELECT id, name, features, features <-> '[0.45, 0.4, 0.85]' as distance
  2. 2FROM items
  3. 3ORDER BY features <-> '[0.45, 0.4, 0.85]';
复制代码

  • <=>:该运算符盘算两个向量之间的余弦相似度。余弦相似度比较两个向量的方向而不是它们的巨细。余弦相似度的范围在 -1 到 1 之间,1 表示向量相同,0 表示无关,-1 表示向量指向相反方向。
  1. SELECT id, name, features, features <=> '[0.45, 0.4, 0.85]' as similarity
  2. 2FROM items
  3. 3ORDER BY features <=> '[0.45, 0.4, 0.85]' DESC;
复制代码

  • <#>:该运算符盘算两个向量之间的曼哈顿间隔(也称为 L1 间隔或都会街区间隔)。曼哈顿间隔是每个维度对应坐标差的绝对值之和。相对于欧几里德间隔而言,曼哈顿间隔更增夸大沿着维度的较小移动。
  1. SELECT id, name, features, features <#> '[0.45, 0.4, 0.85]' as distance
  2. 2FROM items
  3. 3ORDER BY features <#> '[0.45, 0.4, 0.85]';p
复制代码
在选择适当的运算符时,您应该考虑您的应用需求和数据特性。这大概涉及保持相对间隔、夸大巨细或方向以及关注特定维度等因素。请留意,根据您的数据和用例,运算符的选择大概会对搜索结果的质量以及最终应用程序的有效性产生庞大影响。
4.3、pgvector索引

在 pgvector 中,可以通过添加索引来利用近似近来邻搜索,以进步查询性能。以下是一些关于 pgvector 索引的建议:
1)、在表中有肯定命量的数据后创建索引:在创建索引之前,确保表中有充足的数据,以便索引能够提供更好的查询性能。
2)、选择适当数量的列表:可以根据表的巨细来选择适当数量的列表。一样平常来说,可以利用表的行数除以 1000(最多 1M 行)和平方根(rows)(超过 1M 行)作为起点。
3)、指定适当的探针数量:在实行查询时,可以指定适当的探针数量来平衡查询速度和召回率。一样平常来说,可以利用列表数量除以 10(最多 1M 行)和平方根(lists)(超过 1M 行)作为起点。
这些建议可以资助您在近似近来邻搜索中得到精良的准确性和性能。请留意,具体的索引设置大概需要根据您的数据和查询需求进行调解,以达到最佳性能。
  1. BEGIN;
  2. SET LOCAL ivfflat.probes = 10;
  3. SELECT ...
  4. COMMIT;
复制代码
为您要利用的每个间隔函数添加一个索引。


  • L2间隔
  1. CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100);
复制代码


  • 内积
  1. CREATE INDEX ON items USING ivfflat (embedding vector_ip_ops) WITH (lists = 100);
复制代码


  • 余弦间隔
  1. CREATE INDEX ON items USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);
复制代码
五、总结

在这篇文章中,我们探究了矢量数据库在管理高维数据和其在各个行业中的应用中的重要性。我们介绍了 pgvector,这是一个功能强大的 PostgreSQL 扩展,支持矢量数据的存储和搜索,并提供了一个易于访问的矢量数据库解决方案。通过实用指南,我们演示了怎样利用 pgvector 创建表、插入数据和查询相似项。此外,我们还讨论了 pgvector 中用于盘算相似性度量的差异查询运算符,如欧几里得间隔、余弦相似度和曼哈顿间隔。
通过利用 pgvector,我们可以轻松地处置处罚高维数据,并根据具体需求进行相似性搜索和分析。pgvector 的直接集成、索引支持和易于查询的语言使其成为处置处罚矢量数据的理想选择。无论是新用户照旧恒久用户,都可以从中得到矢量数据库的好处,而无需进行庞大体系改动。
在选择适当的查询运算符和索引设置时,我们应该考虑数据特性、查询需求以及平衡准确性和性能的要求。通过公道地设置和利用 pgvector,我们可以得到高效、准确且可靠的矢量数据解决方案,满足差异行业和应用的需求。
项目地址:https://github.com/pgvector/pgvector

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表