Python Scripts pour calculer des modèles audio et linguistiques à partir de données voxforge.org et de nombreuses sources. Les modèles qui peuvent être construits comprennent:
IMPORTANT : Veuillez noter que ces scripts ne formèrent en aucun cas une application complète prête pour la consommation d'utilisateurs finaux. Cependant, si vous êtes un développeur intéressé par le traitement du langage naturel, vous pouvez trouver certains d'entre eux utiles. Les contributions, les correctifs et les demandes de traction sont les bienvenues.
Au moment d'écrire ces lignes, les scripts ici sont axés sur la construction des modèles Voxforge anglais et allemand. Cependant, il n'y a aucune raison pour qu'ils ne puissent pas être utilisés pour construire d'autres modèles de langue, n'hésitez pas à apporter leur soutien à ceux-ci.
Créé par GH-MD-TOC
Nous avons divers modèles plus code source et binaires pour les outils utilisés pour créer ces modèles disponibles en téléchargement. Tout est gratuit et open source.
Tous nos modèles et nos téléchargements de données peuvent être trouvés ici: téléchargements
Nos modèles ASR pré-construits peuvent être téléchargés ici: modèles ASR
kaldi-generic-en-tdnn_f grand modèle TDNN factorisé de chaîne NNET3, formé sur ~ 1200 heures d'audio. A une résistance au bruit de fond décent et peut également être utilisée sur les enregistrements téléphoniques. Devrait fournir la meilleure précision, mais est un peu plus intensif en ressources que les autres modèles.kaldi-generic-en-tdnn_sp grand modèle de chaîne NNET3, formé sur ~ 1200 heures d'audio. A une résistance au bruit de fond décent et peut également être utilisée sur les enregistrements téléphoniques. Moins précis mais aussi légèrement moins intensif en ressources que le modèle tddn_f .kaldi-generic-en-tdnn_250 identique aux modèles plus grands mais moins à intensité des ressources, adaptés à une utilisation dans des applications intégrées (par exemple, un framboise 3).kaldi-generic-en-tri2b_chain GMM, formé sur les mêmes données que les deux modèles ci-dessus - destinés aux tâches de segmentation automatique.kaldi-generic-de-tdnn_f Grand modèle de chaîne NNET3, formé sur ~ 400 heures d'audio. A une résistance au bruit de fond décent et peut également être utilisée sur les enregistrements téléphoniques.kaldi-generic-de-tdnn_250 Identique au grand modèle mais moins intensif en ressources, adapté à une utilisation dans les applications embarquées (par exemple A Raspberrypi 3).kaldi-generic-de-tri2b_chain GMM, formé sur les mêmes données que les deux modèles ci-dessus - destinés aux tâches de segmentation automatique.w2l-generic-de grand modèle, formé sur environ 400 heures d'audio. A une résistance au bruit de fond décent et peut également être utilisée sur les enregistrements téléphoniques.Remarque : il est important de réaliser que ces modèles peuvent et doivent être adaptés à votre domaine d'application. Voir l'adaptation du modèle pour plus de détails.
Nos dictionnaires peuvent être téléchargés ici: les dictionnaires
dict-en.ipa basé sur CMudict avec de nombreuses entrées supplémentaires générées via Sequitur G2P.dict-de.ipa créé manuellement à partir de zéro avec de nombreuses entrées supplémentaires à évaluation automatique extraites de Wiktionary. Nos modèles G2P pré-construits peuvent être téléchargés ici: les modèles G2P
sequitur-dict-en.ipa SEQUUR G2P Modèle formé sur notre dictionnaire IPA anglais (UTF8).sequitur-dict-de.ipa Sequitur G2P modèle formé sur notre dictionnaire IPA allemand (UTF8). Nos modèles de langage ARPA pré-construits peuvent être téléchargés ici: Modèles de langue
generic_en_lang_model_smallgeneric_en_lang_model_largegeneric_de_lang_model_smallgeneric_de_lang_model_large Téléchargez quelques exemples de fichiers d'onde
$ 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]les déballer:
$ tar xfvz demo_wavs.tgz
demo1.wav
demo2.wav
demo3.wav
demo4.wavTélécharger le programme de démonstration
$ 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]Maintenant, exécutez la reconnaissance de la parole automatique de Kaldi sur les fichiers de démonstration de démo:
$ 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 Déterminez le nom de votre source de micro PulseAudio:
$ 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
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Télécharger et exécuter la démo:
$ 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 Pour démarrer le service STT sur votre machine locale, exécutez:
$ 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-r20180611Pour transférer un fichier audio pour la transcription au service, dans un deuxième terminal, exécutez:
$ 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: *****************************************************************L'image Docker dans l'exemple ci-dessus est le résultat de l'empilement de 4 images les unes sur les autres:
docker-py-kaldi-asr-and-model: source, image
docker-py-kaldi-asr: source, image
docker-kaldi-asr: source, image
Debian: 8: https://hub.docker.com/_/debian/
Remarque : probablement incomplet.
Exemple d'installation des dépendances pour 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
Juste quelques notes approximatives sur l'environnement nécessaire pour faire fonctionner ces scripts. Ce n'est en aucun cas un ensemble complet d'instructions, juste quelques indices pour vous aider à démarrer.
~/.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 Certains scripts s'attendent à ce que le répertoire local tmp soit présent, situé dans le même répertoire où vivent tous les scripts, c'est-à-dire
mkdir tmpLa liste suivante contient des corpus de discours pris en charge par cette collection de scripts.
Forscherist (allemand, 2 heures):
<~/.speechrc:speech_arc>/forschergeist<~/.speechrc:speech_corpora>/forschergeistPack de discours allemand version 2 (allemand, 148 heures):
dev , test et train sont des sous-répertoires directs de <~/.speechrc:speech_arc>/gspv2 ../import_gspv2.py pour convertir le corpus au format voxforge. Le corpus résultant sera écrit à <~/.speechrc:speech_corpora>/gspv2 .Bruit:
<~/.speechrc:speech_corpora>/ (il générera un sous-répertoire noise là-bas)LibRispenech ASR (anglais, 475 heures):
LibriSpeech est un sous-répertoire direct de <~/.speechrc:speech_arc> ../import_librispeech.py pour convertir le corpus au format voxforge. Le corpus résultant sera écrit à <~/.speechrc:speech_corpora>/librispeech .L'ensemble de données de discours LJ (anglais, 24 heures):
LJSpeech-1.1 est un sous-répertoire direct de <~/.speechrc:speech_arc> .import_ljspeech.py pour convertir le corpus au format VoxForge. Le corpus résultant sera écrit à <~/.speechrc:speech_corpora>/lindajohnson-11 .Mozilla Common Voice allemand (allemand, 140 heures):
de.tar.gzcv_de est un sous-répertoire direct de <~/.speechrc:speech_arc> ../import_mozde.py pour convertir le corpus au format voxforge. Le corpus résultant sera écrit à <~/.speechrc:speech_corpora>/cv_de .Mozilla Common Voice v1 (anglais, 252 heures):
cv_corpus_v1.tar.gzcv_corpus_v1 est un sous-répertoire direct de <~/.speechrc:speech_arc> ../import_mozcv1.py pour convertir le corpus au format voxforge. Le corpus résultant sera écrit à <~/.speechrc:speech_corpora>/cv_corpus_v1 .Munich Artificial Intelligence Laboratories GmbH (M-ailabs) Dataset de données (anglais, 147 heures, allemand, 237 heures, français, 190 heures):
de_DE.tgz , en_UK.tgz , en_US.tgz , fr_FR.tgz (miroir)m_ailabs dans <~/.speechrc:speech_arc>m_ailabsby_book et déplacez les répertoires male et female car les archives ne suivent pas exactement les structures anglaises et allemandes./import_mailabs.py pour convertir le corpus au format voxforge. Le corpus résultant sera écrit à <~/.speechrc:speech_corpora>/m_ailabs_en , <~/.speechrc:speech_corpora>/m_ailabs_de et <~/.speechrc:speech_corpora>/m_ailabs_fr .Ted-Lium Release 3 (anglais, 210 heures):
TEDLIUM_release-3.tgzTEDLIUM_release-3 est un sous-répertoire direct de <~/.speechrc:speech_arc> ../import_tedlium3.py pour convertir le corpus au format voxforge. Le corpus résultant sera écrit à <~/.speechrc:speech_corpora>/tedlium3 .Voxforge (anglais, 75 heures):
<~/.speechrc:speech_arc>/voxforge_en<~/.speechrc:speech_corpora>/voxforge_enVoxforge (allemand, 56 heures):
<~/.speechrc:speech_arc>/voxforge_de<~/.speechrc:speech_corpora>/voxforge_deVoxforge (français, 140 heures):
<~/.speechrc:speech_arc>/voxforge_fr<~/.speechrc:speech_corpora>/voxforge_frZamia (anglais, 5 minutes):
<~/.speechrc:speech_arc>/zamia_en<~/.speechrc:speech_corpora>/zamia_enZamia (allemand, 18 heures):
<~/.speechrc:speech_arc>/zamia_de<~/.speechrc:speech_corpora>/zamia_de Remarque technique : Pour la plupart des corpus, nous avons corrigé des transcriptions dans nos bases de données qui peuvent être trouvées dans data/src/speech/<corpus_name>/transcripts_*.csv . CSV. Comme ceux-ci ont été créés par de nombreuses heures d'examen manuel (semi-), ils devraient être de meilleure qualité que les invites d'origine afin qu'elles soient utilisées pendant la formation de nos modèles ASR.
Une fois que vous avez téléchargé et, si nécessaire, converti un corpus, vous devez exécuter
./speech_audio_scan.py < corpus name >dessus. Cela ajoutera des invites manquantes aux bases de données CSV et convertira les fichiers audio au format mono-onde de 16 kHz.
Pour améliorer la résistance au bruit, il est possible de dériver les corpus de ceux existants avec du bruit ajouté:
./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 Ce script exécutera l'enregistrement via des codecs téléphoniques typiques. Un tel corpus peut être utilisé pour former des modèles qui prennent en charge les enregistrements téléphoniques de 8 kHz:
./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 La liste suivante contient des corpus de texte qui peuvent être utilisés pour former des modèles de langage avec les scripts contenus dans ce référentiel:
Europarl, spécifiquement parallèle Corpus allemand-anglais et parallèle Corpus français-anglais:
.speechrc : europarl_de , europarl_en , europarl_fr./speech_sentences.py europarl_de , ./speech_sentences.py europarl_en et ./speech_sentences.py europarl_frCornell Movie - Dialogs Corpus:
.speechrc : cornell_movie_dialogs./speech_sentences.py cornell_movie_dialogsCorpus de parole allemande:
.speechrc : parole_de./speech_train_punkt_tokenizer.py , puis exécutez ./speech_sentences.py parole_de WebQuertions: web_questions
.speechrc : web_questions./speech_sentences.py web_questions Yahoo! Answers DataSet: yahoo_answers
.speechrc : yahoo_answers./speech_sentences.py yahoo_answers CNRTL EST RÉPUBLICAIN Corpus, grand corpus d'articles de presse (4,3 millions de titres / paragraphes) disponibles sous une licence CC BY-NC-SA. Téléchargez des fichiers XML et extraire les titres et les paragraphes dans un fichier texte avec la commande suivante: 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_republicainLes phrases peuvent également être extraites de nos corpus de discours. Pour ce faire, courez:
Corpus de discours d'anglais
./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 tedlium3Corpus de discours allemands
./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_dePrérequis:
europarl_en , cornell_movie_dialogs , web_questions et yahoo_answers sont installées, des phrases extraites (voir les instructions ci-dessus).librispeech , voxforge_en , zamia_en , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3Pour former un petit modèle de langue anglaise élaguée de l'ordre 4 en utilisant Kenlm pour une utilisation dans les builds Kaldi et 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 tedlium3Pour former un modèle plus large de l'ordre 6 avec moins d'élagage:
./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 tedlium3Pour entraîner un modèle de taille moyenne de l'ordre 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 tedlium3Prérequis:
europarl_de et parole_de sont installés, des phrases extraites (voir les instructions ci-dessus).forschergeist , gspv2 , voxforge_de , zamia_de , m_ailabs_de , cv_dePour former un petit modèle de langue allemande élaguée de l'ordre 4 en utilisant Kenlm pour une utilisation dans les constructions Kaldi et Wav2letter:
./speech_build_lm.py generic_de_lang_model_small europarl_de parole_de forschergeist gspv2 voxforge_de zamia_de m_ailabs_de cv_dePour former un modèle plus large de l'ordre 6 avec moins d'élagage:
./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_dePour entraîner un modèle de taille moyenne de l'ordre 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_dePrérequis:
europarl_fr et est_republicain sont installés, des phrases extraites (voir les instructions ci-dessus).voxforge_fr et m_ailabs_frPour former un modèle de langue française en utilisant Kenlm Run:
./speech_build_lm.py generic_fr_lang_model europarl_fr est_republicain voxforge_fr m_ailabs_frL'outil principal utilisé pour l'examen de la soumission, la transcription et l'expansion du lexique est:
./speech_editor.pyRemarque : Nous utilisons les termes lexique et le dictionnaire de manière interchangable dans cette documentation et nos scripts.
Actuellement, nous avons deux lexiques, un pour l'anglais et un pour l'allemand (en data/src/dicts ):
dict-en.ipa
dict-de.ipa
Le format natif de notre lexique est dans (UTF8) IPA avec des demi-colons comme séparateur. Ce format est ensuite converti en n'importe quel format utilisé par le moteur ASR cible par les scripts d'exportation correspondants.
De nombreux outils liés au lexique s'appuient sur SEQUUR G2P pour calculer les prononciations pour les mots manquants du dictionnaire. Les modèles nécessaires peuvent être téléchargés à partir de notre serveur de fichiers: http://goofy.zamia.org/zamia-speech/g2p/. Pour l'installation, téléchargez-les et déballer, puis mettez des liens vers eux sous data/models comme ainsi:
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-r20180510Pour former vos propres modèles G2P Sequoitur, utilisez les scripts d'exportation et de train fournis, par exemple:
[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 ...]est le rédacteur en chef du lexique interactif basé sur les malédises. Il produira automatiquement des entrées de candidats pour de nouveaux mots à l'aide de Sequitur G2P, Marytts et Espeakng. L'utilisateur peut ensuite modifier ces entrées manuellement si nécessaire et les vérifier en les écoutant synthétisées via Marytts dans différentes voix.
L'éditeur de lexique est également intégré à divers autres outils, speech_editor.py en particulier qui vous permet de transcrire, examiner et ajouter des mots manquants pour de nouveaux échantillons audio dans un seul outil - qui est recommandé.
J'ai également tendance à passer en revue les entrées de lexique au hasard de temps en temps. Pour cela, j'ai un petit script qui choisira 20 entrées aléatoires où SEQUUR G2P n'est pas d'accord avec la transcription actuelle dans le lexique:
./speech_lex_edit.py ` ./speech_lex_review.py `De plus, j'utilise parfois cette commande pour ajouter des mots manquants des transcriptions en mode lot:
./speech_lex_edit.py ` ./speech_lex_missing.py ` Pour le lexique allemand, les inscriptions peuvent être extraites du Wiktionary allemand à l'aide d'un ensemble de scripts. Pour ce faire, la première étape consiste à extraire un ensemble d'entrées de candidats à partir d'un vidage XML Wiktionary:
./wiktionary_extract_ipa.py Cela sortira des entrées extraites des data/dst/speech/de/dict_wiktionary_de.txt . Nous devons maintenant former un modèle G2P Sequitur qui traduit ces entrées dans notre propre style IPA et un ensemble de phonèmes:
./wiktionary_sequitur_export.py
./wiktionary_sequitur_train.shEnfin, nous traduisons les entrées et les vérifions par rapport aux prédictions de notre modèle G2P Secutur ordinaire:
./wiktionary_sequitur_gen.py Ce script produit deux fichiers de sortie: data/dst/speech/de/dict_wiktionary_gen.txt contient des entrées acceptables, data/dst/speech/de/dict_wiktionary_rej.txt contient des entrées rejetées.
La recette suivante forme des modèles Kaldi pour l'anglais.
Avant de l'exécuter, assurez-vous que toutes les conditions préalables sont remplies (voir ci-dessus pour des instructions à ce sujet):
generic_en_lang_model_small construitvoxforge_en , librispeech , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3 et zamia_en sont installés, convertis et scannés.voxforge_en_noisy , voxforge_en_phone , librispeech_en_noisy , librispeech_en_phone , cv_corpus_v1_noisy , cv_corpus_v1_phone , zamia_en_noisy et 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.shL'exportation avec les corpus augmentés au bruit comprenait:
./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_phoneLa recette suivante forme des modèles Kaldi pour l'allemand.
Avant de l'exécuter, assurez-vous que toutes les conditions préalables sont remplies (voir ci-dessus pour des instructions à ce sujet):
generic_de_lang_model_small construitvoxforge_de , gspv2 , forschergeist , zamia_de , m_ailabs_de , cv_de sont installés, convertis et scannés.voxforge_de_noisy , voxforge_de_phone , zamia_de_noisy et 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.shL'exportation avec les corpus augmentés au bruit comprenait:
./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_dePour un outil d'adaptation du modèle Kaldi autonome qui ne nécessite pas de configuration complète de zamia-discours, voir
kaldi-adapt-lm
Les modèles Kaldi existants (comme ceux que nous fournissons pour le téléchargement mais aussi ceux que vous pouvez vous entraîner à partir de zéro à l'aide de nos scripts) peuvent être adaptés aux modèles de langage (généralement spécifiques au domaine), aux grammaires JSGF et aux FST de grammaire.
Voici un exemple comment adapter notre modèle anglais à une simple commande et contrôler la grammaire JSGF. Veuillez noter que ce n'est qu'un exemple de jouet - pour une utilisation réelle du monde, vous voudrez probablement ajouter des boucles de phonèmes à ordures à la grammaire ou produire un modèle de langue qui a une certaine résistance au bruit intégrée immédiatement.
Voici la grammaire que nous utiliserons:
#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 ) ;
L'étape suivante consiste à configurer une expérience d'adaptation du modèle Kaldi en utilisant ce script:
./speech_kaldi_adapt.py data/models/kaldi-generic-en-tdnn_250-latest dict-en.ipa control.jsgf control-en Ici, data/models/kaldi-generic-en-tdnn_250-latest est le modèle à adapter, dict-en.ipa est le dictionnaire qui sera utilisé par le nouveau modèle, control.jsgf est la grammaire JSGF que nous voulons que le modèle soit adapté pour (vous pourriez spécifier un nouveau modèle de source ou un modèle linguistique) et control-en est le nom du modèle qui sera créé.
Pour exécuter l'adaptation réelle, passez dans le répertoire du modèle et exécutez le script d'adaptation là-bas:
cd data/dst/asr-models/kaldi/control-en
./run-adaptation.sh Enfin, vous pouvez créer un tarball à partir du modèle nouvellement créé:
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.shCréer un cas de révision automatique:
./wav2letter_auto_review.py -l de w2l-generic-de-latest gspv2Exécutez-le:
pushd tmp/w2letter_auto_review
bash run_auto_review.sh
popdAppliquer les résultats:
./wav2letter_apply_review.pyQuelques notes sur la façon de segmenter et de transcrire des livres audio ou d'autres sources audio (par exemple de Librivox) en utilisant les scripts abooks fournis:
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.wavCet outil utilisera la détection du silence pour trouver de bons points de coupe. Vous voudrez peut-être ajuster ses paramètres pour obtenir un bon équilibre entre les segments courts, mais peu de mots se divisent en deux.
./abook-segment.py foo_16m.wavparamètres:
[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 outputPar défaut, les segments résultants finiront par aboyer / segments
L'outil de transcription prend en charge jusqu'à deux haut-parleurs que vous pouvez spécifier sur la ligne de commande. Les packages Voxforge résultant finiront par défaut par défaut.
./abook-transcribe.py -s speaker1 -S speaker2 abook/segments/Quelques notes sur la façon de segmenter et de transcrire des livres audio semi-automatiquement ou d'autres sources audio (par exemple de Librivox) à l'aide de Kaldi:
Nos scripts reposent sur une disposition du répertoire fixe. Comme la segmentation des enregistrements Librivox est l'une des principales applications de ces scripts, leur terminologie des livres et des sections est utilisée ici. Pour chaque section d'un livre, deux fichiers source sont nécessaires: un fichier d'onde contenant l'audio et un fichier texte contenant la transcription.
Un schéma de dénomination fixe est utilisé pour ceux qui sont illustrés par cet exemple:
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 ...
Le script abook-librivox.py est fourni pour aider à la récupération des enregistrements Librivox et à la configuration de la structure du répertoire. Veuillez noter que pour l'instant, l'outil ne récupérera pas automatiquement les transcriptions mais créera des fichiers .txt vides (selon le schéma de dénomination) que vous devrez remplir manuellement.
L'outil convertira l'audio récupéré au format WAV mono 16 kHz comme requis par les scripts de segmentation. Si vous avez l'intention de segmenter le matériel provenant d'autres sources, assurez-vous de le convertir au format. Pour des suggestions sur les outils à utiliser pour cette étape, veuillez vous référer aux instructions de segmentation manuelle dans la section précédente.
Remarque : Comme le processus Kaldi est parallélisé pour la segmentation en masse, au moins 4 fichiers audio et invites sont nécessaires pour que le processus fonctionne.
Cet outil va tokenize la transcription et détecter les jetons OOV. Ceux-ci peuvent ensuite être remplacés ou ajoutés au dictionnaire:
./abook-preprocess-transcript.py abook/in/librivox/11442-toten-Seelen/evak-11442-toten-Seelen-1.txtPour que la segmentation automatique fonctionne, nous avons besoin d'un modèle GMM qui est adapté au dictionnaire actuel (qui a probablement dû être étendu pendant le prétraitement de la transcription) Plus utilise un modèle de langue qui couvre les invites.
Tout d'abord, nous créons un modèle de langue réglé à notre objectif:
./abook-sentences.py abook/in/librivox/11442-toten-Seelen/ * .prompt
./speech_build_lm.py abook_lang_model abook abook abook parole_deMaintenant, nous pouvons créer un modèle adapté en utilisant ce modèle de langue et notre dict actuel:
./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/Ensuite, nous devons créer la structure et les fichiers du répertoire Kaldi pour la segmentation automatique:
./abook-kaldi-segment.py data/models/kaldi-abook-de-adapt-current abook/in/librivox/11442-toten-SeelenMaintenant, nous pouvons exécuter la segmentation:
pushd data/dst/speech/asr-models/kaldi/segmentation
./run-segmentation.sh
popd Enfin, nous pouvons récupérer le résultat de la segmentation au format Voxforge:
./abook-kaldi-retrieve.py abook/in/librivox/11442-toten-Seelen/Zamia-TTS est un projet expérimental qui essaie de former des voix TTS sur la base des données (examinées) de Zamia-Speech. Téléchargements ici:
https://goofy.zamia.org/zamia-speech/tts/
Cette section décrit comment former des voix pour la mise en œuvre du Tacotron 2 de Nvidia. Les voix résultantes auront un taux d'échantillonnage de 16 kHz car c'est le taux d'échantillonnage par défaut utilisé pour la formation du modèle ASR de la parole Zamia. Cela signifie que vous devrez utiliser un modèle d'éclairage à vague de 16 kHz que vous pouvez trouver, ainsi que des voix pré-entraînées et des échantillons d'ondes ici:
https://goofy.zamia.org/zamia-speech/tts/tacotron2/
Maintenant, avec cela, la formation du modèle Tacotron 2 est assez simple. La première étape consiste à exporter des filelists pour la voix que vous souhaitez vous entraîner, par exemple:
./speech_tacotron2_export.py -l en -o ../torch/tacotron2/filelists m_ailabs_en mailabselliotmillerEnsuite, passez à votre répertoire de formation Tacotron 2
cd ../torch/tacotron2et spécifiez les listes de fichiers, le taux d'échantillonnage et la taille du lot dans '' 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
)
Et commencer la formation:
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 Pour construire des tarball à partir de modèles, utilisez le script speech-dist.sh , par exemple:
./speech_dist.sh generic-en kaldi tdnn_sp
Mes propres scripts ainsi que les données que je crée (c.-à-d. Lexique et transcriptions) est LGPLV3 sous licence, sauf indication contraire dans les en-têtes de copyright du script.
Certains scripts et fichiers sont basés sur des travaux d'autres, dans ces cas, j'ai l'intention de garder la licence d'origine intacte. Veuillez vous assurer de vérifier les en-têtes des droits d'auteur à l'intérieur pour plus d'informations.