Конференция завершена. Ждем вас на GolangConf в следующий раз!

История реализации векторного поиска на Go

GolangConf: Hardcore

Доклад отозван

Мнение Программного комитета о докладе

Принято считать, что применение известных алгоритмов всегда ведет к наиболее оптимальной реализации. А всегда ли? В докладе обсудим, как простые решения иногда могут привести к лучшим результатам.

Целевая аудитория

Все, кто разрабатывает на Go.

Тезисы

Для того чтобы пользователи Lamoda могли получать рекомендации похожих товаров на основе тех, что они выбирают/покупают, мы запустили проект под названием Лакинатор. Как Акинатор, но только для одежды. Для таких рекомендаций необходимо в онлайне уметь искать схожие друг с другом товары в определенных категориях. Поиск идет по подсчитанным векторам.

* Изначально думали использовать поиск по хэш-индексу (lsh), но в итоге остановились на обычном переборе. Расскажу, почему, казалось бы, неэффективное решение может быть самым подходящим для решения задачи.
* После того, как мы остановились на переборе, надо было придумать, как искать топ-N элементов. Расскажу, как выбирали подходящую структуру данных и как работать с бенчмарками в Go.
* Когда микрооптимизации бывают реально полезны. Поговорим про инлайнинг функций в Go. В нашем кейсе он был полезен, так как при поиске перебором одни и те же участки кода исполняются очень много раз. Даже небольшое ускорение такого участка может сильно повлиять на итоговую скорость.

Второй год работает в Lamoda руководителем одной из команд разработки в дирекции R&D. В разработке шестой год. Пишет на Go и на Python. Закончил факультет прикладной математики и информатики в НИУ ВШЭ.

Lamoda

Lamoda — интернет-магазин и технически сложный высоконагруженный проект. Один из самых крупных e-commerce-проектов в СНГ. Через сайты и мобильные приложения предоставляют услуги более 200 миллионам покупателей на территории России, Казахстана, Белоруссии и Украины. В каталоге более 4 миллионов товаров 3000 международных и локальных брендов.

Видео