Python -Skripte zur Berechnung von Audio- und Sprachmodellen aus Sprachdaten von voxforge.org und vielen Quellen. Modelle, die gebaut werden können, umfassen:
Wichtig : Bitte beachten Sie, dass diese Skripte in keiner Weise eine vollständige Anwendung für den Endbenutzerverbrauch bilden. Wenn Sie jedoch ein Entwickler sind, der an der Verarbeitung natürlicher Sprache interessiert ist, können Sie einige davon nützlich finden. Beiträge, Patches und Zuganfragen sind sehr willkommen.
Zum Zeitpunkt dieses Schreibens konzentrieren sich die Skripte hier auf den Aufbau der englischen und deutschen Voxforge -Modelle. Es gibt jedoch keinen Grund, warum sie auch nicht verwendet werden konnten, um auch andere Sprachmodelle aufzubauen. Sie können gerne Unterstützung für diese beitragen.
Erstellt von GH-MD-TOC
Wir haben verschiedene Modelle sowie Quellcode und Binärdateien für die Tools, mit denen diese Modelle zum Download verfügbar sind. Alles ist kostenlos und Open Source.
Alle unsere Modell- und Daten -Downloads finden Sie hier: Downloads
Unsere vorgefertigten ASR-Modelle können hier heruntergeladen werden: ASR-Modelle
kaldi-generic-en-tdnn_f Large Nnet3-Kette faktorisierte TDNN-Modell, trainiert auf ~ 1200 Stunden Audio. Hat einen angemessenen Hintergrundgeräuschwiderstand und kann auch auf Telefonaufzeichnungen verwendet werden. Sollte die beste Genauigkeit bieten, ist aber etwas ressourcenintensiver als die anderen Modelle.kaldi-generic-en-tdnn_sp Großes Nnet3-Kettenmodell, trainiert auf ~ 1200 Stunden Audio. Hat einen angemessenen Hintergrundgeräuschwiderstand und kann auch auf Telefonaufzeichnungen verwendet werden. Weniger genau, aber auch etwas weniger ressourcenintensiv als das tddn_f -Modell.kaldi-generic-en-tdnn_250 Gleichen wie die größeren Modelle, aber weniger ressourcenintensiv, geeignet für die Verwendung in eingebetteten Anwendungen (z. B. A RaspberryPI 3).kaldi-generic-en-tri2b_chain GMM-Modell, trainiert auf denselben Daten wie die beiden Modelle-bestimmt für automatische Segmentierungsaufgaben.kaldi-generic-de-tdnn_f großes Nnet3-Kettenmodell, trainiert auf ~ 400 Stunden Audio. Hat einen angemessenen Hintergrundgeräuschwiderstand und kann auch auf Telefonaufzeichnungen verwendet werden.kaldi-generic-de-tdnn_250 Wie das große Modell, aber weniger ressourcenintensiv, geeignet für die Verwendung in eingebetteten Anwendungen (z. B. A RaspberryPI 3).kaldi-generic-de-tri2b_chain GMM-Modell, trainiert auf denselben Daten wie die beiden Modelle-bestimmt für automatische Segmentierungsaufgaben.w2l-generic-de großes Modell, trainiert auf ~ 400 Stunden Audio. Hat einen angemessenen Hintergrundgeräuschwiderstand und kann auch auf Telefonaufzeichnungen verwendet werden.Hinweis : Es ist wichtig zu erkennen, dass diese Modelle an Ihre Anwendungsdomäne angepasst werden können und sollten. Weitere Informationen finden Sie unter Modellanpassung.
Unsere Wörterbücher können hier heruntergeladen werden: Wörterbücher
dict-en.ipa basierend auf CMUDICT mit vielen zusätzlichen Einträgen, die über Sequitur G2P generiert wurden.dict-de.ipa wurde manuell von Grund auf mit vielen zusätzlichen automatisch geprüften Einträgen erstellt, die aus wiktionarisch extrahiert wurden. Unsere vorgefertigten G2P-Modelle können hier heruntergeladen werden: G2P-Modelle
sequitur-dict-en.ipa Sequitur G2P-Modell, das auf unserem englischen IPA-Wörterbuch (UTF8) trainiert wurde.sequitur-dict-de.ipa Sequitur G2P-Modell, das auf unserem deutschen IPA-Wörterbuch (UTF8) trainiert wurde. Unsere vorgefertigten ARPA-Sprachmodelle können hier heruntergeladen werden: Sprachmodelle
generic_en_lang_model_smallgeneric_en_lang_model_largegeneric_de_lang_model_smallgeneric_de_lang_model_large Laden Sie einige Beispielwellendateien herunter
$ 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]sie auspacken:
$ tar xfvz demo_wavs.tgz
demo1.wav
demo2.wav
demo3.wav
demo4.wavLaden Sie das Demo -Programm herunter
$ 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]Führen Sie nun die automatische Spracherkennung von Kaldi in den Demo -WAV -Dateien aus:
$ 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 Bestimmen Sie den Namen Ihrer Pulsaudio -Mikrofonquelle:
$ 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
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Demo herunterladen und ausführen:
$ 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 Um den STT -Dienst auf Ihrem lokalen Computer zu starten, führen Sie aus:
$ 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-r20180611Um eine Audiodatei für die Transkription in den Dienst in einem zweiten Terminal zu übertragen, führen Sie aus:
$ 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: *****************************************************************Das Docker -Bild im obigen Beispiel ist das Ergebnis des Stapelns von 4 Bildern übereinander:
Docker-Py-Kaldi-asr-and-Model: Quelle, Bild
Docker-Py-Kaldi-Asr: Quelle, Bild
Docker-Kaldi-Asr: Quelle, Bild
Debian: 8: https://hub.docker.com/_/debian/
Hinweis : Wahrscheinlich unvollständig.
Abhängigkeiten Installationsbeispiel für 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
Nur einige grobe Notizen über die Umgebung, die diese Skripte ausführen musste. Dies ist in keiner Weise ein vollständiger Anweisungssatz, nur einige Hinweise, um Ihnen den Einstieg zu erleichtern.
~/.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 Einige Skripte erwarten, dass das lokale tmp -Verzeichnis vorhanden ist, das sich im selben Verzeichnis befindet, in dem alle Skripte leben, d. H.
mkdir tmpDie folgende Liste enthält Sprachkorpora, die von dieser Skriptsammlung unterstützt werden.
Forschergeist (Deutsch, 2 Stunden):
<~/.speechrc:speech_arc>/forschergeist<~/.speechrc:speech_corpora>/forschergeistDeutsche Rededata -Paketversion 2 (Deutsch, 148 Stunden):
dev , test und train direkte Unterverzeichnisse von <~/.speechrc:speech_arc>/gspv2 ../import_gspv2.py , um den Korpus in das VoxForge -Format umzuwandeln. Das resultierende Korpus wird in <~/.speechrc:speech_corpora>/gspv2 geschrieben.Lärm:
<~/.speechrc:speech_corpora>/ (es erzeugt dort ein noise )Librispeech ASR (Englisch, 475 Stunden):
LibriSpeech ein direktes Unterverzeichnis von <~/.speechrc:speech_arc> ist../import_librispeech.py , um den Korpus in das VoxForge -Format umzuwandeln. Das resultierende Korpus wird in <~/.speechrc:speech_corpora>/librispeech geschrieben.Der LJ Sprachdatensatz (Englisch, 24 Stunden):
LJSpeech-1.1 ein direktes Unterverzeichnis von <~/.speechrc:speech_arc> ist.import_ljspeech.py aus, um den Korpus in das VoxForge -Format umzuwandeln. Das resultierende Korpus wird an <~/.speechrc:speech_corpora>/lindajohnson-11 geschrieben.Mozilla Common Voice Deutsch (Deutsch, 140 Stunden):
de.tar.gzcv_de ein direktes Unterverzeichnis von <~/.speechrc:speech_arc> ist../import_mozde.py , um den Korpus in das VoxForge -Format umzuwandeln. Das resultierende Korpus wird in <~/.speechrc:speech_corpora>/cv_de geschrieben.Mozilla Common Voice V1 (Englisch, 252 Stunden):
cv_corpus_v1.tar.gz heruntercv_corpus_v1 ein direktes Unterverzeichnis von <~/.speechrc:speech_arc> ist../import_mozcv1.py , um den Korpus in das VoxForge -Format umzuwandeln. Das resultierende Korpus wird in <~/.speechrc:speech_corpora>/cv_corpus_v1 geschrieben.München künstliche Intelligenzlaboratorien GmbH (M-Sailabs) Sprachdatensatz (Englisch, 147 Stunden, Deutsch, 237 Stunden, Französisch, 190 Stunden):
de_DE.tgz , en_UK.tgz , en_US.tgz , fr_FR.tgz (Mirror)m_ailabs in <~/.speechrc:speech_arc>m_ailabsmale für female ein Verzeichnis by_book und bewegen./import_mailabs.py , um den Korpus in das VoxForge -Format umzuwandeln. Der resultierende Korpus wird in <~/.speechrc:speech_corpora>/m_ailabs_en , <~/.speechrc:speech_corpora>/m_ailabs_de und <~/.speechrc:speech_corpora>/m_ailabs_fr geschrieben.TED-Lium Release 3 (Englisch, 210 Stunden):
TEDLIUM_release-3.tgzTEDLIUM_release-3 ein direktes Unterverzeichnis von <~/.speechrc:speech_arc> ist../import_tedlium3.py , um den Korpus in das VoxForge -Format umzuwandeln. Das resultierende Korpus wird in <~/.speechrc:speech_corpora>/tedlium3 geschrieben.Voxforge (Englisch, 75 Stunden):
<~/.speechrc:speech_arc>/voxforge_en<~/.speechrc:speech_corpora>/voxforge_enVoxforge (Deutsch, 56 Stunden):
<~/.speechrc:speech_arc>/voxforge_de<~/.speechrc:speech_corpora>/voxforge_deVoxforge (Französisch, 140 Stunden):
<~/.speechrc:speech_arc>/voxforge_fr herunter<~/.speechrc:speech_corpora>/voxforge_frZamia (Englisch, 5 Minuten):
<~/.speechrc:speech_arc>/zamia_en<~/.speechrc:speech_corpora>/zamia_enZamia (Deutsch, 18 Stunden):
<~/.speechrc:speech_arc>/zamia_de<~/.speechrc:speech_corpora>/zamia_de Technischer Hinweis : Für die meisten Korpora haben wir Transkripte in unseren Datenbanken korrigiert, die in data/src/speech/<corpus_name>/transcripts_*.csv . CSV zu finden sind. Da diese durch viele Stunden (semi-) manuelle Überprüfung erstellt wurden, sollten sie von höherer Qualität sein als die ursprünglichen Eingabeaufforderungen, sodass sie während des Trainings unserer ASR-Modelle verwendet werden.
Sobald Sie heruntergeladen und gegebenenfalls einen Korpus konvertiert haben, müssen Sie ausführen
./speech_audio_scan.py < corpus name >darauf. Dadurch werden fehlende Eingabeaufforderungen in die CSV -Datenbanken hinzugefügt und Audiodateien in ein 16 -kHz -Mono -Wellenformat konvertiert.
Um den Geräuschwiderstand zu verbessern, ist es möglich, Korpora von vorhandenen mit dem Geräusch hinzugefügt zu werden:
./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 In diesem Skript werden die Aufzeichnung über typische telefonische Codecs ausgeführt. Ein solches Korpus kann verwendet werden, um Modelle zu trainieren, die 8 -kHz -Telefonaufnahmen unterstützen:
./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 Die folgende Liste enthält Textkorpora, mit denen Sprachmodelle mit den in diesem Repository enthaltenen Skripten trainieren können:
Europarl, speziell paralleler Korpus deutsch-englisch und paralleler Korpus französisch-englisch:
.speechrc : europarl_de , europarl_en , europarl_fr./speech_sentences.py europarl_de , ./speech_sentences.py europarl_en und ./speech_sentences.py europarl_frCornell Movie-Dialogs Corpus:
.speechrc : cornell_movie_dialogs./speech_sentences.py cornell_movie_dialogsDeutscher Bewährungshelfer:
.speechrc : parole_de./speech_train_punkt_tokenizer.py , dann run ./speech_sentences.py parole_de Webquestions: web_questions
.speechrc : web_questions./speech_sentences.py web_questions Yahoo! Antworten Datensatz: yahoo_answers
.speechrc : yahoo_answers./speech_sentences.py yahoo_answers CNRTL EST Républicain Corpus, großer Korpus von Nachrichtenartikeln (4,3 Mio. Schlagzeilen/Absätze), die im Rahmen einer CC BY-NC-SA-Lizenz verfügbar ist. Laden Sie XML-Dateien herunter und extrahieren Sie Überschriften und Absätze in eine Textdatei mit dem folgenden Befehl: 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_republicainSätze können auch aus unserer Sprachkorpora extrahiert werden. Um das zu tun, rennen Sie:
Englische Sprachkorpora
./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 tedlium3Deutsche Sprachkorpora
./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_deVoraussetzungen:
europarl_en , cornell_movie_dialogs , web_questions und yahoo_answers werden installiert (extrahierte Sätze (siehe Anweisungen oben).librispeech , voxforge_en , zamia_en , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3Um ein kleines, beschnittenes englischsprachiges Modell von Order 4 zu trainieren, unter Verwendung von Kenlm für die Verwendung in Kaldi und Wav2Letter Builds Run:
./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 tedlium3ein größeres Modell der Ordnung 6 mit weniger Beschnitten zu trainieren:
./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 tedlium3ein mittelgroßes Modell der Ordnung 5 zu trainieren:
./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 tedlium3Voraussetzungen:
europarl_de und parole_de werden installiert, gesalte extrahiert (siehe Anweisungen oben).forschergeist , gspv2 , voxforge_de , zamia_de , m_ailabs_de , cv_de extrahiertUm ein kleines, beschnittenes deutsches Sprachmodell 4 zu trainieren, unter Verwendung von Kenlm für den Einsatz in Kaldi und Wav2Letter Builds Run:
./speech_build_lm.py generic_de_lang_model_small europarl_de parole_de forschergeist gspv2 voxforge_de zamia_de m_ailabs_de cv_deein größeres Modell der Ordnung 6 mit weniger Beschnitten zu trainieren:
./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_deein mittelgroßes Modell der Ordnung 5 zu trainieren:
./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_deVoraussetzungen:
europarl_fr und est_republicain werden installiert, gesalte extrahiert (siehe Anweisungen oben).voxforge_fr und m_ailabs_frUm ein französisches Sprachmodell mit Kenlm Run zu trainieren:
./speech_build_lm.py generic_fr_lang_model europarl_fr est_republicain voxforge_fr m_ailabs_frDas Hauptwerkzeug zur Überprüfung, Transkription und Lexikonerweiterung ist:
./speech_editor.pyHinweis : Wir verwenden die Begriffe Lexikon und Wörterbuch in dieser Dokumentation und unseren Skripten austauschbar.
Derzeit haben wir zwei Lexica, einen für Englisch und einen für Deutsch (in data/src/dicts ):
dict-en.ipa
dict-de.ipa
Das native Format unseres Lexica befindet sich in (UTF8) IPA mit Semikolonen als Trennzeichen. Dieses Format wird dann in das Format umgewandelt, das von der Ziel -ASR -Engine von den entsprechenden Exportskripten verwendet wird.
Viele lexikonbezogene Tools beruhen auf Sequitur G2P, um Aussprachen für Wörter zu berechnen, die im Wörterbuch fehlen. Die erforderlichen Modelle können von unserem Dateiserver heruntergeladen werden: http://goofy.zamia.org/zamia-speech/g2p/. Für die Installation laden Sie sie herunter und packen Sie sie aus und setzen Sie dann Links zu ihnen unter data/models wie 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-r20180510Um Ihre eigenen Sequitur -G2P -Modelle zu trainieren, verwenden Sie die bereitgestellten Export- und Zugskripte, z. B.:
[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 ...]ist der wichtigste Flüche, der interaktiver Lexikonredakteur ist. Es wird automatisch Kandidateneinträge für neue Wörter mit Sequitur G2P, Marytts und Espeakng erstellt. Der Benutzer kann diese Einträge dann bei Bedarf manuell bearbeiten und prüfen, indem sie anhören, dass sie über Marytts in verschiedenen Stimmen synthetisiert werden.
Der Lexikon -Editor ist auch in verschiedene andere Tools integriert, insbesondere in speech_editor.py , mit dem Sie fehlende Wörter für neue Audio -Beispiele in einem Tool transkribieren, überprüfen und hinzufügen können - was empfohlen wird.
Ich neige auch dazu, von Zeit zu Zeit die Lexikoneinträge zufällig zu überprüfen. Dafür habe ich ein kleines Skript, das 20 zufällige Einträge auswählt, bei denen Sequitur G2P mit der aktuellen Transkription im Lexikon nicht einverstanden ist:
./speech_lex_edit.py ` ./speech_lex_review.py `Außerdem verwende ich diesen Befehl manchmal, um fehlende Wörter aus Transkripten im Stapelmodus hinzuzufügen:
./speech_lex_edit.py ` ./speech_lex_missing.py ` Für das deutsche Lexikon können Einträge unter Verwendung einer Reihe von Skripten aus dem deutschen Wiker extrahiert werden. Zu diesem Zweck besteht der erste Schritt darin, eine Reihe von Kandidateneinträgen aus einem wiktionären XML -Dump zu extrahieren:
./wiktionary_extract_ipa.py Dadurch wird extrahierte Einträge für data/dst/speech/de/dict_wiktionary_de.txt ausgegeben. Wir müssen jetzt ein Sequitur G2P -Modell trainieren, das diese Einträge in unseren eigenen IPA -Stil und Phonem -Set übersetzt:
./wiktionary_sequitur_export.py
./wiktionary_sequitur_train.shSchließlich übersetzen wir die Einträge und überprüfen sie gegen die Vorhersagen aus unserem regulären Sequitur G2P -Modell:
./wiktionary_sequitur_gen.py Dieses Skript erzeugt zwei Ausgabedateien: data/dst/speech/de/dict_wiktionary_gen.txt enthält akzeptable Einträge, data/dst/speech/de/dict_wiktionary_rej.txt enthält abgelehnte Einträge.
Das folgende Rezept trainiert Kaldi -Modelle für Englisch.
Stellen Sie vor dem Ausführen sicher, dass alle Voraussetzungen erfüllt sind (siehe oben, um Anweisungen dazu):
generic_en_lang_model_small erstelltvoxforge_en , librispeech , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3 und zamia_en werden installiert, konvertiert und gescannt.voxforge_en_noisy , voxforge_en_phone , librispeech_en_noisy , librispeech_en_phone , cv_corpus_v1_noisy , cv_corpus_v1_phone , zamia_en_noisy und 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.shExportanlauf mit Lärmvergrößerungskorpora inklusive:
./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_phoneDas folgende Rezept trainiert Kaldi -Modelle für Deutsch.
Stellen Sie vor dem Ausführen sicher, dass alle Voraussetzungen erfüllt sind (siehe oben, um Anweisungen dazu):
generic_de_lang_model_small erstelltvoxforge_de , gspv2 , forschergeist , zamia_de , m_ailabs_de , cv_de werden installiert, konvertiert und gescannt.voxforge_de_noisy , voxforge_de_phone , zamia_de_noisy und 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.shExportanlauf mit Lärmvergrößerungskorpora inklusive:
./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_deFür ein eigenständiges Kaldi-Modellanpassungsinstrument, für das kein vollständiges Zamia-Speech-Setup erforderlich ist, siehe
Kaldi-adapt-lm
Bestehende Kaldi -Modelle (wie die, die wir zum Download bereitstellen, aber auch diejenigen, die Sie mit unseren Skripten von Grund auf neu trainieren können) können an (typischerweise domänenspezifische) Sprachmodelle, JSGF -Grammatiken und Grammatik -FSTs angepasst werden.
Hier finden Sie ein Beispiel, wie Sie unser englisches Modell an einen einfachen Befehl und die Steuerung von JSGF -Grammatik anpassen. Bitte beachten Sie, dass dies nur ein Spielzeugbeispiel ist. Für die Verwendung der realen Welt möchten Sie wahrscheinlich Müllphonemschleifen in die Grammatik hinzufügen oder ein sofort eingebautes Lärmwiderstand erstellen.
Hier ist die Grammatik, die wir verwenden werden:
#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 ) ;
Der nächste Schritt besteht darin, ein KALDI -Modellanpassungsexperiment mit diesem Skript einzurichten:
./speech_kaldi_adapt.py data/models/kaldi-generic-en-tdnn_250-latest dict-en.ipa control.jsgf control-en Hier ist data/models/kaldi-generic-en-tdnn_250-latest das zu adaptierte Modell, control-en dict-en.ipa control.jsgf das Wörterbuch, das vom neuen Modell verwendet wird.
Um die tatsächliche Anpassung auszuführen, wandeln Sie sich in das Modellverzeichnis und führen Sie das Anpassungsskript dort aus:
cd data/dst/asr-models/kaldi/control-en
./run-adaptation.sh Schließlich können Sie aus dem neu erstellten Modell einen Tarball erstellen:
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.shErstellen Sie Auto-Review-Fall:
./wav2letter_auto_review.py -l de w2l-generic-de-latest gspv2Führen Sie es aus:
pushd tmp/w2letter_auto_review
bash run_auto_review.sh
popdWenden Sie die Ergebnisse an:
./wav2letter_apply_review.pyEinige Hinweise zum Segment und Transkribieren von Hörbüchern oder anderen Audioquellen (z. B. aus Librivox) unter Verwendung der vorgesehenen Abook -Skripte:
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.wavDieses Werkzeug verwendet die Stilleerkennung, um gute Schnittpunkte zu finden. Möglicherweise möchten Sie seine Einstellungen anpassen, um ein gutes Gleichgewicht zwischen kurzer Segmenten zu erreichen, aber nur wenige Wörter, die in zwei Hälften aufgeteilt sind.
./abook-segment.py foo_16m.wavEinstellungen:
[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 outputStandardmäßig werden die resultierenden Segmente in Abook/Segmente enden
Das Transkriptionstool unterstützt bis zu zwei Lautsprecher, die Sie in der Befehlszeile angeben können. Die resultierenden Voxforge-Packages werden standardmäßig in Abook/Out enden.
./abook-transcribe.py -s speaker1 -S speaker2 abook/segments/Einige Hinweise zum Segment und Transkribieren von Hörbüchern oder anderen Audioquellen (z. B. aus Librivox) mit KALDI:
Unsere Skripte beruhen auf einem festen Verzeichnislayout. Da die Segmentierung von Librivox -Aufzeichnungen eine der Hauptanwendungen dieser Skripte ist, wird hier ihre Terminologie von Büchern und Abschnitten verwendet. Für jeden Abschnitt eines Buches werden zwei Quelldateien benötigt: eine Wellendatei mit Audio und eine Textdatei mit dem Transkript.
Für diejenigen, die an diesem Beispiel veranschaulicht werden, wird ein festes Namensschema verwendet:
ABOOK/IN/Librivox/11442-tten-seelen/evak-11442-tten-seelen-1.txt ABOOK/IN/Librivox/11442-tten-seelen/evak-11442-tten-seelen-1.wav ABOOK/IN/Librivox/11442-tten-seelen/evak-11442-tten-seelen-2.txt ABOOK/IN/Librivox/11442-tten-seelen/evak-11442-tten-seelen-2.wav ...
Das Skript abook-librivox.py wird bereitgestellt, um beim Abrufen von Librivox-Aufzeichnungen und beim Einrichten der Verzeichnisstruktur zu helfen. Bitte beachten Sie, dass das Tool vorerst keine Transkripte automatisch abrufen, sondern leere .txt -Dateien (gemäß dem Namensschema) erstellt, die Sie manuell ausfüllen müssen.
Das Tool wandelt das abgerufene Audio in ein 16 -kHz -Mono -WAV -Format um, wie dies von den Segmentierungsskripten erforderlich ist. Wenn Sie beabsichtigen, Material aus anderen Quellen zu segmentieren, stellen Sie sicher, dass Sie es in dieses Format konvertieren. Für Vorschläge, welche Tools für diesen Schritt verwendet werden sollen, finden Sie im vorherigen Abschnitt die manuellen Segmentierungsanweisungen.
Hinweis : Da der Kaldi-Prozess für die Massensegmentierung parallelisiert ist, sind mindestens 4 Audio- und Eingabedateien erforderlich, damit der Prozess funktioniert.
Dieses Tool wird das Transkript token und OOV -Token erkennen. Diese können dann entweder ersetzt oder dem Wörterbuch hinzugefügt werden:
./abook-preprocess-transcript.py abook/in/librivox/11442-toten-Seelen/evak-11442-toten-Seelen-1.txtDamit die automatische Segmentierung funktioniert, benötigen wir ein GMM -Modell, das an das aktuelle Wörterbuch angepasst ist (das wahrscheinlich während der Vorbereitung der Transkription erweitert werden musste) und verwendet ein Sprachmodell, das die Eingabeaufforderungen abdeckt.
Zunächst erstellen wir ein für unseren Zweck abgestimmter Sprachmodell:
./abook-sentences.py abook/in/librivox/11442-toten-Seelen/ * .prompt
./speech_build_lm.py abook_lang_model abook abook abook parole_deJetzt können wir ein angepasstes Modell mit diesem Sprachmodell und unserem aktuellen DICT erstellen:
./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/Als nächstes müssen wir die KALDI-Verzeichnisstruktur und die Dateien für die automatische Segmentierung erstellen:
./abook-kaldi-segment.py data/models/kaldi-abook-de-adapt-current abook/in/librivox/11442-toten-SeelenJetzt können wir die Segmentierung ausführen:
pushd data/dst/speech/asr-models/kaldi/segmentation
./run-segmentation.sh
popd Schließlich können wir das Segmentierungsergebnis in das VoxForge -Format abrufen:
./abook-kaldi-retrieve.py abook/in/librivox/11442-toten-Seelen/Zamia-TTS ist ein experimentelles Projekt, das versucht, TTS-Stimmen basierend auf (überprüften) Zamia-Speech-Daten zu trainieren. Downloads hier:
https://goofy.zamia.org/zamia-speech/tts/
In diesem Abschnitt wird beschrieben, wie Stimmen für die Tacotron 2 -Implementierung von Nvidia trainiert werden. Die resultierenden Stimmen haben eine Stichprobenrate von 16 kHz, da dies die Standard -Stichprobenrate für das ZAMIA -Sprach -ASR -Modelltraining ist. Dies bedeutet, dass Sie ein 16 -kHz -Wellenlow -Modell verwenden müssen, das Sie zusammen mit vorbereiteten Stimmen und Beispielwellen finden können:
https://goofy.zamia.org/zamia-speech/tts/tacotron2/
Jetzt ist das Tacotron 2 -Modelltraining ziemlich einfach. Der erste Schritt besteht darin, Filelisten für die Stimme zu exportieren, die Sie trainieren möchten, z. B.:
./speech_tacotron2_export.py -l en -o ../torch/tacotron2/filelists m_ailabs_en mailabselliotmillerWechseln Sie als nächstes in Ihr Tacotron 2 -Trainingsverzeichnis ein
cd ../torch/tacotron2und geben Sie Dateilisten, Stichprobenrate und Stapelgröße in '' hparams.py '' an:
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
)
und beginnen das Training:
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 Verwenden Sie zum Erstellen von Tarbällen aus Modellen das Skript speech-dist.sh .
./speech_dist.sh generic-en kaldi tdnn_sp
Meine eigenen Skripte sowie die Daten, die ich erstelle (dh Lexikon und Transkripte), sind LGPLV3 lizenziert, sofern in den Copyright -Headern des Skripts nicht anders angegeben.
Einige Skripte und Dateien basieren auf Werken anderer. In diesen Fällen ist es meine Absicht, die ursprüngliche Lizenz intakt zu halten. Bitte überprüfen Sie die Copyright -Header im Inneren, um weitere Informationen zu erhalten.