相似性Search.jl是最近邻居搜索的库。特别是,它包含SearchGraph,这是一个使用任何度量功能的快速且灵活的搜索索引。它旨在支持大多数功能和结构中的多线程。
该软件包提供以下索引:
ParallelExhaustiveSearch :一个蛮力搜索索引,使用所有可用线程求解每个查询。ExhaustiveSearch :蛮力搜索索引,使用单个线程求解每个查询。SearchGraph :带有并行结构的近似搜索索引。主要功能集是:
search :解决一个查询。searchbatch :解决一组查询。allknn :计算neardup :从公制数据集中删除附近的底盘。closestpair :计算公制数据集中最接近的对。这些功能的确切定义以及完整的功能和结构集可以在文档中找到。
目前,有几个专门用于JuliaNeighbors邻居搜索的软件包RegionTrees.jl例如,我们有NearestNeighbors.jl骨。这些结构在低维数据中非常有效,因为它们旨在解决精确的相似性查询。
有几个软件包执行近似相似性搜索,例如使用产品量化方案( FAISS Library Faiss.jl的包装器)进行近似相似Rayuela.jl搜索。 FAISS库提供了产品量化方案和对区域敏感的哈希计划的高性能实现,以及HNSW索引的工业强度实现。 NearestNeighborDescent.jl NeighBordescent.jl实现了pynndescent背后的搜索算法。
SimilaritySearch.jl软件包试图通过搜索结构和算法来丰富生态系统,旨在利用多线程系统和独特的自动调整功能,从而简化了其用于从业者的用法。由于朱莉娅编程语言动态和性能,这些功能可简洁有效地实现。关于性能特征,与类似方法相比,施工时间大大减少了,而不降低搜索性能或结果质量。
您可以按照以下方式安装包裹
] add SimilaritySearch . jl另外,您可以按以下方式运行一组测试
] test SimilaritySearch请参阅示例。您会找到jupyter和冥王星笔记本的列表,以及一些例证其用法的脚本。
欢迎捐款。请填写记录和实施供款的拉请请求。有关问题,请填写必要信息的问题(请参阅下文。)如果您已经有了解决方案,请还提供拉动请求。
在包装中报告问题,提供了最小的可重复示例。如果问题取决于数据,请不要忘记提供必要的数据来复制它。
SearchGraph的局限性主要的搜索结构, SearchGraph,是一个具有多个特征的图,其中许多是由索引的数据集引起的。它的一些已知局限性与这些特征有关。例如:
以下手稿描述和基准测试了SearchGraph图索引(软件包版本0.6 ):
@article{tellezscalable,
title={A scalable solution to the nearest neighbor search problem through local-search methods on neighbor graphs},
author={Tellez, Eric S and Ruiz, Guillermo and Chavez, Edgar and Graff, Mario},
journal={Pattern Analysis and Applications},
pages={1--15},
publisher={Springer}
}
当前的算法( 0.8和0.9版)在以下手稿中描述和基准测试:
@misc{tellez2022similarity,
title={Similarity search on neighbor's graphs with automatic Pareto optimal performance and minimum expected quality setups based on hyperparameter optimization},
author={Eric S. Tellez and Guillermo Ruiz},
year={2022},
eprint={2201.07917},
archivePrefix={arXiv},
primaryClass={cs.IR}
}
乔斯纸上还描述了此包装:
Eric S. Tellez和Guillermo Ruiz。
SimilaritySearch.jl:朱莉娅的自动传动最近的邻居索引。开源软件杂志https://doi.org/10.21105/joss.04442。
此版本的算法与v0.8相同,但破坏API兼容性:
Polyester包来处理多线程而不是线程。@threadsallknn保留自我参考以简化算法并提高效率(v0.8中的allknn自动消除自我参考)其他的:
SearchGraph图图修剪方法timedsearchbatch函数它可以轻松地将SearchGraph结构调整为不同的工作负载和应用程序。例如,
请参阅https://github.com/sadit/simurilitysearchdemos和https://github.com/sadit/similaritysearch.jl/blob/main/main/main/test/testsearchgraph.jl,以获取工作示例。
它引入了主要的重构。特别是,它可以明确使用上下文对象来用于大多数函数。它还引入了简单的记录程序。但是,我们使用默认上下文对象的隐式使用在许多公共功能中保留兼容性。