正如标题中提到的,我试图搜索 10,000 个向量,每个向量具有 8000 个特征,所有这些都在 Python 中。目前,我将向量保存在自己的目录中作为腌制的 numpy 数组。这些特征是从这个深度神经网络中提取的。
我是这个领域的新手,但我听说过 M-Trees、R-Trees、倒排表和散列。对于如此大量的功能,它们中的任何一个都更好吗?
此实现需要非常快速地完成,并且只是一个原型,因此简单性很有价值。
感谢您的帮助。
正如标题中提到的,我试图搜索 10,000 个向量,每个向量具有 8000 个特征,所有这些都在 Python 中。目前,我将向量保存在自己的目录中作为腌制的 numpy 数组。这些特征是从这个深度神经网络中提取的。
我是这个领域的新手,但我听说过 M-Trees、R-Trees、倒排表和散列。对于如此大量的功能,它们中的任何一个都更好吗?
此实现需要非常快速地完成,并且只是一个原型,因此简单性很有价值。
感谢您的帮助。
主要有两条路径:
将所有向量加载到内存中。如果您能够将向量加载到内存中,那么您也许可以用“聪明”的蛮力搜索空间。本文发现了一种这样的方法。
将向量保存在磁盘上。如果您遵循此路径,则必须对向量进行索引。你基本上是在构建一个搜索引擎。常见的开源搜索引擎有:Apache Solr和Elasticsearch
这也取决于需要什么样的搜索。需要“关闭”向量的工作定义。可以在此处找到“关闭”向量的最常见定义。
Fais是一个用于向量高效相似性搜索的新库。它是为许多向量(> 1,000,000)而设计的,每个向量都相对较小(10 到 100 维)。它可能会也可能不会扩展到您的问题。如果由于高维而无法扩展,您可以使用主成分分析 (PCA)或t-SNE来降低维数。