python腳本從voxforge.org語音數據和許多來源計算音頻和語言模型。可以構建的模型包括:
重要的是:請注意,這些腳本絕不形成完整的應用程序,即最終用戶消耗。但是,如果您是對自然語言處理感興趣的開發人員,則可能會發現其中一些有用。非常歡迎貢獻,補丁和拉動請求。
在撰寫本文時,這裡的腳本專注於構建英語和德國Voxforge模型。但是,沒有理由不能將它們也不能用於構建其他語言模型,可以隨意為這些模型做出支持。
由GH-MD-TOC創建
我們有各種型號以及用於構建這些型號的工具的源代碼和二進製文件。一切都是免費的和開源的。
我們所有的模型和數據下載都可以在此處找到:下載
我們的預先構建的ASR模型可以在此處下載:ASR模型
kaldi-generic-en-tdnn_f大型NNET3鏈分解的TDNN模型,在〜1200小時的音頻中訓練。具有不錯的背景噪聲阻力,也可以在電話錄音中使用。應該提供最佳準確性,但比其他模型要大量資源更大。kaldi-generic-en-tdnn_sp大型NNET3鏈模型,經過〜1200小時的音頻培訓。具有不錯的背景噪聲阻力,也可以在電話錄音中使用。與tddn_f型號相比,精確度較低,但資源密集程度略低。kaldi-generic-en-tdnn_250與較大的型號相同,但資源較少,適用於嵌入式應用程序(例如a raspberrypi 3)。kaldi-generic-en-tri2b_chain GMM模型,對與上述兩個模型相同的數據進行了訓練 - 用於自動分割任務。kaldi-generic-de-tdnn_f大型NNET3-鏈型號,在〜400小時的音頻中訓練。具有不錯的背景噪聲阻力,也可以在電話錄音中使用。kaldi-generic-de-tdnn_250與大型模型相同,但資源不足,適用於嵌入式應用程序(例如A raspberrypi 3)。kaldi-generic-de-tri2b_chain GMM模型,與上述兩個模型相同的數據進行了訓練 - 用於自動分割任務。w2l-generic-de大型型號,經過〜400小時的音頻訓練。具有不錯的背景噪聲阻力,也可以在電話錄音中使用。注意:重要的是要意識到這些模型可以並且應該適應您的應用程序域。有關詳細信息,請參見模型改編。
我們的詞典可以在這裡下載:字典
dict-en.ipa通過sequitur g2p生成了許多其他條目。dict-de.ipa從刮擦中手動創建,並從Wiktionary中提取了許多其他自動評估條目。 我們的預構建的G2P型號可以在此處下載:G2P型號
sequitur-dict-en.ipa sequitur g2p模型在我們的英語IPA詞典(UTF8)上訓練。sequitur-dict-de.ipa sequitur g2p模型。 我們的預構建的ARPA語言模型可以在此處下載:語言模型
generic_en_lang_model_smallgeneric_en_lang_model_largegeneric_de_lang_model_smallgeneric_de_lang_model_large 下載一些示例波文件
$ 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]解開它們:
$ tar xfvz demo_wavs.tgz
demo1.wav
demo2.wav
demo3.wav
demo4.wav下載演示程序
$ 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]現在在演示WAV文件上運行Kaldi自動語音識別:
$ 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 確定您的pulseaudio mic來源的名稱:
$ 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
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^下載並運行演示:
$ 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 要在本地計算機上啟動STT服務,請執行:
$ 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-r20180611要將音頻文件傳輸到第二個終端中的轉錄到服務:執行:
$ 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: *****************************************************************上面示例中的Docker映像是將4個圖像彼此堆疊的結果:
docker-py-kaldi-asr and Model:源,圖像
docker-py-kaldi-asr:來源,圖像
Docker-Kaldi-ASR:來源,圖像
Debian:8:https://hub.docker.com/_/debian/
注意:可能不完整。
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
只需在環境上進行一些粗略的筆記即可運行這些腳本。這絕不是一組完整的說明,只是一些提示可以讓您入門。
~/.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有些腳本期望Al Local tmp目錄存在,位於所有腳本使用的同一目錄中,即
mkdir tmp以下列表包含此腳本集合支持的語音語料庫。
Forschergeist(德語,2小時):
<~/.speechrc:speech_arc>/forschergeist<~/.speechrc:speech_corpora>/forschergeist德語Speecdata軟件包版本2(德語,148小時):
dev , test和train是<~/.speechrc:speech_arc>/gspv2的直接子目錄。./import_gspv2.py將語料庫轉換為VoxForge格式。所得的語料庫將寫入<~/.speechrc:speech_corpora>/gspv2 。噪音:
<~/.speechrc:speech_corpora>/ (它將在那裡生成noise子目錄)librispeech asr(英語,475小時):
LibriSpeech是<~/.speechrc:speech_arc>的直接子目錄。./import_librispeech.py將語料庫轉換為VoxForge格式。所得的語料庫將寫入<~/.speechrc:speech_corpora>/librispeech 。LJ語音數據集(英語,24小時):
LJSpeech-1.1是<~/.speechrc:speech_arc>的直接子目錄。import_ljspeech.py將語料庫轉換為voxforge格式。由此產生的語料庫將寫入<~/.speechrc:speech_corpora>/lindajohnson-11 。Mozilla普通語音德語(德語,140小時):
de.tar.gzcv_de是<~/.speechrc:speech_arc>的直接子目錄。./import_mozde.py將語料庫轉換為VoxForge格式。結果語料庫將寫入<~/.speechrc:speech_corpora>/cv_de 。Mozilla Common Voice V1(英語,252小時):
cv_corpus_v1.tar.gzcv_corpus_v1是<~/.speechrc:speech_arc>的直接子目錄。./import_mozcv1.py將語料庫轉換為VoxForge格式。所得的語料庫將寫入<~/.speechrc:speech_corpora>/cv_corpus_v1 。慕尼黑人工智能實驗室GmbH(M-ailabs)語音數據集(英語,147小時,德語,237小時,法語,190小時):
de_DE.tgz , en_UK.tgz , en_US.tgz , fr_FR.tgz (鏡子)<~/.speechrc:speech_arc>中創建一個子目錄m_ailabs :speech_arc>m_ailabs子目錄中解開下載的拖尾by_book並在其中移動male和female目錄,因為檔案不完全遵循英語和德語結構./import_mailabs.py將語料庫轉換為VoxForge格式。所得的語料庫將寫入<~/.speechrc:speech_corpora>/m_ailabs_en , <~/.speechrc:speech_corpora>/m_ailabs_de m_ailabs_de and <~/.speechrc:speech_corpora>/m_ailabs_fr 。TED-LIUM版本3(英語,210小時):
TEDLIUM_release-3.tgzTEDLIUM_release-3目錄是<~/.speechrc:speech_arc>的直接子目錄。./import_tedlium3.py將語料庫轉換為VoxForge格式。所得的語料庫將寫入<~/.speechrc:speech_corpora>/tedlium3 。Voxforge(英語,75小時):
<~/.speechrc:speech_arc>/voxforge_en<~/.speechrc:speech_corpora>/voxforge_enVoxforge(德語,56小時):
<~/.speechrc:speech_arc>/voxforge_de<~/.speechrc:speech_corpora>/voxforge_deVoxforge(法語,140小時):
<~/.speechrc:speech_arc>/voxforge_fr<~/.speechrc:speech_corpora>/voxforge_frZamia(英語,5分鐘):
<~/.speechrc:speech_arc>/zamia_en<~/.speechrc:speech_corpora>/zamia_enZamia(德語,18小時):
<~/.speechrc:speech_arc>/zamia_de<~/.speechrc:speech_corpora>/zamia_de技術說明:對於大多數語料庫,我們在數據庫中校正了成績單,可以在data/src/speech/<corpus_name>/transcripts_*.csv 。 csv中找到。由於這些(半)手動審查已經創建了這些,因此它們的質量應該比原始提示更高,因此在培訓我們的ASR模型期間將使用它們。
下載後,如有必要,轉換了一個語料庫,您需要運行
./speech_audio_scan.py < corpus name >在上面。這將在CSV數據庫中添加缺失的提示,並將音頻文件轉換為16KHz單波格式。
為了提高抗噪聲性,可以從添加噪聲的現有文庫中得出:
./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 該腳本將通過典型的電話編解碼器運行錄製。這樣的語料庫可用於訓練支持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 以下列表包含文本語料庫,可用於使用此存儲庫中包含的腳本來訓練語言模型:
Europarl,特別是平行的德語語料庫和平行法語法語 - 英語:
.speechrc中的相應變量: europarl_de , europarl_en , europarl_fr./speech_sentences.py europarl_de ,. ./speech_sentences.py europarl_en and ./speech_sentences.py europarl_fr康奈爾電影 - Dialogs語料庫:
.speechrc中的相應變量: cornell_movie_dialogs./speech_sentences.py cornell_movie_dialogs德國假釋語料庫:
.speechrc中的相應變量: parole_de./speech_train_punkt_tokenizer.py訓練punkt tokenizer,然後運行./speech_sentences.py parole_de WebQuestions: web_questions
.speechrc中的相應變量: web_questions./speech_sentences.py web_questions雅虎!答案數據集: yahoo_answers
.speechrc中的相應變量: yahoo_answers./speech_sentences.py yahoo_answers cnrtl estRépublicain語料庫,大量新聞文章(430萬個頭條/段落),可根據CC BY-NC-SA許可提供。下載XML文件並將標題和段落提取到帶有以下命令的文本文件: 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_republicain句子也可以從我們的演講語料庫中提取。為此,運行:
英語演講語料庫
./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 tedlium3德國演講語料庫
./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_de先決條件:
europarl_en , cornell_movie_dialogs , web_questions和yahoo_answers ,提取句子(請參閱上面的說明)。librispeech , voxforge_en , zamia_en , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3使用Kenlm使用Kenlm來訓練一個小的,修剪過的英語模型,用於Kaldi和Wav2letter builds運行:
./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 tedlium3訓練更大的訂單6模型,較少修剪:
./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 tedlium3訓練訂單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 tedlium3先決條件:
europarl_de和parole_de ,提取句子(請參見上面的說明)。forschergeist , gspv2 , voxforge_de , zamia_de , m_ailabs_de , cv_de中提取使用Kenlm使用KENLM來訓練一個小的,修剪過的德語模型,用於Kaldi和Wav2letter builds運行:
./speech_build_lm.py generic_de_lang_model_small europarl_de parole_de forschergeist gspv2 voxforge_de zamia_de m_ailabs_de cv_de訓練更大的訂單6模型,較少修剪:
./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_de訓練訂單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_de先決條件:
europarl_fr和est_republicain ,提取句子(請參見上面的說明)。voxforge_fr和m_ailabs_fr提取的使用Kenlm Run訓練法語模型:
./speech_build_lm.py generic_fr_lang_model europarl_fr est_republicain voxforge_fr m_ailabs_fr用於提交審查,轉錄和詞典擴展的主要工具是:
./speech_editor.py注意:我們在本文檔和我們的腳本中可以互換使用詞典和字典。
目前,我們有兩個詞典,一個用於英語,一個用於德語(在data/src/dicts中):
dict-en.ipa
dict-de.ipa
我們詞典的天然格式在(UTF8)IPA中,分離劑作為分離器。然後將此格式轉換為目標ASR引擎使用相應導出腳本使用的任何格式。
許多與詞典相關的工具依靠序列G2P來計算字典中缺少單詞的發音。可以從我們的文件服務器下載必要的模型:http://goofy.zamia.org/zamia-speech/g2p/。要安裝,請下載並解開包裝,然後在類似的data/models下放置指向它們的鏈接:
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-r20180510要培訓您自己的序列G2P型號,請使用提供的導出和火車腳本,例如:
[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 ...]是基於詛咒的主要互動詞典編輯器。它將使用sequitur g2p,marytts和espeakng自動生產新單詞的候選條目。然後,用戶可以在必要時手動編輯這些條目,並通過聆聽通過Marytts以不同聲音合成的聆聽來對其進行檢查。
詞典編輯器還集成到其他各種工具中, speech_editor.py ,它使您可以在一個工具中轉錄,查看和添加新音頻樣本的缺少單詞 - 建議使用。
我還傾向於不時審查詞典條目。為此,我有一個小腳本,它將選擇20個隨機條目,其中sequitur g2p與詞典中的當前轉錄不同:
./speech_lex_edit.py ` ./speech_lex_review.py `另外,有時我會使用此命令在批處理模式下添加來自成績單的缺少單詞:
./speech_lex_edit.py ` ./speech_lex_missing.py ` 對於德國詞典,可以使用一組腳本從德國的Wiktionary中提取條目。為此,第一步是從Wiktionary XML轉儲中提取一組候選條目:
./wiktionary_extract_ipa.py 這將輸出提取的data/dst/speech/de/dict_wiktionary_de.txt的條目。現在,我們需要訓練一種序列G2P模型,將這些條目轉化為我們自己的IPA樣式和音素集:
./wiktionary_sequitur_export.py
./wiktionary_sequitur_train.sh最後,我們翻譯條目,並根據常規序列G2P模型的預測進行檢查:
./wiktionary_sequitur_gen.py該腳本生成兩個輸出文件: data/dst/speech/de/dict_wiktionary_gen.txt包含可接受的條目, data/dst/speech/de/dict_wiktionary_rej.txt包含被拒絕的條目。
以下食譜訓練Kaldi型號的英語模型。
在運行它之前,請確保滿足所有先決條件(有關以上的說明,請參見上文):
generic_en_lang_model_small構建voxforge_en , librispeech , cv_corpus_v1 , ljspeech , m_ailabs_en , tedlium3和zamia_en的某些或所有語音Corpora已安裝,轉換和掃描。voxforge_en_noisy , voxforge_en_phone , librispeech_en_noisy , librispeech_en_phone , cv_corpus_v1_noisy , cv_corpus_v1_phone , zamia_en_noisy and 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.sh帶有噪音增強語料庫的出口運行包括:
./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_phone以下食譜訓練了德語的Kaldi模型。
在運行它之前,請確保滿足所有先決條件(有關以上的說明,請參見上文):
generic_de_lang_model_small構建voxforge_de , gspv2 , forschergeist , zamia_de , m_ailabs_de , cv_de的某些或所有語音Corpora已安裝,轉換和掃描。voxforge_de_noisy , voxforge_de_phone , zamia_de_noisy和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.sh帶有噪音增強語料庫的出口運行包括:
./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_de對於不需要完整Zamia語音設置的獨立Kaldi模型適應工具,請參見
kaldi-adapt-lm
現有的Kaldi模型(例如我們提供下載的模型,以及您可以使用腳本從頭開始訓練的模型)可以適應(通常是域特定於域)語言模型,JSGF語法和語法FSTS。
這是一個示例,如何使我們的英語模型適應簡單的命令和控制JSGF語法。請注意,這只是一個玩具示例 - 對於現實世界的使用情況,您可能想在語法中添加垃圾音素循環或產生一種具有立即內置的噪聲阻力的語言模型。
這是我們將使用的語法:
#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 ) ;
下一步是使用此腳本設置Kaldi模型改編實驗:
./speech_kaldi_adapt.py data/models/kaldi-generic-en-tdnn_250-latest dict-en.ipa control.jsgf control-en在這裡, data/models/kaldi-generic-en-tdnn_250-latest是要調整的模型, dict-en.ipa是新型號將使用的字典, control.jsgf是jsgf語法是jsgf語法,我們希望該模型適用於模型(您可以在此創建了FST源文件或對control-en模型)。
要運行實際的適應性,請更改為模型目錄並在此處運行改編腳本:
cd data/dst/asr-models/kaldi/control-en
./run-adaptation.sh 最後,您可以從新創建的模型中創建一個Tarball:
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.sh創建自動審查情況:
./wav2letter_auto_review.py -l de w2l-generic-de-latest gspv2運行它:
pushd tmp/w2letter_auto_review
bash run_auto_review.sh
popd應用結果:
./wav2letter_apply_review.py有關如何使用提供的Abook腳本進行分割和轉錄有聲讀物或其他音頻源(例如,來自Librivox)的一些註釋:
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.wav該工具將使用沉默檢測來找到良好的切點。您可能需要調整其設置,以達到短距離的良好平衡,但幾個單詞分為一半。
./abook-segment.py foo_16m.wav設定:
[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 output默認情況下,結果段最終將進入Abook/段
轉錄工具最多支持兩個揚聲器,您可以在命令行上指定它們。默認情況下,由此產生的VoxForge包裝最終會出現在Abook/Out中。
./abook-transcribe.py -s speaker1 -S speaker2 abook/segments/一些關於如何使用Kaldi的有聲讀物或其他音頻源(例如來自Librivox)的分段和轉錄的註釋:
我們的腳本依靠固定的目錄佈局。由於對Librivox記錄的細分是這些腳本的主要應用之一,因此這裡使用了它們的書籍和部分術語。對於書籍的每個部分,都需要兩個源文件:一個包含音頻和包含成績單的文本文件的波浪文件。
該示例說明的固定命名方案用於:
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 ...
提供了abook-librivox.py腳本,以幫助檢索Librivox記錄並設置目錄結構。請注意,目前,該工具不會自動檢索成績單,而是創建空的.txt文件(根據命名方案),您必須手動填寫。
但是,該工具將根據分割腳本的要求將檢索到的音頻轉換為16KHz單聲波格式。如果您打算從其他來源分割材料,請確保將其轉換為該格式。有關此步驟要使用哪些工具的建議,請參閱上一節中的手動細分說明。
注意:由於Kaldi過程是並行進行質量分段的,因此該過程工作需要至少4個音頻和提示文件。
該工具將使轉錄本和檢測OOV令牌化。然後可以更換或添加到字典中:
./abook-preprocess-transcript.py abook/in/librivox/11442-toten-Seelen/evak-11442-toten-Seelen-1.txt為了使自動細分工作起作用,我們需要一個適合當前字典的GMM模型(可能必須在成績單預處理過程中擴展)加上涵蓋提示的語言模型。
首先,我們創建了為我們的目的調整的語言模型:
./abook-sentences.py abook/in/librivox/11442-toten-Seelen/ * .prompt
./speech_build_lm.py abook_lang_model abook abook abook parole_de現在,我們可以使用此語言模型和我們當前的dict創建一個改編的模型:
./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/接下來,我們需要創建Kaldi目錄結構和文件以進行自動分割:
./abook-kaldi-segment.py data/models/kaldi-abook-de-adapt-current abook/in/librivox/11442-toten-Seelen現在我們可以運行分段:
pushd data/dst/speech/asr-models/kaldi/segmentation
./run-segmentation.sh
popd 最後,我們可以以VoxForge格式檢索分割結果:
./abook-kaldi-retrieve.py abook/in/librivox/11442-toten-Seelen/Zamia-TTS是一個實驗項目,試圖根據(審查)Zamia語音數據訓練TTS聲音。在這裡下載:
https://goofy.zamia.org/zamia-speech/tts/
本節介紹瞭如何為NVIDIA的TACOTRON 2實現訓練聲音。由此產生的聲音將具有16kHz的樣本率,因為這是用於Zamia語音ASR模型訓練的默認樣本率。這意味著您將必須使用16kHz Wavellow模型,以及據預審明的聲音和样本Wavs的模型:
https://goofy.zamia.org/zamia-peech/tts/tacotron2/
現在,隨之而來的是Tacotron 2模型培訓非常簡單。第一步是導出您想訓練的聲音,例如:
./speech_tacotron2_export.py -l en -o ../torch/tacotron2/filelists m_ailabs_en mailabselliotmiller接下來,更改為Tacotron 2培訓目錄
cd ../torch/tacotron2並指定“ 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
)
並開始培訓:
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要從模型中構建TARBALL,請使用speech-dist.sh腳本,例如:
./speech_dist.sh generic-en kaldi tdnn_sp
除非腳本的版權標頭中另有說明,否則我自己創建的腳本以及我創建的數據(即詞典和成績單)已獲得LGPLV3的許可。
某些腳本和文件是基於其他腳本的作品,在這種情況下,我打算保持原始許可完整。請確保檢查內部的版權標題以獲取更多信息。