Увеличение данных

Хотя архитектура модели настройки и гиперпараметры являются успешным фактором построения прекрасной модели, специалист по анализу данных также должен сосредоточиться на данных. Какую бы удивительную модель вы ни построили, мусор на входе, мусор на выходе (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.

Чтение расширений