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他