TGViewer
Knowledge Accumulator Knowledge Accumulator @knowledge_accumulator · 5.68K subscribers
Post #196 2.56K
50 оттенков дебага рекомендательной системы

В честь взаимного пиара RecSys-каналов я вспомнил, что у меня тоже есть, о чём рассказать. Расскажу поучительную историю из совсем недавнего опыта.

Я работаю над созданием мощной модели над пользователем. Потенциально она получает всю информацию, которую мы о нём знаем - все залогированные действия, и выдаёт юзер-вектор, который можно использовать в разных рекомендательных сценариях. В случае социальной сети на вход идут лайки, комментарии, клики и т.д. У этого есть 2 проблемы:

1) Когда мы обучаем такую модель, нам нужно иметь актуальный список событий на момент времени каждого сэмпла. То есть, если мы пытаемся учить модель на то, лайкнул ли юзер данный пост 1 июля, на вход модели не должны подаваться действия за 2-е июля.

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

Представьте ситуацию - вы сделали такой пайплайн, обучили модель и ваш первый результат - модель даёт адекватный профит. Но как понять, что всё работает, как нужно?

Нужно сконструировать проверку, которая даст сигнал о наличии бага в основном пайплайне. Например, в уже построенном датасете за 1-е июля нужно заглядывать в построенный список событий и проверять, что там точно нет событий за 2-е июля.

У каждой проверки есть "полнота" - на какую "долю" багов такая проверка среагирует. Есть и другой параметр - "специфичность" - насколько точно проверка укажет на причину бага. При создании проверок вы балансируете между полнотой, специфичностью и сложностью написания.

Я считаю, что нужно делать хотя бы одну проверку с полнотой, близкой к 100%. Именно она позволила мне обнаружить нетривиальный баг в коде:

Я обучал нейросеть предсказывать что-то на протяжении с 1 по 7 июня, а для построения входного списка событий использовал другую таблицу с данными до 4 июня. Это гарантировало на 100% отсутствие заглядывания в будущее для сэмплов за 5-7 июня. И действительно, на этих днях лосс взлетал вверх. Баг был, но никакого намёка на причину, специфичность проверки равна 0.

После пары дней депрессии и втыкания в код, я увидел в одном месте append вместо appendleft, что создавало одновременно и лик, и порчу данных. После починки, профит на 5-7 июня стал почти таким же, как на 1-4, так что, у сказки счастливый конец. Дебажьте внимательно, дорогие друзья.

@knowledge_accumulator
  • 👍 28
  • ❤ 4
  • 💯 1
More from @knowledge_accumulator
  1. Sep 20, 2026Почувствуйте AGI Все эти годы я писал о том, что не верю в потенциал LLM превратиться в су…
  2. Sep 5, 2026Предсказать среднее могут не только лишь все Классическая задача машинного обучения - трен…
  3. Aug 17, 2026Долина vs Нью-Йорк Если что-то находится далеко от нас, нам свойственно излишне обобщать с…
  4. Jul 30, 2026Кто виноват в сливе рекламного бюджета? При создании рекламного line item рекламодатель ус…
  5. Jul 13, 2026Покатался на яхте в Американской глубинке После переезда в Калифорнию произошло неожиданно…
  6. Jun 30, 2026Да кто такие эти ваши producer-side A/B-тесты? В своей яндексовской эре работы над рекомен…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →