البرامج النصية Python لحساب نماذج الصوت واللغة من بيانات الكلام voxforge.org والعديد من المصادر. تشمل النماذج التي يمكن بناؤها:
هام : يرجى ملاحظة أن هذه البرامج النصية لا تشكل بأي حال تطبيق كامل جاهز لاستهلاك المستخدم النهائي. ومع ذلك ، إذا كنت مطورًا مهتمًا بمعالجة اللغة الطبيعية ، فقد تجد بعضًا منها مفيدًا. المساهمات والبقع وطلبات السحب موضع ترحيب للغاية.
في وقت كتابة هذا التقرير ، تركز البرامج النصية هنا على بناء نماذج Voxforge الإنجليزية والألمانية. ومع ذلك ، لا يوجد سبب لعدم استخدامها لبناء نماذج لغة أخرى أيضًا ، لا تتردد في المساهمة في الدعم لهؤلاء.
تم إنشاؤها بواسطة GH-MD-TOC
لدينا العديد من الطرز بالإضافة إلى رمز المصدر والثنائيات للأدوات المستخدمة لإنشاء هذه النماذج المتاحة للتنزيل. كل شيء مجاني ومفتوح المصدر.
يمكن الاطلاع على جميع تنزيلات النماذج والبيانات هنا: التنزيلات
يمكن تنزيل نماذج ASR الخاصة بنا مسبقًا هنا: نماذج ASR
kaldi-generic-en-tdnn_f نموذج TDNN ذو عامل NNET3 الكبير ، المدرب على حوالي 1200 ساعة من الصوت. لديه مقاومة ضوضاء خلفية لائقة ويمكن أيضًا استخدامها في تسجيلات الهاتف. يجب أن توفر أفضل دقة ولكنها أكثر كثافة في الموارد من النماذج الأخرى.kaldi-generic-en-tdnn_sp model nnet3-chain ، تدرب على ~ 1200 ساعة من الصوت. لديه مقاومة ضوضاء خلفية لائقة ويمكن أيضًا استخدامها في تسجيلات الهاتف. أقل دقة ولكن أيضا أقل كثافة موارد أقل من نموذج tddn_f .kaldi-generic-en-tdnn_250 مثل النماذج الأكبر ولكنها أقل كثافة للموارد ، ومناسبة للاستخدام في التطبيقات المضمنة (مثل Raspberrypi 3).kaldi-generic-en-tri2b_chain GMM ، على نفس البيانات مثل النموذجين أعلاه-مخصصة لمهام تجزئة السيارات.kaldi-generic-de-tdnn_f نموذج سلسلة NNET3 الكبير ، المدرب على حوالي 400 ساعة من الصوت. لديه مقاومة ضوضاء خلفية لائقة ويمكن أيضًا استخدامها في تسجيلات الهاتف.kaldi-generic-de-tdnn_250 مثل النموذج الكبير ولكنه أقل كثافة للموارد ، ومناسبة للاستخدام في التطبيقات المضمنة (مثل Raspberrypi 3).kaldi-generic-de-tri2b_chain GMM ، على نفس البيانات مثل النموذجين أعلاه-مخصصة لمهام التجزئة التلقائية.w2l-generic-de كبير ، تم تدريبه على 400 ساعة من الصوت. لديه مقاومة ضوضاء خلفية لائقة ويمكن أيضًا استخدامها في تسجيلات الهاتف.ملاحظة : من المهم أن ندرك أن هذه النماذج يمكن وينبغي تكييفها مع مجال التطبيق الخاص بك. انظر التكيف النموذج للحصول على التفاصيل.
يمكن تنزيل قواميسنا هنا: القواميس
dict-en.ipa استنادًا إلى cmudict مع العديد من الإدخالات الإضافية التي تم إنشاؤها عبر Sequitur G2P.dict-de.ipa يدويًا من الصفر مع العديد من الإدخالات الإضافية التي تمت مراجعتها من جديد تم استخلاصها من Wiktionary. يمكن تنزيل نماذج G2P الخاصة بنا مسبقًا هنا: نماذج G2P
sequitur-dict-en.ipa Sequitur G2P على قاموس IPA باللغة الإنجليزية (UTF8).sequitur-dict-de.ipa Sequitur G2P على قاموس IPA الألماني (UTF8). يمكن تنزيل نماذج لغة 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]قم الآن بتشغيل التعرف على الكلام التلقائي Kaldi على ملفات 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 حدد اسم مصدر MIC 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
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^تنزيل وتشغيل العرض التوضيحي:
$ 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-Model: Source ، Image
Docker-Py-Kaldi-Asr: Source ، Image
Docker-Kaldi-asr: المصدر ، الصورة
Debian: 8: https://hub.docker.com/_/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 تتوقع بعض البرامج النصية أن يكون دليل tmp المحلي موجودًا ، ويقع في نفس الدليل حيث تعيش جميع البرامج النصية ، أي
mkdir tmpتحتوي القائمة التالية على شركة خطاب تدعمها مجموعة النصوص هذه.
Forschergeist (الألمانية ، ساعتين):
<~/.speechrc:speech_arc>/forschergeist<~/.speechrc:speech_corpora>/forschergeistالإصدار 2 (ألماني ، 148 ساعة ، حزمة الكلام الألمانية (الألمانية ، 148 ساعة):
dev و test و train هي الدلائل الفرعية المباشرة لـ <~/.speechrc:speech_arc>/gspv2 ../import_gspv2.py . سيتم كتابة المجموعة الناتجة إلى <~/.speechrc:speech_corpora>/gspv2 .ضوضاء:
<~/.speechrc:speech_corpora>/ (سوف يولد دليل noise فرعي هناك)Librispeech ASR (اللغة الإنجليزية ، 475 ساعة):
LibriSpeech الدليل بمثابة دليل فرعي مباشر لـ <~/.speechrc:speech_arc> ../import_librispeech.py . سيتم كتابة المجموعة الناتجة إلى <~/.speechrc:speech_corpora>/librispeech .مجموعة بيانات الكلام LJ (الإنجليزية ، 24 ساعة):
LJSpeech-1.1 هو دليل فرعي مباشر لـ <~/.speechrc:speech_arc> .import_ljspeech.py لتحويل المجموعة إلى تنسيق Voxforge. سيتم كتابة المجموعة الناتجة إلى <~/.speechrc:speech_corpora>/lindajohnson-11 .Mozilla Common Voice German (الألمانية ، 140 ساعة):
de.tar.gzcv_de هو دليل فرعي مباشر لـ <~/.speechrc:speech_arc>./import_mozde.py . سيتم كتابة المجموعة الناتجة إلى <~/.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-ilabs) مجموعة بيانات الكلام (الإنجليزية ، 147 ساعة ، الألمانية ، 237 ساعة ، فرنسية ، 190 ساعة):
de_DE.tgz ، en_UK.tgz ، en_US.tgz ، fr_FR.tgz (Mirror)m_ailabs في <~/.speechrc:speech_arc>m_ailabs الفرعيby_book وحرك الدلائل male female فيها لأن الأرشيف لا يتبع تمامًا الهياكل الإنجليزية والألمانية./import_mailabs.py . سيتم كتابة المجموعة الناتجة إلى <~/.speechrc:speech_corpora>/m_ailabs_en ، <~/.speechrc:speech_corpora>/m_ailabs_de و <~/.speechrc:speech_corpora>/m_ailabs_fr .TED-LIUM الإصدار 3 (اللغة الإنجليزية ، 210 ساعة):
TEDLIUM_release-3.tgzTEDLIUM_release-3 دليلًا مباشرًا مباشرًا لـ <~/.speechrc:speech_arc>./import_tedlium3.py . سيتم كتابة المجموعة الناتجة إلى <~/.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_frزاميا (الإنجليزية ، 5 دقائق):
<~/.speechrc:speech_arc>/zamia_en<~/.speechrc:speech_corpora>/zamia_enزاميا (الألمانية ، 18 ساعة):
<~/.speechrc:speech_arc>/zamia_de<~/.speechrc:speech_corpora>/zamia_de ملاحظة فنية : بالنسبة لمعظم الشركات ، قمنا بتصحيح النصوص في قواعد البيانات الخاصة بنا والتي يمكن العثور عليها في data/src/speech/<corpus_name>/transcripts_*.csv . نظرًا لأن هذه قد تم إنشاؤها بساعات عديدة من المراجعة اليدوية (شبه) ، فيجب أن تكون ذات جودة أعلى من المطالبات الأصلية بحيث يتم استخدامها أثناء تدريب نماذج ASR الخاصة بنا.
بمجرد التنزيل ، وإذا لزم الأمر ، حولت مجموعة تحتاج إلى تشغيلها
./speech_audio_scan.py < corpus name >على ذلك. سيؤدي ذلك إلى إضافة مطالبات مفقودة إلى قواعد بيانات CSV وتحويل ملفات الصوت إلى تنسيق موجة أحادية 16 كيلو هرتز.
لتحسين مقاومة الضوضاء ، من الممكن استخلاص Corpora من تلك الموجودة مع الضوضاء المضافة:
./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 ، على وجه التحديد Corpus German-English and Parallel French-English:
.speechrc : europarl_de ، europarl_en ، europarl_fr./speech_sentences.py europarl_de ، ./speech_sentences.py europarl_en و ./speech_sentences.py europarl_frفيلم كورنيل-ديالوجز كوربوس:
.speechrc : cornell_movie_dialogs./speech_sentences.py cornell_movie_dialogsكوربوس الإفراج المشروط الألماني:
.speechrc : parole_de./speech_train_punkt_tokenizer.py ، ثم قم بتشغيل ./speech_sentences.py parole_de WebQuesions: web_questions
.speechrc : web_questions./speech_sentences.py web_questions ياهو! الإجابات مجموعة البيانات: yahoo_answers
.speechrc : yahoo_answers./speech_sentences.py yahoo_answers CNRTL est républicain corpus ، مجموعة كبيرة من المقالات الإخبارية (4.3 مليون عناوين/فقرات) متوفرة بموجب ترخيص 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لتدريب نموذج اللغة الإنجليزية الصغيرة المتقدمة للطلب 4 باستخدام Kenlm للاستخدام في كل من Kaldi و 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 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لتدريب نموذج اللغة الألمانية الصغيرة المتقدمة للطلب 4 باستخدام Kenlm للاستخدام في كل من Kaldi و 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_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 المستهدف بواسطة البرامج النصية للتصدير المقابلة.
تعتمد العديد من الأدوات المتعلقة بالمعجم على Sequitur G2P لحساب النطق للكلمات المفقودة من القاموس. يمكن تنزيل النماذج اللازمة من خادم الملفات الخاص بنا: http://goofy.zamia.org/zamia-speech/g2p/. للتثبيت ، قم بتنزيلها وتفريغها ، ثم وضع روابط إليهم ضمن data/models مثل SO:
data/models/sequitur-dict-de.ipa-latest - > < your model dir > /sequitur-dict-de.ipa-r20180510
data/models/sequitur-dict-en.ipa-latest - > < your model dir > /sequitur-dict-en.ipa-r20180510لتدريب نماذج Sequitur 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 الألمانية باستخدام مجموعة من البرامج النصية. للقيام بذلك ، فإن الخطوة الأولى هي استخراج مجموعة من إدخالات المرشحين من تفريغ XML Wiktionary:
./wiktionary_extract_ipa.py سيؤدي ذلك إلى إخراج الإدخالات المستخرجة إلى data/dst/speech/de/dict_wiktionary_de.txt . نحتاج الآن إلى تدريب نموذج Sequitur G2P الذي يترجم هذه الإدخالات إلى نمط IPA الخاص بنا ومجموعة PHONEME:
./wiktionary_sequitur_export.py
./wiktionary_sequitur_train.shأخيرًا ، نقوم بترجمة الإدخالات ونفحصها مقابل التنبؤات من نموذج Sequitur 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 وتحويلها ومسحها.voxforge_en_noisy ، voxforge_en_phone ، librispeech_en_noisy ، librispeech_en_phone ، cv_corpus_v1_noisy ، cv_corpus_v1_phone ، zamia_en_noisy و 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شملت RUN RUN مع CORPORA المعززة للضوضاء:
./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 وتحويلها ومسحها.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شملت RUN RUN مع CORPORA المعززة للضوضاء:
./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للاطلاع على أداة تكييف نموذج Kaldi مستقلة لا تتطلب إعدادًا كاملاً للكلام Zamia ، انظر
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-en القاموس الذي سيتم استخدامه بواسطة النموذج الجديد ، control.jsgf .
لتشغيل التكيف الفعلي ، قم بالتحول إلى دليل النموذج وتشغيل البرنامج النصي للتكيف هناك:
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بعض الملاحظات حول كيفية تقسيم ونسخ الكتب الصوتية أو مصادر الصوت الأخرى (على سبيل المثال من Librivox) باستخدام البرامج النصية Abook المقدمة:
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بشكل افتراضي ، ستنتهي الأجزاء الناتجة في شرائح/شرائح
تدعم أداة النسخ ما يصل إلى متحدثين يمكنك تحديدهما على سطر الأوامر. ستنتهي حزم Voxforge الناتجة في Abook/Out افتراضيًا.
./abook-transcribe.py -s speaker1 -S speaker2 abook/segments/بعض الملاحظات حول كيفية تقسيم ونقمة الكتب الصوتية شبه التلقائية أو مصادر صوتية أخرى (على سبيل المثال من Librivox) باستخدام Kaldi:
تعتمد البرامج النصية لدينا على تصميم دليل ثابت. نظرًا لأن تجزئة تسجيلات 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 فارغة (وفقًا لمخطط التسمية) والتي سيتعين عليك ملءها يدويًا.
ستقوم الأداة بتحويل الصوت الذي تم استرداده إلى تنسيق WAV Mono Mono 16 كيلو هرتز كما هو مطلوب في البرامج النصية للتجزئة. إذا كنت تنوي تقسيم المواد من مصادر أخرى ، فتأكد من تحويلها إلى هذا التنسيق. للحصول على اقتراحات بشأن الأدوات التي يجب استخدامها لهذه الخطوة ، يرجى الرجوع إلى تعليمات التجزئة اليدوية في القسم السابق.
ملاحظة : نظرًا لأن عملية Kaldi متوازية للتجزئة الجماعية ، هناك حاجة إلى 4 ملفات صوتية ومطالبة على الأقل لعملية العمل.
ستقوم هذه الأداة بتكرار النص واكتشاف الرموز المميزة. يمكن بعد ذلك استبدالها أو إضافتها إلى القاموس:
./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الآن يمكننا إنشاء نموذج تم تكييفه باستخدام نموذج اللغة هذا وقيامنا الحالي:
./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 هو مشروع تجريبي يحاول تدريب أصوات TTS بناءً على (استعراض) بيانات Zamia-Speech. التنزيلات هنا:
https://goofy.zamia.org/zamia-peech/tts/
يصف هذا القسم كيفية تدريب الأصوات على تنفيذ Nvidia's Tacotron 2. سيكون للأصوات الناتجة معدل عينة قدره 16 كيلو هرتز لأن هذا هو معدل العينة الافتراضي المستخدم للتدريب على نموذج Zamia Keep ASR. هذا يعني أنه سيتعين عليك استخدام طراز WaveGlow 16 كيلو هرتز الذي يمكنك العثور عليه ، إلى جانب الأصوات المسبقة وعينة الموجات هنا:
https://goofy.zamia.org/zamia-speech/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 لبناء كرات القطران من النماذج ، استخدم نص speech-dist.sh .
./speech_dist.sh generic-en kaldi tdnn_sp
يتم ترخيص البرامج النصية الخاصة بي بالإضافة إلى البيانات التي أنشئها (أي معجم ونصوص) LGPLV3 ما لم يذكر خلاف ذلك في رؤوس حقوق الطبع والنشر للنص.
تعتمد بعض البرامج النصية والملفات على أعمال أخرى ، وفي هذه الحالات ، أعتزم الحفاظ على الترخيص الأصلي سليمًا. يرجى التأكد من التحقق من رؤوس حقوق الطبع والنشر في الداخل لمزيد من المعلومات.