Рекомендательная система на основе HNSW и экспоненциальных скользящих средних

Введение Я читал оригинальную статью о “Hierarchical Navigable Small Worlds (HNSW)” https://arxiv.org/abs/1603.09320, которая оказалась гораздо легче для понимания, чем все те видео на YouTube, которые я пытался посмотреть, и статьи, которые читал. HNSW — это вероятностная структура данных для поиска соседей в многомерном пространстве. Одно из практических применений HNSW — это поиск семантически близких объектов. Прочтение этой статьи и некоторые другие активности заставили меня задуматься, смогу ли я быстро реализовать рекомендательную систему, которая объединяет три вещи: HNSW, скользящие средние и случайность. ...

11 октября 2024 г. · 7 минут · Anton Golubtsov

Скользящие средние

Меня заинтересовало использование усреднённых векторных эмбеддингов для целей рекомендаций, и затем я задумался, а не попробовать ли вместо усреднения использовать другие метрики, такие как медиана или верхние процентили, чтобы сфокусироваться на более частых сценариях и уменьшить влияние выбросов. А затем возник вопрос: если представить, что вы хотите использовать это в продакшене, как можно вычислить усреднённые эмбеддинги для миллионов пользователей с мгновенными обновлениями и без пакетной обработки данных оффлайн? Поэтому я написал несколько тестов для следующих случаев: ...

9 октября 2024 г. · 3 минуты · Anton Golubtsov

Хаотично-добрый

Несколько дней назад менеджер из соседней команды спросил меня, почему в разделе «Чем я занимаюсь» моего рабочего профиля указано «Chaotic Good» (Хаотично-добрый). Этот вопрос не выходит у меня из головы, поэтому нужно записать свои мысли, чтобы освободиться. Если коротко, это просто глупый мем из нескольких лет назад, который я решил использовать как рабочий девиз вместо «глупости и смелости», поскольку почувствовал, что новый лучше отражает ту работу, которую я выполнял в то время. ...

7 октября 2024 г. · 3 минуты · Anton Golubtsov

Классическая Заправка для Салата

Ингредиенты У меня нет понятия, сколько именно ингредиентов вам понадобится, все измерения приблизительны. Бальзамический уксус или любая кислая субстанция. Попробуйте сок лайма — у него приятный аромат. 1–2 ст. ложки. Наверное. Оливковое масло или любое другое масло, попробуйте арахисовое. 3–6 ст. ложек. Кто знает, сколько точно. Горчица. Это стабилизатор, чтобы сохранить эмульсию. Немного. Соль. Щепотка? Перец. Немного. Процесс Смешайте все ингредиенты и перемешивайте минуту, пока не образуется эмульсия. ...

3 октября 2024 г. · 1 минута · Anton Golubtsov

Алгоритмы шардинга (разделения) данных

Я раньше работал рядом с невероятно умными людьми, которые ежедневно занимались такими вещами, как шардинг данных. У них я многому научился по этой теме. Позже я перешёл на другую роль, где эти знания не требовались, и со временем они забылись. Здесь я пытаюсь восстановить для себя эти давно забытые знания. Введение Шардинг — это процесс назначения элемента конкретному шарду (разделу) — меньшему фрагменту данных из большой базы данных или другого сервиса. Основная идея заключается в том, что мы можем распределить данные или сервис по нескольким местоположениям, обрабатывать большие объёмы данных, справляться с большим количеством запросов, а с репликацией мы можем масштабироваться ещё больше и повысить отказоустойчивость системы. Однако нам нужно иметь чёткие правила, как назначать разделы (шарды), чтобы корректно перенаправлять запросы в нужное место. ...

30 сентября 2024 г. · 5 минут · Anton Golubtsov

Вопрос на собеседовании: библиотека парсинга логов

Один из вопросов, которые я часто задаю на собеседованиях, - это разработка библиотеки обработки логов: Вам нужно написать библиотеку для обработки логов в следующем формате: метка_времени<TAB>сообщение Библиотека будет передана другой команде для дальнейшей поддержки и улучшений, поэтому поддерживаемость и расширяемость являются самыми важными требованиями. Библиотека должна поддерживать следующие операции “из коробки”: фильтрация подсчет гистограммы Первоначальная версия также включала некоторые языковые и фоновые особенности, которые я никогда не включаю в свою оценку, потому что считаю, что они ставят кандидата в положение, когда ему нужно угадать мои ожидания. ...

29 сентября 2024 г. · 4 минуты · Anton Golubtsov

Вопрос на собеседовании: Оптимизация затрат на чтение с диска

Один из вопросов, который я действительно люблю задавать во время кодовых собеседований, звучит так: Дан непрерывный поток слов, словарь на диске и стоимость чтения с диска, создайте потоковый процессор, который возвращает true, когда слово существует в словаре, при этом минимизируя затраты на чтение с диска. Пример: Словарь: {Собака, Кошка, Птица, Лев, ...} Входные данные: [Собака, Кошка, Агхд, ...] Выходные данные: [True, True, False, ...] Выходные данные true, true, false, потому что “собака” и “кошка” существуют в словаре слов, а “Агхд” не считается словом. ...

24 сентября 2024 г. · 3 минуты · Anton Golubtsov

Написание пользовательских историй и требований

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

18 сентября 2024 г. · 4 минуты · Anton Golubtsov

Высокотехнологичные Энергетические (Внимание) Вампиры

Интересно наблюдать, как любое начинание, где внимание является одним из ключевых метрик или драйверов, независимо от размера компании, оказывается в том же самом “адовом котле” жажды внимания и оптимизации под него. Даже небольшие одноавторские блоги, которые учат нас быть лучшей версией себя, инженером или чем-то ещё, подвержены этому. Многие из них, которыми я пользовался, со временем стали для меня “энергетическими вампирами”, постоянно требующими моего внимания. “Энергетический вампир” — это человек, после общения с которым вы чувствуете себя опустошённым как эмоционально, так и умственно. Это не клинический термин, а скорее разговорный ярлык, который описывает тип личности, истощающей вашу энергию. И это не так уж загадочно, как может показаться. ...

15 сентября 2024 г. · 2 минуты · Anton Golubtsov

Политики вытеснения кэша: LRU vs Random vs p2c

Каждое интервью я провожу для старших инженеров-программистов в Amazon. В этих интервью я задаю более-менее одни и те же вопросы. Один из них предполагает добавление логики кэширования для улучшения результатов. Я заметил, что кандидаты часто совершают две ошибки, которые мешают им выделиться как профессионалам: Они не знают или не обсуждают условия, при которых кэш работает наилучшим образом. В частности, как распределение частоты запросов влияет на производительность кэша. Они не знают стандартную библиотеку выбранного ими языка программирования. В этой статье мы попытаемся разобраться с этими проблемами. ...

15 сентября 2024 г. · 7 минут · Anton Golubtsov