Вопрос или проблема
Я пытаюсь создать модель машинного обучения для распознавания простых голосовых команд, таких как “вверх”, “вниз”, “влево” и т. д.
При решении подобных задач, основанных на изображениях, я бы просто сделал фотографию и проставил ей метку.
Я могу генерировать характеристики и визуализировать их с помощью librosa. И я слышал, что СНН удивительно хороши в этой задаче. Поэтому я задумался, как собрать обучающие данные для таких аудиосистем, так как я не могу записать целый фрагмент, учитывая, что мои команды будут длиной всего лишь несколько миллисекунд (и при прогнозировании это тоже будет всего несколько миллисекунд).
Моя первая идея заключалась в том, чтобы генерировать изображение (с помощью matplotlib и librosa.features) каждые несколько миллисекунд и использовать только те, на которых я произношу команду, как положительные метки (а остальные – как отрицательные метки), но это кажется утомительным, и может быть более эффективный способ сделать это.
Существует ли эффективный способ достичь этого?
Что будет генерировать librosa? Если звуковые клипы, которые она предоставляет, также не являются словами, то я беспокоюсь о действенности обучения. Было бы лучше записать образцы своего голоса, произнося положительно отмеченные слова, и произнося множество других слов, которые можно использовать как отрицательные метки. Я понимаю, что это может быть раздражающим процессом; один из подходов, о котором я читал в прошлом, чтобы максимально использовать небольшое количество обучающих данных, – это использование трансформаций и искажений на обучающих данных для увеличения фактического числа образцов. В этом случае обучение проводилось на изображениях животных. Фактически, что исследователи сделали, так это немного изменили изображения; они поворачивали изображения на различные углы, сжимали их (уменьшая высоту или ширину и не сохраняя соотношение сторон) или растягивали их и так далее. Вы могли бы сделать то же самое: записать небольшое количество образцов, а затем использовать искажения, чтобы увеличить фактическое количество образцов до полезного числа.
Чтобы обучить (и оценить) классификатор для фиксированных словарных речевых команд, необходимо создать курируемый набор данных, который:
- Имеет четко определенный список команд (классы для классификатора)
- Содержит достаточно образцов каждой команды. 10-100, или больше
- Каждый аудиообразец содержит только одну команду.
- Каждый образец примерно одинаковой длины
- Начало команды располагается в начале аудиообразца
Набор данных будет собранием .WAV аудиофайлов и .CSV, который их описывает:
filename,command,...
dd690d11-2412-4a16-8103-f1c2d178eca8.wav,вверх
df36c75b-d30d-49c0-a103-f9fc76827625.wav,вниз
dab2f090-4493-4756-85ee-b6cd62c7bae8.wav,влево
...
Процесс записи
Базовый процесс записи будет использовать существующую аудиопрограмму (например, Audacity), и делать одну аудиозапись для каждого слова.
Одна вещь, которая может ускорить сбор данных, – это записать много произнесений за раз. Произнесите одно командное слово (“вверх”) много раз подряд с большим количеством тишины (0,5 секунды) между каждой командой. Затем можно использовать автоматический алгоритм сегментации аудио для разделения команд, используя тишину. Примеры программ для разделения на тишине: pyAudioAnalysis и audiotok
Учет вариаций
Хороший процесс сбора данных обеспечивает наличие большинства естественно возникающих вариаций в классах. Для речи это обычно означает записывать многих разных говорящих, так как каждый говорит немного по-разному. Но даже с одним спикером вы можете ввести некоторую вариацию сами: сделайте дополнительные проходы записей, где вы произносите слова либо быстро, либо медленно. А также проходы, где вы произносите их громко (почти крик), или тихо (почти шепотом).
Вам также могут понадобиться примеры вне класса, по крайней мере для оценки. Вы можете собрать их почти так же. Чтобы получить много различных слов, можно, например, читать статью в Википедии слово за словом (с тишиной между). А затем пройтись и убрать целевые слова.
Ответ или решение
Сбор обучающих данных для системы распознавания простых голосовых команд, таких как «вверх», «вниз», «влево» и т.д., требует продуманного подхода. В отличие от задач обработки изображений, где просто нужно выбрать изображение и присвоить ему соответствующую метку, в случае с аудио необходимо учитывать множество факторов, таких как звукозапись, обработка и создание разнообразных выборок. В этой статье мы рассмотрим основные шаги и рекомендации, которые помогут вам эффективно собрать данные для обучения модели.
Определение команд и требований к набору данных
Прежде всего, важно четко определить список команд, которые ваша модель будет распознавать. Эти команды будут классами вашего классификатора. Рекомендуется собрать как минимум 10-100 образцов для каждой команды, чтобы гарантировать их безопасность и точность.
Критерии для записанных образцов:
- Однозначность: Каждая аудиозапись должна содержать только одну команду.
- Длина: Все записи должны быть примерно одинаковой длины, чтобы упростить обучение модели.
- Позиционирование: Начало команды должно находиться в начале аудиофайла.
Ваша база данных может состоять из файлов .WAV и .CSV, где каждый файл и его метка описаны следующим образом:
filename,command
dd690d11-2412-4a16-8103-f1c2d178eca8.wav,up
df36c75b-d30d-49c0-a103-f9fc76827625.wav,down
dab2f090-4493-4756-85ee-b6cd62c7bae8.wav,left
Процесс записи голосов
Запись голосовых команд может быть удобно организована с помощью программного обеспечения, например, Audacity. Хорошая практика — записать множество произнесений одной команды подряд с небольшими перерывами (например, 0.5 секунды) между ними. Это позволяет позже использовать алгоритмы автоматической сегментации для разделения команд на отдельные звуковые фрагменты. Вы можете использовать такие инструменты, как pyAudioAnalysis или audiotok, для выполнения этой задачи.
Учёт вариаций
Для повышения качества вашей модели необходимо учесть разнообразие произношений в ваших данных. Это может включать:
- Запись нескольких вариантов произнесений каждой команды — быстро, медленно, громко, тихо.
- Привлечение различных людей для записи, чтобы охватить широкий диапазон акцентов и интонаций.
Вы также можете собрать образцы, которые не относятся к целевым командам, чтобы улучшить оценку модели. Например, можно прочитать текстовый материал, группу слов или фраз, и оставить тишину между произношениями, что позволит исключить целевые команды.
Обработка и аугментация данных
Чтобы увеличить объем тренировочных данных, вы можете применять методы аугментации, такие как:
- Изменение скорости и высоты тона записанных команд.
- Добавление фона или тишины для создания более различных аудиофрагментов.
- Применение фильтров для различной обработки звука, чтобы создать разнообразие.
Выводы
Сбор обучающих данных для системы распознавания простых голосовых команд требует тщательной подготовки и стратегического подхода. Определив четкий список команд и собрав достаточное количество образцов с учетом вариаций, вы сможете создать качественный набор данных, который обеспечит высокую точность вашей модели. Применение современных методов обработки и аугментации данных также поможет вам в увеличении разнообразия обучающих выборок, что в свою очередь может оказать положительное влияние на общее качество распознавания команд.