Если вы хотите внести свой вклад в ESPnet, ваши действия будут относиться к одной из трёх категорий: основные функции, небольшие обновления и рецепты.
Если вы хотите предложить новую функцию, пожалуйста, сначала создайте новый выпуск с тегом Feature request
или напрямую свяжитесь с Синдзи Ватанабэ shinjiw@ieee.org или другими основными разработчиками. Каждая реализация и дизайн функции должны обсуждаться и модифицироваться в соответствии с текущими и будущими работами. Вы можете найти текущие основные планы развития на https://github.com/espnet/espnet/milestones или на https://github.com/espnet/espnet/issues (закреплённые выпуски).
Если вы хотите предложить небольшую функцию, обновить существующую небольшую функцию или исправить ошибку, пожалуйста, сначала ознакомьтесь с существующими выпусками и/или запросами на вытягивание. Выберите выпуск и прокомментируйте задачу, над которой вы хотите работать.
Если вам нужна помощь или дополнительная информация для предложения функции, вы можете создать новый выпуск с тегом Discussion
и спросить членов ESPnet.
ESPnet предоставляет и поддерживает множество примеров сценариев, называемых рецептами
, демонстрирующих, как использовать инструментарий. Рецепты для ESPnet1 находятся в каталоге egs
, а рецепты для ESPnet2 — в каталоге egs2
. Как и в Kaldi, каждый подкаталог egs
и egs2
соответствует корпусу, для которого у нас есть примеры сценариев.
Рецепты ESPnet1 (egs/X
) следуют соглашению от Kaldi и могут полагаться на несколько утилит, доступных в Kaldi. Поэтому перенос нового рецепта из Kaldi в ESPnet является естественным, и пользователь может обратиться к port-kaldi-recipe и другим существующим рецептам для новых дополнений. Для архитектуры рецептов в стиле Kaldi обратитесь к Prepare-Kaldi-Style-Directory.
Для каждого рецепта мы просим вас предоставить результаты экспериментов, информацию об окружающей среде и модели. Для воспроизводимости также может быть добавлена ссылка для загрузки предварительно обученной модели. Вся эта информация должна быть записана в файл Markdown с именем RESULTS.md
, который находится в корне рецепта. Вы можете обратиться к tedlium2-example для примера.
Чтобы создать RESULTS.md
для рецепта, выполните следующие инструкции:
~/espnet/utils/show_result.sh
в корне рецепта (где находится run.sh
). Вы получите информацию о среде и результаты оценки для каждого эксперимента в формате Markdown. Отсюда вы можете скопировать или перенаправить текст вывода в RESULTS.md
.~/espnet/utils/pack_model.sh
в корне рецепта, чтобы создать упакованную модель ESPnet под названием model.tar.gz
и получить информацию о модели. Выполнение утилиты без аргументов даст вам ожидаемые аргументы.RESULTS.md
и ссылку на модель, если вы используете частное веб-хранилище. Если у вас нет частного веб-хранилища, обратитесь к Синдзи Ватанабэ shinjiw@ieee.org, чтобы получить доступ к хранилищу ESPnet.Рецептам ESPnet2 соответствуют egs2
. В ESPnet2 применяется новая парадигма без зависимостей от двоичных файлов Kaldi, что делает его более лёгким и обобщённым. В случае ESPnet2 мы не рекомендуем подготавливать этапы рецепта для каждого корпуса, но предлагаем использовать общие конвейеры, которые мы предоставили в asr.sh
, tts.sh
и enh.sh
. Для получения подробной информации о создании рецептов ESPnet2 обратитесь к egs2-readme.
Общий конвейер рецептов ESPnet2 позаботится о генерации RESULTS.md
, упаковке модели и загрузке. Модели ESPnet2 поддерживаются на Hugging Face и Zenodo (устарело). Вы также можете обратиться к документу по адресу https://github.com/espnet/espnet_model_zoo. Чтобы загрузить свою модель, вам нужно... first (This is currently deprecated, uploading to Huggingface Hub is preferred):
Чтобы перенести модели с Zenodo с помощью Hugging Face Hub, выполните следующие шаги:
egs2/RECIPE/*
и запустите ./scripts/utils/upload_models_to_hub.sh "ZENODO_MODEL_NAME"
.Для загрузки моделей с использованием Huggingface-cli выполните следующие действия: Вы также можете обратиться к https://huggingface.co/docs/transformers/model_sharing:
huggingface-cli repo create your-model-name --organization espnet
.git clone https://huggingface.co/username/your-model-name
(клонируйте это вне ESPNet, чтобы избежать проблем, так как это репозиторий git).your-model-name
.git lfs install
.exp
рецепта в этот каталог (проверьте другие модели аналогичных задач в ESPNet, чтобы подтвердить структуру вашего каталога).git add .
.git commit -m "Add model files"
.git push
.utils
, steps
, asr.sh
и т. д., должны быть связаны с помощью символической ссылки (например, ln -s <source-path> <target-path>
). Пожалуйста, обратитесь к существующим рецептам, если вы не знаете, какие файлы/каталоги являются общими. Обратите внимание, что в espnet2 некоторые из них автоматически генерируются с помощью https://github.com/espnet/espnet/blob/master/egs2/TEMPLATE/asr1/setup.sh.run.sh
) должны называться соответственно train.yaml
и decode.yaml
и помещаться в conf/
. Дополнительные или альтернативные конфигурации должны помещаться в conf/tuning/
и именоваться в соответствии с их различиями.db.sh
, если это рецепт ESPnet2.egs/README.md
или egs2/README.md
соответствующими рецептами.egs2/TEMPLATE/db.sh
для нового корпуса.black
и isort
для форматирования. Однако эти форматы автоматически выполняются pre-commit.ci
и больше не являются обязательными.Если ваша предложенная функция или исправление ошибки готовы, пожалуйста, откройте запрос на вытягивание (PR) по адресу https://github.com/espnet/espnet или используйте кнопку «Pull Request» в вашем разветвлённом репозитории. Если вы не знакомы с процессом, пожалуйста, обратитесь к следующим руководствам:
После... ### 4. Модульное тестирование
Модульное тестирование ESPnet находится в папке test/
. Вы можете установить дополнительные пакеты для тестирования следующим образом:
$ cd <espnet_root>
$ . ./tools/activate_python.sh
$ pip install -e ".[test]"
Чтобы тщательно протестировать различные модули, необходимо установить несколько модулей и инструментов. Мы рекомендуем вам ознакомиться с содержимым install.sh, так как он включает все модули и библиотеки, необходимые для проверки CI.
Затем вы можете запустить весь набор тестов с помощью pytest с coverage с помощью команд:
./ci/test_python_espnet1.sh
./ci/test_python_espnet2.sh
Вот несколько полезных советов при использовании pytest
:
test/
и назван test_xxx.py
. Каждый метод в тестовом файле должен иметь формат def test_yyy(...)
. Pytest автоматически найдёт и протестирует их.test_e2e_xxx.py
). Технически, тестовый файл должен охватывать методы только из одного файла (например, test_transformer_utils.py
, чтобы протестировать transformer_utils.py
).pytest --cov-report term-missing <test_file|dir>
, чтобы выделить покрытые и пропущенные строки. Для получения более подробной информации обратитесь к coverage-test.@pytest.mark.execution_timeout(sec)
.pytest
. Обратитесь к pytest fixtures для получения дополнительной информации.Кроме того, пожалуйста, следуйте PEP 8 для стиля кодирования и Google's convention for docstrings.
Вы также можете протестировать скрипты в utils
с помощью bats-core и shellcheck.
Для тестирования:
./ci/test_shell_espnet1.sh
./ci/test_shell_espnet2.sh
Напишите новые интеграционные тесты в ci/test_integration_espnet1.sh или ci/test_integration_espnet2.sh, когда вы добавляете новые функции в espnet/bin или espnet2/bin, соответственно. Они используют наш наименьший набор данных egs/mini_an4 или egs2/mini_an4, чтобы протестировать run.sh
. Не вызывайте python
напрямую в интеграционных тестах. Вместо этого используйте coverage run --append
в качестве интерпретатора Python. В частности, run.sh
должен поддерживать --python ${python}
, чтобы вызывать пользовательский интерпретатор.
# ci/test_integration_espnet{1,2}.sh
python="coverage run --append"
cd egs/mini_an4/your_task
./run.sh --python "${python}"
Вы можете проверить, соответствует ли ваш PR интеграционным тестам, перед отправкой нового обновления с помощью act. 5.2.1 Установка
Чтобы выполнить действие:
Сначала необходимо установить Docker на локальный ПК. Не забудьте авторизоваться в Docker с помощью команды docker login
.
Установите Github CLI. Инструкции будут меняться в зависимости от вашей ОС. Для Linux вы можете использовать официальные источники для установки соответствующего пакета.
Наконец, установите act через менеджеры пакетов или используя Github CLI. Для Linux можно использовать команду: gh extension install https://github.com/nektos/gh-act
5.2.2 Использование
В командной консоли:
cd <root_dir_espnet_clone> # перейдите в корневой каталог вашего клона
gh act
Программа начнёт выполнять все тесты CI, которые будут выполняться на сервере GitHub Action.
Для конкретных заданий/рабочих процессов можно использовать:
# Для заданий:
gh act -j <jobID> # Где jobID — это строка.
# Для рабочих процессов:
gh act -W <workflowID>
gh act -W .github/workflows/<filename>.yml
Список доступных jobID/workflowID можно получить с помощью команды: gh act -l
. Список файлов рабочих процессов можно получить командой ls .github/workflows
.
Вы можете разместить свои новые инструменты в:
— espnet/bin
или espnet2/bin
: тяжёлые и большие (например, связанные с нейронными сетями) основные инструменты.
— utils
: лёгкие, автономные скрипты Python/Bash.
Для скриптов utils
не забудьте добавить сообщения помощи и тестовые скрипты в test_utils
.
Чтобы создать документацию, не забудьте использовать def get_parser(): -> ArgumentParser
в основном файле.
#!/usr/bin/env python3
# Copyright XXX
# Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
import argparse
# NOTE: do not forget this
def get_parser():
parser = argparse.ArgumentParser(
description="awsome tool", # DO NOT forget this
)
...
return parser
if __name__ == '__main__':
args = get_parser().parse_args()
...
Чтобы создать документацию, поддержите --help
, чтобы показать её использование. Если вы используете utils/parse_option.sh
Kaldi, определите help_message="Usage: $0 ..."
.
См. doc.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )