相似性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,以獲取工作示例。
它引入了主要的重構。特別是,它可以明確使用上下文對象來用於大多數函數。它還引入了簡單的記錄程序。但是,我們使用默認上下文對象的隱式使用在許多公共功能中保留兼容性。