Ossian เป็นคอลเลกชันของรหัส Python สำหรับการสร้างระบบ Text-to-Speech (TTS) โดยเน้นที่การวิจัยที่ผ่อนคลายในการสร้างระบบ TTS ที่มีการดูแลจากผู้เชี่ยวชาญน้อยที่สุด การทำงานเริ่มต้นด้วยการระดมทุนจากโครงการ EU FP7 Simple4All และที่เก็บนี้มีเวอร์ชันที่มีความทันสมัยมากกว่าที่มีอยู่ก่อนหน้านี้ โดยเฉพาะอย่างยิ่งรุ่นต้นฉบับของชุดเครื่องมืออาศัย HTS เพื่อทำการสร้างแบบจำลองอะคูสติก แม้ว่าจะยังคงเป็นไปได้ที่จะใช้ HTS แต่ตอนนี้รองรับการใช้อวนประสาทที่ผ่านการฝึกอบรมกับชุดเครื่องมือ Merlin เป็นระยะเวลาและโมเดลอะคูสติก ความคิดเห็นและข้อเสนอแนะทั้งหมดเกี่ยวกับวิธีการปรับปรุงนั้นยินดีเป็นอย่างยิ่ง
นี่คือเอกสารภาษาจีนบางฉบับ 一些中文文档和总结可以发现于: เอกสาร Ossian จีน
ต้องใช้ Perl 5
ต้องใช้ Python 2.7
ใช้ตัวติดตั้ง pip Package - ภายใน 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
โคลนพื้นที่เก็บข้อมูลของ Ossian GitHub ดังนี้:
git clone https://github.com/candlewill/Ossian.git
สิ่งนี้จะสร้างไดเรกทอรีที่เรียกว่า ./Ossian ; การสนทนาต่อไปนี้สันนิษฐานว่าตัวแปรสภาพแวดล้อม $OSSIAN ถูกตั้งค่าให้ชี้ไปที่ไดเรกทอรีนี้
Ossian อาศัยชุดเครื่องมือ MODEL MODEL ที่ซ่อนอยู่ (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
หากคุณได้ติดตั้งเครื่องมือที่กล่าวถึงข้างต้นด้วยตนเองและไม่ต้องการติดตั้งตั้งแต่เริ่มต้นคุณสามารถสร้างลิงค์ซอฟต์เพื่อบอก 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 หากมีคนไม่ต้องการสร้างเพื่อรอยขีดข่วน
Ossian คาดว่าข้อมูลการฝึกอบรมจะอยู่ในไดเรกทอรี:
./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 และ Neural บนข้อมูลนี้
คุณสามารถดาวน์โหลดชุดข้อมูล 1 ชั่วโมงในภาษาต่าง ๆ ที่เราเตรียมไว้ที่นี่: http://tundra.simple4all.org/ssw8data.html
เสียงรถไฟของ Ossian ตาม 'สูตร' ที่กำหนด - สูตรระบุลำดับของกระบวนการที่นำไปใช้กับคำพูดเพื่อเปลี่ยนจากข้อความเป็นคำพูดและได้รับในไฟล์ที่เรียกว่า $OSSIAN/recipes/<RECIPE>.cfg (โดยที่ <RECIPE> เป็นชื่อของสูตรเฉพาะที่คุณใช้) เราจะเริ่มต้นด้วยสูตรที่เรียกว่า naive_01_nn หากคุณต้องการเพิ่มส่วนประกอบลงในซินธิไซเซอร์วิธีที่ดีที่สุดในการเริ่มต้นคือการใช้ไฟล์สำหรับสูตรที่มีอยู่ให้คัดลอกไปยังไฟล์ที่มีชื่อใหม่และแก้ไข
สูตร naive_01_nn เป็นสูตรอิสระภาษาที่ใช้ตัวอักษรอย่างไร้เดียงสาเป็นหน่วยการสร้างแบบจำลองอะคูสติก มันจะทำงานได้อย่างสมเหตุสมผลสำหรับภาษาที่มี orthographies ที่สมเหตุสมผล (เช่นโรมาเนีย) และน้อยกว่าสำหรับภาษาอังกฤษเช่น
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
เนื่องจากข้อความต่าง ๆ ที่พิมพ์ออกมาในระหว่างการฝึกอบรมจะแจ้งให้คุณทราบการฝึกอบรมเครือข่ายประสาทซึ่งจะใช้ในช่วงระยะเวลาและการสร้างแบบจำลองอะคูสติกไม่ได้รับการสนับสนุนโดยตรงภายใน Ossian ข้อมูลและการกำหนดค่าที่จำเป็นในการฝึกอบรมเครือข่ายเป็นระยะเวลาและโมเดลอะคูสติกถูกจัดทำขึ้นโดยบรรทัดคำสั่งด้านบน แต่ชุดเครื่องมือ Merlin จะต้องเรียกแยกต่างหากเพื่อฝึกอบรมแบบจำลองจริง NNS ที่ผลิตจากนั้นจะต้องถูกแปลงกลับเป็นรูปแบบที่เหมาะสมสำหรับ Ossian นี่เป็นเรื่องยุ่งเล็กน้อย แต่การบูรณาการที่ดีกว่าระหว่าง Ossian และ Merlin เป็นพื้นที่ของการพัฒนาอย่างต่อเนื่อง
นี่คือวิธีการทำเช่นนี้ - คำแนะนำเดียวกันนี้จะถูกพิมพ์เมื่อคุณเรียก ./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
สำหรับข้อมูลของเล่นนี้การฝึกอบรม CPU เช่นนี้จะรวดเร็ว หรือใช้ 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
หากการฝึกอบรมเป็นไปด้วยดีคุณสามารถส่งออกโมเดลที่ผ่านการฝึกอบรมไปยังรูปแบบที่ดีกว่าสำหรับ Ossian ปัญหาพื้นฐานคือเครื่องมือ NN-TTS จัดเก็บโมเดลเป็นไฟล์ Python Pickle-หากทำในเครื่อง GPU มันสามารถใช้กับเครื่อง GPU เท่านั้น สคริปต์นี้แปลงเป็นรูปแบบที่ยืดหยุ่นมากขึ้นโดย Ossian - เรียกมันด้วยไฟล์กำหนดค่าเดียวกันกับที่คุณใช้สำหรับการฝึกอบรมและชื่อของไดเรกทอรีเมื่อควรใส่รูปแบบใหม่:
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
คุณสามารถค้นหาเสียงสำหรับประโยคนี้ได้ที่นี่เพื่อเปรียบเทียบ (ไม่ได้ใช้ในการฝึกอบรม)
ไฟล์การกำหนดค่าที่ใช้ในช่วงระยะเวลาและการฝึกอบรมโมเดลอะคูสติกจะทำงานได้ตามชุดข้อมูลของเล่น แต่เมื่อคุณย้ายไปที่ชุดข้อมูลอื่นคุณจะต้องทดสอบด้วยการแก้ไขเพื่อให้ได้รับการรับรองที่ดีขึ้น โดยเฉพาะอย่างยิ่งคุณจะต้องเพิ่มการฝึกอบรม _epochs เพื่อฝึกฝนเสียงในข้อมูลจำนวนมาก สิ่งนี้สามารถตั้งค่าเป็นเช่น 30 สำหรับโมเดลอะคูสติกและเช่น 100 สำหรับแบบจำลองระยะเวลา คุณจะต้องทดลองกับ Learning_rate, Batch_size และสถาปัตยกรรมเครือข่าย (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 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_pretrained_model.tar.gz
ตัวอย่างบางตัวอย่างที่สร้างจากรุ่นนี้สามารถพบได้ที่นี่: ossian_chinese_samples.zip
หากคุณต้องการใช้ Merlin Repo ล่าสุดเป็นไปได้ในขณะนี้ อย่างไรก็ตามเมื่อโมเดลการส่งออกบาง 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 เขา