Skrip Python untuk menghitung model audio dan bahasa dari data ucapan voxforge.org dan banyak sumber. Model yang dapat dibangun termasuk:
PENTING : Harap dicatat bahwa skrip-skrip ini sama sekali tidak ada aplikasi lengkap yang siap untuk konsumsi pengguna akhir. Namun, jika Anda seorang pengembang yang tertarik dalam pemrosesan bahasa alami, Anda mungkin menemukan beberapa di antaranya berguna. Kontribusi, tambalan, dan permintaan tarik sangat disambut.
Pada saat penulisan ini, skrip di sini difokuskan untuk membangun model Voxforge Inggris dan Jerman. Namun, tidak ada alasan mengapa mereka tidak dapat digunakan untuk membangun model bahasa lain juga, jangan ragu untuk berkontribusi dukungan untuk itu.
Dibuat oleh GH-MD-TOC
Kami memiliki berbagai model plus kode sumber dan biner untuk alat yang digunakan untuk membangun model ini yang tersedia untuk diunduh. Semuanya gratis dan open source.
Semua model dan unduhan data kami dapat ditemukan di sini: unduhan
Model ASR kami yang sudah dibangun sebelumnya dapat diunduh di sini: model ASR
kaldi-generic-en-tdnn_f Model TDNN Faktorisasi NNET3 yang besar, dilatih pada ~ 1200 jam audio. Memiliki resistensi kebisingan latar belakang yang layak dan juga dapat digunakan pada rekaman telepon. Harus memberikan akurasi terbaik tetapi sedikit lebih intensif sumber daya daripada model lainnya.kaldi-generic-en-tdnn_sp Model rantai NNET3 besar, dilatih pada ~ 1200 jam audio. Memiliki resistensi kebisingan latar belakang yang layak dan juga dapat digunakan pada rekaman telepon. Kurang akurat tetapi juga sedikit kurang intensif sumber daya daripada model tddn_f .kaldi-generic-en-tdnn_250 sama dengan model yang lebih besar tetapi lebih sedikit sumber daya intensif, cocok untuk digunakan dalam aplikasi tertanam (misalnya raspberrypi 3).kaldi-generic-en-tri2b_chain , dilatih pada data yang sama dengan dua model di atas-dimaksudkan untuk tugas segmentasi otomatis.kaldi-generic-de-tdnn_f Model rantai NNET3 besar, dilatih pada ~ 400 jam audio. Memiliki resistensi kebisingan latar belakang yang layak dan juga dapat digunakan pada rekaman telepon.kaldi-generic-de-tdnn_250 sama dengan model besar tetapi lebih sedikit sumber daya intensif, cocok untuk digunakan dalam aplikasi tertanam (misalnya raspberrypi 3).kaldi-generic-de-tri2b_chain , dilatih pada data yang sama dengan dua model di atas-dimaksudkan untuk tugas segmentasi otomatis.w2l-generic-de , dilatih pada ~ 400 jam audio. Memiliki resistensi kebisingan latar belakang yang layak dan juga dapat digunakan pada rekaman telepon.Catatan : Penting untuk disadari bahwa model -model ini dapat dan harus disesuaikan dengan domain aplikasi Anda. Lihat adaptasi model untuk detailnya.
Kamus kami dapat diunduh di sini: Kamus
dict-en.ipa berdasarkan cmudict dengan banyak entri tambahan yang dihasilkan melalui Sequitur G2P.dict-de.ipa dibuat secara manual dari awal dengan banyak entri yang ditinjau secara otomatis yang diekstraksi dari Wiktionary. Model G2P yang sudah dibangun sebelumnya dapat diunduh di sini: Model G2P
sequitur-dict-en.ipa Sequitur G2P Model yang dilatih pada Kamus IPA Inggris kami (UTF8).sequitur-dict-de.ipa Sequitur G2P model yang dilatih pada kamus IPA Jerman kami (UTF8). Model bahasa ARPA yang sudah dibangun kami dapat diunduh di sini: Model Bahasa
generic_en_lang_model_smallgeneric_en_lang_model_largegeneric_de_lang_model_smallgeneric_de_lang_model_large Unduh beberapa file sampel gelombang
$ 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]buka paket mereka:
$ tar xfvz demo_wavs.tgz
demo1.wav
demo2.wav
demo3.wav
demo4.wavUnduh program demo
$ 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]Sekarang Jalankan Pengenalan Pidato Otomatis Kaldi pada File Demo 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 Tentukan nama Sumber Mic Pulseaudio Anda:
$ 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
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Unduh dan Jalankan Demo:
$ 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 Untuk memulai layanan STT di mesin lokal Anda, jalankan:
$ 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-r20180611Untuk mentransfer file audio untuk transkripsi ke layanan, di terminal kedua, jalankan:
$ 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: *****************************************************************Gambar Docker dalam contoh di atas adalah hasil dari penumpukan 4 gambar di atas satu sama lain:
Docker-Py-Kaldi-Asr-and-Model: Sumber, Image
Docker-py-kaldi-asr: Sumber, gambar
Docker-Kaldi-Asr: Sumber, Gambar
Debian: 8: https://hub.docker.com/_/debian/
Catatan : Mungkin tidak lengkap.
Contoh instalasi dependensi untuk 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
Hanya beberapa catatan kasar tentang lingkungan yang diperlukan untuk menjalankan skrip ini. Ini sama sekali tidak merupakan serangkaian instruksi lengkap, hanya beberapa petunjuk untuk memulai.
~/.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 Beberapa skrip mengharapkan direktori tmp lokal hadir, terletak di direktori yang sama di mana semua skrip tinggal, yaitu
mkdir tmpDaftar berikut berisi pidato korpora yang didukung oleh koleksi skrip ini.
Forschergeist (Jerman, 2 jam):
<~/.speechrc:speech_arc>/forschergeist<~/.speechrc:speech_corpora>/forschergeistPaket Pidato Jerman Versi 2 (Jerman, 148 jam):
dev , test , dan train adalah subdirektori langsung dari <~/.speechrc:speech_arc>/gspv2 ../import_gspv2.py untuk mengonversi corpus ke format VoxForge. Korpus yang dihasilkan akan ditulis ke <~/.speechrc:speech_corpora>/gspv2 .Kebisingan:
<~/.speechrc:speech_corpora>/ (itu akan menghasilkan subdirektori noise di sana)Librispeech ASR (Inggris, 475 jam):
LibriSpeech adalah subdirektori langsung dari <~/.speechrc:speech_arc> ../import_librispeech.py untuk mengonversi corpus ke format VoxForge. Korpus yang dihasilkan akan ditulis ke <~/.speechrc:speech_corpora>/librispeech .Dataset Pidato LJ (Bahasa Inggris, 24 Jam):
LJSpeech-1.1 adalah subdirektori langsung dari <~/.speechrc:speech_arc> .import_ljspeech.py untuk mengonversi corpus ke format VoxForge. Korpus yang dihasilkan akan ditulis ke <~/.speechrc:speech_corpora>/lindajohnson-11 .Mozilla Common Voice Jerman (Jerman, 140 jam):
de.tar.gzcv_de adalah subdirektori langsung dari <~/.speechrc:speech_arc> ../import_mozde.py untuk mengonversi korpus ke format VoxForge. Korpus yang dihasilkan akan ditulis ke <~/.speechrc:speech_corpora>/cv_de .Mozilla Common Voice V1 (Inggris, 252 jam):
cv_corpus_v1.tar.gzcv_corpus_v1 adalah subdirektori langsung dari <~/.speechrc:speech_arc> ../import_mozcv1.py untuk mengonversi corpus ke format VoxForge. Korpus yang dihasilkan akan ditulis ke <~/.speechrc:speech_corpora>/cv_corpus_v1 .Laboratorium Kecerdasan Buatan Munich GmbH (M-ADABS) Dataset Pidato (Bahasa Inggris, 147 Jam, Jerman, 237 Jam, Prancis, 190 Jam):
de_DE.tgz , en_UK.tgz , en_US.tgz , fr_FR.tgz (mirror)m_ailabs di <~/.speechrc:speech_arc>m_ailabsby_book dan pindahkan direktori male dan female di dalamnya karena arsip tidak mengikuti struktur bahasa Inggris dan Jerman yang tepat./import_mailabs.py untuk mengonversi corpus ke format VoxForge. Korpus yang dihasilkan akan ditulis ke <~/.speechrc:speech_corpora>/m_ailabs_en , <~/.speechrc:speech_corpora>/m_ailabs_de dan <~/.speechrc:speech_corpora>/m_ailabs_fr .Rilis TED-LIM 3 (Bahasa Inggris, 210 Jam):
TEDLIUM_release-3.tgzTEDLIUM_release-3 adalah subdirektori langsung dari <~/.speechrc:speech_arc> ../import_tedlium3.py untuk mengonversi korpus ke format VoxForge. Korpus yang dihasilkan akan ditulis ke <~/.speechrc:speech_corpora>/tedlium3 .Voxforge (bahasa Inggris, 75 jam):
<~/.speechrc:speech_arc>/voxforge_en<~/.speechrc:speech_corpora>/voxforge_enVoxforge (Jerman, 56 jam):
<~/.speechrc:speech_arc>/voxforge_de<~/.speechrc:speech_corpora>/voxforge_deVoxforge (Prancis, 140 jam):
<~/.speechrc:speech_arc>/voxforge_fr<~/.speechrc:speech_corpora>/voxforge_frZamia (Bahasa Inggris, 5 Menit):
<~/.speechrc:speech_arc>/zamia_en<~/.speechrc:speech_corpora>/zamia_enZamia (Jerman, 18 jam):
<~/.speechrc:speech_arc>/zamia_de<~/.speechrc:speech_corpora>/zamia_de Catatan Teknis : Untuk sebagian besar korpora kami telah mengoreksi transkrip dalam database kami yang dapat ditemukan di data/src/speech/<corpus_name>/transcripts_*.csv . Karena ini telah dibuat oleh banyak jam (semi) tinjauan manual, mereka harus memiliki kualitas yang lebih tinggi daripada petunjuk asli sehingga mereka akan digunakan selama pelatihan model ASR kami.
Setelah Anda mengunduh dan, jika perlu, mengonversi korpus yang perlu Anda jalankan
./speech_audio_scan.py < corpus name >di atasnya. Ini akan menambah prompt yang hilang ke database CSV dan mengonversi file audio ke format gelombang mono 16kHz.
Untuk meningkatkan resistensi kebisingan, dimungkinkan untuk memperoleh korpora dari yang ada dengan kebisingan ditambahkan:
./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 Skrip ini akan menjalankan perekaman melalui codec telepon khas. Corpus seperti itu dapat digunakan untuk melatih model yang mendukung rekaman telepon 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 Daftar berikut berisi Korpora Teks yang dapat digunakan untuk melatih model bahasa dengan skrip yang terkandung dalam repositori ini:
Europarl, khususnya paralel Corpus Jerman-Inggris dan Paralel Corpus Prancis-Inggris:
.speechrc : europarl_de , europarl_en , europarl_fr./speech_sentences.py europarl_de , ./speech_sentences.py europarl_en dan ./speech_sentences.py europarl_frCornell Movie-Dialogs Corpus:
.speechrc : cornell_movie_dialogs./speech_sentences.py cornell_movie_dialogsCorpus Pembebasan Bersyarat Jerman:
.speechrc : parole_de./speech_train_punkt_tokenizer.py , lalu jalankan ./speech_sentences.py parole_de WebQuestions: web_questions
.speechrc : web_questions./speech_sentences.py web_questions Yahoo! Jawaban Dataset: yahoo_answers
.speechrc : yahoo_answers./speech_sentences.py yahoo_answers CNRTL EST Républicain Corpus, Corpus besar artikel berita (4,3M tajuk/paragraf) tersedia di bawah lisensi CC BY-NC-SA. Unduh file xml dan ekstrak berita utama dan paragraf ke file teks dengan perintah berikut: 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_republicainKalimat juga dapat diekstraksi dari korpora pidato kami. Untuk melakukan itu, jalankan:
Korpora Pidato Bahasa Inggris
./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 tedlium3Korpora Pidato Jerman
./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_dePrasyarat:
europarl_en , cornell_movie_dialogs , web_questions , dan yahoo_answers diinstal, kalimat diekstraksi (lihat instruksi di atas).librispeech , voxforge_en , zamia_en , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3Untuk melatih model bahasa Inggris yang kecil dan dipangkas dari Pesanan 4 menggunakan Kenlm untuk digunakan di Kaldi dan WAV2LETTER BUILD 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 tedlium3Untuk melatih model urutan 6 yang lebih besar dengan lebih sedikit pemangkasan:
./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 tedlium3Untuk melatih model urutan menengah 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 tedlium3Prasyarat:
europarl_de dan parole_de diinstal, kalimat diekstraksi (lihat instruksi di atas).forschergeist , gspv2 , voxforge_de , zamia_de , m_ailabs_de , cv_deUntuk melatih model bahasa Jerman yang kecil dan dipangkas menggunakan Kenlm untuk digunakan di Kaldi dan WAV2LETTER BUILD RUN:
./speech_build_lm.py generic_de_lang_model_small europarl_de parole_de forschergeist gspv2 voxforge_de zamia_de m_ailabs_de cv_deUntuk melatih model urutan 6 yang lebih besar dengan lebih sedikit pemangkasan:
./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_deUntuk melatih model urutan menengah 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_dePrasyarat:
europarl_fr dan est_republicain diinstal, kalimat diekstraksi (lihat instruksi di atas).voxforge_fr dan m_ailabs_frUntuk melatih model bahasa Prancis menggunakan Kenlm Run:
./speech_build_lm.py generic_fr_lang_model europarl_fr est_republicain voxforge_fr m_ailabs_frAlat utama yang digunakan untuk tinjauan pengiriman, transkripsi dan ekspansi leksikon adalah:
./speech_editor.pyCatatan : Kami menggunakan istilah leksikon dan kamus secara dipertukarkan dalam dokumentasi ini dan skrip kami.
Saat ini, kami memiliki dua Lexica, satu untuk bahasa Inggris dan satu untuk Jerman (dalam data/src/dicts ):
Dict-en.ipa
Dict-de.ipa
Format asli Lexica kami adalah (UTF8) IPA dengan titik koma sebagai pemisah. Format ini kemudian dikonversi ke format apa pun yang digunakan oleh mesin ASR target oleh skrip ekspor yang sesuai.
Banyak alat terkait leksikon bergantung pada Sequitur G2P untuk menghitung pengucapan untuk kata-kata yang hilang dari kamus. Model yang diperlukan dapat diunduh dari server file kami: http://goofy.zamia.org/zamia-speech/g2p/. Untuk instalasi, unduh dan buka paket dan kemudian letakkan tautan ke mereka di bawah data/models seperti itu:
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-r20180510Untuk melatih model G2P Sequitur Anda sendiri, gunakan skrip ekspor dan kereta yang disediakan, misalnya:
[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 ...]adalah editor leksikon interaktif berbasis kutukan utama. Ini akan secara otomatis menghasilkan entri kandidat untuk kata -kata baru menggunakan Sequitur G2P, Marytts dan Espeakng. Pengguna kemudian dapat mengedit entri ini secara manual jika perlu dan memeriksanya dengan mendengarkan mereka disintesis melalui MaryTTS dalam suara yang berbeda.
Editor Lexicon juga diintegrasikan ke dalam berbagai alat lain, speech_editor.py khususnya yang memungkinkan Anda untuk menuliskan, meninjau, dan menambahkan kata -kata yang hilang untuk sampel audio baru dalam satu alat - yang direkomendasikan.
Saya juga cenderung meninjau entri leksikon secara acak dari waktu ke waktu. Untuk itu saya memiliki skrip kecil yang akan memilih 20 entri acak di mana Sequitur G2P tidak setuju dengan transkripsi saat ini dalam leksikon:
./speech_lex_edit.py ` ./speech_lex_review.py `Juga, saya terkadang menggunakan perintah ini untuk menambahkan kata -kata yang hilang dari transkrip dalam mode batch:
./speech_lex_edit.py ` ./speech_lex_missing.py ` Untuk leksikon Jerman, entri dapat diekstraksi dari wiktionaris Jerman menggunakan satu set skrip. Untuk melakukan itu, langkah pertama adalah mengekstraksi satu set entri kandidat dari wiktionary xml dump:
./wiktionary_extract_ipa.py Ini akan menghasilkan entri yang diekstraksi ke data/dst/speech/de/dict_wiktionary_de.txt . Kita sekarang perlu melatih model G2P Sequitur yang menerjemahkan entri ini ke dalam gaya IPA dan set fonem kita sendiri:
./wiktionary_sequitur_export.py
./wiktionary_sequitur_train.shAkhirnya, kami menerjemahkan entri dan memeriksanya terhadap prediksi dari model G2P sequitur reguler kami:
./wiktionary_sequitur_gen.py Script ini menghasilkan dua file output: data/dst/speech/de/dict_wiktionary_gen.txt berisi entri yang dapat diterima, data/dst/speech/de/dict_wiktionary_rej.txt berisi entri yang ditolak.
Resep berikut melatih model Kaldi untuk bahasa Inggris.
Sebelum menjalankannya, pastikan semua prasyarat terpenuhi (lihat di atas untuk instruksi tentang ini):
generic_en_lang_model_small dibangunvoxforge_en , librispeech , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3 dan zamia_en diinstal, dikonversi dan dipindai.voxforge_en_noisy , voxforge_en_phone , librispeech_en_noisy , librispeech_en_phone , cv_corpus_v1_noisy , cv_corpus_v1_phone, zamia_en_noisy dan cv_corpus_v1_phone , zamia_en_noisy dan zamia_en_en_phone_phone, zamia_en_noisy dan 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.shRun Ekspor Dengan Noise Augmented Corpora Termasuk:
./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_phoneResep berikut melatih model Kaldi untuk Jerman.
Sebelum menjalankannya, pastikan semua prasyarat terpenuhi (lihat di atas untuk instruksi tentang ini):
generic_de_lang_model_small dibangunvoxforge_de , gspv2 , forschergeist , zamia_de , m_ailabs_de , cv_de diinstal, dikonversi dan dipindai.voxforge_de_noisy , voxforge_de_phone , zamia_de_noisy dan 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.shRun Ekspor Dengan Noise Augmented Corpora Termasuk:
./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_deUntuk alat adaptasi model Kaldi mandiri yang tidak memerlukan pengaturan Zamia-Speech lengkap, lihat
Kaldi-adapt-lm
Model Kaldi yang ada (seperti yang kami sediakan untuk diunduh tetapi juga yang dapat Anda latih dari awal menggunakan skrip kami) dapat disesuaikan dengan model bahasa (biasanya spesifik domain), tata bahasa JSGF dan tata bahasa.
Berikut adalah contoh cara menyesuaikan model bahasa Inggris kami dengan perintah sederhana dan mengontrol tata bahasa JSGF. Harap dicatat bahwa ini hanyalah contoh mainan - untuk penggunaan dunia nyata, Anda mungkin ingin menambahkan loop fonem sampah ke tata bahasa atau menghasilkan model bahasa yang memiliki beberapa resistensi kebisingan dibangun segera.
Inilah tata bahasa yang akan kami gunakan:
#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 ) ;
Langkah selanjutnya adalah mengatur eksperimen adaptasi model Kaldi menggunakan skrip ini:
./speech_kaldi_adapt.py data/models/kaldi-generic-en-tdnn_250-latest dict-en.ipa control.jsgf control-en Di sini, data/models/kaldi-generic-en-tdnn_250-latest adalah model yang akan diadaptasi, dict-en.ipa control-en kamus yang akan digunakan oleh model baru, control.jsgf adalah model baru yang kita inginkan.
Untuk menjalankan adaptasi yang sebenarnya, ubah menjadi direktori model dan menjalankan skrip adaptasi di sana:
cd data/dst/asr-models/kaldi/control-en
./run-adaptation.sh Akhirnya, Anda dapat membuat tarball dari model yang baru dibuat:
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.shBuat kasus review otomatis:
./wav2letter_auto_review.py -l de w2l-generic-de-latest gspv2Jalankan:
pushd tmp/w2letter_auto_review
bash run_auto_review.sh
popdTerapkan hasilnya:
./wav2letter_apply_review.pyBeberapa Catatan tentang Cara Menggegahkan dan Menyripasi Audio atau Sumber Audio Lainnya (misalnya dari Librivox) Menggunakan skrip ABOOK yang disediakan:
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.wavAlat ini akan menggunakan deteksi keheningan untuk menemukan titik potong yang baik. Anda mungkin ingin menyesuaikan pengaturannya untuk mencapai keseimbangan yang baik dari segmen pendek tetapi beberapa kata terbagi menjadi dua.
./abook-segment.py foo_16m.wavPengaturan:
[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 outputSecara default, segmen yang dihasilkan akan berakhir di ABOOK/segmen
Alat transkripsi mendukung hingga dua speaker yang dapat Anda tentukan pada baris perintah. Paket VoxForge yang dihasilkan akan berakhir di Abook/Out secara default.
./abook-transcribe.py -s speaker1 -S speaker2 abook/segments/Beberapa catatan tentang cara segmen dan menyalin buku audio semi-otomatis atau sumber audio lainnya (misalnya dari Librivox) menggunakan Kaldi:
Skrip kami bergantung pada tata letak direktori tetap. Karena segmentasi rekaman Librivox adalah salah satu aplikasi utama dari skrip ini, terminologi buku dan bagian mereka digunakan di sini. Untuk setiap bagian dari buku sumber Dua Buku diperlukan: file gelombang yang berisi audio dan file teks yang berisi transkrip.
Skema penamaan tetap digunakan untuk yang diilustrasikan oleh contoh ini:
Abook/in/Librivox/11442-toten-seelen/evak-11442-toten-seelen-1.txt Abook/in/Librivox/11442-toten-seelen/evak-11442-toten-seelen-1.wav Abook/in/Librivox/11442-Toten-Seelen/Evak-11442-Toten-Seelen-2.txt Abook/in/Librivox/11442-Toten-Seelen/Evak-11442-Toten-Seelen-2.wav ...
Script abook-librivox.py disediakan untuk membantu pengambilan rekaman Librivox dan menyiapkan struktur direktori. Harap dicatat bahwa untuk saat ini, alat ini tidak akan mengambil transkrip secara otomatis tetapi akan membuat file .txt kosong (sesuai dengan skema penamaan) yang harus Anda isi secara manual.
Alat ini akan mengonversi audio yang diambil menjadi format mono wav 16kHz seperti yang dipersyaratkan oleh skrip segmentasi. Jika Anda bermaksud untuk segmen materi dari sumber lain, pastikan untuk mengonversinya ke format itu. Untuk saran tentang alat apa yang akan digunakan untuk langkah ini, silakan merujuk ke instruksi segmentasi manual di bagian sebelumnya.
CATATAN : Karena proses Kaldi diparalelkan untuk segmentasi massa, setidaknya 4 file audio dan prompt diperlukan agar proses berfungsi.
Alat ini akan menjadi tokenisasi transkrip dan mendeteksi token OOV. Itu kemudian dapat diganti atau ditambahkan ke kamus:
./abook-preprocess-transcript.py abook/in/librivox/11442-toten-Seelen/evak-11442-toten-Seelen-1.txtAgar segmentasi otomatis berfungsi, kita memerlukan model GMM yang disesuaikan dengan kamus saat ini (yang kemungkinan harus diperluas selama transkrip preprocessing) plus menggunakan model bahasa yang mencakup petunjuk.
Pertama, kami membuat model bahasa yang disetel untuk tujuan kami:
./abook-sentences.py abook/in/librivox/11442-toten-Seelen/ * .prompt
./speech_build_lm.py abook_lang_model abook abook abook parole_deSekarang kita dapat membuat model yang diadaptasi menggunakan model bahasa ini dan dikt kami saat ini:
./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/Selanjutnya, kita perlu membuat struktur direktori dan file Kaldi untuk segmentasi otomatis:
./abook-kaldi-segment.py data/models/kaldi-abook-de-adapt-current abook/in/librivox/11442-toten-SeelenSekarang kita dapat menjalankan segmentasi:
pushd data/dst/speech/asr-models/kaldi/segmentation
./run-segmentation.sh
popd Akhirnya, kita dapat mengambil hasil segmentasi dalam format voxforge:
./abook-kaldi-retrieve.py abook/in/librivox/11442-toten-Seelen/Zamia-TTS adalah proyek eksperimental yang mencoba melatih suara TTS berdasarkan data (ulasan) Zamia-Speech. Unduh di sini:
https://goofy.zamia.org/zamia-speech/tts/
Bagian ini menjelaskan cara melatih suara untuk implementasi Tacotron 2 NVIDIA. Suara yang dihasilkan akan memiliki laju sampel 16kHz karena itu adalah laju sampel default yang digunakan untuk pelatihan model ASR Zamia Speech. Ini berarti bahwa Anda harus menggunakan model Waveglow 16kHz yang dapat Anda temukan, bersama dengan suara pretrained dan wav sampel di sini:
https://goofy.zamia.org/zamia-feech/tts/tacotron2/
Sekarang dengan itu, pelatihan model Tacotron 2 cukup mudah. Langkah pertama adalah mengekspor daftar file untuk suara yang ingin Anda latih, misalnya:
./speech_tacotron2_export.py -l en -o ../torch/tacotron2/filelists m_ailabs_en mailabselliotmillerSelanjutnya, ubah menjadi direktori pelatihan Tacotron 2 Anda
cd ../torch/tacotron2dan tentukan daftar file, laju pengambilan sampel dan ukuran batch di '' 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
)
dan mulai pelatihan:
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 Untuk membangun tarball dari model, gunakan skrip speech-dist.sh , misalnya:
./speech_dist.sh generic-en kaldi tdnn_sp
Script saya sendiri serta data yang saya buat (yaitu leksikon dan transkrip) dilisensikan LGPLV3 kecuali dinyatakan lain dalam header hak cipta skrip.
Beberapa skrip dan file didasarkan pada karya orang lain, dalam kasus -kasus itu adalah niat saya untuk menjaga lisensi asli tetap utuh. Pastikan untuk memeriksa header hak cipta di dalam untuk informasi lebih lanjut.