Searnitysearch.jl - это библиотека для поиска ближайшего соседа. В частности, он содержит реализацию для SearchGraph, быстрый и гибкий индекс поиска с использованием любой метрической функции. Он предназначен для поддержки многопоточного чтения в большинстве своих функций и структур.
Пакет содержит следующие индексы:
ParallelExhaustiveSearch : индекс поиска грубого силы, где каждый запрос решается с использованием всех доступных потоков.ExhaustiveSearch : индекс поиска грубого силы, каждый запрос решается с использованием одного потока.SearchGraph : приблизительный индекс поиска с параллельной конструкцией.Основным набором функций является:
search : решает один запрос.searchbatch : решает набор запросов.allknn : вычисляет neardup : удаляет около дублирования из метрического набора данных.closestpair : вычисляет самую близкую пару в метрическом наборе данных.Точные определения этих функций и полного набора функций и структур можно найти в документации.
В настоящее время существует несколько пакетов, посвященных поиску ближайшего соседа, JuliaNeighbors , у нас есть NearestNeighbors.jl RegionTrees.jl . Эти структуры работают довольно хорошо для данных о низких размерных, поскольку они предназначены для решения вопросов точного сходства.
Существует несколько пакетов, выполняющих приблизительный поиск сходства, такие как Rayuela.jl , используя схемы квантования продукта, обертка для библиотеки FAISS Faiss.jl . Библиотека FAISS обеспечивает высокопроизводительные реализации схем квантования продуктов и схемы хеширования, чувствительных к местности, наряду с промышленной промышленной реализацией индекса HNSW . NearestNeighborDescent.jl реализует алгоритм поиска за pynndescent .
Пакет SimilaritySearch.jl пытается обогатить экосистему структурами поиска и алгоритмами, предназначенными для использования преимуществ систем многопоточного чтения и уникальной функции автоматического обработки, которая упрощает его использование для практикующих. Эти функции кратко и эффективно реализованы из -за динамизма и производительности языка программирования Юлии. Что касается характеристик производительности, время конструкции значительно сокращается по сравнению с аналогичными подходами без снижения производительности поиска или качества результатов.
Вы можете установить пакет следующим образом
] add SimilaritySearch . jlКроме того, вы можете запустить набор тестов следующим образом
] test SimilaritySearchПожалуйста, смотрите примеры. Вы найдете список ноутбуков Jupyter и Pluto, а также некоторые сценарии, которые иллюстрируют его использование.
Взносы приветствуются. Пожалуйста, заполните запрос на привлечение документов и взносов внедрения. Для проблем, пожалуйста, заполните проблему необходимой информацией (см. Ниже.) Если у вас уже есть решение, также предоставьте запрос на вытяжение.
Сообщите о вопросах в пакете, предоставляя минимальный воспроизводимый пример. Если проблема зависит от данных, пожалуйста, не забудьте предоставить необходимые данные для их воспроизведения.
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}
}
Этот пакет также описан в бумаге Joss:
Эрик С. Теллез и Гильермо Руис.
SimilaritySearch.jl: Автоативные индексы ближайшего соседа для Джулии . Журнал программного обеспечения с открытым исходным кодом https://doi.org/10.21105/joss.04442.
Алгоритмы этой версии такие же, как v0.8, но сломайте совместимость с API:
Polyester пакет для обработки многопоточного чтения вместо потоков.@Потокиallknn теперь сохраняет самооценки для упрощения алгоритмов и повышения эффективности ( allknn в v0.8 автоматически удаляет самооценки самооценки)Другие:
SearchGraphtimedsearchbatch Это позволяет легко регулировать структуру SearchGraph на разные рабочие нагрузки и приложения. Например,
Пожалуйста, обратитесь к https://github.com/sadit/similalitysearchdemos и https://github.com/sadit/similalsearch.jl/blob/main/test/testsearchgraph.jl для рабочих примеров.
Он вводит крупный рефакторинг. В частности, это делает явное использование контекстных объектов для большинства функций. Он также вводит простые процедуры регистрации. Тем не менее, мы сохраняем совместимость во многих публичных функциях, используя неявное использование объектов контекста по умолчанию.