Веб-сервис доступен здесь
Этот проект представляет систему автоматической коррекции произношения на английском языке с использованием нейронной сети, основанной на архитектуре Wav2Vec 2.0. В рамках разработки был создан специализированный датасет для решения задачи обнаружения ошибок в произношении на фонемном уровне.
Также рассматривается интеграция модели в веб-сервис, предназначенный для обучения пользователей иностранным языкам.
- Описание проекта
- Содержание
- Структура репозитория
- Датасет
- Модель
- Структурная схема решения
- Веб-сервис
- Инструкция по установке
- Веб-приложение
- Авторы
- Лицензия
- /analysis : Jupyter Notebook файлы с обработкой датасетов
- /api : API веб-сервиса
- /web-ui-nuxt : Графический интерфейс веб-сервиса
В качестве датасета для дообучения модели использовалась комбинация из пяти датасетов.
Название | Разметка | Содержит ли ошибки произношения | Процент в общем датасете | Длительность (час) |
---|---|---|---|---|
TIMIT | IPA | - | 32.14 % | 5.4 |
L2-ARCTIC | IPA | + | 35.71 % | 6 |
Common Voice | IPA, wav2vec2 | + | 16.07 % | 2.7 |
LJ-speech | IPA, gruut | - | 8.04 % | 1.37 |
LibriSpeech | IPA, gruut | - | 8.04 % | 1.37 |
Фонемы в объединенном датасете были приведены к формату IPA.
Общее время датасета составило 16.8 часов, из которых:
- 8.7 часов датасетов с ошибками;
- 8.14 часов датасетов без ошибок. Общий объем аудиофайлов составил 15112 записей различной длительности.
Каждая запись в датасете имеет следующие атрибуты:
audio_path
: путь к wav-файлу (16 кГц);sentence
: исходное предложение на английском языке;phonemes
: список фонемных транскрипций для каждого слова;duration
: длительность аудиозаписи в секундах;dataset
: источник данных (TIMIT, CV, LS, LJ, L2).
-
Для фонемной транскрпиции TIMIT и L2-ARCTIC использовались преобразованные в IPA фонемы формата ARPABET, поставляемые с датасетами. Для этого вручную были созданы два маппинга: один для преобразования TIMIT, другой - для L2-ARCTIC.
-
Для разметки датасета Common Voice была использована модель wav2vec2-large-xlsr-53-l2-arctic-phoneme.
-
Для разметки LJ-speech и LibriSpeech использовалась библиотека gruut, которая преобразует текст в IPA-формат.
D64F
В качестве модели для дообучения использовалась предварительно обученная модель wav2vec2-large-xlsr-53.
Итоговое значение метрики CER (Character Error Rate) = 0.1.
Дообученная модель опубликована на HuggingFace:
API приложения разработан на базе фреймворка FastAPI.
Основные функции:
-
Предоставление предложений для тренировки
- Сервис выбирает случайное предложение из базы данных на основе уровня сложности и текущего прогресса пользователя.
- База данных содержит тексты предложений, их фонетические транскрипции и уровни сложности.
-
Оценка произношения
- Пользователь загружает аудиофайл, который обрабатывается с помощью предобученной модели Wav2Vec2.
- Модель транскрибирует речь, сравнивая результат с эталонной транскрипцией из базы данных.
- Формируется процентное соответствие и обратная связь для пользователя.
Docker:
- Для упрощения развертывания был создан Docker-контейнер с возможностью пересборки через скрипт.
- Склонировать репозиторий https://github.com/moxeeem/ASR-pronunciation-correction.git;
Установить зависимости:
python install -r
- Переименовать файл
.env.example
в.env
и указать переменные окружения:SUPABASE_URL
(url к базе данных supabase, где хранятся упражнения);SUPABASE_KEY
(ключ управления supabase);LOCAL_MODEL_PATH
(локальный путь к модели / ссылка на модель через hugging face);MODEL_SOURCE
='LOCAL'
/'HF'
(путь загрузки модели - локально или через hugging face).
Запуск API:
cd api/
python -m uvicorn src.pronunciation_api.api:app --reload
Установить зависимости:
npm install
- Переименовать файл
.env.example
в.env
и указать переменные окружения:SUPABASE_URL
(url к базе данных supabase, где хранятся упражнения);SUPABASE_KEY
(ключ управления supabase);DATABASE_URL
(url к базе данных для миграций);- например:
postgresql://postgres.padludpvkvposslxxcky:[вашпароль]@aws-0-eu-central-2.pooler.supabase.com:6543/postgres
- например:
BACKEND_API_URL
(url бэкэнда).- например:
http://127.0.0.1:8000/
- например:
Запуск приложения:
cd web-ui-nuxt/
npm run dev
При желании замены датасета с предложениями создать файл .csv
.
Пример оформления .csv
файла с упражнениями:
Название столбца | Тип | Пример | Пояснение |
---|---|---|---|
content | string | It's all over between us. | Текст предложения |
sentence_length_group | enum("small", "medium", "large") | small | Размер предложения |
ipaTranscription | string | ɪts ɔl oʊvɚ bɪtwin ʌs | Транскрипция в ipa |
arpabetTranscription | string | H1-T-S AO1-L OW1-V-ER0 B-IH0-T-W-IY1-N AH1-S | Транскрипция в ARPABET |
wordCount | integer | 5 | Количество слов |
charCountNoSpaces | integer | 21 | Количество символов (без пробелов) |
charCountTotal | integer | 25 | Количество символов (с пробелами) |
difficultyLevel | integer | 2 | Уровень сложности |
translationRu | string | Перевод |
Схема drizzle находится по пути web-ui-nuxt/drizzle/schema.ts
Для генерации миграций запустить код в терминале Powershell:
npx drizzle-kit generate --config drizzle.config.ts
# генерирует миграции из описания схемы PostgreSQL
npx drizzle-kit migrate --config drizzle.config.ts
# осуществление миграции. Для этого и нужна переменная DATABASE_URL
Для заполнения базы данных запустить код:
npx run seed:sentences
npx run seed:exercises
Для разработки веб-приложения использовались TypeScript, Vue.js 3, Nuxt 3, Vite.js.
Скриншоты работы приложения:
- Окно авторизации
- Выбор упражнений
- Упражнение
- Результат выполнения упражнения
Данный репозиторий лицензируется по лицензии MIT. Дополнительную информацию см. в файле LICENSE.