0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个基于Tensorflow框架的开源Tacotron实现

LiveVideoStack 来源:互联网 作者:佚名 2018-04-10 08:47 次阅读
语音合成(Text to Speech Synthesis)是一种将文本转化为自然语音输出的技术,在各行各业有着广泛用途。传统TTS是基于拼接和参数合成技术,效果上同真人语音的自然度尚有一定差距,效果已经达到上限,在实现上也依赖于复杂流水线,比如以文本分析为前端的语言模型、语音持续时间模型、声学特征预测模型、将频谱恢复成时域波形的声码器(vocoder)。这些组件都是基于大量领域专业知识,设计上很艰难,需要投入大量工程努力,对于手头资源有限的中小型玩家来说,这种“高大上”的技术似乎有些玩不起。

幸运的是近年来基于神经网络架构的深度学习方法崛起,使得原本在传统专业领域门槛极高的TTS应用上更接地气。现在,我们有了新方法Tacotron一种端到端的TTS生成模型。所谓“端到端”就是直接从字符文本合成语音,打破了各个传统组件之间的壁垒,使得我们可以从<文本,声谱>配对的数据集上,完全随机从头开始训练。从Tacotron的论文中我们可以看到,Tacotron模型的合成效果是优于要传统方法的。

本文下面主要内容是github上一个基于Tensorflow框架的开源Tacotron实现,介绍如何快速上手汉语普通话的语音合成。至于模型的技术原理,限于篇幅就不再详细介绍了,有兴趣可以直接阅读论文,本文的宗旨是,对于刚入门的同学能够在自己动手实践中获取及时的结果反馈。

在正文开始之前,笔者假设读者手头已经准备好项目运行的软硬件环境,包括NVIDIA GTX系列显卡及其驱动,能够在控制台上使用Python3引入Tensorflow模块。

关于Tacotron的源代码,我们选择了Keith Ito的个人项目,笔者的汉语语音合成正是基于此源码上修改而成,代码在:https://github.com/begeekmyfriend/tacotron

训练语料库可以在:

http://www.openslr.org/18上下载6.4G大小的THCHS-30,这是由清华大学开放的汉语普通话语料,许可证为Apache License v2.0。

我们可以开始安装运行了。先clone源代码到本地~/tacotron,然后解压THCHS-30数据集到根目录下,如下所示:

~/tacotron

|- data_thchs30

|- data

|- dev

|- lm_phone

|- lm_word

|- README.TXT

|- test

|- train

注意,~/tacotron是默认的路径,之后运行Python程序会直接把~/tacotron作为根目录,如果你的项目根目录不一样,那么你必须修改程序的默认路径参数,否则会出现运行错误。

我们可以深入到:~/tacotron/data_thchs30/data里面去观摩一下,后其中缀为“wav”是语音文件,采样率16KHz,样本宽度16-bit,单声道,内容是时长为10s左右的一段汉语。后缀为“trn”文件为文本标注(transcript),不同语言有着不同的标注方法,比如英语就可以直接用26个字母加上标点符号作为标注,也就是直接使用英文内容本身;韩语由它自己一套字母表,每个字母可以使用Unicode代码作为标注字符;而汉字本身有2~3万个,穷举的话太多,还有很多同音字,所以我们使用汉语拼音作为字符标注是一种可行方案(在此向汉语拼音之父周有光表示敬意)。比如有这么一句:

绿 是 阳春 烟 景 大块 文章 的 底色 四月 的 林 峦 更是 绿 得 鲜活 秀媚 诗意 盎然

用汉语拼音标注为:

lv4 shi4 yang2 chun1 yan1 jing3 da4 kuai4 wen2 zhang1 de5 di3 se4 si4 yue4 de5 lin2 luan2 geng4 shi4 lv4 de5 xian1 huo2 xiu4 mei4 shi1 yi4 ang4 ran2

注意到除了拉丁字母的拼音,还有1~5个阿拉伯数字,表示声调(四种声调加上轻声)。

也可以使用音素(声母+韵母)为单元标注:

l v4 sh ix4 ii iang2 ch un1 ii ian1 j ing3 d a4 k uai4 uu un2 zh ang1 d e5 d i3 s e4 s iy4 vv ve4 d e5 l in2 l uan2 g eng4 sh ix4 l v4 d e5 x ian1 h uo2 x iu4 m ei4 sh ix1 ii i4 aa ang4 r an2

根据经验笔者要指出,如果以字符为单位[a-z1-5],其实上述两种标注方法没有本质区别,故我们只要使用汉语拼音标注方案即可。

聪明的读者应该明白了,所谓的<文本,声谱>配对,就是要让机器学会将每一个包括空格和标点在内的字符[a-z1-5 ,.;:],对应到(mel或线性)声谱的某几帧。

接下来进入实际操作阶段。在根目录下运行如下命令:

> python3 preprocess.py --dataset thchs30

这条命令会在根目录下生成training目录,里面存放了每个音频文件的mel频谱和线性频谱(通过短时傅里叶变换STFT而得),后缀为"npy"的文件,用numpy库加载即可得到多个narray数组(可以视为多个特征向量组成的多维矩阵),用作语音的声学特征提取。除此之外还有个train.txt文件,里面基本上就是csv的格式将拼音标注同每个文件的声谱对应起来。

再提醒一遍,我们的tacotron根目录默认是~/tacotron,更改需要改变命令行参数。有了<文本,声谱>配对数据集形式后,我们可以训练了,输入以下命令行:

> nohup python3 train.py --name thchs30 > output.out &

我们使用了nohup命令来屏蔽一切中断信号,同时将Python进程置于后台,这是由于训练过程十分漫长(一般收敛需要10个小时,得到好的效果需要2天),免得网络中断或者终端断开导致Python进程被杀死。训练过程中的输出将会保存在logs-thchs30目录下,可能是这样的:

~/tacotron

|- logs-thchs30

|- model.ckpt-92000.data-00000-of-00001

|- model.ckpt-92000.index

|- model.ckpt-92000.meta

|- step-92000-align.png

|- step-92000-align.wav

|- ...

以上是92K次迭代后保存下来的模型和alignment图,顺便说一下我们不需要关注step-92000-align.wav这个音频文件,这并不是通过模型预测的实际效果,只是在训练中使用了teacher forcing方法,不代表evaluation效果,可以不去管它。

如何判断训练是否达到预期呢?个人经验有两个:一看学习是否收敛;二看损失(loss)低于某个值。由于Tacotron模型本质上是基于编码器解码器模式的seqtoseq模型,所以学习是否收敛可以从编码器序列和解码器序列是否对齐(alignment)判断。

我们放了两张alignment图对比,上图训练了140K次迭代,可以看到没有出现对齐,说明没有收敛。可能的原因很多,比如数据集质量不好,标注不正确等等。下图是92K次迭代,可以看到对齐情况良好,表明基本上可以通过文本来合成出有效的语音。这里要指出,所谓对齐并不是一定要笔直的斜线,它只是代表编码器序列(文本)和解码器序列(声谱)是否对应起来,而且像素点越亮,效果越好。

第二个判断点是loss值,越小表明越接近地真值(ground truth),当然必须在收敛的前提下,loss会趋于稳定。在实际训练中有可能出现loss值很低,但是仍然没出现alignment的情况,这是是无法合成语音的。

当我们从训练日志上看到,loss值低于0.07的时候,基本表示学习收敛并且效果稳定了。可以杀掉后台Python进程,别担心,logs-thchs30目录下已经保存了之前训练过程中产生的模型,你可以从任意时刻生成模型随时恢复继续训练,比如我们需要从92K次迭代生成的模型基础上继续训练,命令行如下:

> nohup python3 train.py --name thchs30 --restore_step 92000 >> output.out &

好了,现在终于到了检验我们录音效果的时刻了!不过我们无法直接输入汉字文本,而是拼音标注,好在有开源项目python-pinyin帮我们搞定:https://github.com/mozillazg/python-pinyin

比如我们想合成一句“每个内容生产者都可以很方便地实现自我价值,更多的人有了微创业的机会。”我们使用python-pinyin输出的拼音标注拷贝到eval.py里,输入命令行:

> python3 eval.py --checkpoint logs-thchs30/model.ckpt-133000

一段时间后,就会在logs-thchs30目录下生成了eval-133000-0.wav,这就是我们想要的结果,一起来听听看吧~

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 语音合成
    +关注

    关注

    2

    文章

    80

    浏览量

    16020
  • GitHub
    +关注

    关注

    3

    文章

    457

    浏览量

    15921

原文标题:基于Tacotron汉语语音合成的开源实践

文章出处:【微信号:livevideostack,微信公众号:LiveVideoStack】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    星动纪元开源人形机器人训练框架Humanoid-Gym

    星动纪元,这家专注于人形机器人技术的创新公司,近日宣布计划将其训练框架Humanoid-Gym进行开源。Humanoid-Gym是一个为人形机器人设计的训练框架,其开源将极大地推动人形
    的头像 发表于 03-06 18:13 1008次阅读

    谷歌模型框架是什么软件?谷歌模型框架怎么用?

    谷歌模型框架通常指的是谷歌开发的用于机器学习和人工智能的软件框架,其中最著名的是TensorFlowTensorFlow是一个开源的机器学
    的头像 发表于 03-01 16:25 238次阅读

    基于TensorFlow和Keras的图像识别

    ,让我们先花点时间来了解一些术语。TensorFlow/KerasTensorFlow是GoogleBrain团队创建的一个Python开源库,它包含许多算法和模型
    的头像 发表于 01-13 08:27 378次阅读
    基于<b class='flag-5'>TensorFlow</b>和Keras的图像识别

    边缘计算平台开源框架有哪些类型

    边缘计算平台开源框架是指基于边缘计算概念开发的开源软件框架,用于构建和管理边缘计算平台。这些框架提供了一套工具和技术,用于将计算和存储资源推
    的头像 发表于 12-27 15:17 483次阅读

    PyTorch与TensorFlow的优点和缺点

    转载自:冷冻工厂   深度学习框架是简化人工神经网络 (ANN) 开发的重要工具,并且其发展非常迅速。其中,TensorFlow 和 PyTorch 脱颖而出,各自在不同的机器学习领域占有一席之地
    的头像 发表于 10-30 09:56 504次阅读
    PyTorch与<b class='flag-5'>TensorFlow</b>的优点和缺点

    iTOP-RK3588开发板使用 tensorflow框架

    TensorFlow软件库或框架,由 Google 团队设计,以最简单的方式实现机器学习和深度学习概念。它结合了优化技术的计算代数,
    发表于 10-08 10:04

    如何用BMlang搭建Tensorflow模型?

    在EVM1684上如何用BMlang搭建Tensorflow模型,求助官方demo。
    发表于 09-18 07:00

    深度学习框架对照表

    的深度学习框架,并对它们进行对比。 1. TensorFlow TensorFlow是由Google Brain团队开发的一款深度学习框架,目前是深度学习领域中最常用的
    的头像 发表于 08-17 16:11 490次阅读

    深度学习算法库框架学习

    深度学习算法库框架学习 深度学习是一种非常强大的机器学习方法,它可以用于许多不同的应用程序,例如计算机视觉、语言处理和自然语言处理。然而,实现深度学习技术需要使用一些算法库框架。在本文中,我们将探讨
    的头像 发表于 08-17 16:11 439次阅读

    深度学习框架tensorflow介绍

    深度学习框架tensorflow介绍 深度学习框架TensorFlow简介 深度学习框架TensorFl
    的头像 发表于 08-17 16:11 1447次阅读

    深度学习框架pytorch入门与实践

    深度学习框架pytorch入门与实践 深度学习是机器学习中的一个分支,它使用多层神经网络对大量数据进行学习,以实现人工智能的目标。在实现深度学习的过程中,选择一个适用的开发框架是非常关
    的头像 发表于 08-17 16:03 1197次阅读

    如何制作人工智能ai

    为了让制作人工智能更为简单,并且快速上手,可以选择一个开源框架。常见的开源框架包括TensorFlow,Keras和PyTorch。这些
    的头像 发表于 08-13 10:02 8468次阅读

    如何使用TensorFlow将神经网络模型部署到移动或嵌入式设备上

    使用TensorFlow的transform_graph工具生成优化的8位模型,该模型效率更高,但精度较低。 4.在设备上对优化的模型进行基准测试,并选择最符合您部署需求的模型。 本教程使用预训练
    发表于 08-02 06:43

    腾讯开源的前端框架介绍

      今天推荐两个腾讯开源的前端框架,分别是 wujie(无界)和 Omi。 wujie(无界) 无界微前端是一款基于 Web Components + iframe 微前端框架,具备成本低、速度快
    的头像 发表于 06-17 14:44 1379次阅读
    腾讯<b class='flag-5'>开源</b>的前端<b class='flag-5'>框架</b>介绍

    共建、共享开源EDA核心共性技术框架|2023开放原子全球开源峰会开源EDA分论坛成功举办

    现有的PCB设计流程,另方面需要体现仿真驱动和规格驱动的先进性,其包含四层级,即数据层、高性能计算层、开源框架层和应用层。现已开发多个第三方接口,高校和企业可以通过
    发表于 06-16 13:45