Ossian adalah kumpulan kode Python untuk membangun sistem Text-to-Speech (TTS), dengan penekanan pada meringankan penelitian dalam membangun sistem TTS dengan pengawasan ahli minimal. Kerjakan itu dimulai dengan dana dari proyek EU FP7 Simple4All, dan repositori ini berisi versi yang lebih mutakhir daripada yang tersedia sebelumnya. Secara khusus, versi asli dari toolkit mengandalkan HTS untuk melakukan pemodelan akustik. Meskipun masih dimungkinkan untuk menggunakan HTS, sekarang mendukung penggunaan jaring saraf yang dilatih dengan toolkit Merlin sebagai durasi dan model akustik. Semua komentar dan umpan balik tentang cara untuk memperbaikinya sangat disambut.
Ini beberapa dokumen Cina. 一些中文文档和总结可以发现于 : Dokter Ossian Cina.
Perl 5 diperlukan.
Diperlukan Python 2.7 .
Gunakan penginstal paket pip - dalam Python virtualenv seperlunya - untuk mendapatkan beberapa paket yang diperlukan:
pip install numpy
pip install scipy
pip install configobj
pip install scikit-learn
pip install regex
pip install lxml
pip install argparse
Kami akan menggunakan Merlin Toolkit untuk melatih jaringan saraf, menciptakan dependensi berikut:
pip install bandmat
pip install theano
pip install matplotlib
Kami akan menggunakan sox untuk memproses data ucapan:
apt-get install sox
Klon The Ossian Github Repository sebagai berikut:
git clone https://github.com/candlewill/Ossian.git
Ini akan membuat direktori yang disebut ./Ossian ; Diskusi berikut mengasumsikan bahwa variabel lingkungan $OSSIAN diatur untuk menunjuk ke direktori ini.
Ossian mengandalkan Toolkit Model Markov Tersembunyi (HTK) dan Sistem Sintesis Bicara Berbasis HMM (HTS) untuk penyelarasan dan (secara opsional) pemodelan akustik-berikut adalah beberapa catatan tentang memperoleh dan menyusun alat yang diperlukan. Untuk mendapatkan salinan kode sumber HTK, perlu mendaftar di situs web HTK untuk mendapatkan nama pengguna dan kata sandi. Di sini diasumsikan bahwa ini telah diperoleh dan variabel lingkungan $HTK_USERNAME dan $HTK_PASSWORD point kepada mereka.
Menjalankan skrip berikut akan mengunduh dan menginstal alat yang diperlukan (termasuk Merlin):
./scripts/setup_tools.sh $HTK_USERNAME $HTK_PASSWORD
Skrip ./scripts/setup_tools.sh akan melakukan hal -hal berikut:
$OSSIAN/tools/merlin , dan mereset kepalanya ke 8aed278merlin/tools/WORLD/ Folder, dan Bangun, lalu Salin analysis dan synth menjadi $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 dan corenlp-python akan diinstal jika Anda mengubah nilai SEQUITUR , STANFORD dari 0 menjadi 1. Karena semua alat diinstal ke $OSSIAN/tools/ direktori, direktori $OSSIAN/tools/bin akan mencakup semua binari yang digunakan oleh Ossian.
Jika Anda telah menginstal alat yang disebutkan di atas secara manual dan tidak ingin menginstal dari awal, Anda dapat membuat tautan lunak untuk memberi tahu Ossian di mana Anda telah menginstal alat -alat ini.
# 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 Kami menyediakan koleksi biner yang sudah dibangun di sini ossian_required_bin.tar. Unduh dan pindah ke direktori $bin_dir , jika seseorang tidak ingin membangun untuk awal.
Ossian mengharapkan data pelatihannya ada di direktori:
./corpus/<OSSIAN_LANG>/speakers/<DATA_NAME>/txt/*.txt
./corpus/<OSSIAN_LANG>/speakers/<DATA_NAME>/wav/*.wav
File teks dan gelombang harus diberi nomor secara konsisten satu sama lain. <OSSIAN_LANG> dan <DATA_NAME> keduanya adalah string sewenang -wenang, tetapi masuk akal untuk memilih yang masuk akal.
Unduh dan buka corpus mainan ini (Rumania) untuk beberapa panduan:
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
Ini akan membuat struktur direktori berikut:
./corpus/rm/speakers/rss_toy_demo/
./corpus/rm/text_corpora/wikipedia_10K_words/
Mari kita mulai dengan membangun beberapa suara di dataset kecil ini. Hasilnya akan terdengar buruk, tetapi jika Anda bisa membuatnya berbicara, tidak peduli seberapa buruk, alat -alat itu berfungsi dan Anda dapat melatih kembali lebih banyak data yang Anda pilih sendiri. Di bawah ini adalah instruksi tentang cara melatih suara berbasis jaringan dan jaringan saraf pada data ini.
Anda dapat mengunduh 1 jam set data dalam berbagai bahasa yang kami persiapkan di sini: http://tundra.simple4all.org/ssw8data.html
Ossian melatih suara menurut 'resep' yang diberikan - resep tersebut menentukan urutan proses yang diterapkan pada ucapan untuk mengubahnya dari teks menjadi pidato, dan diberikan dalam file yang disebut $OSSIAN/recipes/<RECIPE>.cfg (di mana <RECIPE> adalah nama resep spesifik yang Anda gunakan). Kami akan mulai dengan resep yang disebut naive_01_nn . Jika Anda ingin menambahkan komponen ke synthesizer, cara terbaik untuk memulai adalah dengan mengambil file untuk resep yang ada, salin ke file dengan nama baru dan ubah.
Resep naive_01_nn adalah resep independen bahasa yang secara naif menggunakan huruf sebagai unit pemodelan akustik. Ini akan bekerja secara wajar untuk bahasa dengan ortografi yang masuk akal (misalnya Rumania) dan kurang baik untuk bahasa Inggris.
Ossian akan menempatkan semua file yang dihasilkan selama pelatihan pada data <DATA_NAME> dalam bahasa <OSSIAN_LANG> Menurut resep <RECIPE> dalam direktori yang disebut:
$OSSIAN/train/<OSSIAN_LANG>/speakers/<DATA_NAME>/<RECIPE>/
Ketika jika telah berhasil melatih suara, komponen yang diperlukan saat sintesis disalin ke:
$OSSIAN/voices/<OSSIAN_LANG>/<DATA_NAME>/<RECIPE>/
Dengan asumsi bahwa kami ingin memulai dengan melatih suara dari awal, kami mungkin ingin memeriksa bahwa lokasi ini belum ada untuk kombinasi data/bahasa/resep kami:
rm -r $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/ $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/
Kemudian untuk berlatih, lakukan ini:
cd $OSSIAN
python ./scripts/train.py -s rss_toy_demo -l rm naive_01_nn
Karena berbagai pesan yang dicetak selama pelatihan akan memberi tahu Anda, pelatihan jaringan saraf itu sendiri yang akan digunakan untuk durasi dan pemodelan akustik tidak didukung secara langsung dalam Ossian. Data dan konfigurasi yang diperlukan untuk melatih jaringan untuk durasi dan model akustik disiapkan oleh baris perintah di atas, tetapi toolkit Merlin perlu dipanggil secara terpisah untuk benar -benar melatih model. NNS yang dihasilkannya kemudian perlu dikonversi kembali ke format yang sesuai untuk Ossian. Ini sedikit berantakan, tetapi integrasi yang lebih baik antara Ossian dan Merlin adalah bidang pengembangan yang berkelanjutan.
Inilah cara melakukan ini - instruksi yang sama ini akan dicetak saat Anda menelepon ./scripts/train.py di atas. Pertama, latih model durasi:
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
Untuk data mainan ini, pelatihan CPU seperti ini akan cepat. Atau, menggunakan GPU untuk pelatihan, lakukan:
./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
Jika pelatihan berjalan dengan baik, maka Anda dapat mengekspor model terlatih ke format yang lebih baik untuk Ossian. Masalah dasarnya adalah bahwa alat NN-TTS menyimpan model sebagai file acar python-jika ini dibuat pada mesin GPU, itu hanya dapat digunakan pada mesin GPU. Script ini dikonversi ke format yang lebih fleksibel yang dipahami oleh Ossian - sebut saja dengan file konfigurasi yang sama yang Anda gunakan untuk pelatihan dan nama direktori ketika format baru harus diletakkan:
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
Saat melatih model durasi, akan ada banyak peringatan yang mengatakan WARNING: no silence found! - Tesis ini tidak menjadi masalah dan dapat diabaikan.
Demikian pula untuk model akustik:
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
Atau:
./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
Kemudian:
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
Jika pelatihan berjalan dengan baik, Anda dapat mensintesis pidato. Ada contoh kalimat Rumania dalam $OSSIAN/test/txt/romanian.txt - kami akan mensintesis file gelombang untuk itu dalam $OSSIAN/test/wav/romanian_toy_naive.wav seperti ini:
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
Anda dapat menemukan audio untuk kalimat ini di sini untuk perbandingan (tidak digunakan dalam pelatihan).
File konfigurasi yang digunakan untuk durasi dan pelatihan model akustik akan berfungsi apa adanya untuk set data mainan, tetapi ketika Anda pindah ke set data lain, Anda akan ingin bereksperimen dengan mengeditnya untuk mendapatkan performa permen yang lebih baik. Secara khusus, Anda akan ingin meningkatkan pelatihan_epochs untuk melatih suara pada jumlah data yang lebih besar; Ini dapat diatur ke EG 30 untuk model akustik dan misalnya 100 untuk model durasi. Anda juga ingin bereksperimen dengan learning_rate, batch_size, dan arsitektur jaringan (Hidden_layer_size, Hidden_layer_type). Saat ini, Ossian hanya mendukung jaringan umpan-maju.
Perintah untuk sintesis gelombang baru yang diberikan teks sebagai input adalah:
python ./scripts/speak.py -l $OSSIAN_LANG -s $DATA_NAME -o ./test/wav/ ${OSSIAN_LANG} _ ${DATA_NAME} _test.wav $RECIPE ./test/txt/test.txt Where ./test/wav/${OSSIAN_LANG}_${DATA_NAME}_test.wav ossian_lang}_${data_name}_test.wav dan $RECIPE ./test/txt/test.txt adalah gelombang dan teks input yang disintesis.
Penggunaan lengkap speak.py adalah:
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 Jika Anda ingin mengekspor model pre-trained Anda, Anda harus mengemas file-file berikut:
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.contKemudian, setelah Anda meletakkannya di direktori yang tepat, orang lain dapat menggunakan model Anda untuk sintesis yang diberikan teks.
Di sini, kami menyediakan model pra-terlatih sederhana untuk TT Cina. Karena model dilatih pada korpus bagian dalam kecil terbatas untuk pengujian, kualitas suara yang disintesis tidak terlalu bagus.
Model Cina Pra-Terlatih Sederhana: Ossian_CN_PRRITRAD_MODEL.TAR.GZ
Beberapa sampel yang dihasilkan dari model ini dapat ditemukan di sini: ossian_chinese_samples.zip
Jika Anda ingin menggunakan repo Merlin terbaru, itu mungkin sekarang. Namun, ketika Model Ekspor Beberapa files no exist kesalahan akan terjadi. Anda dapat secara manual menyalin file yang sesuai ke folder yang tepat untuk menghadapinya. File -file ini ada setelah pelatihan, tetapi tidak di direktori yang tepat. Anda bisa menggunakan find -name *.dat untuk menemukan di mana mereka berada.
Inilah contohnya:
# 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/
...Kami telah menggunakan banyak resep lain dengan Ossian yang akan didokumentasikan di sini ketika dibersihkan cukup untuk berguna bagi orang lain. Ini akan memberikan kemampuan untuk menambahkan lebih banyak pengetahuan pada suara-suara yang dibangun, dalam bentuk leksikon, aturan huruf-ke-dalam dll., Dan mengintegrasikan komponen terlatih yang ada di mana mereka tersedia untuk bahasa target. Beberapa dari mereka dapat ditemukan di sini:
Proyek ini didasarkan pada CSTR-EDINBURGH/OSSIAN. Semua hak cipta adalah milik proyek asli.
Yunchao he