在 Python 中对 10,000 个数据点(每个数据点有 8,000 个特征)进行相似性搜索的最佳方法?

数据挖掘 Python 搜索 搜索引擎
2022-01-25 16:03:14

正如标题中提到的,我试图搜索 10,000 个向量,每个向量具有 8000 个特征,所有这些都在 Python 中。目前,我将向量保存在自己的目录中作为腌制的 numpy 数组。这些特征是从这个深度神经网络中提取的。

我是这个领域的新手,但我听说过 M-Trees、R-Trees、倒排表和散列。对于如此大量的功能,它们中的任何一个都更好吗?

此实现需要非常快速地完成,并且只是一个原型,因此简单性很有价值。

感谢您的帮助。

1个回答

主要有两条路径:

  1. 将所有向量加载到内存中。如果您能够将向量加载到内存中,那么您也许可以用“聪明”的蛮力搜索空间。本文发现了一种这样的方法

  2. 将向量保存在磁盘上。如果您遵循此路径,则必须对向量进行索引。你基本上是在构建一个搜索引擎。常见的开源搜索引擎有:Apache SolrElasticsearch

这也取决于需要什么样的搜索。需要“关闭”向量的工作定义。可以在此处找到“关闭”向量的最常见定义。

Fais是一个用于向量高效相似性搜索的新库。它是为许多向量(> 1,000,000)而设计的,每个向量都相对较小(10 到 100 维)。它可能会也可能不会扩展到您的问题。如果由于高维而无法扩展,您可以使用主成分分析 (PCA)t-SNE来降低维数。