Ossian是用于构建文本到语音(TTS)系统的Python代码的集合,重点放松研究以最少的专家监督来构建TTS系统。它的工作始于欧盟FP7 Project Simple4All的资金,该存储库包含的版本比以前可用的版本要更新。特别是,该工具包的原始版本依靠HTS进行声学建模。尽管仍然可以使用HTS,但现在它支持使用用Merlin工具包训练的神经网作为持续时间和声学模型。非常欢迎所有有关改进方法的评论和反馈。
这是一些中文文件。 一些中文文档和总结可以发现于:中国Ossian Doc。
需要Perl 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
克隆Ossian GitHub存储库如下:
git clone https://github.com/candlewill/Ossian.git
这将创建一个名为./Ossian的目录;以下讨论假设环境变量$OSSIAN设置为指向此目录。
Ossian依靠隐藏的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/文件夹,然后构建它,然后将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/文件夹中。$OSSIAN/tools/$OSSIAN/tools/SEQUITUR STANFORD的值从g2p-r1668-r3更改为1 corenlp-python由于所有工具都安装到$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和神经网络的声音的说明。
您可以在这里准备的各种语言下载1小时的数据集:http://tundra.simple4all.org/ssw8data.html
Ossian Train根据给定的“食谱”进行声音 - 配方指定了一系列过程,这些过程适用于讲话以将其从文本转变为语音,并在称为$OSSIAN/recipes/<RECIPE>.cfg的文件中给出(其中<RECIPE>是您使用的特定配方的名称)。我们将从一个称为naive_01_nn的食谱开始。如果要将组件添加到合成器中,则最好的启动方法是将文件获取现有食谱,将其复制到具有新名称的文件中并修改它。
食谱naive_01_nn是一种独立语言配方,天真地将字母用作声学建模单元。它将适用于具有明智的拼字法(例如罗马尼亚语)的语言合理,对于英语而言,它不太好。
Ossian将根据配方<OSSIAN_LANG>在data <DATA_NAME>上培训期间生成的所有文件,根据配方<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 Toolkit才能实际训练模型。然后需要将其产生的NN转换回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 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然后,将它们放置在正确的目录后,其他人可以使用您的模型来合成给定文本。
在这里,我们为中国TT提供了一个简单的预训练模型。由于该模型在有限的小内部语料库上进行了训练,因此合成语音的质量不是很好。
简单的预训练中国模型:ossian_cn_pretratained_model.tar.gz
从此模型生成的一些样本可以在此处找到:ossian_chinese_samples.zip
如果您想使用最新的Merlin存储库,那么现在就有可能了。但是,当导出模型时,某些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他