Это итоговый урок модуля: он связывает всё, что мы прошли. Звук, изображение и история оценок выглядят совершенно по-разному, но после выделения признаков каждый объект становится вектором — а с векторами мы уже умеем всё: сравнивать, сжимать через PCA, искать соседей и рекомендовать. Пройдём эту цепочку на звуке, где всё начинается с преобразования Фурье.

Звук как сумма частот

Цифровой звук — это последовательность отсчётов x0,,xN1x_0,\ldots,x_{N-1}. Чтобы узнать, из каких частот он сложён, применяют дискретное преобразование Фурье:

Xk=n=0N1xne2πikn/N.X_k=\sum_{n=0}^{N-1}x_n\,e^{-2\pi i kn/N}.

Модуль Xk|X_k| говорит, насколько сильна частота с номером kk (ей отвечает kfs/Nk f_s/N герц, где fsf_s — частота дискретизации), а аргумент — её фазу. По сути это линейное преобразование, только базис — синусоиды.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Сверху волна суммы двух тонов во времени с биениями. Снизу спектр из настоящего ДПФ: два острых пика ровно на 500 и 1250 герц, всё остальное на нуле
Рис. 40.1. Один звук: волна и её спектр

Сумма двух тонов во времени (сверху) и её спектр (снизу), посчитанный настоящим ДПФ. Пики стоят ровно на частотах 500500 и 12501250 Гц — преобразование Фурье вытащило скрытые в волне частоты.

Окно и утечка спектра

Один спектр на всю запись теряет время: если переставить куски записи местами, набор частот почти не изменится. Поэтому спектр считают по коротким окнам. Но у окна есть подвох: если в него не помещается целое число периодов, его концы не совпадают, и ДПФ, считая окно периодическим, размазывает энергию по соседним частотам — это спектральная утечка.

Этот предел — не свойство алгоритма, а закон природы (тот же, что принцип неопределённости в физике). Поэтому окно выбирают под задачу: для щелчка важна ось времени, для настройки ноты — ось частоты.

Потрогай спектрограмму

Сигнал, настоящая СТФТ и компромисс окна

Загружается живая иллюстрация…

Соберите сигнал — виджет посчитает настоящее преобразование Фурье прямо в браузере и нарисует реальную спектрограмму. Двигайте ширину окна и увидите компромисс своими глазами: узкое окно точно отмечает щелчок, но размывает близкие тоны; широкое — наоборот.

От карты к вектору

Спектрограмма — картинка, а нам нужен короткий вектор. Из неё извлекают признаки: спектральный центр тяжести (где сосредоточена энергия — «яркость» звука), ширину полосы, точку спада (rolloff), частоту переходов через ноль, коэффициенты MFCC. Каждый из них — одно число на кадр, отвечающее на понятный вопрос о звуке. Усреднённые по времени, они складываются в вектор xRdx\in\mathbb R^d — компактный паспорт звука, с которым дальше работает уже знакомая линейная алгебра.

::::

Карта звуков

Сожмём эти признаки в две координаты через PCA и разложим звуки на плоскости. Похожие сближаются сами.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Двумерная PCA-карта синтезированных звуков шести типов: низкие тоны, высокие тоны, аккорды, щелчки, шум и свип образуют отдельные группы; чистота трёх ближайших соседей 97 процентов
Рис. 40.3. Карта звуков из спектральных признаков

Синтезированные звуки шести типов, разложенные по спектральным признакам и сжатые в две координаты. Одинаковые сближаются: у 97%97\% звуков все три ближайших соседа — того же типа. Признаки посчитаны настоящей STFT.

Косинус или расстояние

Как измерять близость векторов? Есть два ответа. Косинусное сходство

cos(a,b)=abab\cos(a,b)=\frac{a^\top b}{\lVert a\rVert\,\lVert b\rVert}

сравнивает только направление и не замечает общего масштаба. Евклидово расстояние масштаб сохраняет.

::::

Поиск соседей и рекомендация

Теперь всё сходится. Фрагмент-запрос кодируют тем же способом и ищут ближайшие векторы — это контентная рекомендация: она опирается на само содержание и потому помогает даже новому треку, у которого нет ни одной оценки (холодный старт из урока о рекомендациях). А матричная факторизация оттуда использовала коллективные оценки. Сильная система — гибрид: контентный вектор для новизны, коллаборативный — для точности на популярном.

Но сосед — это гипотеза, а не приговор. Алгоритм всегда найдёт ближайший объект, даже если весь каталог далёк, поэтому показывают и абсолютное расстояние, и сравнение со случайными парами. И качество нельзя мерить одним совпадением жанра: похожесть бывает по тембру, темпу или настроению, и её проверяют несколькими критериями сразу.

Итоговый протокол практикума

Капстон модуля проходит по одной честной цепочке, и каждый шаг мы уже проходили:

  1. зафиксировать вопрос (похожий тембр? жанр? следующий трек?);
  2. разбить записи без утечки — по трекам или исполнителям, а не по фрагментам, как требует урок о разбиении;
  3. извлечь спектральные признаки настоящей STFT;
  4. стандартизовать масштабы только по обучающей части;
  5. сжать PCA, число компонент выбрать по validation;
  6. найти соседей и открыть тест ровно один раз;
  7. прослушать ошибки и превратить их в следующую гипотезу.

Русская линия здесь ведёт к А. А. Харкевичу — советскому учёному, чья книга «Спектры и анализ» воспитала поколения инженеров связи. Его взгляд на спектр как на «паспорт сигнала» — ровно то, что делает наш конвейер: сводит звук к короткому вектору, по которому объект можно узнать и найти похожие.

Чем связан весь модуль

Мы прошли путь от отсчётов звука до рекомендации и увидели, что он весь состоит из уже знакомых кирпичей. Преобразование Фурье — линейное преобразование в базисе синусоид. Спектрограмма упирается в предел Габора: точность по времени и по частоте не даются вместе. Признаки превращают звук в вектор, PCA сжимает его, косинус и евклид измеряют близость, а поиск соседей и факторизация оценок дают рекомендацию. Разные данные — звук, картинки, оценки — после выделения признаков говорят на одном языке векторов, и вся линейная алгебра модуля работает на них одинаково. Это и есть главный вывод: научиться превращать объект в осмысленный вектор — значит получить над ним всю силу изученных методов.

Задачи