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 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 here, data/models/kaldi-generic-en-tdnn_250-latest is the model to be adapted, dict-en.ipa is the dictionary which will be used by the new model, control.jsgf is the JSGF grammar we want the model to be adapted to (you could specify an FST source file or a language model instead here) and control-en is the name of the new model that will be created.
要运行实际的适应性,请更改为模型目录并在此处运行改编脚本:
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的许可。
某些脚本和文件是基于其他脚本的作品,在这种情况下,我打算保持原始许可完整。请确保检查内部的版权标题以获取更多信息。