Кто такие ANN?
Вот сетап из 2018 года, которая отлично иллюстрирует, зачем нам нужны методы ускорения поиска похожих объектов, в частности, ANN (Approximate Nearest Neighbor). Сейчас все их используют для RAG, но мою историю я прочувствовал лично.
На одном из хакатонов PicsArt мы с двумя товарищами придумали интересное приложение: а что, если делать фотки людей и подбирать к ним наиболее похожих знаменитостей? Идея казалась крутой — пользователей точно бы привлекла, а дальше можно придумать, как на этом заработать. На хакатонах нужно быстро тестировать идеи и привлекать внимание, поэтому за ночь мы написали простенький апп для iPhone и сервер, который извлекал фичи из фотографий пользователей, а затем в векторном пространстве искал ближайшую знаменитость из нишевого жанра кино. 🔍
Маленькая деталь: по каким-то причинам почти все мужчины оказывались похожи на Стивена Вулфа
К сожалению, на том хакатоне первое место занял, кажется, Noize, а третье досталось девченкам, которые запустили домашку какого-то ММПшника с гитхаба по баесовским методам для склеивания нескольких плохих фоток в одну хорошую. Мы ничего не получили и на наш проект забили, а через полгода появился Gradient: Celebrity Look Like от того же PicsArt, который стал очень популярным и подозрительно похожим на нашу идею. Так я понял, зачем на самом деле нужны продуктовые хакатоны.
Представим, что мы бы продолжили наш сервис развивать. Пока у нас был датасет из 1000 знаменитостей, можно было справляться с поиском в лоб. Мы просто брали эмбеддинги размером в 512, меряли dot_distance каждый с каждым, и готово. Но дела сильно усложняются, если у нас миллион пользователей. А если хочется находить по-настоящему похожие фото, то может понадобиться и 100 миллионов изображений.
И вот тогда нужны ANN. Зачем сравниваться для запроса со всеми, если можно построить умную структуру данных и делать гораздо меньше сравнений? Примерно как в поиске по бинарному дереву, только сложнее и с учётом специфики задачи. ANN позволяет находить "почти ближайших соседей" за гораздо меньшее время, чем прямой перебор, что становится критически важным, когда база для поиска стремительно пухнет.
Если юзкейс кажется не очень, то представьте что мы на маркетплейсе все платья прогнали через Clip и хотим искать по текстовому запросу 'Красное платье' , даже если в описание указано, что платье 'Алое'.
В следующем посте расскажу, как я бенчмаркал Qdrant для поиска по картиночкам в разных режимах и разными моделями.
Вот сетап из 2018 года, которая отлично иллюстрирует, зачем нам нужны методы ускорения поиска похожих объектов, в частности, ANN (Approximate Nearest Neighbor). Сейчас все их используют для RAG, но мою историю я прочувствовал лично.
На одном из хакатонов PicsArt мы с двумя товарищами придумали интересное приложение: а что, если делать фотки людей и подбирать к ним наиболее похожих знаменитостей? Идея казалась крутой — пользователей точно бы привлекла, а дальше можно придумать, как на этом заработать. На хакатонах нужно быстро тестировать идеи и привлекать внимание, поэтому за ночь мы написали простенький апп для iPhone и сервер, который извлекал фичи из фотографий пользователей, а затем в векторном пространстве искал ближайшую знаменитость из нишевого жанра кино. 🔍
Маленькая деталь: по каким-то причинам почти все мужчины оказывались похожи на Стивена Вулфа
К сожалению, на том хакатоне первое место занял, кажется, Noize, а третье досталось девченкам, которые запустили домашку какого-то ММПшника с гитхаба по баесовским методам для склеивания нескольких плохих фоток в одну хорошую. Мы ничего не получили и на наш проект забили, а через полгода появился Gradient: Celebrity Look Like от того же PicsArt, который стал очень популярным и подозрительно похожим на нашу идею. Так я понял, зачем на самом деле нужны продуктовые хакатоны.
Представим, что мы бы продолжили наш сервис развивать. Пока у нас был датасет из 1000 знаменитостей, можно было справляться с поиском в лоб. Мы просто брали эмбеддинги размером в 512, меряли dot_distance каждый с каждым, и готово. Но дела сильно усложняются, если у нас миллион пользователей. А если хочется находить по-настоящему похожие фото, то может понадобиться и 100 миллионов изображений.
И вот тогда нужны ANN. Зачем сравниваться для запроса со всеми, если можно построить умную структуру данных и делать гораздо меньше сравнений? Примерно как в поиске по бинарному дереву, только сложнее и с учётом специфики задачи. ANN позволяет находить "почти ближайших соседей" за гораздо меньшее время, чем прямой перебор, что становится критически важным, когда база для поиска стремительно пухнет.
Если юзкейс кажется не очень, то представьте что мы на маркетплейсе все платья прогнали через Clip и хотим искать по текстовому запросу 'Красное платье' , даже если в описание указано, что платье 'Алое'.
В следующем посте расскажу, как я бенчмаркал Qdrant для поиска по картиночкам в разных режимах и разными моделями.