Разработчиците на Spotify представиха библиотеката Voyager, предназначена да реши проблема с намирането на най-близките съседи. Новото решение постепенно ще бъде внедрено в услугите на компанията. В допълнение, Voyager ще замени Annoy — предишното решение от Spotify.
Дълго време стрийминг-услугата използваше библиотеката Annoy, за да реши проблема с намирането на най-близките съседи. Той се основава на система от препоръки, търсене и генератор на плейлисти въз основа на потребителските предпочитания. Компанията отбелязва, че е по-ефективно да се използват подобни библиотеки, отколкото да се изпълняват изискващите много памет алгоритми за машинно обучение.
Кодът на Annoy беше отворен през 2013 г. и много базирани на него функции бяха внедрени в Spotify. Много неща се промениха в областта на откриването на данните през последните десет години. Появиха се решения, които предоставят по-точни резултати за половината от времето за търсене с помощта на Annoy. Някои нови услуги за управление на бази данни идват с вече вградени възможности за търсене на най-близките съседи и добавят към традиционните решения разширени алгоритми за търсене. Например, pgvevctor за векторно търсене се появи в PostgreSQL.
От 2018 г. някои екипи за разработка на Spotify започнаха да експериментират с библиотеки с отворен код, които биха могли да заменят Annoy. Разработчиците обърнаха внимание на hnswlib. С негова помощ успяха да получат десетократно увеличение на производителността, но е липсвала поддръжка на специфични функции, които са важни за Spotify. Екипът е решил да не се ангажира с функции, от които само той се нуждае и така е започнала разработката на Voyager.
Voyager вече е готов за използване. Характеристиките и функциите му включват:
- десетократно увеличение на производителността в сравнение с Annoy;
- спад в употребата на паметта с 4 пъти;
- напълно многонишков индекс и създаване на заявки;
- устойчиви на грешки файлови индекси със система за откриване на повреди;
- I/O стрийминг, съвместим с Google Cloud Platform;
- 16 пъти по-малко памет се използва по време на създаване на индекс, отколкото с оригиналната версия на hnswlib;
- пълна поддръжка на Python и Java със същите интерфейси;
- версията за Java се инсталира без зависимости от трети страни, а за Python е необходим само NumPy;
- поддръжка на Windows, Linux и macOS на x86 и arm64 процесорите.
Кодът на библиотеката е отворен и достъпен в GitHub. Документацията за Python и Linux беше публикувана на специален уеб-сайт.
Източник: Kaldata
Leave a Reply