Про собесы
Я тут собесы проходил весь последний месяц. Получил много нового опыта. Например, впервые проходил секции по ML-design. Они мне показались самыми интересными среди всех секций, которые у меня были по ML.
Как готовился:
- Почитал гайды
- Посмотрел видосы про интервью в Facebook и Google
- Посмотрел видосы про ML-design с Бабушкиным
- Выписал десяток разных кейсов и накидал по каждому из них ML-design
Забавно, что в видосах выше, при обсуждении результатов, интервьюеры жалуются, что кандидаты никак не используют доску при структурировании своих мыслей. Я вообще не понимаю как без неё можно обойтись. Для себя решил, что буду структурировать свои мысли по следующей схеме:
- Что хотим?
- KPI и ограничения
- Бэйзлайн
- Формализация задачи
- Данные
- Модель
- Метрики
- Потенциальные проблемы
- Деплой
Выписывал схему в файлике, который мне интервьюер шарил для конспекта. Если интервьюер не шарил файл, просил создать его или демонстрировал экран с открытым блокнотом.
Дальше начинал накидывать на эту схему свои мысли. Шёл сверху вниз, иногда отскакивал назад либо забегал вперёд. Все мысли постоянно были перед глазами. Тезисно фиксировал их в соотвествующих разделах. Получалось примерно следующее:
🤔 Что хотим? Описывал как я понял задачу и хотелки заказчика. Уточнял у интервьюера так ли это.
🤔 KPI и ограничения. Прикидывал, есть ли требование держать высокую нагрузку, нужен ли реалтайм, какие метрики хотим вырастить, а какие нельзя ронять (про такие метрики часто забывают).
🤔 Бейзлайн. Перед тем, как строить звездолет, надо понять а надо ли вообще его строить. Собираем бейзлайн на эвристиках и смотрим есть ли какой-то профит в АБ. В этой части я описывал такой бейзлайн.
🤔 Формализация задачи. Любая задача допускает разные формализации. К тому же ранжированию можно подходить с трёх сторон: pointwise/pairwise/listwise. Я описывал разные способы, выбирал какой-то один, обосновывал выбор и останавливался на нём. Рассказывал как буду варить таргет. Если по логам, прикидывал формулу для этого. Если с помощью разметки, описывал как она будет устроена, обязательно упоминал про active learning. Это модно.
🤔 Данные. Рассказывал про то, откуда буду брать фичи. Какие буду считать по юзеру, какие по айтемам, какие по контексту (время суток,локация и тп). Рассказывал про нейросетевые фичи и матричные факторизации, если они к месту. Важно проговорить как дробим выборку на train/val/test. По юзерам/айтемам/времени, почему именно так.
🤔 Модель. Скорее всего, итоговая система будет состоять из нескольких частей. Что-то в стиле: отбор кандидатов —> тяжёлая формула—> реранкеры. Проговаривал как будет работать каждая часть, на какую функцию потерь будем учиться. Как оцениваем качество разных частей и системы целиком.
🤔 Метрики. Проговаривал как будем делать приёмку. Если возможно провести АБ, то его схему и метрики для приемки.
🤔 Проблемы. В этот раздел я закидывал проблемы, о которых надо будет обязательно подумать. Лики в данных, feedback loop, низкое покрытие базы, холодный старт, что делать с новыми айтемами, дрифт в данных и тп
🤔 Деплой. Как считаем фичи. Какими пачками. Как передаём их в модель. Вместе с запросом или из какого-то key-value хранилища. Какая примерно будет нагрузка на сервис. Сколько машин просить у разработки. Жизненный цикл модели. Когда она умирает, какими метриками и мониторингами покрыть. Когда обновлять.
Когда готовился, расписал это для десятка кейсов. Первые три взял из видосов Бабушкина, остальные из личного опыта либо других источников
- Персонализация рекламы в социальной сетке
- Прайминг в маркетплейсе
- Мэтчинг товаров в маркетплейсе
- Рекомендательная система с видосами либо товарами
- Антифрод-система для поиска роботов и накруток в инстаграме
- Как в комментариях найти спам
- Поисковая система по товарам/документам
- Выдача саджестов в поисковой системе
- Предсказание точки, куда поедет человек при вызове такси
- Предсказание времени доставки заказа из ресторана
Я тут собесы проходил весь последний месяц. Получил много нового опыта. Например, впервые проходил секции по ML-design. Они мне показались самыми интересными среди всех секций, которые у меня были по ML.
Как готовился:
- Почитал гайды
- Посмотрел видосы про интервью в Facebook и Google
- Посмотрел видосы про ML-design с Бабушкиным
- Выписал десяток разных кейсов и накидал по каждому из них ML-design
Забавно, что в видосах выше, при обсуждении результатов, интервьюеры жалуются, что кандидаты никак не используют доску при структурировании своих мыслей. Я вообще не понимаю как без неё можно обойтись. Для себя решил, что буду структурировать свои мысли по следующей схеме:
- Что хотим?
- KPI и ограничения
- Бэйзлайн
- Формализация задачи
- Данные
- Модель
- Метрики
- Потенциальные проблемы
- Деплой
Выписывал схему в файлике, который мне интервьюер шарил для конспекта. Если интервьюер не шарил файл, просил создать его или демонстрировал экран с открытым блокнотом.
Дальше начинал накидывать на эту схему свои мысли. Шёл сверху вниз, иногда отскакивал назад либо забегал вперёд. Все мысли постоянно были перед глазами. Тезисно фиксировал их в соотвествующих разделах. Получалось примерно следующее:
🤔 Что хотим? Описывал как я понял задачу и хотелки заказчика. Уточнял у интервьюера так ли это.
🤔 KPI и ограничения. Прикидывал, есть ли требование держать высокую нагрузку, нужен ли реалтайм, какие метрики хотим вырастить, а какие нельзя ронять (про такие метрики часто забывают).
🤔 Бейзлайн. Перед тем, как строить звездолет, надо понять а надо ли вообще его строить. Собираем бейзлайн на эвристиках и смотрим есть ли какой-то профит в АБ. В этой части я описывал такой бейзлайн.
🤔 Формализация задачи. Любая задача допускает разные формализации. К тому же ранжированию можно подходить с трёх сторон: pointwise/pairwise/listwise. Я описывал разные способы, выбирал какой-то один, обосновывал выбор и останавливался на нём. Рассказывал как буду варить таргет. Если по логам, прикидывал формулу для этого. Если с помощью разметки, описывал как она будет устроена, обязательно упоминал про active learning. Это модно.
🤔 Данные. Рассказывал про то, откуда буду брать фичи. Какие буду считать по юзеру, какие по айтемам, какие по контексту (время суток,локация и тп). Рассказывал про нейросетевые фичи и матричные факторизации, если они к месту. Важно проговорить как дробим выборку на train/val/test. По юзерам/айтемам/времени, почему именно так.
🤔 Модель. Скорее всего, итоговая система будет состоять из нескольких частей. Что-то в стиле: отбор кандидатов —> тяжёлая формула—> реранкеры. Проговаривал как будет работать каждая часть, на какую функцию потерь будем учиться. Как оцениваем качество разных частей и системы целиком.
🤔 Метрики. Проговаривал как будем делать приёмку. Если возможно провести АБ, то его схему и метрики для приемки.
🤔 Проблемы. В этот раздел я закидывал проблемы, о которых надо будет обязательно подумать. Лики в данных, feedback loop, низкое покрытие базы, холодный старт, что делать с новыми айтемами, дрифт в данных и тп
🤔 Деплой. Как считаем фичи. Какими пачками. Как передаём их в модель. Вместе с запросом или из какого-то key-value хранилища. Какая примерно будет нагрузка на сервис. Сколько машин просить у разработки. Жизненный цикл модели. Когда она умирает, какими метриками и мониторингами покрыть. Когда обновлять.
Когда готовился, расписал это для десятка кейсов. Первые три взял из видосов Бабушкина, остальные из личного опыта либо других источников
- Персонализация рекламы в социальной сетке
- Прайминг в маркетплейсе
- Мэтчинг товаров в маркетплейсе
- Рекомендательная система с видосами либо товарами
- Антифрод-система для поиска роботов и накруток в инстаграме
- Как в комментариях найти спам
- Поисковая система по товарам/документам
- Выдача саджестов в поисковой системе
- Предсказание точки, куда поедет человек при вызове такси
- Предсказание времени доставки заказа из ресторана