ML- летопись проекта

Evgenii Nikitin

Вчера проводили брейнсторм по самому древнему проекту (маммография, сокращённо ММГ), с которого и начинался Цельс. За почти четыре года разработки проект оброс огромным количеством деталей, связанных как с архитектурой системы, так и с данными. От ванильного Faster-RCNN там не осталось живого места, появилась куча дополнительных шагов в пайплайне (определение качества снимка и плотности ткани, мета-модель по предсказанию общего риска для пациента и многое другое), а про разноцветье данных из самых разных источников я вообще молчу.

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

Документация на проекте, само собой, есть, она включает в том числе модел-карты и датасет-карты (подробнее о нашей документации можно посмотреть здесь). Проблема в том, что сложность и количество компонентов системы уже так велико, что даже талантливый джун несколько теряется и не знает, с чего начать изучение. Я обычно в таких ситуациях рекомендую начать решать конкретные задачки по проекту и рассеивать “туман войны” только по мере необходимости в рамках этих задач.

Как-то так

Тем не менее, понятно желание ребят понимать более глобальный контекст, а также назначение и принцип работы разных частей системы. Я подумал, что легче такое понимание обрести, если проследить историю развития системы и причины появления каждого её компонента. А ещё просто захотелось возродить старую идею - написать летопись моего любимого проекта ММГ =)

Вечер копания в истории переписок в Whatsapp, Telegram и Slack, в истории коммитов и задачках в трекере - и первая глава летописи (сентябрь 2018 - декабрь 2019) готова. Какие задачи я ставил?

  • сделать её достаточно фановой , чтоб интересно было читать; для этого навставлял всяких скриншотов переписок и релевантных мемов с тех времён
  • описать в тексте в хронологическом порядке все важные технические решения(архитектура сетки и всей системы, новые компоненты, работа с данными, выбор стека технологий) и их причины

Уже по ходу написания я понял, что такая летопись, вероятно, будет полезной не только для джунов =) Каждое продуктовое или техническое решение было принято по очень разным причинам :

  • решение могло быть объективно лучшим
  • оно могло быть или казаться лучшим на тот момент из-за недостатка времени, ресурсов или знаний
  • оно могло удовлетворять требованиям, а сейчас они изменились
  • на тот момент могло не существовать какой-то технологии, статьи или софта

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

Идею такого журнала решений, конечно же, придумал не я. Можно погуглить “project decision log” и найти статьи на эту тему и шаблоны таких логов. Мне лично понравилась моя идея вести его в формате летописи - некое полухудожественное описание, разбитое на главы и сдобренное артефактами эпохи.

Забавно, что изначально писал я этот документ для ML-команды, а заинтересовал он в итоге и других. Кто-то просто поностальгировал или наоборот узнал, с чего всё начиналось, кто-то смог оценить, какой путь проделан (например, от первой инструкции по разметке до текущей версии), кто-то, как и я, порефлексировал по поводу процесса принятия решений в компании. Конечно, если бы его писал человек не из ML, он бы получился совсем другим. Даже поступило предложение добавить в летопись взгляд со стороны людей из разных команд.

И всё-таки основной идеей для меня пока остаётся создание именно ML-летописи, со всеми групнормами, псевдоразметками и эмбеддингами. Планирую дописать летопись и подумать над тем, каким образом её держать в более-менее актуальном состоянии, а потом попробуем распространить практику и на другие проекты. Кстати, если интересно, могу немного переписать летопись (в основном выкинуть внутрянку и мат) и поделиться историей проекта с широкой публикой.