Обновить

В начале года я опубликовал статью Прививаем машине музыкальный вкус: фильтруем плейлист на основе предпочтений

Результат был хорош, но далеко не идеален - обучение занимало много времени, качество незначительно росло, хотя размеченных данных стало заметно больше. Да и ощущение, что решение должно быть красивее, но я его не вижу в силу отсуствия экспертизы сохранялось

Поэтому спустя полгода после релиза первой версии я дал исходный контекст задачи кодагенту. Без ссылки на код проекта и без подсказок стека и каких бы то ни было подходов к реализации - только цель и ограничения, а именно:

  • использовать только аудиоданные

  • использовать только CPU

  • уверенно меньше 20% ложных не\срабатываний для обеих классификаций - exclude_disliked and include_liked

Над решением успели поработать opus 4.8 (основная архитектура решения), fable 5 (ревью архитектуры; да-да, надо было наоборот, но архитектура была собрана до выхода fable) glm-5.2 (прикладные планы реализации задач) и 5.3 (прикладные планы+доведение пайплайна до рабочего состояния)

По архитектуре железный друг: 

  • предложил тот же подход, что я использовал, но выкинул polars, вместо которого решил использовать duckdb. Когда он понял, что его не получится нормально развернуть на nfs, мы сошлись на хранении фич файлами parquet, а duckdb-базу билдить локально при запуске обучения - уж очень удобно ее использовать

  • отделил пайплайны извлечения фич от обучения. Изменение довольно капитанское, но так реально гораздо быстрее проводить эксперименты и улучшать модель. Появляются четкие артефакты с сырыми фичами, которые можно анализировать сами по себе

  • для процессинга агент сам предложил взять ту же essentia, но вместо навеса моделей на нее - предложил взять panns

  • примитивы обучения взял те же: mean k-NN distance+GMM log-likelihood+IsotonicRegression. Предложил обучать по одной single-class модели на include_liked и exclude_disliked, но делать это за один проход. На метрику какой из моделей смотреть - решаем на уровне подписки

Когда мы собрали решение - ничего не заработало. Качество детекции было едва выше случайного. И вот тут реально LLM оказались суперполезны, т.к. в анализе данных они понимают сильно больше меня и компенсировали пробелы в экспертизе:

  • модель подкинула критерий, который позволяет выделить фичи наиболее различные в датасетах. Не просто PCA, а выбрать те фичи, за счет которых мы различаем liked/disliked. 4k фич сжались до 64х - это значительно повысило точность ML-моделей за счет размерности

  • но даже после этого exclude_disliked продолжала сильно страдать false positive'ами - эксклюдила что нужно и что не нужно. И тут агент предложил балансировать вывод этой модели выводом include_liked классификатора. Т.е. если exclude_liked считает, что трек надо выкинуть, то прежде чем вернуть это решение мы смотрим на include_liked скор этого трека. Если он высокий - трек остается. С таким подходом качество модели стало выше, мой исходный подход показывал когда-либо

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

Единственной сохранившейся проблемой остается довольно высокое потребление памяти при процессинге - каждый воркер, извлекающий фичи из аудио, потребляет 1.5-2ГБ. Но размен памяти на процессинг на CPU - вполне приемлем при локальном использовании

Теги:
0
Комментарии0

Я попал к психиатру из‑за кодинга с AI

Со стороны программирование звучит как медитативное занятие. Сидишь себе за компом целый день, слушаешь музыку, пьешь вкусный кофе. У все меня примерно так и происходит. Сначала я не спеша пытаюсь выстроить в голове то, что требуется сделать. Именно «не спеша». И не потому что я такой опытный и мудрый, а потому что быстро я просто не умею.

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

Все это звучит конечно логично, но явно 10x инженером так не стать. Да и будем честны, даже 2x тоже. В IT, где эффективность, это не один из критериев оценки сотрудника, а недостижимая цель, к которой стремятся все. Мой стиль работы — это проблема. Но благодаря появлению AI, эта проблема стала решена.

Я попал к психиатру из‑за кодинга с AI

Публикации