История реализации векторного поиска на go GolangConf: Стандартная библиотека

Программный комитет ещё не принял решения по этому докладу
Максим Данильченко
Lamoda

Второй год работаю в Lamoda руководителем одной из команд разработки в дирекции RND. В разработке шестой год. Пишу на go и на python. Закончил факультет прикладной математики и информатики в НИУ ВШЭ.

Тезисы

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

- Изначально думали использовать поиск по хэш индексу (lsh), но в итоге остановились на обычном переборе. Расскажу, почему, казалось бы, неэффективное решение может быть самым подходящим для решения задачи.

- После того как мы остановились на переборе надо было придумать, как искать топ N элементов. Расскажу, как выбирали подходящую структуру данных и как работать с бенчмарками в go.

- Когда микрооптимизации бывают реально полезны. Поговорим про инлайнинг функций в go. В нашем кейсе он был полезен, так как при поиске перебором одни и те же участки кода исполняются очень много раз. Даже небольшое ускорение такого участка может сильно повлиять на итоговую скорость.

Другие доклады секции GolangConf: Стандартная библиотека