向量搜索索引

向量搜索索引是在Neo4j 5.11版本中以公共测试版形式发布的,并在Neo4j 5.13版本中正式推出。

本章介绍了如何使用向量索引执行近似最近邻搜索。

向量索引允许用户查询大型数据集中的向量嵌入。嵌入是数据对象(例如文本、图像、音频或文档)的数值表示。

例如,在文本中,每个单词或标记通常被表示为高维向量,其中每个维度表示单词含义的某个方面。在这个向量空间中,语义上相似或相关的单词通常由彼此更接近的向量表示。这允许进行加法和减法等数学运算,以传达语义含义。例如,“国王”的向量表示减去“男人”的向量再加上“女人”的向量可能接近于“女王”的向量表示。换句话说,向量嵌入可以被视为特定数据对象的数值表示,捕捉其语义含义。

例如,特定数据对象的嵌入可以由Vertex AI或OpenAI嵌入生成器生成,这些生成器可以生成具有768、1024和1536等维度的向量嵌入。这些向量嵌入被存储为节点上的 LIST<FLOAT> 属性,其中向量的每个维度组件是LIST中的一个元素。

Neo4j向量索引可以用于通过与查询中指定的节点属性的相似度匹配的方式,对节点进行索引。

在Neo4j中,向量索引允许您编写基于节点的属性与查询中指定的属性之间的相似度匹配的查询,从而匹配节点的邻域。

Neo4j的向量索引由Apache Lucene索引和搜索库提供支持。

Lucene实现了一种分层可导航小世界(Hierarchical Navigable Small World,HNSW)图,用于在向量字段上执行k个近似最近邻(k-ANN)查询。

参考资料

https://neo4j.com/docs/cypher-manual/5/indexes-for-vector-search/