找到最近的稀疏向量,使用什么样的索引或数据库?

Find nearest sparse vectors, what kind of index or DB to use?

我想检测相似的文本文档。

有一个函数将文本作为输入并生成矢量作为输出。

text => vector

生成的向量是稀疏的。它的维度很大(不能肯定,但可能约为 10_000),但它的几乎所有元素都是空值。它的元素中只有大约 10-20 个不为空。

vector = [0, 0, 0..., v1, 0...., v2, 0.... ]

所以将这个稀疏向量表示为映射而不是数组是有意义的。

vector = { i1: v1, i2: v2 }

我可以使用哪种索引来有效地找到最接近给定 { i1: v1, i2: v2 } 向量的 N 个向量?距离度量可以是欧氏或余弦或其他。

有数百万个文档。什么样的数据库可以用来做这样的搜索?数据库? Redis?

在沉思了机器学习的东西之后,这里是答案:

没有现成的数据库或索引可以处理高维空间。有像 https://github.com/spotify/annoy 这样的工具,但它们只能处理 < 1000

的尺寸

理论上可以使用分区等技巧来处理高维空间,但这是非常具体的情况,没有通用的解决方案。

更好的方法是使用 PCA 将维数降低到 <1000,然后就可以使用像 https://github.com/spotify/annoy

这样的工具