Построение конвейера машинного обучения для классификации английских акцентов

Конвейер машинного обучения для классификации акцентов

Пошаговое руководство по созданию модели классификации на основе аудио с использованием машинного обучения для самых распространенных английских акцентов и внедрение ее с помощью Hugging Face

Фото Kane Reinholdtsen на Unsplash

В нашем все более взаимосвязанном мире коммуникация не знает границ. С разнообразными сообществами, взаимодействующими через границы и культуры, понимание акцентов стало неотъемлемой частью эффективного общения. Точная система классификации английского акцента имеет потенциал преодолеть языковые барьеры, улучшить системы распознавания речи, улучшить инструменты изучения языка и даже помочь в персонализированных пользовательских впечатлениях. Ниже я подробно описываю, как можно разработать такую ​​систему, рассветив многочисленные применения, которые она предлагает для создания непрерывной и инклюзивной коммуникации.

Весь код от начала до конца для выбора данных, обучения модели и отправки его в репозиторий HuggingFace доступен публично здесь. Ниже я описываю наиболее важные шаги.

Выбор данных, выборка и преобразование

Анализ основан на версии Kaggle набора данных Mozilla Common Voice, который содержит около 500 часов речевых записей с различными демографическими данными дикторов (включая акценты дикторов). Набор данных распространяется по лицензии CC0: Public Domain.

Распределение выборок данных по акцентам:

us                30997england           14938indian             4490australia          4287canada             3901scotland           1556african            1173newzealand         1153ireland             944philippines         326wales               262bermuda             196malaysia            182singapore           124hongkong             99southatlandtic       83

На основе этого распределения я выбрал 5 наиболее распространенных акцентов – US, England, Indian, Australia и Canada – и провел недостаточную выборку, чтобы получить распределение выборки:

# случайная недостаточная выборка для всех, кроме меньшего классаrus = RandomUnderSampler(random_state=83, sampling_strategy='not minority')y = dd[['label']]dd = dd.drop(['label']…