我想检测类似的文字文件。
有一个函数将文本作为输入,并将向量作为输出。
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的?
答案 0 :(得分:0)
在冥想机器学习之后,这里的答案是:
没有准备好使用可以处理高维空间的DB或Index。像https://github.com/spotify/annoy这样的工具,但它们只能处理尺寸< 1000
理论上,使用分区等技巧可以处理高维空间,但它具有特定的案例,没有通用解决方案。
更好的方法是使用PCA将维度降低到<1000,然后就可以使用https://github.com/spotify/annoy等工具