Scripts Python para calcular modelos de áudio e idioma a partir de dados de fala voxforge.org e muitas fontes. Os modelos que podem ser construídos incluem:
IMPORTANTE : Observe que esses scripts se formam de forma alguma um aplicativo completo pronto para o consumo do usuário final. No entanto, se você é um desenvolvedor interessado no processamento de linguagem natural, poderá achar alguns deles úteis. Contribuições, remendos e solicitações de tração são muito bem -vindos.
No momento da redação deste artigo, os scripts aqui estão focados na construção dos modelos de voxforge inglês e inglês. No entanto, não há razão para que eles não possam ser usados para construir outros modelos de idiomas, sinta -se à vontade para contribuir com o suporte para eles.
Criado por gh-md-toc
Temos vários modelos, além de código -fonte e binários para as ferramentas usadas para criar esses modelos disponíveis para download. Tudo é gratuito e de código aberto.
Todos os nossos downloads de modelo e dados podem ser encontrados aqui: Downloads
Nossos modelos ASR pré-criados podem ser baixados aqui: modelos ASR
kaldi-generic-en-tdnn_f Modelo TDNN fatorado de cadeia NNET3 grande, treinado em ~ 1200 horas de áudio. Possui resistência ao ruído de fundo decente e também pode ser usado nas gravações telefônicas. Deve fornecer a melhor precisão, mas é um pouco mais intensivo em recursos do que os outros modelos.kaldi-generic-en-tdnn_sp grande modelo de cadeia NNET3, treinada em ~ 1200 horas de áudio. Possui resistência ao ruído de fundo decente e também pode ser usado nas gravações telefônicas. Menos preciso, mas também um pouco menos intensivo em recursos que o modelo tddn_f .kaldi-generic-en-tdnn_250 O mesmo que os modelos maiores, mas menos recursos intensivos em recursos, adequados para uso em aplicativos incorporados (por exemplo, um Raspberrypi 3).kaldi-generic-en-tri2b_chain GMM Modelo, treinado nos mesmos dados que os dois modelos acima-destinados a tarefas de segmentação automática.kaldi-generic-de-tdnn_f modelo grande de cadeia NNET3, treinada em ~ 400 horas de áudio. Possui resistência ao ruído de fundo decente e também pode ser usado nas gravações telefônicas.kaldi-generic-de-tdnn_250 O mesmo que o modelo grande, mas menos intensivo em recursos, adequado para uso em aplicativos incorporados (por exemplo, um Raspberrypi 3).kaldi-generic-de-tri2b_chain GMM Modelo, treinado nos mesmos dados que os dois modelos acima-destinados a tarefas de segmentação automática.w2l-generic-de grande modelo, treinado em ~ 400 horas de áudio. Possui resistência ao ruído de fundo decente e também pode ser usado nas gravações telefônicas.Nota : É importante perceber que esses modelos podem e devem ser adaptados ao domínio do seu aplicativo. Consulte Adaptação do modelo para obter detalhes.
Nossos dicionários podem ser baixados aqui: dicionários
dict-en.ipa baseado no cmudict com muitas entradas adicionais geradas via sequitur g2p.dict-de.ipa criado manualmente do zero com muitas entradas adicionais revisadas automaticamente extraídas do Wikcionário. Nossos modelos G2P pré-criados podem ser baixados aqui: modelos G2P
sequitur-dict-en.ipa sequitur G2P treinado em nosso dicionário de IPA inglês (UTF8).sequitur-dict-de.ipa sequitur G2P treinado em nosso dicionário de IPA alemão (UTF8). Nossos modelos de idiomas ARPA pré-criados podem ser baixados aqui: modelos de idiomas
generic_en_lang_model_smallgeneric_en_lang_model_largegeneric_de_lang_model_smallgeneric_de_lang_model_large Baixe alguns arquivos de onda de amostra
$ 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]Desembale -os:
$ tar xfvz demo_wavs.tgz
demo1.wav
demo2.wav
demo3.wav
demo4.wavBaixe o programa de demonstração
$ 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]Agora execute o reconhecimento automático de fala Kaldi nos arquivos WAV de demonstração:
$ 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 o nome da sua fonte de microfone 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
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Baixe e execute a demonstração:
$ 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 o serviço STT em sua máquina local, execute:
$ 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 um arquivo de áudio para transcrição para o serviço, em um segundo terminal, execute:
$ 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: *****************************************************************A imagem do Docker no exemplo acima é o resultado de empilhar 4 imagens umas sobre as outras:
Docker-Py-Kaldi-asr-and-Model: fonte, imagem
Docker-Py-Kaldi-ASR: fonte, imagem
Docker-Kaldi-ASR: fonte, imagem
Debian: 8: https://hub.docker.com/_/debian/
Nota : Provavelmente incompleto.
Exemplo de instalação de dependências para o 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
Apenas algumas notas difíceis sobre o ambiente necessário para fazer esses scripts executarem. Isso não é de forma alguma um conjunto completo de instruções, apenas algumas dicas para você começar.
~/.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 Alguns scripts esperam que o diretório tmp local esteja presente, localizado no mesmo diretório em que todos os scripts vivem, ou seja,
mkdir tmpA lista a seguir contém corpora de fala suportada por esta coleção de scripts.
Forschergeist (alemão, 2 horas):
<~/.speechrc:speech_arc>/forschergeist os arquivos .tgz no diretório<~/.speechrc:speech_corpora>/forschergeist no diretórioPacote de discurso alemão Versão 2 (alemão, 148 horas):
dev , test e train sejam subdiretos diretos de <~/.speechrc:speech_arc>/gspv2 ../import_gspv2.py para converter o corpus no formato Voxforge. O corpus resultante será gravado para <~/.speechrc:speech_corpora>/gspv2 .Barulho:
<~/.speechrc:speech_corpora>/ (ele gerará um subdiretório noise lá)Librisseech ASR (inglês, 475 horas):
LibriSpeech seja um subdiretório direto de <~/.speechrc:speech_arc> ../import_librispeech.py para converter o corpus no formato Voxforge. O corpus resultante será gravado para <~/.speechrc:speech_corpora>/librispeech .O conjunto de dados de fala de LJ (inglês, 24 horas):
LJSpeech-1.1 seja um subdiretório direto de <~/.speechrc:speech_arc> .import_ljspeech.py para converter o corpus no formato Voxforge. O corpus resultante será escrito para <~/.speechrc:speech_corpora>/lindajohnson-11 .Mozilla Common Voice Alemão (alemão, 140 horas):
de.tar.gzcv_de seja um subdiretório direto de <~/.speechrc:speech_arc> ../import_mozde.py para converter o corpus no formato Voxforge. O corpus resultante será gravado para <~/.speechrc:speech_corpora>/cv_de .MOZILLA VOZ COMUM V1 (Inglês, 252 horas):
cv_corpus_v1.tar.gzcv_corpus_v1 seja um subdiretório direto de <~/.speechrc:speech_arc> ../import_mozcv1.py para converter o corpus no formato Voxforge. O corpus resultante será gravado para <~/.speechrc:speech_corpora>/cv_corpus_v1 .Laboratórios de Inteligência Artificial de Munique GmbH (M-Aailabs) DataSet de fala (inglês, 147 horas, alemão, 237 horas, francês, 190 horas):
de_DE.tgz , en_UK.tgz , en_US.tgz , fr_FR.tgz (espelho)m_ailabs em <~/.speechrc:speech_arc>m_ailabsby_book e mova diretórios male e female , pois o arquivo não segue exatamente estruturas em inglês e alemão./import_mailabs.py para converter o corpus no formato Voxforge. O corpus resultante será gravado para <~/.speechrc:speech_corpora>/m_ailabs_en , <~/.speechrc:speech_corpora>/m_ailabs_de e <~/.speechrc:speech_corpora>/m_ailabs_fr .TED Lium Release 3 (inglês, 210 horas):
TEDLIUM_release-3.tgzTEDLIUM_release-3 seja um subdiretório direto de <~/.speechrc:speech_arc> ../import_tedlium3.py para converter o corpus no formato Voxforge. O corpus resultante será gravado para <~/.speechrc:speech_corpora>/tedlium3 .Voxforge (inglês, 75 horas):
<~/.speechrc:speech_arc>/voxforge_en<~/.speechrc:speech_corpora>/voxforge_en no diretórioVoxforge (alemão, 56 horas):
<~/.speechrc:speech_arc>/voxforge_de todos os arquivos .tgz no diretório<~/.speechrc:speech_corpora>/voxforge_de no diretórioVoxforge (francês, 140 horas):
<~/.speechrc:speech_arc>/voxforge_fr<~/.speechrc:speech_corpora>/voxforge_fr no diretórioZamia (inglês, 5 minutos):
<~/.speechrc:speech_arc>/zamia_en<~/.speechrc:speech_corpora>/zamia_enZamia (alemão, 18 horas):
<~/.speechrc:speech_arc>/zamia_de<~/.speechrc:speech_corpora>/zamia_de no diretório Nota técnica : para a maioria dos corpora, corrigimos transcrições em nossos bancos de dados que podem ser encontrados em data/src/speech/<corpus_name>/transcripts_*.csv . Como estes foram criados por muitas horas de revisão manual (semi-), devem ter uma qualidade mais alta do que os avisos originais, para que sejam usados durante o treinamento de nossos modelos ASR.
Depois de baixar e, se necessário, converteu um corpus que você precisa executar
./speech_audio_scan.py < corpus name >nele. Isso adicionará instruções ausentes aos bancos de dados CSV e converterá arquivos de áudio em formato de onda mono de 16kHz.
Para melhorar a resistência ao ruído, é possível derivar corpora dos existentes com ruído adicionado:
./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 executará gravação através de codecs telefônicos típicos. Esse corpus pode ser usado para treinar modelos que suportam gravações telefônicas de 8kHz:
./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 A lista a seguir contém corpora de texto que pode ser usada para treinar modelos de idiomas com os scripts contidos neste repositório:
Europarl, especificamente paralelo corpus-inglês e paralelo corpus francês-inglês:
.speechrc : europarl_de , europarl_en , europarl_fr./speech_sentences.py europarl_de , ./speech_sentences.py europarl_en e ./speech_sentences.py europarl_frCornell Movie-Dialogs Corpus:
.speechrc : cornell_movie_dialogs./speech_sentences.py cornell_movie_dialogsLARELE ALEMINA CORPULO:
.speechrc : parole_de./speech_train_punkt_tokenizer.py , depois execute ./speech_sentences.py parole_de WebQuestions: web_questions
.speechrc : web_questions./speech_sentences.py web_questions Yahoo! Respostas do conjunto de dados: yahoo_answers
.speechrc : yahoo_answers./speech_sentences.py yahoo_answers CNRTL EST Républicain Corpus, grande corpus de artigos de notícias (manchetes/parágrafos de 4,3 milhões) disponível sob uma licença CC BY-NC-SA. Faça o download de arquivos XML e extraia manchetes e parágrafos para um arquivo de texto com o seguinte 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_republicainAs frases também podem ser extraídas de nossa corporação de fala. Para fazer isso, corra:
Corporação de fala inglesa
./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 tedlium3Corporação de fala alemã
./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é -requisitos:
europarl_en , cornell_movie_dialogs , web_questions e yahoo_answers são instalados, sentenças extraídas (consulte as instruções acima).librispeech , voxforge_en , zamia_en , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3Para treinar um pequeno modelo de língua inglesa de poda da ordem 4 usando o Kenlm para uso em Kaldi e 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 treinar um modelo maior de ordem 6 com 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 treinar um modelo de tamanho médio da ordem 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é -requisitos:
europarl_de e parole_de estão instalados, sentenças extraídas (consulte as instruções acima).forschergeist , gspv2 , voxforge_de , zamia_de , m_ailabs_de , cv_dePara treinar um pequeno e podado modelo de idioma alemão da Ordem 4 usando o Kenlm para uso em Kaldi e 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 treinar um modelo maior de ordem 6 com 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 treinar um modelo de tamanho médio da ordem 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é -requisitos:
europarl_fr e est_republicain são instalados, extrações extraídas (consulte as instruções acima).voxforge_fr e m_ailabs_frPara treinar um modelo de idioma francês usando o Kenlm Run:
./speech_build_lm.py generic_fr_lang_model europarl_fr est_republicain voxforge_fr m_ailabs_frA principal ferramenta usada para revisão de envio, transcrição e expansão do léxico é:
./speech_editor.pyNota : Usamos os termos léxico e dicionário de forma intercambiável nesta documentação e em nossos scripts.
Atualmente, temos dois lexica, um para o inglês e outro para alemão (em data/src/dicts ):
dict-en.ipa
dict-de.ipa
O formato nativo de nossa léxica está no IPA (UTF8) com semicolons como separador. Este formato é então convertido em qualquer formato usado pelo mecanismo ASR de destino pelos scripts de exportação correspondentes.
Muitas ferramentas relacionadas ao léxico dependem do sequitur G2P para calcular pronúncias para palavras ausentes no dicionário. Os modelos necessários podem ser baixados do nosso servidor de arquivos: http://goofy.zamia.org/zamia-peech/g2p/. Para instalação, baixe e descompacte -os e, em seguida, coloque links para eles em data/models como assim:
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 treinar seus próprios modelos de sequestres G2P, use os scripts de exportação e trem fornecidos, por exemplo:
[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 ...]são as principais maldições, editor interativo de léxico. Ele produzirá automaticamente entradas candidatas para novas palavras usando o Sequitur G2P, Marytts e Espeakng. O usuário pode editar essas entradas manualmente, se necessário, e verificá -las ouvindo -as sendo sintetizadas via Marytts em diferentes vozes.
O editor do Lexicon também é integrado a várias outras ferramentas, speech_editor.py em particular, o que permite transcrever, revisar e adicionar palavras ausentes para novas amostras de áudio em uma ferramenta - que é recomendada.
Eu também tendem a revisar as entradas do Lexicon aleatoriamente de tempos em tempos. Para isso, tenho um pequeno script que escolherá 20 entradas aleatórias em que o sequitur G2P discorda da transcrição atual no léxico:
./speech_lex_edit.py ` ./speech_lex_review.py `Além disso, às vezes uso este comando para adicionar palavras ausentes de transcrições no modo em lote:
./speech_lex_edit.py ` ./speech_lex_missing.py ` Para o léxico alemão, as entradas podem ser extraídas do Wikcionário alemão usando um conjunto de scripts. Para fazer isso, o primeiro passo é extrair um conjunto de entradas de candidatos de um dump xml do Wikcionário:
./wiktionary_extract_ipa.py Isso produzirá entradas extraídas para data/dst/speech/de/dict_wiktionary_de.txt . Agora precisamos treinar um modelo de sequestur G2P que traduz essas entradas em nosso próprio estilo IPA e conjunto de fonemas:
./wiktionary_sequitur_export.py
./wiktionary_sequitur_train.shFinalmente, traduzimos as entradas e as verificamos nas previsões do nosso modelo regular de sequitur G2P:
./wiktionary_sequitur_gen.py Este script produz dois arquivos de saída: data/dst/speech/de/dict_wiktionary_gen.txt contém entradas aceitáveis, data/dst/speech/de/dict_wiktionary_rej.txt contém entradas rejeitadas.
A receita a seguir treina modelos kaldi para inglês.
Antes de executá -lo, verifique se todos os pré -requisitos são atendidos (veja acima para obter instruções sobre isso):
generic_en_lang_model_small construídovoxforge_en , librispeech , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3 e zamia_en são instalados, convertidos e digitalizados.voxforge_en_noisy , voxforge_en_phone , librispeech_en_noisy , librispeech_en_phone , cv_corpus_v1_noisy , cv_corpus_v1_phone , zamia_en_noisy e 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.shExportação Run com Corpora aumentada por ruído incluiu:
./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_phoneA receita a seguir treina modelos kaldi para alemão.
Antes de executá -lo, verifique se todos os pré -requisitos são atendidos (veja acima para obter instruções sobre isso):
generic_de_lang_model_small construídovoxforge_de , gspv2 , forschergeist , zamia_de , m_ailabs_de , cv_de são instalados, convertidos e digitalizados.voxforge_de_noisy , voxforge_de_phone , zamia_de_noisy e 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.shExportação Run com Corpora aumentada por ruído incluiu:
./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 uma ferramenta de adaptação de modelo Kaldi independente que não requer uma configuração completa da ZAMIA-fala, consulte
kaldi-adapt-lm
Os modelos kaldi existentes (como os que fornecemos para download, mas também os que você pode treinar do zero usando nossos scripts) podem ser adaptados aos modelos de idiomas (normalmente específicos do domínio), gramáticas JSGF e FSTs de gramática.
Aqui está um exemplo de como adaptar nosso modelo em inglês a um simples comando e controlar a gramática JSGF. Observe que este é apenas um exemplo de brinquedo - para o uso do mundo real, você provavelmente desejará adicionar loops de fonemas de lixo à gramática ou produzir um modelo de idioma que tenha alguma resistência ao ruído incorporada imediatamente.
Aqui está a 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 ) ;
O próximo passo é configurar um experimento de adaptação para modelos Kaldi usando este script:
./speech_kaldi_adapt.py data/models/kaldi-generic-en-tdnn_250-latest dict-en.ipa control.jsgf control-en Aqui, data/models/kaldi-generic-en-tdnn_250-latest é o modelo a ser adaptado, dict-en.ipa control-en control.jsgf
Para executar a adaptação real, mude para o diretório de modelos e execute o script de adaptação lá:
cd data/dst/asr-models/kaldi/control-en
./run-adaptation.sh Finalmente, você pode criar um tarball a partir do modelo recém -criado:
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.shCrie caso de revisão automática:
./wav2letter_auto_review.py -l de w2l-generic-de-latest gspv2execute:
pushd tmp/w2letter_auto_review
bash run_auto_review.sh
popdAplique os resultados:
./wav2letter_apply_review.pyAlgumas notas sobre como segmentar e transcrever audiolivros ou outras fontes de áudio (por exemplo, do Librivox) usando os scripts do ABOOK fornecidos:
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 ferramenta usará a detecção de silêncio para encontrar bons pontos de corte. Você pode ajustar suas configurações para alcançar um bom equilíbrio de curtos segmentos, mas poucas palavras divididas ao meio.
./abook-segment.py foo_16m.wavconfigurações:
[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 padrão, os segmentos resultantes acabarão em ABOOK/segmentos
A ferramenta de transcrição suporta até dois alto -falantes que você pode especificar na linha de comando. Os pacotes Voxforge resultantes acabarão no ABOOK/OUT por padrão.
./abook-transcribe.py -s speaker1 -S speaker2 abook/segments/Algumas anotações sobre como segmentar e transcrever audiolivros semi-automaticamente automáticos ou outras fontes de áudio (por exemplo, de Librivox) usando Kaldi:
Nossos scripts dependem de um layout de diretório fixo. Como a segmentação das gravações do Librivox é uma das principais aplicações desses scripts, sua terminologia de livros e seções é usada aqui. Para cada seção de um livro, são necessários dois arquivos de origem: um arquivo de onda que contém o áudio e um arquivo de texto que contém a transcrição.
Um esquema de nomeação fixo é usado para aqueles que são ilustrados por este exemplo:
ABOOK/IN/LIBRIVOX/11442-TOTEN-SEELEN/Evak-11442-Toten-Seelen-1.txt ABOOK/IN/LIBLIBIVOX/11442-TOTEN-SEELEN/EVAK-11442-TOTEN-SEELEN-1.WAV ABOOK/IN/LIBLIBIVOX/11442-TOTEN-SEELEN/EVAK-11442-TOTEN-SEELEN-2.TXT ABOOK/IN/LIBLIBIVOX/11442-TOTEN-SEELEN/EVAK-11442-TOTEN-SEELEN-2.WAV ...
O script abook-librivox.py é fornecido para ajudar na recuperação das gravações do Librivox e na configuração da estrutura do diretório. Observe que, por enquanto, a ferramenta não recuperará transcrições automaticamente, mas criará arquivos .txt vazios (de acordo com o esquema de nomenclatura) que você precisará preencher manualmente.
A ferramenta converterá o áudio recuperado em formato WAV mono de 16kHz, conforme exigido pelos scripts de segmentação. Se você pretende segmentar material de outras fontes, convertê -lo para esse formato. Para obter sugestões sobre quais ferramentas usarem para esta etapa, consulte as instruções de segmentação manual na seção anterior.
Nota : Como o processo kaldi é paralelo para segmentação em massa, são necessários pelo menos 4 arquivos de áudio e prompt para o processo funcionar.
Esta ferramenta tokenizará a transcrição e detectará tokens Oov. Esses podem ser substituídos ou adicionados ao dicionário:
./abook-preprocess-transcript.py abook/in/librivox/11442-toten-Seelen/evak-11442-toten-Seelen-1.txtPara que a segmentação automática funcione, precisamos de um modelo GMM que seja adaptado ao dicionário atual (que provavelmente teve que ser expandido durante o pré -processamento da transcrição), além de usar um modelo de idioma que abrange as instruções.
Primeiro, criamos um modelo de idioma sintonizado para o nosso propósito:
./abook-sentences.py abook/in/librivox/11442-toten-Seelen/ * .prompt
./speech_build_lm.py abook_lang_model abook abook abook parole_deAgora podemos criar um modelo adaptado usando este modelo de idioma e nosso ditado atual:
./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/Em seguida, precisamos criar a estrutura e os arquivos do diretório kaldi para segmentação automática:
./abook-kaldi-segment.py data/models/kaldi-abook-de-adapt-current abook/in/librivox/11442-toten-SeelenAgora podemos executar a segmentação:
pushd data/dst/speech/asr-models/kaldi/segmentation
./run-segmentation.sh
popd Finalmente, podemos recuperar o resultado da segmentação no formato Voxforge:
./abook-kaldi-retrieve.py abook/in/librivox/11442-toten-Seelen/O ZAMIA-TTS é um projeto experimental que tenta treinar Voices TTS com base em dados (revisados) Zamia -peech. Downloads aqui:
https://goofy.zamia.org/zamia-seech/tts/
Esta seção descreve como treinar vozes para a implementação do Tacotron 2 da NVIDIA. As vozes resultantes terão uma taxa de amostragem de 16kHz, pois essa é a taxa de amostragem padrão usada para o treinamento do modelo de discurso de Zamia. Isso significa que você terá que usar um modelo de glow de onda de 16kHz que você pode encontrar, juntamente com vozes pré -treinadas e ondas de amostra aqui:
https://goofy.zamia.org/zamia-speech/tts/tacotron2/
Agora, com isso fora do caminho, o treinamento do modelo Tacotron 2 é bem direto. O primeiro passo é exportar os filmes para a voz que você gostaria de treinar, por exemplo:
./speech_tacotron2_export.py -l en -o ../torch/tacotron2/filelists m_ailabs_en mailabselliotmillerEm seguida, mude para o seu diretório de treinamento do Tacotron 2
cd ../torch/tacotron2e especifique listas de arquivos, taxa de amostragem e tamanho de lote em '' 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
)
e comece o treinamento:
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 o script speech-dist.sh , por exemplo:
./speech_dist.sh generic-en kaldi tdnn_sp
Meus próprios scripts, bem como os dados que eu crio (por exemplo, léxico e transcrições) são licenciados LGPLV3, a menos que indicado de outra forma nos cabeçalhos de direitos autorais do script.
Alguns scripts e arquivos são baseados em obras de outros; nesses casos, é minha intenção manter intacta a licença original. Verifique os cabeçalhos de direitos autorais para mais informações.