找到最近的稀疏向量,使用什么样的索引或数据库?
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
这样的工具
我想检测相似的文本文档。
有一个函数将文本作为输入并生成矢量作为输出。
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
这样的工具