mongdb ngt
深度学习中使用近似最近邻( ANN )搜索,以在给定集合中与另一点最相似的点进行最佳猜测。 本文介绍了ANN搜索与传统搜索方法之间的区别,并介绍了NGT ,这是Yahoo!开发的性能最高的开源ANN库。 日本研究 。
最近邻居搜索高维数据
此外,向量不仅代表源数据的文本和图像特征,而且还代表产品,人类,组织等。 因此,您可以搜索相似的文档和图像,以及具有相似属性的产品,具有相似技能的人,具有相似特征的服装等。 例如, Yahoo! 日本使用NGT提供了基于相似度的时尚商品搜索。
由于深度学习模型中的维数趋于增加,因此当搜索超过数百万个高维向量时,ANN搜索方法必不可少。 ANN搜索方法使您可以在高维空间中搜索指定查询向量的邻居。
有很多近邻搜索方法可供选择。 ANN Benchmarks评估了最著名的ANN搜索方法,包括Faiss(Facebook),Flann和Hnswlib。 根据此基准,NGT达到了顶级性能。
NGT算法
NGT索引结合了图形和树。 该结果具有非常好的搜索性能,其中图形的顶点表示可搜索的对象。 相邻的顶点通过边连接。
该动画显示了如何构造图。
在搜索过程中,可以找到指定查询的相邻顶点从图形下降。 密集连接的顶点使用户可以有效地浏览图形。
NGT提供了命令行工具,以及C,C ++和Python API。 本文重点介绍命令行工具和Python API。
在命令行工具中使用NGT
Linux安装
将NGT的最新版本下载为ZIP文件,并通过以下方式将其安装在Linux上:
unzip NGT-x.x.x.zip
cd NGT-x.x.x
mkdir build
cd build
cmake ..
make
make
install
由于NGT库默认情况下安装在/ usr / local / lib(64)中 ,因此将目录添加到搜索路径:
export
PATH =
" $PATH :/opt/local/bin"
export
LD_LIBRARY_PATH =
" $LD_LIBRARY_PATH :/usr/local/lib"
样本数据集生成
在搜索大规模数据集之前,必须生成NGT数据集。 例如,从fastText网站 下载 fastText