向量函数

向量函数允许您计算向量对的相似度得分。这些向量相似度函数与 Neo4j 向量搜索索引中使用的函数相同。

vector.similarity.cosine()

详情

语法

vector.similarity.cosine(a, b)

描述

返回一个 FLOAT 类型值,表示参数向量之间基于余弦的相似度。

参数

名称

类型

描述

a

LIST<INTEGER | FLOAT>

表示第一个向量的列表。

b

LIST<INTEGER | FLOAT>

表示第二个向量的列表。

返回值

FLOAT

更多详情,请参阅向量索引文档

注意事项

vector.similarity.cosine(null, null) 返回 null

vector.similarity.cosine(null, b) 返回 null

vector.similarity.cosine(a, null) 返回 null

两个向量必须具有相同的维度。

两个向量在余弦相似度方面都必须有效

此实现与最新可用向量索引提供程序 (vector-2.0) 的实现相同。

vector.similarity.cosine() 返回节点的邻近关系以及它们各自的余弦相似度得分,按相似度降序排列。相似度得分范围在 01 之间,得分越接近 1 表示索引向量与查询向量之间的相似度越高。

vector.similarity.euclidean()

详情

语法

vector.similarity.euclidean(a, b)

描述

返回一个 FLOAT 类型值,表示参数向量之间基于欧几里得距离的相似度。

参数

名称

类型

描述

a

LIST<INTEGER | FLOAT>

表示第一个向量的列表。

b

LIST<INTEGER | FLOAT>

表示第二个向量的列表。

返回值

FLOAT

更多详情,请参阅向量索引文档

注意事项

vector.similarity.euclidean(null, null) 返回 null

vector.similarity.euclidean(null, b) 返回 null

vector.similarity.euclidean(a, null) 返回 null

两个向量必须具有相同的维度。

两个向量在欧几里得相似度方面都必须有效

此实现与最新可用向量索引提供程序 (vector-2.0) 的实现相同。

vector.similarity.euclidean() 返回节点的邻近关系以及它们各自的欧几里得相似度得分,按相似度降序排列。相似度得分范围在 01 之间,得分越接近 1 表示索引向量与查询向量之间的相似度越高。

示例 1. k-最近邻

k-最近邻查询返回与查询向量关联向量比较后相似度得分最高的 k 个实体。此类查询可以针对向量索引以近似 k-最近邻 (k-ANN) 查询的形式运行,其返回的实体很有可能属于真正的 k 个最近邻。但是,它们也可以直接使用向量相似度函数表示为详尽搜索。虽然这通常比使用索引慢得多,但它是精确而非近似的,并且不需要现有索引。这对于小数据集的一次性查询可能很有用。

要在本示例中使用图谱,请在空的 Neo4j 数据库中运行以下查询

CREATE
  (:Node { id: 1, vector: [1.0, 4.0, 2.0]}),
  (:Node { id: 2, vector: [3.0, -2.0, 1.0]}),
  (:Node { id: 3, vector: [2.0, 8.0, 3.0]});

给定参数 query(此处设置为 [4.0, 5.0, 6.0]),您可以通过欧几里得距离查询该查询向量的两个最近邻。这是通过匹配所有候选向量并按相似度得分排序来实现的

查询
MATCH (node:Node)
WITH node, vector.similarity.euclidean($query, node.vector) AS score
RETURN node, score
ORDER BY score DESCENDING
LIMIT 2;

这将返回两个最近邻。

结果
节点 得分

(:Node {vector: [2.0, 8.0, 3.0], id: 3})

0.043478261679410934

(:Node {vector: [1.0, 4.0, 2.0], id: 1})

0.03703703731298447

行数: 2

© . All rights reserved.