Увеличение данных
Хотя архитектура модели настройки и гиперпараметры являются успешным фактором построения прекрасной модели, специалист по анализу данных также должен сосредоточиться на данных. Какую бы удивительную модель вы ни построили, мусор на входе, мусор на выходе (GIGO).
Интуитивно понятно, что нехватка данных - одна из распространенных проблем в реальной проблеме науки о данных. Увеличение данных помогает генерировать синтетические данные из существующего набора данных, так что возможности обобщения модели могут быть улучшены.
В предыдущем рассказе мы объяснили, как мы играем со спектрограммой. В этом рассказе мы поговорим об основных методах улучшения звука. Эта история и реализация вдохновлены Блокнотом Kaggle по расширению аудиоданных.
Увеличение данных для аудио
Чтобы сгенерировать синтаксические данные для звука, мы можем применить инъекцию шума, время сдвига, изменение высоты тона и скорости. Numpy обеспечивает простой способ обработки шума и сдвига времени, в то время как librosa (библиотека для распознавания и организации речи и звука) помогает управлять высотой тона и скоростью с помощью всего одной строчки кода.
Инъекция шума
Он просто добавляет случайное значение в данные с помощью numpy.
import numpy as np def manipulate(data, noise_factor): noise = np.random.randn(len(data)) augmented_data = data + noise_factor * noise # Cast back to same data type augmented_data = augmented_data.astype(type(data[0])) return augmented_data
Сдвиг времени
Идея сдвига времени очень проста. Он просто сдвигает звук влево / вправо со случайной секундой. Если сдвинуть звук влево (перемотка вперед) на x секунд, первые x секунд будут отмечены как 0 (т. Е. Тишина). Если сдвинуть звук вправо (назад вперед) на x секунд, последние x секунд будут отмечены как 0 (т. Е. Тишина).
import numpy as np def manipulate(data, sampling_rate, shift_max, shift_direction): shift = np.random.randint(sampling_rate * shift_max) if shift_direction == 'right': shift = -shift elif self.shift_direction == 'both': direction = np.random.randint(0, 2) if direction == 1: shift = -shift augmented_data = np.roll(data, shift) # Set to silence for heading/ tailing if shift > 0: augmented_data[:shift] = 0 else: augmented_data[shift:] = 0 return augmented_data
Изменение высоты тона
Это дополнение является оболочкой функции librosa. Он изменяет высоту звука случайным образом
import librosa def manipulate(data, sampling_rate, pitch_factor): return librosa.effects.pitch_shift(data, sampling_rate, pitch_factor)
Изменение скорости
Как и изменение высоты звука, это увеличение выполняется функцией librosa. Он растягивает временные ряды с фиксированной скоростью.
import librosa def manipulate(data, speed_factor): return librosa.effects.time_stretch(data, speed_factor)
Забрать
- В пакете nlpaug реализовано более 4 методов (≥ 0.0.3). Вы можете сгенерировать расширенные данные в нескольких строчках кода.
- Увеличение данных не может заменить реальные обучающие данные. Это просто помогает генерировать синтетические данные, чтобы улучшить модель.
- Не создавайте слепо синтетические данные. Вы должны понять свой шаблон данных и выбрать подходящий способ увеличения объема обучающих данных.
Обо мне
Я специалист по анализу данных в Bay Area. Сосредоточение внимания на новейших достижениях науки о данных, искусственного интеллекта, особенно в области НЛП и связанных с платформами. Не стесняйтесь связаться со мной в LinkedIn или подписаться на меня в Medium или Github.