Python scripts para calcular modelos de audio y lenguaje de los datos del habla voxforge.org y muchas fuentes. Los modelos que se pueden construir incluyen:
IMPORTANTE : Tenga en cuenta que estos scripts se forman de ninguna manera una aplicación completa lista para el consumo de usuario final. Sin embargo, si usted es un desarrollador interesado en el procesamiento del lenguaje natural, puede encontrar que algunos de ellos son útiles. Las contribuciones, parches y solicitudes de extracción son muy bienvenidas.
En el momento de este escrito, los guiones aquí se centran en construir los modelos Voxforge en inglés y alemán. Sin embargo, no hay ninguna razón por la que no puedan usarse para construir otros modelos de idiomas, no dude en contribuir con el apoyo a ellos.
Creado por GH-MD-TOC
Tenemos varios modelos más código fuente y binarios para las herramientas utilizadas para construir estos modelos disponibles para descargar. Todo es gratis y de código abierto.
Todos nuestros modelos y descargas de datos se pueden encontrar aquí: descargas
Nuestros modelos ASR preconstruidos se pueden descargar aquí: ASR Models
kaldi-generic-en-tdnn_f Modelo TDNN factorizado NNET3 grande, entrenado en ~ 1200 horas de audio. Tiene resistencia de ruido de fondo decente y también se puede usar en las grabaciones del teléfono. Debería proporcionar la mejor precisión, pero es un poco más intensivo en recursos que los otros modelos.kaldi-generic-en-tdnn_sp Modelo de cadena NNET3 grande, entrenado en ~ 1200 horas de audio. Tiene resistencia de ruido de fondo decente y también se puede usar en las grabaciones del teléfono. Menos preciso pero también un poco menos intensivo en recursos que el modelo tddn_f .kaldi-generic-en-tdnn_250 igual que los modelos más grandes pero menos intensivos en recursos, adecuados para su uso en aplicaciones integradas (por ejemplo, un RaspberryPI 3).kaldi-generic-en-tri2b_chain GMM Modelo, entrenado en los mismos datos que los dos modelos anteriores, destinados a tareas de segmentación automática.kaldi-generic-de-tdnn_f Modelo de cadena NNET3 grande, entrenado en ~ 400 horas de audio. Tiene resistencia de ruido de fondo decente y también se puede usar en las grabaciones del teléfono.kaldi-generic-de-tdnn_250 igual que el modelo grande pero menos intensivo en recursos, adecuado para su uso en aplicaciones integradas (por ejemplo, un RaspberryPI 3).kaldi-generic-de-tri2b_chain GMM Modelo, entrenado en los mismos datos que los dos modelos anteriores, destinados a tareas de segmentación automática.w2l-generic-de Modelo grande, entrenado en ~ 400 horas de audio. Tiene resistencia de ruido de fondo decente y también se puede usar en las grabaciones del teléfono.Nota : Es importante darse cuenta de que estos modelos pueden y deben adaptarse al dominio de su aplicación. Consulte la adaptación del modelo para más detalles.
Nuestros diccionarios se pueden descargar aquí: Diccionarios
dict-en.ipa basado en CMUDICT con muchas entradas adicionales generadas a través de Sequitur G2P.dict-de.ipa creado manualmente desde cero con muchas entradas adicionales revisadas automáticamente extraídas de Wiktionario. Nuestros modelos G2P preconstruidos se pueden descargar aquí: Modelos G2P
sequitur-dict-en.ipa Sequitur G2P Modelo entrenado en nuestro diccionario IPA en inglés (UTF8).sequitur-dict-de.ipa Sequitur G2P Modelo entrenado en nuestro diccionario IPA alemán (UTF8). Nuestros modelos de lenguaje ARPA pre-construido se pueden descargar aquí: modelos de idiomas
generic_en_lang_model_smallgeneric_en_lang_model_largegeneric_de_lang_model_smallgeneric_de_lang_model_large Descargue algunos archivos de onda de muestra
$ 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]Desempacarlos:
$ tar xfvz demo_wavs.tgz
demo1.wav
demo2.wav
demo3.wav
demo4.wavDescargar el programa de demostración
$ 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]Ahora ejecute el reconocimiento de voz automático de Kaldi en los archivos de demostración 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 Determine el nombre de su fuente de micrófono 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
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Descargar y ejecutar la demostración:
$ 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 Para iniciar el servicio STT en su máquina local, ejecute:
$ 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-r20180611Para transferir un archivo de audio para la transcripción al servicio, en un segundo terminal, ejecute:
$ 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: *****************************************************************La imagen de Docker en el ejemplo de arriba es el resultado de apilar 4 imágenes uno encima del otro:
Docker-py-kaldi-asr-and-modelo: fuente, imagen
Docker-py-kaldi-asr: fuente, imagen
Docker-kaldi-asr: fuente, imagen
Debian: 8: https://hub.docker.com/_/debian/
Nota : Probablemente incompleto.
Ejemplo de instalación de dependencias para 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
Solo algunas notas difíciles sobre el entorno necesarios para que estos scripts se ejecute. Este no es de ninguna manera un conjunto completo de instrucciones, solo algunas pistas para comenzar.
~/.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 Algunos scripts esperan que el directorio tmp local esté presente, ubicado en el mismo directorio donde viven todos los scripts, es decir
mkdir tmpLa siguiente lista contiene corporativos de discurso respaldados por esta colección de guiones.
Forschergeist (alemán, 2 horas):
<~/.speechrc:speech_arc>/forschergeist<~/.speechrc:speech_corpora>/forschergeistPaquete alemán SpeechData versión 2 (alemán, 148 horas):
dev , test y train sean subdirectorios directos de <~/.speechrc:speech_arc>/gspv2 ../import_gspv2.py para convertir el corpus en el formato VOXFORGE. El corpus resultante se escribirá en <~/.speechrc:speech_corpora>/gspv2 .Ruido:
<~/.speechrc:speech_corpora>/ (generará un subdirectorio noise allí)Librispeech asr (inglés, 475 horas):
LibriSpeech sea un subdirectorio directo de <~/.speechrc:speech_arc> ../import_librispeech.py para convertir el corpus en el formato Voxforge. El corpus resultante se escribirá en <~/.speechrc:speech_corpora>/librispeech .El conjunto de datos de discurso LJ (inglés, 24 horas):
LJSpeech-1.1 sea un subdirectorio directo de <~/.speechrc:speech_arc> .import_ljspeech.py para convertir el corpus en el formato VOXFORGE. El corpus resultante se escribirá en <~/.speechrc:speech_corpora>/lindajohnson-11 .Mozilla Common Voice German (alemán, 140 horas):
de.tar.gzcv_de sea un subdirectorio directo de <~/.speechrc:speech_arc> ../import_mozde.py para convertir el corpus en el formato VOXFORGE. El corpus resultante se escribirá en <~/.speechrc:speech_corpora>/cv_de .Mozilla Common Voice V1 (inglés, 252 horas):
cv_corpus_v1.tar.gzcv_corpus_v1 sea un subdirectorio directo de <~/.speechrc:speech_arc> ../import_mozcv1.py para convertir el corpus en el formato Voxforge. El corpus resultante se escribirá en <~/.speechrc:speech_corpora>/cv_corpus_v1 .Munich Artificial Intelligence Laboratories GmbH (M-Ailabs) Data de datos del habla (inglés, 147 horas, alemán, 237 horas, francés, 190 horas):
de_DE.tgz , en_UK.tgz , en_US.tgz , fr_FR.tgz (espejo)m_ailabs en <~/.speechrc:speech_arc>m_ailabsby_book y mueva los directorios male y female , ya que el archivo no sigue exactamente estructuras inglesas y alemanas./import_mailabs.py para convertir el corpus en el formato Voxforge. El corpus resultante se escribirá en <~/.speechrc:speech_corpora>/m_ailabs_en , <~/.speechrc:speech_corpora>/m_ailabs_de y <~/.speechrc:speech_corpora>/m_ailabs_fr .TED-Lium Release 3 (inglés, 210 horas):
TEDLIUM_release-3.tgzTEDLIUM_release-3 sea un subdirectorio directo de <~/.speechrc:speech_arc> ../import_tedlium3.py para convertir el corpus en el formato Voxforge. El corpus resultante se escribirá en <~/.speechrc:speech_corpora>/tedlium3 .Voxforge (inglés, 75 horas):
<~/.speechrc:speech_arc>/voxforge_en<~/.speechrc:speech_corpora>/voxforge_enVoxforge (alemán, 56 horas):
<~/.speechrc:speech_arc>/voxforge_de<~/.speechrc:speech_corpora>/voxforge_deVoxforge (francés, 140 horas):
<~/.speechrc:speech_arc>/voxforge_fr<~/.speechrc:speech_corpora>/voxforge_frZamia (inglés, 5 minutos):
<~/.speechrc:speech_arc>/zamia_en<~/.speechrc:speech_corpora>/zamia_enZamia (alemán, 18 horas):
<~/.speechrc:speech_arc>/zamia_de<~/.speechrc:speech_corpora>/zamia_de Nota técnica : para la mayoría de los corpuses hemos corregido las transcripciones en nuestras bases de datos que se pueden encontrar en data/src/speech/<corpus_name>/transcripts_*.csv . Como estos han sido creados por muchas horas de revisión manual (semi), deberían ser de mayor calidad que las indicaciones originales para que se usen durante la capacitación de nuestros modelos ASR.
Una vez que haya descargado y, si es necesario, convertido un corpus que necesita ejecutar
./speech_audio_scan.py < corpus name >en él. Esto agregará indicaciones faltantes a las bases de datos CSV y convertirá los archivos de audio en formato de onda mono de 16kHz.
Para mejorar la resistencia al ruido, es posible obtener corpus de los existentes con ruido agregado:
./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 Este script se ejecutará la grabación a través de códecs telefónicos típicos. Tal corpus se puede usar para entrenar modelos que admiten grabaciones telefónicas 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 siguiente lista contiene corpus de texto que se pueden usar para entrenar modelos de idiomas con los scripts contenidos en este repositorio:
Europarl, específicamente paralelo Corpus alemán-inglés y corpus paralelo francés-inglés:
.speechrc : europarl_de , europarl_en , europarl_fr./speech_sentences.py europarl_de , ./speech_sentences.py europarl_en y ./speech_sentences.py europarl_frCornell Movie-Dialogs Corpus:
.speechrc : cornell_movie_dialogs./speech_sentences.py cornell_movie_dialogsCorpus de libertad condicional alemana:
.speechrc : parole_de./speech_train_punkt_tokenizer.py , luego ejecute ./speech_sentences.py parole_de WebQuestions: web_questions
.speechrc : web_questions./speech_sentences.py web_questions Yahoo! DataSet de respuestas: yahoo_answers
.speechrc : yahoo_answers./speech_sentences.py yahoo_answers CNRTL EST Républicain Corpus, gran corpus de artículos de noticias (4,3 millones de titulares/párrafos) disponibles bajo una licencia CC BY-NC-SA. Descargue archivos XML y extraiga los titulares y párrafos en un archivo de texto con el siguiente comando: 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_republicainLas oraciones también se pueden extraer de nuestros corpus de discurso. Para hacer eso, ejecute:
Corporación del discurso inglés
./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 tedlium3Cuerpos del discurso alemán
./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_dePrerrequisitos:
europarl_en , cornell_movie_dialogs , web_questions y yahoo_answers están instaladas, las oraciones extraídas (ver instrucciones anteriores).librispeech , voxforge_en , zamia_en , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3Para entrenar un pequeño modelo de orden en inglés podado 4 utilizando kenlm para su uso en Kaldi y 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 tedlium3Para entrenar un modelo de orden 6 más grande con menos poda:
./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 tedlium3Para entrenar un modelo de orden de tamaño mediano 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 tedlium3Prerrequisitos:
europarl_de y parole_de , las oraciones extraídas (ver instrucciones anteriores).forschergeist , gspv2 , voxforge_de , zamia_de , m_ailabs_de , cv_dePara entrenar un pequeño modelo de orden de la lengua alemana podado 4 utilizando Kenlm para su uso en Kaldi y 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_dePara entrenar un modelo de orden 6 más grande con menos poda:
./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_dePara entrenar un modelo de orden de tamaño mediano 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_dePrerrequisitos:
europarl_fr y est_republicain , las oraciones extraídas (ver instrucciones anteriores).voxforge_fr y m_ailabs_frPara entrenar un modelo de idioma francés usando Kenlm Run:
./speech_build_lm.py generic_fr_lang_model europarl_fr est_republicain voxforge_fr m_ailabs_frLa herramienta principal utilizada para la revisión de envío, la transcripción y la expansión del léxico es:
./speech_editor.pyNota : Usamos los términos léxico y diccionario intercambiablemente en esta documentación y nuestros scripts.
Actualmente, tenemos dos lexas, uno para inglés y otro para alemán (en data/src/dicts ):
dict-en.ipa
dict de.ipa
El formato nativo de nuestra lexica está en (UTF8) IPA con semicolones como separador. Este formato se convierte a cualquier formato que el motor ASR de Target sea utilizado por los scripts de exportación correspondientes.
Muchas herramientas relacionadas con el léxico se basan en Sequitur G2P para calcular las pronunciaciones de las palabras que faltan en el diccionario. Los modelos necesarios se pueden descargar desde nuestro servidor de archivos: http://goofy.zamia.org/zamia-speech/g2p/. Para la instalación, descárguelos y desempaquétalos y luego coloque enlaces en data/models como 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-r20180510Para capacitar a sus propios modelos Sequitur G2P, use los scripts de exportación y trenes proporcionados, por ejemplo:
[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 ...]es el principal editor de léxico interactivo basado en las maldiciones. Producirá automáticamente entradas candidatas para nuevas palabras usando Sequitur G2P, Marytts y Espeakng. El usuario puede editar estas entradas manualmente si es necesario y verificarlas escuchando que se sintetizan a través de Marytts en diferentes voces.
El editor de Léxico también está integrado en varias otras herramientas, speech_editor.py en particular, lo que le permite transcribir, revisar y agregar palabras faltantes para nuevas muestras de audio dentro de una herramienta, lo que se recomienda.
También tiendo a revisar las entradas de léxico al azar de vez en cuando. Para eso tengo un pequeño script que elegirá 20 entradas aleatorias donde Sequitur G2P no está de acuerdo con la transcripción actual en el léxico:
./speech_lex_edit.py ` ./speech_lex_review.py `Además, a veces uso este comando para agregar palabras faltantes de las transcripciones en modo por lotes:
./speech_lex_edit.py ` ./speech_lex_missing.py ` Para el léxico alemán, las entradas se pueden extraer de la Wiktionario alemán utilizando un conjunto de guiones. Para hacer eso, el primer paso es extraer un conjunto de entradas candidatas de un volcado XML wiktionario:
./wiktionary_extract_ipa.py Esto emitirá entradas extraídas a data/dst/speech/de/dict_wiktionary_de.txt . Ahora necesitamos entrenar un modelo Sequitur G2P que traduzca estas entradas en nuestro propio estilo IPA y un conjunto de fonemas:
./wiktionary_sequitur_export.py
./wiktionary_sequitur_train.shFinalmente, traducimos las entradas y las verificamos con las predicciones de nuestro modelo de Sequitur G2P regular:
./wiktionary_sequitur_gen.py Este script produce dos archivos de salida: data/dst/speech/de/dict_wiktionary_gen.txt contiene entradas aceptables, data/dst/speech/de/dict_wiktionary_rej.txt contiene entradas rechazadas.
La siguiente receta entrena modelos Kaldi para inglés.
Antes de ejecutarlo, asegúrese de que se cumplan todos los requisitos previos (ver arriba para obtener instrucciones sobre estas):
generic_en_lang_model_small construidovoxforge_en , librispeech , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3 y zamia_en están instalados, convertidos y escaneados.zamia_en_noisy , Corporas aumentadas de ruido: voxforge_en_noisy , voxforge_en_phone , librispeech_en_noisy , librispeech_en_phone , cv_corpus_v1_noisy zamia_en_phone cv_corpus_v1_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.shEjecutar la exportación con los corpus aumentados de ruido incluidos:
./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 siguiente receta entrena modelos Kaldi para alemán.
Antes de ejecutarlo, asegúrese de que se cumplan todos los requisitos previos (ver arriba para obtener instrucciones sobre estas):
generic_de_lang_model_small construidovoxforge_de , gspv2 , forschergeist , zamia_de , m_ailabs_de , cv_de están instalados, convertidos y escaneados.voxforge_de_noisy , voxforge_de_phone , zamia_de_noisy Y 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.shEjecutar la exportación con los corpus aumentados de ruido incluidos:
./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_dePara una herramienta de adaptación de modelo Kaldi independiente que no requiere una configuración completa de Zamia-Diseve, ver
kaldi-adapt-lm
Los modelos Kaldi existentes (como los que proporcionamos para la descarga, pero también los que puede entrenar desde cero usando nuestros scripts) se pueden adaptar a modelos de lenguaje (típicamente específicos del dominio), gramatrices JSGF y FST gramaticales.
Aquí hay un ejemplo de cómo adaptar nuestro modelo inglés a un simple comando y controlar la gramática JSGF. Tenga en cuenta que este es solo un ejemplo de juguete: para el uso del mundo real, probablemente desee agregar bucles de fonema de basura a la gramática o producir un modelo de lenguaje que tenga cierta resistencia al ruido incorporada de inmediato.
Aquí está la gramática que usaremos:
#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 ) ;
El siguiente paso es configurar un experimento de adaptación del modelo Kaldi usando este script:
./speech_kaldi_adapt.py data/models/kaldi-generic-en-tdnn_250-latest dict-en.ipa control.jsgf control-en Aquí, data/models/kaldi-generic-en-tdnn_250-latest es el modelo que se adaptará, dict-en.ipa es el diccionario que será utilizado por el nuevo modelo, control.jsgf de JSGF Grammar que queremos que el modelo se adapte (podría especificar un archivo fuente FST o un modelo de lenguaje aquí) y el modelo de control-en .
Para ejecutar la adaptación real, cambie en el directorio de modelos y ejecute el script de adaptación allí:
cd data/dst/asr-models/kaldi/control-en
./run-adaptation.sh Finalmente, puedes crear un tarball del modelo recién creado:
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.shCrear caso de revisión automática:
./wav2letter_auto_review.py -l de w2l-generic-de-latest gspv2ejecutarlo:
pushd tmp/w2letter_auto_review
bash run_auto_review.sh
popdAplicar los resultados:
./wav2letter_apply_review.pyAlgunas notas sobre cómo segmentar y transcribir audiolibros u otras fuentes de audio (por ejemplo, de Librivox) utilizando los scripts ABOOK proporcionados:
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.wavEsta herramienta utilizará la detección de silencio para encontrar buenos puntos de corte. Es posible que desee ajustar su configuración para lograr un buen equilibrio de segmentos cortos, pero pocas palabras se dividen a la mitad.
./abook-segment.py foo_16m.wavajustes:
[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 outputPor defecto, los segmentos resultantes terminarán en abook/segmentos
La herramienta de transcripción admite hasta dos altavoces que puede especificar en la línea de comando. Los paquetes de Voxforge resultantes terminarán en ABOOK/OUT de forma predeterminada.
./abook-transcribe.py -s speaker1 -S speaker2 abook/segments/Algunas notas sobre cómo segmentar y transcribir audiolibros semiautomáticos u otras fuentes de audio (por ejemplo, de Librivox) usando Kaldi:
Nuestros scripts dependen de un diseño de directorio fijo. Como la segmentación de las grabaciones de Librivox es una de las principales aplicaciones de estos scripts, aquí se utiliza su terminología de libros y secciones. Para cada sección de un libro se necesitan dos archivos fuente: un archivo de onda que contiene el audio y un archivo de texto que contiene la transcripción.
Se utiliza un esquema de nomenclatura fijo para aquellos que se ilustran con este ejemplo:
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. ABOOK/IN/LIBRIVOX/11442-TOTEN-SEELEN/EVAK-11442-TOTEN-SEELEN-2.WAV ...
El script abook-librivox.py se proporciona para ayudar con la recuperación de las grabaciones de Librivox y configurando la estructura del directorio. Tenga en cuenta que por ahora, la herramienta no recuperará las transcripciones automáticamente, sino que creará archivos .txt vacíos (de acuerdo con el esquema de nomenclatura) que tendrá que completar manualmente.
Sin embargo, la herramienta convertirá el audio recuperado en formato Mono WAV de 16 kHz según lo requerido por los scripts de segmentación. Si tiene la intención de segmentar el material de otras fuentes, asegúrese de convertirlo en ese formato. Para obtener sugerencias sobre qué herramientas usar para este paso, consulte las instrucciones de segmentación manual en la sección anterior.
Nota : Como el proceso Kaldi está paralelo a la segmentación de masa, se necesitan al menos 4 archivos de audio y inmediato para que el proceso funcione.
Esta herramienta tokenizará la transcripción y detectará tokens OOV. Esos pueden ser reemplazados o agregados al diccionario:
./abook-preprocess-transcript.py abook/in/librivox/11442-toten-Seelen/evak-11442-toten-Seelen-1.txtPara que funcione la segmentación automática, necesitamos un modelo GMM que esté adaptado al diccionario actual (que probablemente tuvo que expandirse durante el preprocesamiento de la transcripción) más utiliza un modelo de lenguaje que cubre las indicaciones.
Primero, creamos un modelo de idioma sintonizado para nuestro propósito:
./abook-sentences.py abook/in/librivox/11442-toten-Seelen/ * .prompt
./speech_build_lm.py abook_lang_model abook abook abook parole_deAhora podemos crear un modelo adaptado utilizando este modelo de idioma y nuestro dict actual:
./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/A continuación, necesitamos crear la estructura y los archivos del directorio Kaldi para la auto-segmentación:
./abook-kaldi-segment.py data/models/kaldi-abook-de-adapt-current abook/in/librivox/11442-toten-SeelenAhora podemos ejecutar la segmentación:
pushd data/dst/speech/asr-models/kaldi/segmentation
./run-segmentation.sh
popd Finalmente, podemos recuperar el resultado de la segmentación en formato Voxforge:
./abook-kaldi-retrieve.py abook/in/librivox/11442-toten-Seelen/Zamia-TTS es un proyecto experimental que intenta entrenar voces TTS basadas en datos (revisados) de voz de Zamia. Descargas aquí:
https://goofy.zamia.org/zamia-speech/tts/
Esta sección describe cómo entrenar voces para la implementación de Tacotron 2 de Nvidia. Las voces resultantes tendrán una frecuencia de muestreo de 16 kHz, ya que es la frecuencia de muestreo predeterminada utilizada para la capacitación del modelo de Zamia Speech ASR. Esto significa que tendrá que usar un modelo de brillo de onda de 16 kHz que puede encontrar, junto con voces previas y wavs de muestra aquí:
https://goofy.zamia.org/zamia-speech/tts/tacotron2/
Ahora con eso fuera del camino, el entrenamiento del modelo Tacotron 2 es bastante sencillo. El primer paso es exportar filelistas para la voz que le gustaría entrenar, por ejemplo:
./speech_tacotron2_export.py -l en -o ../torch/tacotron2/filelists m_ailabs_en mailabselliotmillerA continuación, cambie a su directorio de entrenamiento de Tacotron 2
cd ../torch/tacotron2y especifique listas de archivos, velocidad de muestreo y tamaño de lote en '' 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
)
Y comience el entrenamiento:
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 Para construir tarballs a partir de modelos, use el script speech-dist.sh , por ejemplo:
./speech_dist.sh generic-en kaldi tdnn_sp
Mis propios scripts, así como los datos que creo (es decir, léxico y transcripciones) tienen licencia LGPLV3 a menos que se indique lo contrario en los encabezados de derechos de autor del script.
Algunos scripts y archivos se basan en obras de otros, en esos casos es mi intención mantener intacta la licencia original. Asegúrese de consultar los encabezados de derechos de autor para obtener más información.