Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
pgvector 扩展将开源向量相似性搜索添加到 PostgreSQL。
本文介绍了 pgvector 启用的额外功能。 它涵盖了矢量相似性和嵌入的概念,并提供有关如何启用 pgvector 扩展的指导。 我们将了解如何创建、存储和查询向量。
可能还需要参阅该项目的官方自述文件。
启用扩展
在Azure Database for PostgreSQL灵活服务器上启用pgvector之前,请将其添加到允许列表,如如何使用 PostgreSQL 扩展中所述。 运行 SHOW azure.extensions;,检查它是否已正确添加。
重要
尽管 PostgreSQL 社区将此扩展称为 pgvector,但二进制文件和扩展本身的名称就叫作 vector。 请记住这个名称,因为无论是将其加入允许列表,还是通过 CREATE EXTENSION 命令在任何数据库中创建该扩展,你都必须使用这个名称。
然后,通过连接到目标数据库并运行 CREATE EXTENSION 命令来安装扩展。 对希望扩展可用的每个数据库单独重复该命令。
CREATE EXTENSION vector;
注释
若要从当前连接的数据库中删除扩展,请使用 DROP EXTENSION vector;。
概念
向量相似性
向量相似性是一种通过将两个项目表示为向量(即一系列数字)来衡量其之间相似程度的方法。 向量通常用于表示数据点,其中向量的每个元素表示数据点的某个特征或属性。
向量相似性通常使用距离指标(如 Euclidean distance 或 cosine 相似性)进行计算。 欧几里得距离测量 n 维空间中两个向量之间的直线距离,而余弦相似性测量两个向量之间夹角的余弦值。 相似性指标的值通常介于 0 和 1 之间,higher 值指示向量之间的相似性更高。
向量相似性广泛应用于各种应用程序,例如推荐系统、文本分类、图像识别和群集。 例如,在推荐系统中,向量相似性可用于根据用户的偏好识别相似项。 在文本分类中,向量相似性可用于根据向量表示形式来确定两个文档或句子之间的相似性。
嵌入
嵌入是一种评估文本、图像、视频或其他类型信息“相关性”的技术。 借助评估,机器学习模型可以有效地识别数据之间的关系和相似性,是算法可识别模式并进行准确的预测。 例如,在情绪分析任务中,具有相似嵌入的词可能具有相似的情绪分数。
入门指南
创建一个表 tblvector,其中包含类型为 embedding 的 vector(3) 列,表示一个三维矢量。
CREATE TABLE tblvector(
id bigserial PRIMARY KEY,
embedding vector(3)
);
使用 OpenAI API 等服务生成嵌入后,可以将生成的矢量存储在数据库中。 将向量定义为 vector(3) 指定三维平面中的 [x,y,z] coordinates。 该命令会使用提供的嵌入将五个新行插入到 tblvector 表中。
INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]'), (3, '[5,4,6]'), (4, '[3,5,7]'), (5, '[7,8,9]');
利用 INSERT INTO ... ON CONFLICT 语句,可以指定替代操作,例如更新符合条件的记录。 这让你能够以有效且更高效的方式处理潜在冲突。
INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;
DELETE 命令根据 WHERE 子句中指定的条件从指定表中移除行。 当 WHERE 子句不存在时,表中所有行都将删除。
DELETE FROM tblvector WHERE id = 1;
若要检索向量并计算相似性,请使用 SELECT 语句和内置向量运算符。 例如,查询会计算给定矢量与存储在 tblvector 表中的矢量之间的欧几里得距离(L2 距离),根据计算的距离对结果进行排序,并返回最接近的五个最相似的项。
SELECT * FROM tblvector
ORDER BY embedding <-> '[3,1,2]'
LIMIT 5;
查询使用“<->”运算符,这是用于计算多维空间中两个向量之间距离的“距离运算符”。 查询会返回所有与向量 [3,1,2] 的距离小于 6 的行。
SELECT * FROM tblvector WHERE embedding <-> '[3,1,2]' < 6;
命令从“tblvector”表中检索“嵌入”列的平均值。 例如,如果“嵌入”列包含语言模型的词嵌入,则这些嵌入的平均值可用于表示整个句子或文档。
SELECT AVG(embedding) FROM tblvector;
矢量运算符
pgvector 引入了六个可用于矢量的新运算符:
| Operator | Description |
|---|---|
| + | 逐元素加法 |
| - | 逐元素减法 |
| * | 逐元素乘法 |
| <-> | 欧几里得距离 |
| <#> | 负内部积 |
| <=> | 余弦距离 |
矢量函数
cosine_distance
计算两个矢量之间的余弦距离。
cosine_distance(vector, vector)
Arguments
vector
第一 vector。
vector
第二 vector。
返回类型
double precision 作为两个提供的向量之间的距离。
inner_product
计算两个矢量的内部乘积。
inner_product(vector, vector)
Arguments
vector
第一 vector。
vector
第二个 vector
返回类型
double precision 作为两个向量的内部乘积。
l2_distance
计算两个矢量之间的欧几里得距离(也称为 L2)。
l2_distance(vector, vector)
Arguments
vector
第一 vector。
vector
第二个 vector
返回类型
double precision 作为两个矢量之间的欧几里得距离。
l1_distance
计算两个矢量之间的出租车距离(也称为 L1)。
l1_distance(vector, vector)
Arguments
vector
第一 vector。
vector
第二个 vector
返回类型
double precision 作为两个向量之间的出租车距离。
vector_dims(vector)
返回给定矢量的尺寸。
Arguments
vector
一个 vector。
返回类型
integer 表示给定矢量的尺寸数。
vector_norms(vector)
计算给定矢量的欧几里得范数。
Arguments
vector
一个 vector。
返回类型
double precision 表示给定矢量的欧几里得范数。
矢量聚合
AVG
计算已处理矢量的平均值。
Arguments
vector
一个 vector。
返回类型
vector 表示已处理矢量的平均值。
SUM
Arguments
vector
一个 vector。
返回类型
vector 表示已处理矢量的和。