Tacotron 项目介绍
Tacotron 项目是一项开源的语音合成实现,基于 Google 在 2017 年 4 月发表的名为《Tacotron: Towards End-to-End Speech Synthesis》的论文,使用 TensorFlow 进行构建。该项目致力于开发一个能够直接从文本与音频对中学习来合成语音的神经网络文本到语音(TTS)模型。
音频示例
- 项目中提供了多个通过该代码库训练的模型音频示例。其中一个模型在 LJ Speech 数据集上训练了 441,000 步,而另一个模型由社区贡献者 @MXGray 在 Nancy Corpus 数据集上训练了 140,000 步。通常,语音在训练到约 20,000 步时开始变得简明易懂。
最近更新
项目团队与社区不断对代码库进行优化和改进。例如,@npuichigo 修复了一个关于 dropout 未在 prenet 中应用的错误,另一位贡献者 @begeekmyfriend 则在项目中引入了 Tacotron 2 论文中的位置敏感注意力和停止标识功能,能够大大减少训练模型所需的数据量。
项目背景
Tacotron 的开发始于 2017 年,是对 Google 原论文中描述模型的独立开源实现尝试。尽管该实现尚未达到 Google 演示的高质量,但团队和社区都期望通过不断的改进能够实现这一目标。目前,该项目欢迎贡献者通过 Pull Request 的形式参与改进。
快速开始指南
安装依赖
-
安装 Python 3。
-
为你的平台安装最新版本的 TensorFlow。如果条件允许,建议选择支持 GPU 的版本来获得更佳性能。(支持 TensorFlow 1.3 及以后的版本)
-
安装其它需要的依赖项:
pip install -r requirements.txt
使用预训练模型
-
下载并解压模型:
curl https://data.keithito.com/data/speech/tacotron-20180906.tar.gz | tar xzC /tmp
-
运行 demo 服务器:
python3 demo_server.py --checkpoint /tmp/tacotron-20180906/model.ckpt
-
在浏览器中访问
localhost:9000
,输入你想合成的文本即可。
训练
训练模型需要至少 40GB 的磁盘空间。
-
下载一个语音数据集,如 LJ Speech 或 Blizzard 2012 数据集。
-
将数据集解压到
~/tacotron
目录下。 -
预处理数据:
python3 preprocess.py --dataset ljspeech
-
训练模型:
python3 train.py
可通过命令行的
--hparams
参数调整训练超参数,如--hparams="batch_size=16,outputs_per_step=2"
。推荐在训练和评估时都使用相同的超参数设置。 -
(可选)使用 Tensorboard 监控训练过程:
tensorboard --logdir ~/tacotron/logs-tacotron
-
从检查点开始合成:
python3 demo_server.py --checkpoint ~/tacotron/logs-tacotron/model.ckpt-185000
或在命令行上运行
eval.py
:python3 eval.py --checkpoint ~/tacotron/logs-tacotron/model.ckpt-185000
注意事项及常见问题
- 使用 TCMalloc 可以提高训练速度,并避免默认分配器偶尔出现的速度瓶颈。通过安装 TCMalloc 并设置
LD_PRELOAD=/usr/lib/libtcmalloc.so
来启用。 - 可通过下载 CMUDict 并传递
--hparams="use_cmudict=True"
参数来使用 ARPAbet 发音字典。 - 可设置
--slack_url
来接收训练进度的定时通知。 - 有时模型会出现损失值的突增,此时可以通过从一个早期的检查点重新启动训练来节省恢复时间。
Tacotron 项目在不断进化中,用户和贡献者可以通过代码库提供的链接参与更多详细的研究和改进工作。