Ossian هي مجموعة من رمز Python لبناء أنظمة النص إلى كلام (TTS) ، مع التركيز على تخفيف الأبحاث في بناء أنظمة TTS مع الحد الأدنى من إشراف الخبراء. بدأ العمل عليها بتمويل من مشروع الاتحاد الأوروبي FP7 Simple4All ، ويحتوي هذا المستودع على إصدار أكثر تحديثًا من تلك المتاحة سابقًا. على وجه الخصوص ، اعتمد الإصدار الأصلي من مجموعة الأدوات على HTS لأداء النمذجة الصوتية. على الرغم من أنه لا يزال من الممكن استخدام HTS ، إلا أنه يدعم الآن استخدام الشباك العصبية المدربة مع مجموعة أدوات Merlin كمدة ونماذج صوتية. جميع التعليقات والتعليقات حول الطرق لتحسينها موضع ترحيب كبير.
هنا بعض المستندات الصينية. : doc الصينية أوسيان.
بيرل 5 مطلوب.
Python 2.7 مطلوب.
استخدم مثبت حزمة pip - داخل Python virtualenv حسب الضرورة - للحصول على بعض الحزم اللازمة:
pip install numpy
pip install scipy
pip install configobj
pip install scikit-learn
pip install regex
pip install lxml
pip install argparse
سنستخدم مجموعة أدوات Merlin لتدريب الشبكات العصبية ، وإنشاء التبعيات التالية:
pip install bandmat
pip install theano
pip install matplotlib
سوف نستخدم sox لمعالجة بيانات الكلام:
apt-get install sox
استنساخ مستودع أوسيان جيثب على النحو التالي:
git clone https://github.com/candlewill/Ossian.git
هذا سيؤدي إلى إنشاء دليل يسمى ./Ossian ؛ تفترض المناقشة التالية أنه تم تعيين متغير البيئة $OSSIAN للإشارة إلى هذا الدليل.
يعتمد Ossian على مجموعة أدوات Markov Hidden Markov (HTK) ونظام توليف الكلام المستند إلى HMM (HTS) للمحاذاة والنمذجة الصوتية (اختياريًا)-فيما يلي بعض الملاحظات حول الحصول على الأدوات اللازمة وتجميعها. للحصول على نسخة من رمز مصدر HTK ، من الضروري التسجيل على موقع HTK للحصول على اسم مستخدم وكلمة مرور. من المفترض هنا أن تم الحصول عليها ومتغيرات البيئة $HTK_USERNAME و $HTK_PASSWORD النقطة إليهم.
سيقوم تشغيل البرنامج النصي التالي بتنزيل وتثبيت الأدوات اللازمة (بما في ذلك Merlin):
./scripts/setup_tools.sh $HTK_USERNAME $HTK_PASSWORD
البرنامج النصي ./scripts/setup_tools.sh سيفعل الأشياء التالية:
$OSSIAN/tools/merlin ، وإعادة ضبط رأسه على 8aed278merlin/tools/WORLD/ Folder ، وقم بإنشائه ، ثم نسخ analysis synth إلى $OSSIAN/tools/bin/ : cd $OSSIAN /tools/merlin/tools/WORLD/
make -f makefile
make -f makefile analysis
make -f makefile synth
mkdir -p $OSSIAN /tools/bin/
cp $OSSIAN /tools/merlin/tools/WORLD/build/{analysis,synth} $OSSIAN /tools/bin/$OSSIAN/tools/ Folder.$OSSIAN/tools/$OSSIAN/tools/g2p-r1668-r3 و corenlp-python إذا قمت بتغيير قيمة SEQUITUR ، STANFORD من 0 إلى 1. نظرًا لأن جميع الأدوات يتم تثبيتها في $OSSIAN/tools/ Directory ، فإن دليل $OSSIAN/tools/bin سيشمل جميع الثنائيات المستخدمة من قبل Ossian.
إذا قمت بتثبيت الأدوات المذكورة أعلاه يدويًا ولا ترغب في التثبيت من نقطة الصفر ، فيمكنك إنشاء رابط ناعم لإخبار أوسيان حيث قمت بتثبيت هذه الأدوات.
# 1 Mannuly clone the merlin repo
# 2 Downlaod WORLD, HTK, HDecode, HTS, HTS-engine, SPTK, build and install.
# 3 Copy all of the binaries into one folder. E.g., bin.
# 3 Where is your merlin dir
export merlin_dir=/home/dl80/heyunchao/Programs/Ossian/tools/merlin
# 4 Where is the bin direcotry inculuding all the binaries
export bin_dir=/home/dl80/heyunchao/Programs/Ossian/tools/bin
# 5 Create soft link in your Ossian/tools direcotry
cd /home/dl80/heyunchao/Programs/MyOssian_Github/tools
ln -s $merlin_dir merlin
ln -s $bin_dir bin نحن نقدم مجموعة ثنائية مصممة مسبقًا هنا OSSIAN_REQUIRED_BIN.TAR. قم بتنزيل وانتقل إلى دليل $bin_dir ، إذا كان شخص ما لا يريد أن يبني للخدش.
تتوقع أوسيان أن تكون بيانات التدريب في الدلائل:
./corpus/<OSSIAN_LANG>/speakers/<DATA_NAME>/txt/*.txt
./corpus/<OSSIAN_LANG>/speakers/<DATA_NAME>/wav/*.wav
يجب ترقيم ملفات النص والأمواج مع بعضها البعض. <OSSIAN_LANG> و <DATA_NAME> كلاهما سلاسل تعسفية ، لكن من المعقول اختيار تلك التي لها معنى واضح.
قم بتنزيل هذه اللعبة (الرومانية) لبعض الإرشادات:
cd $OSSIAN
wget https://www.dropbox.com/s/uaz1ue2dked8fan/romanian_toy_demo_corpus_for_ossian.tar?dl=0
tar xvf romanian_toy_demo_corpus_for_ossian.tar?dl=0
سيؤدي ذلك إلى إنشاء هياكل الدليل التالية:
./corpus/rm/speakers/rss_toy_demo/
./corpus/rm/text_corpora/wikipedia_10K_words/
لنبدأ ببناء بعض الأصوات على مجموعة البيانات الصغيرة هذه. ستبدو النتائج سيئة ، ولكن إذا تمكنت من جعلها تتحدث ، بغض النظر عن مدى سوء الأدوات ، يمكنك إعادة تدريب المزيد من البيانات الخاصة بك. فيما يلي تعليمات حول كيفية تدريب الأصوات المستندة إلى الشبكة القائمة على HTS على هذه البيانات.
يمكنك تنزيل مجموعات واحدة من البيانات بلغات مختلفة قمنا بإعدادها هنا: http://tundra.simple4all.org/ssw8data.html
تدرب Ossian أصواتًا وفقًا لـ "وصفة" معينة - تحدد الوصفة سلسلة من العمليات التي يتم تطبيقها على الكلام لتحويله من النص إلى خطاب ، ويتم تقديمها في ملف يسمى $OSSIAN/recipes/<RECIPE>.cfg (حيث <RECIPE> هو اسم الوصفة المحددة التي تستخدمها). سنبدأ مع وصفة تسمى naive_01_nn . إذا كنت ترغب في إضافة مكونات إلى مزج المصمم ، فإن أفضل طريقة للبدء هي أخذ الملف للحصول على وصفة موجودة ، ونسخها إلى ملف باسم جديد وتعديله.
الوصفة naive_01_nn هي وصفة مستقلة للغة تستخدم الحروف بسذاجة كوحدات نمذجة صوتية. ستعمل بشكل معقول مع اللغات مع معمليات المعالجة المعقولة (مثل الرومانية) وأقل جيدًا على سبيل المثال.
سيضع Ossian جميع الملفات التي تم إنشاؤها أثناء التدريب على البيانات <DATA_NAME> باللغة <OSSIAN_LANG> وفقًا للوصفة <RECIPE> وصفة> في دليل يسمى:
$OSSIAN/train/<OSSIAN_LANG>/speakers/<DATA_NAME>/<RECIPE>/
عندما تكون قد قامت بتدريب صوت بنجاح ، يتم نسخ المكونات المطلوبة في التوليف إلى:
$OSSIAN/voices/<OSSIAN_LANG>/<DATA_NAME>/<RECIPE>/
على افتراض أننا نريد أن نبدأ بتدريب صوت من نقطة الصفر ، فقد نرغب في التحقق من أن هذه المواقع غير موجودة بالفعل لمجموعنا من البيانات/اللغة/الوصفة:
rm -r $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/ $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/
ثم للتدريب ، افعل هذا:
cd $OSSIAN
python ./scripts/train.py -s rss_toy_demo -l rm naive_01_nn
نظرًا لأن الرسائل المختلفة المطبوعة أثناء التدريب ستعلمك ، فإن تدريب الشبكات العصبية نفسها والتي سيتم استخدامها للمدة ولا يتم دعم النمذجة الصوتية مباشرة داخل أوسيان. يتم إعداد البيانات والتكوينات اللازمة لتدريب الشبكات للمدة والنموذج الصوتي بواسطة سطر الأوامر أعلاه ، ولكن يجب استدعاء مجموعة أدوات Merlin بشكل منفصل لتدريب النماذج بالفعل. NNS التي تنتجها بعد ذلك تحتاج إلى تحويل مرة أخرى إلى تنسيق مناسب للأوسيان. هذا أمر فوضوي بعض الشيء ، لكن التكامل الأفضل بين أوسيان وميرلين هو مجال تنمية مستمر.
إليك كيفية القيام بذلك - سيتم طباعة هذه التعليمات نفسها عند الاتصال ./scripts/train.py أعلاه. أولاً ، قم بتدريب نموذج المدة:
cd $OSSIAN
export THEANO_FLAGS=""; python ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/duration_predictor/config.cfg
لهذه الألعاب ، سيكون التدريب على وحدة المعالجة المركزية مثل هذا سريعًا. بدلاً من ذلك ، لاستخدام GPU للتدريب ، افعل:
./scripts/util/submit.sh ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/duration_predictor/config.cfg
إذا سار التدريب على ما يرام ، فيمكنك تصدير النموذج المدرب إلى تنسيق أفضل للأوسيان. المشكلة الأساسية هي أن أدوات NN-TTS تخزن النموذج كملف Python Pickle-إذا تم إجراء ذلك على جهاز GPU ، فلا يمكن استخدامه إلا على جهاز GPU. يتحول هذا البرنامج النصي إلى تنسيق أكثر مرونة يفهمه أوسيان - اتصل به بنفس ملف التكوين الذي استخدمته للتدريب واسم الدليل عندما يجب وضع التنسيق الجديد:
python ./scripts/util/store_merlin_model.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/duration_predictor/config.cfg $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/processors/duration_predictor
عند تدريب نموذج المدة ، سيكون هناك الكثير من التحذيرات تقول WARNING: no silence found! - الأطروحات ليست مشكلة ويمكن تجاهلها.
وبالمثل بالنسبة للنموذج الصوتي:
cd $OSSIAN
export THEANO_FLAGS=""; python ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/acoustic_predictor/config.cfg
أو:
./scripts/util/submit.sh ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/acoustic_predictor/config.cfg
ثم:
python ./scripts/util/store_merlin_model.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/acoustic_predictor/config.cfg $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/processors/acoustic_predictor
إذا سار التدريب على ما يرام ، يمكنك توليف الكلام. هناك مثال على الجملة الرومانية في $OSSIAN/test/txt/romanian.txt - سنقوم بتوليف ملف موجة له في $OSSIAN/test/wav/romanian_toy_naive.wav مثل هذا:
mkdir $OSSIAN/test/wav/
python ./scripts/speak.py -l rm -s rss_toy_demo -o ./test/wav/romanian_toy_HTS.wav naive_01_nn ./test/txt/romanian.txt
يمكنك العثور على الصوت لهذه الجملة هنا للمقارنة (لم يتم استخدامها في التدريب).
ستعمل ملفات التكوين المستخدمة للتدريب على المدة والتدريب على النماذج الصوتية كما هو الحال بالنسبة لمجموعة بيانات الألعاب ، ولكن عندما تنتقل إلى مجموعات بيانات أخرى ، ستحتاج إلى تجربة تحريرها للحصول على اختبار أفضل. على وجه الخصوص ، سترغب في زيادة تدريب _pochs لتدريب الأصوات على كميات أكبر من البيانات ؛ يمكن ضبط ذلك على 30 على سبيل المثال للنموذج الصوتي و 100 على سبيل المثال لنموذج المدة. سترغب أيضًا في تجربة Learning_Rate و Batch_size و Architecture (Hidden_Layer_Size ، Hidden_Layer_Type). حاليًا ، يدعم Ossian فقط شبكات التغذية.
أمر توليف موجة جديدة معطى النص عند الإدخال هو:
python ./scripts/speak.py -l $OSSIAN_LANG -s $DATA_NAME -o ./test/wav/ ${OSSIAN_LANG} _ ${DATA_NAME} _test.wav $RECIPE ./test/txt/test.txt حيث ./test/wav/${OSSIAN_LANG}_${DATA_NAME}_test.wav $RECIPE ./test/txt/test.txt .
الاستخدام الكامل لـ speak.py هو:
usage: speak.py [-h] -s SPEAKER -l LANG [-o OUTPUT] [-t STAGE] [-play] [-lab]
[-bin CUSTOM_BINDIR]
config [files [files ...]]
positional arguments:
config configuration to use: naive, semi-naive, gold, as
defined in < ROOT > /recipes/ < config > -d irectory
files text files to speak, reading from stdin by default
optional arguments:
-h , --help show this help message and exit
-s SPEAKER the name of the speaker: < ROOT > /corpus/ < LANG > / < SPEAKER >
-l LANG the language of the speaker: < ROOT > /corpus/ < LANG >
-o OUTPUT output audio here
-t STAGE defines the current usage stage (definitions of stages
should by found in < config > /recipe.cfg
-play play audio after synthesis
-lab make label file as well as wave in output location
-bin CUSTOM_BINDIR إذا كنت ترغب في تصدير النموذج pre-trained ، فيجب عليك تعبئة الملفات التالية:
voice/train/cn/speakers/king_cn_corpus/naive_01_nn.cn/questions_dur.hed.conttrain/cn/speakers/king_cn_corpus/naive_01_nn.cn/questions_dur.hedtrain//cn/speakers/king_cn_corpus/naive_01_nn.cn/questions_dnn.hed.contبعد ذلك ، بعد وضعها في الدليل الصحيح ، يمكن لشخص آخر استخدام النموذج الخاص بك لتوليف النص.
هنا ، نقدم نموذجًا بسيطًا تم تدريبه مسبقًا لـ TTS الصيني. نظرًا لأن النموذج يتم تدريبه على مجموعة داخلية صغيرة محدودة للاختبار ، فإن جودة الصوت المصنفة ليست جيدة جدًا.
نموذج صيني بسيط مسبقًا: OSSIAN_CN_PRETRIED_MODEL.TAR.GZ
يمكن العثور على بعض العينات التي تم إنشاؤها من هذا النموذج هنا: Ossian_chinese_samples.zip
إذا كنت ترغب في استخدام أحدث ريبو ميرلين ، فهذا ممكن الآن. ومع ذلك ، عندما يصدر نموذج بعض files no exist . يمكنك نسخ الملفات المقابلة يدويًا إلى المجلد الصحيح للتعامل معه. هذه الملفات موجودة بعد التدريب ، ولكن ليس في الدليل الصحيح. يمكنك استخدام find -name *.dat للعثور على مكان وجودهم.
هنا مثال:
# Duration model
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_ACOUST/inter_module/norm_info__mgc_lf0_vuv_bap_187_MVN.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn//cmp//norm_info_mgc_lf0_vuv_bap_187_MVN.dat
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_ACOUST/inter_module/label_norm_HTS_3491.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn//cmp//label_norm_HTS_3491.dat
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_ACOUST/nnets_model/feed_forward_6_tanh.model /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn//dnn_training_ACOUST//nnets_model/DNN_TANH_TANH_TANH_TANH_TANH_TANH_LINEAR__mgc_lf0_vuv_bap_0_6_1024_1024_1024_1024_1024_1024_3491.187.train.243.0.002000.rnn.model
# Acoustic model
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_DUR/inter_module/norm_info__dur_5_MVN.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn///norm_info_dur_5_MVN.dat
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_DUR/inter_module/label_norm_HTS_3482.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/
...لقد استخدمنا العديد من الوصفات الأخرى مع Ossian والتي سيتم توثيقها هنا عند تنظيفها بما يكفي لتكون مفيدة للآخرين. ستمنح هذه القدرة على إضافة المزيد من المعرفة للأصوات التي تم إنشاؤها ، في شكل معجمي ، وقواعد خطاب إلى سليم ، وما إلى ذلك ، ودمج المكونات المدربة الحالية حيث تكون متاحة للغة المستهدفة. يمكن العثور على بعضهم هنا:
يعتمد هذا المشروع على CSTR-Edinburgh/Ossian. جميع حقوق الطبع والنشر تنتمي إلى المشروع الأصلي.
Yunchao هو