查找最近的稀疏向量,使用哪种索引或DB?

时间:2017-03-19 16:23:09

标签: postgresql indexing similarity n-gram

我想检测类似的文字文件。

有一个函数将文本作为输入,并将向量作为输出。

text => vector

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

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

因此将稀疏矢量表示为地图而不是数组是有意义的。

vector = { i1: v1, i2: v2 }

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

有数百万份文件。什么样的数据库可以用来进行这种搜索? PostgreSQL的? Redis的?

1 个答案:

答案 0 :(得分:0)

在冥想机器学习之后,这里的答案是:

没有准备好使用可以处理高维空间的DB或Index。像https://github.com/spotify/annoy这样的工具,但它们只能处理尺寸< 1000

理论上,使用分区等技巧可以处理高维空间,但它具有特定的案例,没有通用解决方案。

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