深度学习和机器学习经常涉及到对比向量相似度的问题,特别的查询新向量与库中哪个向量最近,对于少数量的而言,可以遍历 依次对比,数量太多,速度就成一个问题。一般有基于树的方法、哈希方法、矢量量化方法。
基于哈希的方法,对于小数据集和中型规模的数据集(几个million-几十个million),开源框架 FALCONN和 NMSLIB 是一个非常不错的选择,如果对于大型规模数据集(几百个million以上),基于矢量量化的 Faiss 是一个明智的选择
适合我这里主要使用 FALCONN,因为使用确实方便简单 ,其GitHub上对此算法有详细的介绍,这里先不涉及。
做一个简单测试,代码如下:
# -*- coding:utf-8 -*-
import falconn
import numpy as np
# 维度
params_hp = falconn.get_default_parameters(2, 2)
print params_hp
# params_hp = falconn.LSHConstructionParameters()
# params_hp.dimension = 512
# seed = 1
# params_hp.lsh_family = 'hyperplane'
# params_hp.distance_function = 'negative_inner_product'
# params_