Ossian est une collection de code Python pour construire des systèmes de texte à dispection (TTS), en mettant l'accent sur l'assouplissement de la recherche sur la construction de systèmes TTS avec une supervision experte minimale. Les travaux ont commencé avec le financement de l'UE FP7 Project Simple4all, et ce référentiel contient une version considérable plus à jour que celle précédemment disponible. En particulier, la version originale de la boîte à outils reposait sur HTS pour effectuer une modélisation acoustique. Bien qu'il soit toujours possible d'utiliser HTS, il prend désormais en charge l'utilisation de NETS neuronaux formés avec la boîte à outils Merlin comme des modèles de durée et acoustiques. Tous les commentaires et commentaires sur les moyens de l'améliorer sont les bienvenus.
Voici un document chinois. 一些中文文档和总结可以发现于 : Doc Ossian chinois.
Perl 5 est requis.
Python 2.7 est requis.
Utilisez le programme d'installation du package pip - dans un Python virtualenv si nécessaire - pour obtenir certains packages nécessaires:
pip install numpy
pip install scipy
pip install configobj
pip install scikit-learn
pip install regex
pip install lxml
pip install argparse
Nous utiliserons la boîte à outils Merlin pour former des réseaux de neurones, créant les dépendances suivantes:
pip install bandmat
pip install theano
pip install matplotlib
Nous utiliserons sox pour traiter les données de la parole:
apt-get install sox
Clone le référentiel Github Ossian comme suit:
git clone https://github.com/candlewill/Ossian.git
Cela créera un répertoire appelé ./Ossian ; La discussion suivante suppose qu'une variable d'environnement $OSSIAN devrait indiquer ce répertoire.
Ossian s'appuie sur la boîte à outils du modèle Markov caché (HTK) et le système de synthèse de la parole basé sur HMM (HTS) pour l'alignement et la modélisation acoustique (éventuellement) - voici quelques notes sur l'obtention et la compilation des outils nécessaires. Pour obtenir une copie du code source HTK, il est nécessaire de s'inscrire sur le site Web HTK pour obtenir un nom d'utilisateur et un mot de passe. Il est ici supposé que ceux-ci ont été obtenus et les variables d'environnement $HTK_USERNAME et $HTK_PASSWORD leur indiquent.
L'exécution du script suivant téléchargera et installera les outils nécessaires (y compris Merlin):
./scripts/setup_tools.sh $HTK_USERNAME $HTK_PASSWORD
Le script ./scripts/setup_tools.sh fera les choses suivantes:
$OSSIAN/tools/merlin , et réinitialise sa tête vers 8aed278merlin/tools/WORLD/ Folder, et construisez-le, puis copiez analysis et synth dans $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/ dossier.$OSSIAN/tools/$OSSIAN/tools/g2p-r1668-r3 et corenlp-python seraient installés si vous modifiiez la valeur de SEQUITUR , STANFORD de 0 à 1. Comme tous les outils sont installés dans $OSSIAN/tools/ répertoire, le répertoire $OSSIAN/tools/bin inclurait tous les binaires utilisés par Ossian.
Si vous avez installé les outils mentionnés ci-dessus manuellement et que vous ne souhaitez pas installer à partir de zéro, vous pouvez créer un lien souple pour dire à l'Ossian où vous avez installé ces outils.
# 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 Nous fournissons une collection binaire prédéfinie ici ossian_required_bin.tar. Téléchargez et passez au répertoire $bin_dir , si quelqu'un ne veut pas construire pour Scratch.
Ossian s'attend à ce que ses données de formation soient dans les répertoires:
./corpus/<OSSIAN_LANG>/speakers/<DATA_NAME>/txt/*.txt
./corpus/<OSSIAN_LANG>/speakers/<DATA_NAME>/wav/*.wav
Les fichiers de texte et d'onde doivent être numérotés de manière cohérente les uns avec les autres. <OSSIAN_LANG> et <DATA_NAME> sont tous deux des chaînes arbitraires, mais il est judicieux de choisir ceux qui ont un sens évident.
Téléchargez et déballez ce corpus jouet (roumain) pour quelques conseils:
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
Cela créera les structures de répertoire suivantes:
./corpus/rm/speakers/rss_toy_demo/
./corpus/rm/text_corpora/wikipedia_10K_words/
Commençons par construire des voix sur ce petit ensemble de données. Les résultats seront mauvais, mais si vous pouvez le faire parler, peu importe à quel point les outils fonctionnent et vous pouvez recycler plus de données de votre choix. Vous trouverez ci-dessous des instructions sur la façon de former des voix basées sur HTS et basées sur le réseau neuronal sur ces données.
Vous pouvez télécharger 1 heure d'ensembles de données dans différentes langues que nous avons préparées ici: http://tundra.simple4all.org/ssw8data.html
Ossian Trains Voices Selon une «recette» donnée - la recette spécifie une séquence de processus qui sont appliqués à un énoncé pour le transformer du texte en discours, et est donné dans un fichier appelé $OSSIAN/recipes/<RECIPE>.cfg (où <RECIPE> est le nom d'une recette spécifique que vous utilisez). Nous commencerons par une recette appelée naive_01_nn . Si vous souhaitez ajouter des composants au synthétiseur, la meilleure façon de commencer sera de prendre le fichier pour une recette existante, copiez-la dans un fichier avec un nouveau nom et modifiez-le.
La recette naive_01_nn est une recette indépendante du langage qui utilise naïvement les lettres comme unités de modélisation acoustique. Il fonctionnera raisonnablement pour les langues avec des orthographies sensibles (par exemple Roumanie) et moins bien pour EG English.
Ossian mettra tous les fichiers générés lors de la formation sur les données <DATA_NAME> dans la langue <OSSIAN_LANG> selon la recette <RECIPE> dans un répertoire appelé:
$OSSIAN/train/<OSSIAN_LANG>/speakers/<DATA_NAME>/<RECIPE>/
Quand si a réussi à former une voix, les composants nécessaires à la synthèse sont copiés pour:
$OSSIAN/voices/<OSSIAN_LANG>/<DATA_NAME>/<RECIPE>/
En supposant que nous voulons commencer par former une voix à partir de zéro, nous voulons peut-être vérifier que ces emplacements n'existent pas déjà pour notre combinaison de données / langue / recette:
rm -r $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/ $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/
Ensuite, pour vous entraîner, faites ceci:
cd $OSSIAN
python ./scripts/train.py -s rss_toy_demo -l rm naive_01_nn
Comme divers messages imprimés pendant la formation vous informeront, la formation des réseaux de neurones elle-même qui sera utilisée pour la durée et la modélisation acoustique n'est pas directement soutenue au sein d'Ossian. Les données et les configurations nécessaires pour former des réseaux pour la durée et le modèle acoustique sont préparées par la ligne de commande ci-dessus, mais la boîte à outils Merlin doit être appelée séparément pour former les modèles. Le NNS qu'il produit doit alors être reconverti en un format approprié pour Ossien. C'est un peu désordonné, mais une meilleure intégration entre Ossian et Merlin est un domaine de développement continu.
Voici comment procéder - ces mêmes instructions auront été imprimées lorsque vous aurez appelé ./scripts/train.py ci-dessus. Tout d'abord, entraînez le modèle de durée:
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
Pour ces données de jouets, la formation sur CPU comme celle-ci sera rapide. Alternativement, pour utiliser le GPU pour la formation, faites:
./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
Si la formation s'est bien passée, vous pouvez exporter le modèle formé vers un meilleur format pour Ossian. Le problème de base est que les outils NN-TTS stockent le modèle en tant que fichier Python Pickle - si cela est fabriqué sur une machine GPU, il ne peut être utilisé que sur une machine GPU. Ce script se convertit en un format plus flexible compris par Ossian - appelez-le avec le même fichier de configuration que vous avez utilisé pour la formation et le nom d'un répertoire lorsque le nouveau format doit être mis:
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
Lors de la formation du modèle de durée, il y aura beaucoup d'avertissements disant WARNING: no silence found! - Les thèses ne sont pas un problème et peuvent être ignorées.
De même pour le modèle acoustique:
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
Ou:
./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
Alors:
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
Si la formation s'est bien passée, vous pouvez synthétiser la parole. Il y a un exemple de phrase roumaine dans $OSSIAN/test/txt/romanian.txt - nous synthétiserons un fichier d'onde pour $ dans $OSSIAN/test/wav/romanian_toy_naive.wav comme ceci:
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
Vous pouvez trouver l'audio de cette phrase ici pour comparaison (il n'a pas été utilisé dans la formation).
Les fichiers de configuration utilisés pour la durée et la formation des modèles acoustiques fonctionneront en tant que jeu pour l'ensemble de données de jouets, mais lorsque vous passez à d'autres ensembles de données, vous voudrez expérimenter avec les modifications pour obtenir une meilleure permformance. En particulier, vous voudrez augmenter Training_Epochs pour former des voix sur de plus grandes quantités de données; Cela pourrait être défini sur EG 30 pour le modèle acoustique et par exemple 100 pour le modèle de durée. Vous voudrez également expérimenter l'apprentissage_rate, Batch_size et l'architecture réseau (HIDDEN_LAYER_SIZE, HIDDEN_LAYER_TYPE). Actuellement, Ossian ne prend en charge que les réseaux Feed-Forward.
La commande de synthèse de la nouvelle vague donnée par le texte comme entrée est:
python ./scripts/speak.py -l $OSSIAN_LANG -s $DATA_NAME -o ./test/wav/ ${OSSIAN_LANG} _ ${DATA_NAME} _test.wav $RECIPE ./test/txt/test.txt Où ./test/wav/${OSSIAN_LANG}_${DATA_NAME}_test.wav ossian_lang }_$ {data_name }_test.wav et $RECIPE ./test/txt/test.txt sont les ondes synthétisées et le texte d'entrée.
L'utilisation complète de speak.py est:
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 Si vous souhaitez exporter votre modèle pre-trained , vous devez emballer les fichiers suivants:
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.contEnsuite, après les avoir mis dans le bon répertoire, quelqu'un d'autre pourrait utiliser votre modèle pour synthèse donné de texte.
Ici, nous fournissons un modèle pré-formé simple pour les TT chinois. Comme le modèle est formé sur un petit corpus intérieur limité pour les tests, la qualité de la voix synthétisée n'est pas très bonne.
Modèle chinois pré-formé simple: ossian_cn_pretraind_model.tar.gz
Certains échantillons générés à partir de ce modèle ont pu être trouvés ici: ossian_chinese_samples.zip
Si vous souhaitez utiliser le dernier repo Merlin, il est possible maintenant. Cependant, lorsque le modèle d'exportation, certains files no exist ne se produirait. Vous pouvez copier manuellement les fichiers correspondants dans le bon dossier pour y faire face. Ces fichiers existent après la formation, mais pas dans le bon répertoire. Vous pouvez utiliser find -name *.dat pour trouver où ils se trouvent.
Voici un exemple:
# 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/
...Nous avons utilisé de nombreuses autres recettes avec Ossian qui seront documentées ici lorsqu'elles seront suffisamment nettoyées pour être utiles aux autres. Ceux-ci donneront la possibilité d'ajouter plus de connaissances aux voix construites, sous la forme de lexiques, de règles de lettre à son, et d'intégrer des composants formés existants où ils sont disponibles pour la langue cible. Certains d'entre eux pouvaient être trouvés ici:
Ce projet est basé sur le CSTR-Edinburgh / Ossian. Tous les droits d'auteur appartiennent au projet d'origine.
Yunchao he