Сценарии Python для вычисления аудио и языковых моделей из речевых данных voxforge.org и многих источников. Модели, которые можно построить, включают:
ВАЖНО : Обратите внимание, что эти сценарии никоим образом не образуются полным приложением, готовым к потреблению конечного пользователя. Однако, если вы являетесь разработчиком, заинтересованным в обработке естественного языка, вы можете найти некоторые из них полезными. Взносы, патчи и запросы на привлечение очень приветствуются.
На момент написания этой статьи сценарии сосредоточены на создании моделей английского и немецкого Voxforge. Тем не менее, нет никаких причин, по которым их нельзя использовать для создания других языковых моделей, не стесняйтесь вносить свой вклад.
Создан GH-MD-TOC
У нас есть различные модели плюс исходный код и двоичные файлы для инструментов, используемых для создания этих моделей, доступных для загрузки. Все бесплатно и с открытым исходным кодом.
Все наши загрузки модели и данных можно найти здесь: Загрузки
Наши предварительно построенные модели ASR можно загрузить здесь: ASR-модели
kaldi-generic-en-tdnn_f крупная модель Nnet3-цепи TDNN, обученная ~ 1200 часам аудио. Имеет приличную стойкость фонового шума и также может использоваться на телефонных записях. Должен обеспечить наилучшую точность, но немного более интенсивной ресурс, чем другие модели.kaldi-generic-en-tdnn_sp Большая модель NNET3-цепи, обученная ~ 1200 часам звука. Имеет приличную стойкость фонового шума и также может использоваться на телефонных записях. Менее точный, но также немного менее интенсивный ресурс, чем модель tddn_f .kaldi-generic-en-tdnn_250 так же, как и более крупные модели, но менее интенсивный ресурс, подходящий для использования в встроенных приложениях (например, Raspberrypi 3).kaldi-generic-en-tri2b_chain GMM модель, обученная тем же данным, что и в двух вышеуказанных моделях-предназначенные для задач сегментации автоматической сегментации.kaldi-generic-de-tdnn_f Большая модель Nnet3-Chain, обученная ~ 400 часам звука. Имеет приличную стойкость фонового шума и также может использоваться на телефонных записях.kaldi-generic-de-tdnn_250 так же, как большая модель, но менее интенсивный ресурс, подходящий для использования в встроенных приложениях (например, Raspberrypi 3).kaldi-generic-de-tri2b_chain GMM модель, обученная тем же данным, что и в двух вышеуказанных моделях-предназначенные для задач автоматической сегментации.w2l-generic-de Большая модель, обученная ~ 400 часов аудио. Имеет приличную стойкость фонового шума и также может использоваться на телефонных записях.Примечание . Важно понимать, что эти модели могут и должны быть адаптированы к вашей области приложения. Смотрите модель адаптация для деталей.
Наши словари можно загрузить здесь: словарители
dict-en.ipa на основе Cmudict со многими дополнительными записями, сгенерированными через Sequitur G2P.dict-de.ipa создал вручную с нуля со многими дополнительными автоматическими записями, извлеченными из Wiktionary. Наши предварительно построенные модели G2P могут быть загружены здесь: G2P-модели
sequitur-dict-en.ipa secitiTur G2P модель, обученная на нашем английском словаре IPA (UTF8).sequitur-dict-de.ipa Seciotur G2P Модель, обученная нашему Германскому словарю IPA (UTF8). Наши предварительно построенные языковые модели ARPA можно скачать здесь: языковые модели
generic_en_lang_model_smallgeneric_en_lang_model_largegeneric_de_lang_model_smallgeneric_de_lang_model_large Загрузите несколько образцов волновых файлов
$ wget http://goofy.zamia.org/zamia-speech/misc/demo_wavs.tgz
--2018-06-23 16:46:28-- http://goofy.zamia.org/zamia-speech/misc/demo_wavs.tgz
Resolving goofy.zamia.org (goofy.zamia.org)... 78.47.65.20
Connecting to goofy.zamia.org (goofy.zamia.org) | 78.47.65.20 | :80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 619852 (605K) [application/x-gzip]
Saving to: ‘demo_wavs.tgz’
demo_wavs.tgz 100%[ ==========================================================> ] 605.32K 2.01MB/s in 0.3s
2018-06-23 16:46:28 (2.01 MB/s) - ‘demo_wavs.tgz’ saved [619852/619852]распаковать их:
$ tar xfvz demo_wavs.tgz
demo1.wav
demo2.wav
demo3.wav
demo4.wavСкачать демонстрационную программу
$ wget http://goofy.zamia.org/zamia-speech/misc/kaldi_decode_wav.py
--2018-06-23 16:47:53-- http://goofy.zamia.org/zamia-speech/misc/kaldi_decode_wav.py
Resolving goofy.zamia.org (goofy.zamia.org)... 78.47.65.20
Connecting to goofy.zamia.org (goofy.zamia.org) | 78.47.65.20 | :80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2469 (2.4K) [text/plain]
Saving to: ‘kaldi_decode_wav.py’
kaldi_decode_wav.py 100%[ ==========================================================> ] 2.41K --.-KB/s in 0s
2018-06-23 16:47:53 (311 MB/s) - ‘kaldi_decode_wav.py’ saved [2469/2469]Теперь запустите автоматическое распознавание речи Kaldi в файлах демонстрации WAV:
$ python kaldi_decode_wav.py -v demo ? .wav
DEBUG:root:/opt/kaldi/model/kaldi-generic-en-tdnn_sp loading model...
DEBUG:root:/opt/kaldi/model/kaldi-generic-en-tdnn_sp loading model... done, took 1.473226s.
DEBUG:root:/opt/kaldi/model/kaldi-generic-en-tdnn_sp creating decoder...
DEBUG:root:/opt/kaldi/model/kaldi-generic-en-tdnn_sp creating decoder... done, took 0.143928s.
DEBUG:root:demo1.wav decoding took 0.37s, likelyhood: 1.863645
i cannot follow you she said
DEBUG:root:demo2.wav decoding took 0.54s, likelyhood: 1.572326
i should like to engage just for one whole life in that
DEBUG:root:demo3.wav decoding took 0.42s, likelyhood: 1.709773
philip knew that she was not an indian
DEBUG:root:demo4.wav decoding took 1.06s, likelyhood: 1.715135
he also contented that better confidence was established by carrying no weapons Определите название вашего Pulseaudio Mic Source:
$ pactl list sources
Source # 0
State: SUSPENDED
Name: alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-mono
Description: CM108 Audio Controller Analog Mono
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Скачать и запустить демонстрацию:
$ wget ' http://goofy.zamia.org/zamia-speech/misc/kaldi_decode_live.py '
$ python kaldi_decode_live.py -s ' CM108 '
Kaldi live demo V0.2
Loading model from /opt/kaldi/model/kaldi-generic-en-tdnn_250 ...
Please speak.
hallo computer
switch on the radio please
please switch on the light
what about the weather in stuttgart
how are you
thank you
good bye Чтобы запустить службу STT на вашей локальной машине, выполните:
$ docker pull quay.io/mpuels/docker-py-kaldi-asr-and-model:kaldi-generic-en-tdnn_sp-r20180611
$ docker run --rm -p 127.0.0.1:8080:80/tcp quay.io/mpuels/docker-py-kaldi-asr-and-model:kaldi-generic-en-tdnn_sp-r20180611Чтобы перенести аудиофайл для транскрипции в службу, во втором терминале выполните:
$ git clone https://github.com/mpuels/docker-py-kaldi-asr-and-model.git
$ conda env create -f environment.yml
$ source activate py-kaldi-asr-client
$ ./asr_client.py asr.wav
INFO:root: 0.005s: 4000 frames ( 0.250s) decoded, status=200.
...
INFO:root:19.146s: 152000 frames ( 9.500s) decoded, status=200.
INFO:root:27.136s: 153003 frames ( 9.563s) decoded, status=200.
INFO:root: *****************************************************************
INFO:root: ** wavfn : asr.wav
INFO:root: ** hstr : speech recognition system requires training where individuals to exercise political system
INFO:root: ** confidence : -0.578844
INFO:root: ** decoding time : 27.14s
INFO:root: *****************************************************************Изображение Docker в примере выше - результат укладки 4 изображений друг на друга:
Docker-py-kaldi-asr-and-model: источник, изображение
Docker-Py-Kaldi-ASR: источник, изображение
Docker-Kaldi-ASR: источник, изображение
Debian: 8: https://hub.docker.com/_/debian/
Примечание : вероятно, неполный.
Пример установки зависимостей для Debian :
apt-get install build-essential pkg-config python-pip python-dev python-setuptools python-wheel ffmpeg sox libatlas-base-dev
# Create a symbolic link because one of the pip packages expect atlas in this location:
ln -s /usr/include/x86_64-linux-gnu/atlas /usr/include/atlas
pip install numpy nltk cython
pip install py-kaldi-asr py-nltools
Просто несколько грубых заметок в окружающей среде, необходимых для выполнения этих сценариев. Это никоим образом не является полным набором инструкций, просто несколько подсказок, которые вы можете начать.
~/.speechrc [speech]
vf_login = <your voxforge login>
speech_arc = /home/bofh/projects/ai/data/speech/arc
speech_corpora = /home/bofh/projects/ai/data/speech/corpora
kaldi_root = /apps/kaldi-cuda
; facebook's wav2letter++
w2l_env_activate = /home/bofh/projects/ai/w2l/bin/activate
w2l_train = /home/bofh/projects/ai/w2l/src/wav2letter/build/Train
w2l_decoder = /home/bofh/projects/ai/w2l/src/wav2letter/build/Decoder
wav16 = /home/bofh/projects/ai/data/speech/16kHz
noise_dir = /home/bofh/projects/ai/data/speech/corpora/noise
europarl_de = /home/bofh/projects/ai/data/corpora/de/europarl-v7.de-en.de
parole_de = /home/bofh/projects/ai/data/corpora/de/German Parole Corpus/DE_Parole/
europarl_en = /home/bofh/projects/ai/data/corpora/en/europarl-v7.de-en.en
cornell_movie_dialogs = /home/bofh/projects/ai/data/corpora/en/cornell_movie_dialogs_corpus
web_questions = /home/bofh/projects/ai/data/corpora/en/WebQuestions
yahoo_answers = /home/bofh/projects/ai/data/corpora/en/YahooAnswers
europarl_fr = /home/bofh/projects/ai/data/corpora/fr/europarl-v7.fr-en.fr
est_republicain = /home/bofh/projects/ai/data/corpora/fr/est_republicain.txt
wiktionary_de = /home/bofh/projects/ai/data/corpora/de/dewiktionary-20180320-pages-meta-current.xml
[tts]
host = localhost
port = 8300 Некоторые сценарии ожидают, что будет присутствовать локальный каталог tmp , расположенный в том же каталоге, где живут все сценарии, т.е.
mkdir tmpСледующий список содержит речевые корпорации, поддерживаемую этой коллекцией сценариев.
Forschergeist (немецкий, 2 часа):
<~/.speechrc:speech_arc>/forschergeist<~/.speechrc:speech_corpora>/forschergeistНемецкий пакет Speakdata Версия 2 (немецкий, 148 часов):
dev , test и train являются прямыми подкатариями <~/.speechrc:speech_arc>/gspv2 ../import_gspv2.py , чтобы преобразовать корпус в формат Voxforge. Полученный корпус будет записан на <~/.speechrc:speech_corpora>/gspv2 .Шум:
<~/.speechrc:speech_corpora>/ (он будет генерировать подкаталог noise )Librispeech asr (английский, 475 часов):
LibriSpeech - это прямой подкаталог <~/.speechrc:speech_arc> ../import_librispeech.py , чтобы преобразовать корпус в формат Voxforge. Полученный корпус будет записан в <~/.speechrc:speech_corpora>/librispeech .Набор данных речи LJ (английский, 24 часа):
LJSpeech-1.1 является прямым подкаталогером <~/.speechrc:speech_arc> .import_ljspeech.py , чтобы преобразовать корпус в формат Voxforge. Полученный корпус будет записан на <~/.speechrc:speech_corpora>/lindajohnson-11 .Mozilla Common Voice German (немецкий, 140 часов):
de.tar.gzcv_de является прямой подкаталогом <~/.speechrc:speech_arc> ../import_mozde.py , чтобы преобразовать корпус в формат Voxforge. Полученный корпус будет записан в <~/.speechrc:speech_corpora>/cv_de .Mozilla Common Voice v1 (английский, 252 часа):
cv_corpus_v1.tar.gzcv_corpus_v1 является прямым подкаталогером <~/.speechrc:speech_arc> ../import_mozcv1.py , чтобы преобразовать корпус в формат Voxforge. Полученный корпус будет записан в <~/.speechrc:speech_corpora>/cv_corpus_v1 .Мюнхенские лаборатории искусственного интеллекта GmbH (M-AILABS) Речевой набор данных (английский, 147 часов, немецкий, 237 часов, французский, 190 часов):
de_DE.tgz , en_UK.tgz , en_US.tgz , fr_FR.tgz (зеркало)m_ailabs в <~/.speechrc:speech_arc>m_ailabsby_book и перемещайте в него каталоги male и female./import_mailabs.py , чтобы преобразовать корпус в формат Voxforge. Результирующий корпус будет записан в <~/.speechrc:speech_corpora>/m_ailabs_en , <~/.speechrc:speech_corpora>/m_ailabs_de и <~/.speechrc:speech_corpora>/m_ailabs_fr .TED-Lium Release 3 (английский, 210 часов):
TEDLIUM_release-3.tgzTEDLIUM_release-3 является прямым подкаталогером <~/.speechrc:speech_arc> ../import_tedlium3.py , чтобы преобразовать корпус в формат Voxforge. Полученный корпус будет записан на <~/.speechrc:speech_corpora>/tedlium3 .Voxforge (английский, 75 часов):
<~/.speechrc:speech_arc>/voxforge_en<~/.speechrc:speech_corpora>/voxforge_enVoxforge (немецкий, 56 часов):
<~/.speechrc:speech_arc>/voxforge_de<~/.speechrc:speech_corpora>/voxforge_deVoxforge (французский, 140 часов):
<~/.speechrc:speech_arc>/voxforge_fr<~/.speechrc:speech_corpora>/voxforge_frЗамия (английский, 5 минут):
<~/.speechrc:speech_arc>/zamia_en<~/.speechrc:speech_corpora>/zamia_enЗамия (немецкий, 18 часов):
<~/.speechrc:speech_arc>/zamia_de<~/.speechrc:speech_corpora>/zamia_de Техническое примечание . Для большинства корпораций мы исправили транскрипты в наших базах данных, которые можно найти в data/src/speech/<corpus_name>/transcripts_*.csv . Поскольку они были созданы многими часами (полу-) ручного обзора, они должны быть более высокого качества, чем оригинальные подсказки, поэтому они будут использоваться во время обучения наших моделей ASR.
После того, как вы скачали и, при необходимости, конвертируют корпус, вам нужно запустить
./speech_audio_scan.py < corpus name >на нем. Это добавит недостающие подсказки в базы данных CSV и преобразует аудиофайлы в формат моно -волны 16 кГц.
Чтобы улучшить устойчивость к шуму, можно получить корпусы из существующих с добавленным шумом:
./speech_gen_noisy.py zamia_de
./speech_audio_scan.py zamia_de_noisy
cp data/src/speech/zamia_de/spk2gender data/src/speech/zamia_de_noisy/
cp data/src/speech/zamia_de/spk_test.txt data/src/speech/zamia_de_noisy/
./auto_review.py -a zamia_de_noisy
./apply_review.py -l de zamia_de_noisy review-result.csv Этот скрипт будет выполнять запись с помощью типичных телефонных кодеков. Такой корпус можно использовать для обучения моделей, которые поддерживают телефонные записи 8 кГц:
./speech_gen_phone.py zamia_de
./speech_audio_scan.py zamia_de_phone
cp data/src/speech/zamia_de/spk2gender data/src/speech/zamia_de_phone/
cp data/src/speech/zamia_de/spk_test.txt data/src/speech/zamia_de_phone/
./auto_review.py -a zamia_de_phone
./apply_review.py -l de zamia_de_phone review-result.csv Следующий список содержит текстовые корпорации, которые можно использовать для обучения языковых моделей со сценариями, содержащимися в этом репозитории:
Europarl, в частности, параллельный корпус немецко-английский и параллельный корпус французский английский:
.speechrc : europarl_de , europarl_en , europarl_fr./speech_sentences.py europarl_de , ./speech_sentences.py europarl_en и ./speech_sentences.py europarl_frКорнелл фильм-Dialogs Corpus:
.speechrc : cornell_movie_dialogs./speech_sentences.py cornell_movie_dialogsНемецкий условно -досрочное освобождение:
.speechrc : parole_de./speech_train_punkt_tokenizer.py , затем запустите ./speech_sentences.py parole_de Web -Questions: web_questions
.speechrc : web_questions./speech_sentences.py web_questions Yahoo! Набор данных ответов: yahoo_answers
.speechrc : yahoo_answers./speech_sentences.py yahoo_answers CNRTL EST Républicain Corpus, крупный корпус новостных статей (4,3 млн заголовков/пунктов) доступен по лицензии CC By-NC-SA. Загрузите XML-файлы и извлеките заголовки и параграфы в текстовый файл со следующей командой: xmllint --xpath '//*[local-name()="div"][@type="article"]//*[local-name()="p" or local-name()="head"]/text()' Annee*/*.xml | perl -pe 's/^ +//g ; s/^ (.+)/$1n/g ; chomp' > est_republicain.txt
.speechrc : est_republicain./speech_sentences.py est_republicainПредложения также могут быть извлечены из нашей речевой корпорации. Для этого беги:
Английская речевая корпуса
./speech_sentences.py voxforge_en./speech_sentences.py librispeech./speech_sentences.py zamia_en./speech_sentences.py cv_corpus_v1./speech_sentences.py ljspeech./speech_sentences.py m_ailabs_en./speech_sentences.py tedlium3Немецкая речевая корпорация
./speech_sentences.py forschergeist./speech_sentences.py gspv2./speech_sentences.py voxforge_de./speech_sentences.py zamia_de./speech_sentences.py m_ailabs_de./speech_sentences.py cv_deПредварительные условия:
europarl_en , cornell_movie_dialogs , web_questions и yahoo_answers , извлеченные предложения (см. Инструкции выше).librispeech , voxforge_en , zamia_en , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3Чтобы обучить небольшую, обрезку на английском языке, модель Ордена 4, используя Kenlm для использования как в Kaldi, так и в Wav2letter, строящихся пробега:
./speech_build_lm.py generic_en_lang_model_small europarl_en cornell_movie_dialogs web_questions yahoo_answers librispeech voxforge_en zamia_en cv_corpus_v1 ljspeech m_ailabs_en tedlium3Чтобы обучить большую модель порядка 6 с меньшей обрезкой:
./speech_build_lm.py -o 6 -p " 0 0 0 0 1 " generic_en_lang_model_large europarl_en cornell_movie_dialogs web_questions yahoo_answers librispeech voxforge_en zamia_en cv_corpus_v1 ljspeech m_ailabs_en tedlium3Чтобы обучить модель среднего размера заказа 5:
./speech_build_lm.py -o 5 -p " 0 0 1 2 " generic_en_lang_model_medium europarl_en cornell_movie_dialogs web_questions yahoo_answers librispeech voxforge_en zamia_en cv_corpus_v1 ljspeech m_ailabs_en tedlium3Предварительные условия:
europarl_de и parole_de , извлеченные предложения (см. Инструкции выше).forschergeist , gspv2 , voxforge_de , zamia_de , m_ailabs_de , cv_deЧтобы обучить небольшую, обрезку на немецком языке модель Ордена 4, используя Kenlm для использования как в Kaldi, так и в Wav2letter, строящихся пробега:
./speech_build_lm.py generic_de_lang_model_small europarl_de parole_de forschergeist gspv2 voxforge_de zamia_de m_ailabs_de cv_deЧтобы обучить большую модель порядка 6 с меньшей обрезкой:
./speech_build_lm.py -o 6 -p " 0 0 0 0 1 " generic_de_lang_model_large europarl_de parole_de forschergeist gspv2 voxforge_de zamia_de m_ailabs_de cv_deЧтобы обучить модель среднего размера заказа 5:
./speech_build_lm.py -o 5 -p " 0 0 1 2 " generic_de_lang_model_medium europarl_de parole_de forschergeist gspv2 voxforge_de zamia_de m_ailabs_de cv_deПредварительные условия:
europarl_fr и est_republicain , извлечены предложения (см. Инструкции выше).voxforge_fr и m_ailabs_frЧтобы обучить модель французского языка, используя kenlm run:
./speech_build_lm.py generic_fr_lang_model europarl_fr est_republicain voxforge_fr m_ailabs_frОсновным инструментом, используемым для обзора представления, транскрипции и расширения лексикона:
./speech_editor.pyПримечание : мы используем термины Lexicon и Dictionary взаимозаменяемо в этой документации и наших сценариях.
В настоящее время у нас есть две лексики, одна для английского языка и одна для немецкого языка (в data/src/dicts ):
dict-en.ipa
dict-de.ipa
Нативный формат нашей лексики находится в (UTF8) IPA с полуколонами в качестве сепаратора. Этот формат затем преобразуется в любой формат, используемый целевым двигателем ASR соответствующими экспортными сценариями.
Многие инструменты, связанные с лексикой, полагаются на Sequitur G2P для вычисления произношения для слов, отсутствующих в словаре. Необходимые модели могут быть загружены с нашего файлового сервера: http://goofy.zamia.org/zamia-speech/g2p/. Для установки, загрузите и распакуйте их, а затем поместите ссылки на них в соответствии с data/models как SO:
data/models/sequitur-dict-de.ipa-latest - > < your model dir > /sequitur-dict-de.ipa-r20180510
data/models/sequitur-dict-en.ipa-latest - > < your model dir > /sequitur-dict-en.ipa-r20180510Чтобы обучить свои собственные модели Sequitur G2P, используйте предоставленные сценарии экспорта и поездов, например:
[guenter@dagobert speech]$ ./speech_sequitur_export.py -d dict-de.ipa
INFO:root:loading lexicon...
INFO:root:loading lexicon...done.
INFO:root:sequitur workdir data/dst/dict-models/dict-de.ipa/sequitur done.
[guenter@dagobert speech]$ ./speech_sequitur_train.sh dict-de.ipa
training sample: 322760 + 16988 devel
iteration: 0
..../speech_lex_edit.py word [word2 ...]является основным проклятым интерактивным редактором лексиконов. Он автоматически производит записи кандидатов для новых слов, используя Sequitur G2P, Marytts и Espeakng. Пользователь может затем редактировать эти записи вручную, если это необходимо, и проверить их, слушая, как они синтезируются через Marytts в разных голосах.
Редактор Lexicon также интегрирован в различные другие инструменты, в частности, speech_editor.py , который позволяет транскрибировать, просмотреть и добавлять недостающие слова для новых аудио -пробы в одном инструменте - который рекомендуется.
Я также склонен время от времени пересматривать записи Lexicon. Для этого у меня есть небольшой сценарий, который выберет 20 случайных записей, в которых Secititur G2P не согласен с текущей транскрипцией в лексике:
./speech_lex_edit.py ` ./speech_lex_review.py `Кроме того, иногда я использую эту команду, чтобы добавить пропущенные слова из транскриптов в пакетном режиме:
./speech_lex_edit.py ` ./speech_lex_missing.py ` Для немецкой лексики записи могут быть извлечены из немецкого викинга с использованием набора сценариев. Для этого первым шагом является извлечение набора записей кандидатов из викиндового XML -дампа:
./wiktionary_extract_ipa.py Это будет выводить извлеченные записи в data/dst/speech/de/dict_wiktionary_de.txt . Теперь нам нужно обучить модель Sequitur G2P, которая переводит эти записи в наш собственный стиль IPA и фонема:
./wiktionary_sequitur_export.py
./wiktionary_sequitur_train.shНаконец, мы переводим записи и проверяем их на предсказаниях нашей обычной модели Secititur G2P:
./wiktionary_sequitur_gen.py Этот скрипт создает два выходных файла: data/dst/speech/de/dict_wiktionary_gen.txt содержит приемлемые записи, data/dst/speech/de/dict_wiktionary_rej.txt содержит отклоненные записи.
Следующие рецепты поезжают модели Kaldi для английского.
Перед тем, как запустить его, убедитесь, что все предпосылки выполняются (см. Выше инструкции по ним):
generic_en_lang_model_small встроенvoxforge_en , librispeech , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3 и zamia_en устанавливаются, преобразованы и сканируются.voxforge_en_noisy , voxforge_en_phone , librispeech_en_noisy , librispeech_en_phone , cv_corpus_v1_noisy , cv_corpus_v1_phone , zamia_en_noisy и zamia_en_phone ./speech_kaldi_export.py generic-en-small dict-en.ipa generic_en_lang_model_small voxforge_en librispeech zamia_en
cd data/dst/asr-models/kaldi/generic-en-small
./run-chain.shЭкспорт пробегает с шумом, включенными в корпорацию:
./speech_kaldi_export.py generic-en dict-en.ipa generic_en_lang_model_small voxforge_en cv_corpus_v1 librispeech ljspeech m_ailabs_en tedlium3 zamia_en voxforge_en_noisy librispeech_noisy cv_corpus_v1_noisy cv_corpus_v1_phone zamia_en_noisy voxforge_en_phone librispeech_phone zamia_en_phoneСледующие рецепты поезда поезда калди для немецкого языка.
Перед тем, как запустить его, убедитесь, что все предпосылки выполняются (см. Выше инструкции по ним):
generic_de_lang_model_small встроенvoxforge_de , gspv2 , forschergeist , zamia_de , m_ailabs_de , cv_de установлены, преобразованы и сканируются.voxforge_de_noisy , voxforge_de_phone , zamia_de_noisy и zamia_de_phone ./speech_kaldi_export.py generic-de-small dict-de.ipa generic_de_lang_model_small voxforge_de gspv2 [ forschergeist zamia_de ...]
cd data/dst/asr-models/kaldi/generic-de-small
./run-chain.shЭкспорт пробегает с шумом, включенными в корпорацию:
./speech_kaldi_export.py generic-de dict-de.ipa generic_de_lang_model_small voxforge_de gspv2 forschergeist zamia_de voxforge_de_noisy voxforge_de_phone zamia_de_noisy zamia_de_phone m_ailabs_de cv_deДля автономного инструмента адаптации модели Kaldi, который не требует полной настройки Zamia-Speek, см.
Калди-Адапт-ЛМ
Существующие модели Kaldi (например, те, которые мы предоставляем для загрузки, но также и те, которые вы можете тренировать с нуля, используя наши сценарии), могут быть адаптированы к (обычно доменным) языковым моделям, грамматике JSGF и грамматике FST.
Вот пример, как адаптировать нашу английскую модель к простой команде и управлению грамматикой JSGF. Обратите внимание, что это просто игрушечный пример - для использования в реальном мире вы, вероятно, захотите добавить петли мусора в грамматику или создать языковую модель, которая сразу же имеет какую -то шумостойкость.
Вот грамматика, которую мы будем использовать:
#JSGF V1.0;
grammar org.zamia.control;
public <control> = <wake> | <politeCommand> ;
<wake> = ( good morning | hello | ok | activate ) computer;
<politeCommand> = [ please | kindly | could you ] <command> [ please | thanks | thank you ];
<command> = <onOffCommand> | <muteCommand> | <volumeCommand> | <weatherCommand>;
<onOffCommand> = [ turn | switch ] [the] ( light | fan | music | radio ) (on | off) ;
<volumeCommand> = turn ( up | down ) the ( volume | music | radio ) ;
<muteCommand> = mute the ( music | radio ) ;
<weatherCommand> = (what's | what) is the ( temperature | weather ) ;
Следующим шагом является создание эксперимента по адаптации модели Калди, используя этот сценарий:
./speech_kaldi_adapt.py data/models/kaldi-generic-en-tdnn_250-latest dict-en.ipa control.jsgf control-en Здесь, data/models/kaldi-generic-en-tdnn_250-latest -это модель, которая должна быть адаптирована, dict-en.ipa control-en это словарь, который будет использоваться новой моделью, control.jsgf -это грамматика JSGF, которую мы хотим, чтобы модель была адаптирована к (вы могли бы указать исходный файл FST или языковая модель, и это будет новая модель.
Чтобы запустить фактическую адаптацию, перейдите в каталог модели и запустите сценарий адаптации:
cd data/dst/asr-models/kaldi/control-en
./run-adaptation.sh Наконец, вы можете создать тарбол из недавно созданной модели:
cd ../../../../..
./speech_dist.sh control-en kaldi adapt./wav2letter_export.py -l en -v generic-en dict-en.ipa generic_en_lang_model_large voxforge_en cv_corpus_v1 librispeech ljspeech m_ailabs_en tedlium3 zamia_en voxforge_en_noisy librispeech_noisy cv_corpus_v1_noisy cv_corpus_v1_phone zamia_en_noisy voxforge_en_phone librispeech_phone zamia_en_phone
pushd data/dst/asr-models/wav2letter/generic-en/
bash run_train.sh./wav2letter_export.py -l de -v generic-de dict-de.ipa generic_de_lang_model_large voxforge_de gspv2 forschergeist zamia_de voxforge_de_noisy voxforge_de_phone zamia_de_noisy zamia_de_phone m_ailabs_de cv_de
pushd data/dst/asr-models/wav2letter/generic-de/
bash run_train.shСоздать Auto-Review Case:
./wav2letter_auto_review.py -l de w2l-generic-de-latest gspv2запустить это:
pushd tmp/w2letter_auto_review
bash run_auto_review.sh
popdПримените результаты:
./wav2letter_apply_review.pyНекоторые примечания о том, как сегментировать и транскрибировать аудиокниги или другие источники аудио (например, от Librivox), используя предоставленные сценарии Abook:
Mp3
```bash
ffmpeg -i foo.mp3 foo.wav
```
MKV
mkvextract tracks foo.mkv 0:foo.ogg
opusdec foo.ogg foo.wavsox foo.wav -r 16000 -c 1 -b 16 foo_16m.wavЭтот инструмент будет использовать обнаружение молчания, чтобы найти хорошие точки выреза. Возможно, вы захотите настроить его настройки, чтобы достичь хорошего баланса коротких промежутков, но несколько слов разделились пополам.
./abook-segment.py foo_16m.wavнастройки:
[guenter@dagobert speech]$ ./abook-segment.py -h
Usage: abook-segment.py [options] foo.wav
Options:
-h, --help show this help message and exit
-s SILENCE_LEVEL, --silence-level=SILENCE_LEVEL
silence level (default: 2048 / 65536)
-l MIN_SIL_LENGTH, --min-sil-length=MIN_SIL_LENGTH
minimum silence length (default: 0.07s)
-m MIN_UTT_LENGTH, --min-utt-length=MIN_UTT_LENGTH
minimum utterance length (default: 2.00s)
-M MAX_UTT_LENGTH, --max-utt-length=MAX_UTT_LENGTH
maximum utterance length (default: 9.00s)
-o OUTDIRFN, --out-dir=OUTDIRFN
output directory (default: abook/segments)
-v, --verbose enable debug outputпо умолчанию, полученные сегменты окажутся в Abook/Segments
Инструмент транскрипции поддерживает до двух динамиков, которые вы можете указать в командной строке. Полученные в результате Voxforge-Packages в конечном итоге окажутся в Abook/Out по умолчанию.
./abook-transcribe.py -s speaker1 -S speaker2 abook/segments/Некоторые примечания о том, как сегментировать и транскрибировать полуавтоматические аудиокниги или другие источники звука (например, из Librivox), используя Kaldi:
Наши сценарии полагаются на схему фиксированного каталога. Поскольку сегментация записей Librivox является одним из основных применений этих сценариев, здесь используется их терминология книг и разделов. Для каждого раздела книги необходимы два исходных файла: волновой файл, содержащий аудио, и текстовый файл, содержащий стенограмму.
Фиксированная схема именования используется для тех, что иллюстрируется этим примером:
abook/in/librivox/11442-toten-seelen/evak-11442-toten-seelen-1.txt abook/in/librivox/11442-toten-seelen/evak-11442-toten-seelen-1.wav abook/in/librivox/11442-toten-seelen/evak-11442-toten-seelen-2.txt abook/in/librivox/11442-toten-seelen/evak-11442-toten-seelen-2.wav ...
Сценарий abook-librivox.py предоставляется для помощи в поиске записей Librivox и создании структуры каталога. Обратите внимание, что на данный момент инструмент не будет получать транскрипты автоматически, но будет создавать пустые файлы .txt (в соответствии с схемой именования), которые вам придется заполнить вручную.
Тем не менее, этот инструмент будет преобразовать полученный звук в формат Mono WAV 16 кГц, как требуется сценарии сегментации. Если вы собираетесь сегментировать материал из других источников, обязательно преобразуйте его в этот формат. Для предложений о том, какие инструменты использовать для этого шага, пожалуйста, обратитесь к инструкциям по ручной сегментации в предыдущем разделе.
Примечание . Поскольку процесс Калди параллелизирован для массовой сегментации, для работы процесса необходимы не менее 4 файлов аудио и быстрого хода.
Этот инструмент будет токеном токенов OOV токенов. Затем они могут быть заменены или добавлены в словарь:
./abook-preprocess-transcript.py abook/in/librivox/11442-toten-Seelen/evak-11442-toten-Seelen-1.txtЧтобы автоматическая сегментация работала, нам нужна модель GMM, которая адаптирована к текущему словару (которая, вероятно, должна была быть расширена во время предварительной обработки транскрипта), а также использует языковую модель, которая охватывает подсказки.
Во -первых, мы создаем языковую модель, настроенную для нашей цели:
./abook-sentences.py abook/in/librivox/11442-toten-Seelen/ * .prompt
./speech_build_lm.py abook_lang_model abook abook abook parole_deТеперь мы можем создать адаптированную модель, используя эту языковую модель и наш текущий дикта:
./speech_kaldi_adapt.py data/models/kaldi-generic-de-tri2b_chain-latest dict-de.ipa data/dst/lm/abook_lang_model/lm.arpa abook-de
pushd data/dst/asr-models/kaldi/abook-de
./run-adaptation.sh
popd
./speech_dist.sh -c abook-de kaldi adapt
tar xfvJ data/dist/asr-models/kaldi-abook-de-adapt-current.tar.xz -C data/models/Далее нам нужно создать структуру и файлы каталогов Kaldi для автоматической сегментации:
./abook-kaldi-segment.py data/models/kaldi-abook-de-adapt-current abook/in/librivox/11442-toten-SeelenТеперь мы можем запустить сегментацию:
pushd data/dst/speech/asr-models/kaldi/segmentation
./run-segmentation.sh
popd Наконец, мы можем получить результат сегментации в формате Voxforge:
./abook-kaldi-retrieve.py abook/in/librivox/11442-toten-Seelen/Zamia-TTS-это экспериментальный проект, который пытается обучить голоса TTS на основе (рассмотренных) данных Zamia-Speech. Загрузки здесь:
https://goofy.zamia.org/zamia-speech/tts/
В этом разделе описывается, как обучать голоса для реализации Nvidia Tacotron 2. Полученные голоса будут иметь скорость дискретизации 16 кГц, так как это скорость дискретизации по умолчанию, используемая для обучения модели Zamia ASR. Это означает, что вам придется использовать модель волновых хлопков 16 кГц, которую вы можете найти, вместе с предварительно проживающими голосами и образцами волн здесь:
https://goofy.zamia.org/zamia-speech/tts/tacotron2/
Теперь, когда это не так, обучение модели Tacotron 2 довольно проста. Первый шаг - экспортировать FileLists для голоса, который вы хотели бы тренировать, например:
./speech_tacotron2_export.py -l en -o ../torch/tacotron2/filelists m_ailabs_en mailabselliotmillerЗатем переодеться в свой учебный каталог Tacotron 2
cd ../torch/tacotron2и укажите списки файлов, скорость выборки и размер партии в 'hparams.py' ':
diff --git a/hparams.py b/hparams.py
index 8886f18..75e89c9 100644
--- a/hparams.py
+++ b/hparams.py
@@ -25,15 +25,19 @@ def create_hparams(hparams_string=None, verbose=False):
# Data Parameters #
################################
load_mel_from_disk=False,
- training_files='filelists/ljs_audio_text_train_filelist.txt',
- validation_files='filelists/ljs_audio_text_val_filelist.txt',
- text_cleaners=['english_cleaners'],
+ training_files='filelists/mailabselliotmiller_train_filelist.txt',
+ validation_files='filelists/mailabselliotmiller_val_filelist.txt',
+ text_cleaners=['basic_cleaners'],
################################
# Audio Parameters #
################################
max_wav_value=32768.0,
- sampling_rate=22050,
+ #sampling_rate=22050,
+ sampling_rate=16000,
filter_length=1024,
hop_length=256,
win_length=1024,
@@ -81,7 +85,8 @@ def create_hparams(hparams_string=None, verbose=False):
learning_rate=1e-3,
weight_decay=1e-6,
grad_clip_thresh=1.0,
- batch_size=64,
+ # batch_size=64,
+ batch_size=16,
mask_padding=True # set model's padded outputs to padded values
)
и начать обучение:
python train.py --output_directory=elliot --log_directory=elliot/logs./ztts_prepare.py -l en m_ailabs_en mailabselliotmiller elliot./ztts_train.py -v elliot 2>&1 | tee train_elliot.log Чтобы построить тарболы из моделей, используйте сценарий speech-dist.sh , например:
./speech_dist.sh generic-en kaldi tdnn_sp
Мои собственные сценарии, а также данные, которые я создаю (т.е. Lexicon и Transcripts), являются лицензированы LGPLV3, если не указано иное в заголовках авторских прав сценария.
Некоторые сценарии и файлы основаны на работах других, в этих случаях я намерен сохранить исходную лицензию нетронутой. Пожалуйста, не забудьте проверить заголовки авторских прав внутри для получения дополнительной информации.