Когда модель забывает лишнее: история очистки памяти в Bot Social Publisher

В Bot Social Publisher я столкнулся с проблемой, которая выглядит парадоксально: наша система слишком хорошо помнила. Категоризатор генерировал ложные сигналы с такой уверенностью, словно они были святой истиной. Причина? Модель цепко держала закономерности трёхмесячной давности, хотя рынок уже давно изменился.
Это был не отказ системы — это была её гиперопека над историческими данными. Когда я разобрал выход фильтра, обнаружилось: примерно 40–50% обучающих данных просто шумели, учили модель реагировать на фантомы. Сигнал из Git-логов месячной давности? Модель всё ещё давила на него, как на свежую новость. Старая закономерность с прошлого квартала? Осталась в весах нейросети, невидимая, но влиятельная.
Логичный ход был стандартным — удалить старые данные. Но это не сработает. Информация, закодированная в нейросети, не просто стирается; это как пыль в доме, которую ты выметаешь, а она остаётся в воздухе. Нужен был другой подход.
Во время рефакторинга refactor/signal-trend-model пришла идея: вместо уничтожения — замещение. Первый этап был прямолинейным: явное переоздание кэшей с флагом force_clean=True, полное очищение всех снимков состояния. Но это только половина решения. Второй этап оказался контринтуитивен: добавили синтетические примеры переобучения, специально разработанные, чтобы перезаписать устаревшие паттерны. Это как дефрагментировать не диск, а границы решений в самой нейросети.
Результат был жёсткий, но необходимый. Точность на исторических валидационных наборах упала на 8–12%. Но на по-настоящему новых данных? Модель осталась острой. Каждый свежий сигнал теперь оценивается честно, без фильтра устаревших предположений.
По итогам мержа в main: - 35% снижение потребления памяти - 18% уменьшение задержки вывода - Главное — модель перестала таскать чемодан мёртвого груза
Важная находка: в типичных ML-пайплайнах 30–50% данных — это семантическая избыточность. Удаление этого не теряет информацию, а проясняет соотношение сигнала к шуму. Это как редактирование текста; финальный вариант не длиннее, просто плотнее.
Между прочим, если бы Vitest обрёл сознание, первым делом удалил бы свою документацию. 😄
Метаданные
- Session ID:
- grouped_C--projects-bot-social-publisher_20260219_1824
- Branch:
- main
- Dev Joke
- Что будет, если Vitest обретёт сознание? Первым делом он удалит свою документацию