Как стать автором
Обновить

Команда Spotify Engineering представила Voyager — библиотеку для поиска ближайших соседей

Время на прочтение2 мин
Количество просмотров1.8K

Разработчики Spotify представили библиотеку Voyager, предназначенную для решения задачи поиска ближайших соседей. Новое решение постепенно будет внедряться в сервисы компании. Кроме этого, Voyager придёт на смену Annoy — прошлому решению от Spotify.

Долгое время стриминговый сервис использовал библиотеку Annoy для решения задачи поиска ближайших соседей. На её базе работала система рекомендаций, поиска и генератор плейлистов на основе предпочтений пользователя. В компании отмечают, что эффективнее использовать похожие библиотеки, чем запускать дорогостоящие по памяти и медленные алгоритмы машинного обучения.

Код Annoy открыли в 2013 году, а на её базе реализовали многие функции в Spotify. За последние десять лет многое изменилось в области поиска данных. Появились решения, которые дают более точные результаты за половину времени поиска с помощью Annoy. Некоторые новые сервисы управления базами данных поставляются с уже встроенными функциями поиска ближайших соседей, а в традиционные решения добавляют продвинутые алгоритмы поиска. К примеру, в PostgreSQL появился векторный поиск pgvevctor.

Начиная с 2018 года некоторые команды разработчиков Spotify начали экспериментировать с открытыми библиотеками, которые могли бы стать заменой Annoy. Разработчики обратили внимание на hnswlib. С её помощью удалось получить десятикратный прирост производительности, но не было поддержки специфических функций, важных для Spotify. Команда приняла решение не коммитить функции, нужные только им, в общий репозиторий и занялась разработкой форка под названием Voyager.

Сейчас Voyager уже готов к использованию в продакшене. Особенности и функции Voyager включают в себя:

  • десятикратный прирост производительности по сравнению с Annoy;

  • сокращение использования памяти в 4 раза;

  • полностью многопоточное создание индексов и запросов;

  • отказоустойчивые индексы файлов с системой обнаружения повреждений;

  • потоковый ввод/вывод, совместимый с Google Cloud Platform;

  • используется в 16 раз меньше памяти во время создания индекса, чем в случае с оригинальной версией hnswlib;

  • полная поддержка Python и Java с одинаковыми интерфейсами;

  • версия для Java устанавливается без сторонних зависимостей, а для Python нужен только NumPy;

  • поддержка Windows, Linux и macOS на процессорах x86 и arm64.

Код библиотеки открыт и доступен на GitHub. Документацию для Python и Linux опубликовали на специальном веб-сайте.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 6: ↑6 и ↓0+6
Комментарии0

Другие новости

Истории

Работа

Java разработчик
339 вакансий
Python разработчик
140 вакансий
Data Scientist
84 вакансии

Ближайшие события