0)在这一个多月的论文阅读和代码复现的过程中,大多数论文都是从Mel频谱下手获得更解离的、更具有解释性的信息,如pitch,speaker ID和emotion等,但是从文本中获取信息的只占少部分,最近看到一篇关于BERT预训练的TTS论文,所以在这里做一下记录。

1)论文照例先阐述一下当前研究方向的一些缺点
①利用风格分类标签如感情标签等,但是由于只能预定义样式,所以表达多样性较差
②使用参考音频提取特征作风格输入,这样虽然不需要标记,但是合成的音频时间长且不直观,解释性差

2)然后文章提出style tag,它是一个简短的短语或者是词,代表一个话语的风格,如情感、意图和语调。由于style在自然语言中是有标记的,所以tag对控制style具有直观性和可解释性。
其实这样的tag是很符合我们的说话习惯的,我们特定副词/形容词的使用和表达性(Expressive)关系是很大的,例如我们的话中有激动地XXX或者沉痛地XXX时,副词地使用都会符合我们当前的表达。

所以模型使用训练好的语言模型将自然语言转为样式标签,建模了风格域和语言嵌入之间的关系
模型采用SBERT作为预训练语言模型,Sentence BERT使用对比学习去优化句子层次之间的相似性,所以在相似度度量和聚类上具有更好的效果。它可以将style tag映射到一个有意义的不存在集外词问题的空间, 这样也就支持了模型的泛化能力,这里把style tag当作了简短的句子来看待。
3)训练数据集的结构:{speech, transcript, style tag}
Style encoder由两部分组成:参考编码器+style tag编码器

Reference encoder的结构和GST相似,不同之处在于此处不使用Style token//batch normalization被替代为weight normalization。

Style tag encoder(MES loss)由Sbert(transforms style tag to semantic embedding语义嵌入)和adaptation(3*linear layers +RELU,map from linguistic semantic space to style embedding space)组成

文章还表述了双模组成style encoder的优点:
① 通过建立style tag和参考语的双模嵌入空间,可以利用风格标记和参考语提取风格嵌入进行推理
② style tag embedding是具有相同tag的参考音频的锚定,这意味着reference encoder可以学习具有相同tag的reference audio的簇
由于参考编码器在嵌入空间中邻接映射具有相似说话风格的语音,具有相似意义style tag也在嵌入空间中紧密定位。Adaptation很容易学习风格域和语言域之间的关系
在training时冻结Sbert然后使用TTS损失和style embedding loss对其他components进行优化

4)text的部分的处理分为三部分:text encoder+aligner+duration predictor
text encoder:获取grapheme返回一个文本嵌入序列。
aligner:文本和mel的对齐,并返回每个grapheme的持续时间,并且只考虑文本和语音的对齐。
duration predictor:以对数比例预测每个grapheme的帧数,由于不同的style产生不同的语速,时长预测器也采用style embedding的方法来预测style相关的时长。style embedding被复制到相同长度的文本嵌入中。

最后将扩展持续时间的文本转换为以style embedding为条件的对数mel谱图完成音频的合成

5)模型的损失组成:
① 预测的mel和真实的对数mel谱的平均绝对误差(MAE mean-absolute-erro)
② duration predictor和aligner获得的log duration的huber误差 链接: link.
③ 训练对齐器的负对数似然损失
④ 参考编码器和style tag编码器的样式嵌入之间的MSE丢失

下图是合成的训练效果 蓝色为seen 红色为unseen,从图中看,泛化性能很好,从text中学到的信息可以提高合成的效果


5)最后的总结
改进点:
1)由于风格标签是用自然语言编写的,用户可以通过ST-TTS直观地控制生成语音的风格。在语言模型中,SBERT使ST-TTS能够表达训练过程中unseen的style tag。
2)ST-TTS具有参考语和风格标记的双模嵌入空间,因此可以使用参考风格标记或参考语进行推理。
3)ST-TTS是一个非自回归TTS模型,可以在单阶段进行训练。因此,ST-TTS易于训练,生成速度快

不足之处在于style tag虽然相较于GST有了更好的直观性和可解性性,但是在数据集中应该尽可能多的扩充style tag达到更好的效果,其次,一个句子的风格可能有多个tag的风格,这也是未来的研究方向之一。

小结
Ⅰ 原来我也看过类似的利用BERT的论文,但是当时对文本信息的利用不够透彻【6】链接: link.
Ⅱ 论文提供的音频试听地址:链接: link.
Ⅲ 估计以后的时间会重点关注此类预训练模型的结合。over

使用Sbert预训练的TTS模型《Expressive Text-to-Speech using Style Tag》相关推荐

  1. 【深度学习】预训练的卷积模型比Transformer更好?

    引言 这篇文章就是当下很火的用预训练CNN刷爆Transformer的文章,LeCun对这篇文章做出了很有深意的评论:"Hmmm".本文在预训练微调范式下对基于卷积的Seq2Seq ...

  2. TensorFlow 调用预训练好的模型—— Python 实现

    1. 准备预训练好的模型 TensorFlow 预训练好的模型被保存为以下四个文件 data 文件是训练好的参数值,meta 文件是定义的神经网络图,checkpoint 文件是所有模型的保存路径,如 ...

  3. 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 直接调用 C++ 接口实现

    现在的深度学习框架一般都是基于 Python 来实现,构建.训练.保存和调用模型都可以很容易地在 Python 下完成.但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将通过直 ...

  4. Keras 的预训练权值模型用来进行预测、特征提取和微调(fine-tuning)

    转至:Keras中文文档 https://keras.io/zh/applications/ 应用 Applications Keras 的应用模块(keras.applications)提供了带有预 ...

  5. 【Pytorch】加载torchvision中预训练好的模型并修改默认下载路径(使用models.__dict__[model_name]()读取)

    说明 使用torchvision.model加载预训练好的模型时,发现默认下载路径在系统盘下面的用户目录下(这个你执行的时候就会发现),即C:\用户名\.cache\torch\.checkpoint ...

  6. MICCAI 2020 | 基于3D监督预训练的全身病灶检测SOTA(预训练代码和模型已公开)...

    关注公众号,发现CV技术之美 ▊ 研究背景介绍 由于深度学习任务往往依赖于大量的标注数据,医疗图像的样本标注又会涉及到较多的专业知识,标注人员需要对病灶的大小.形状.边缘等信息进行准确的判断,甚至需要 ...

  7. PromptCLUE:大规模多任务Prompt预训练中文开源模型

    简介 PromptCLUE:大规模多任务Prompt预训练中文开源模型. 中文上的三大统一:统一模型框架,统一任务形式,统一应用方式.支持几十个不同类型的任务,具有较好的零样本学习能力和少样本学习能力 ...

  8. 基于Keras预训练词向量模型的文本分类方法

    本文语料仍然是上篇所用的搜狗新闻语料,采用中文预训练词向量模型对词进行向量表示.上篇文章将文本分词之后,采用了TF-IDF的特征提取方式对文本进行向量化表示,所产生的文本表示矩阵是一个稀疏矩阵,本篇采 ...

  9. 使用预训练的 ImageNet 模型进行图像分类

    在这篇文章中,我们将学习如何使用预训练的 ImageNet 模型来执行图像分类.我们已经看到了如何训练一个简单的神经网络来对 CIFAR-10 数据集中的图像进行分类,但这是一个相对简单的任务,因为只 ...

  10. Tensorflow基于pb模型进行预训练(pb模型转CKPT模型)

    Tensorflow基于pb模型进行预训练(pb模型转CKPT模型) 在网上看到很多教程都是tensorflow基于pb模型进行推理,而不是进行预训练.最近在在做项目的过程中发现之前的大哥只有一个pb ...

最新文章

  1. JavaScript闭包如何工作?
  2. mysql 子sql中调用存储过程_mysql 子sql中调用存储过程
  3. 代码检查规则背景及总体介绍
  4. Net中unsafe编程详解
  5. Value 'EN' violates facet information 'maxlength=1'
  6. Java与Python:哪一个最适合您? [信息图]
  7. ASP.NET Core2.2 和2.1 版本中对cookie的设置和存储
  8. vue php 架构目录,vuex 项目结构目录及一些简单配置介绍
  9. 20191122 视频版控制台上的极乐净土
  10. U盘插入苹果电脑后被分区,在Windows系统用不了怎么办。
  11. java连接hsql数据库_hsql数据库使用详解(入门)及快速使用
  12. 矩阵的卷积以及使用python计算方法
  13. matlab gui用edit,matlab gui edit 显示
  14. mybatis java 帅帅 2021年5月17日20:36:25
  15. c语言输入角度求sin,从键盘输入一个角度x,求10sin(x)的值 c语音编程
  16. 【已解决ie浏览器不能打印预览的问题,页面跳转失败,无法打开】
  17. MacOS 10.15编译openjdk8u详细过程
  18. JAVA编写弹珠(弹珠)小游戏
  19. JS实现倒计时精确到天数,时,分,秒或者精确到时、分、秒(小时数累加)
  20. 解决U盘中文件全部变成快捷方式的问题

热门文章

  1. TortoiseSVN—Repo-browser,打开你要比较的两个版本所在的地址,选择一个版本做为比较的基础(单击右键—选择mark for comparison),再选择另外一个版本(单击右键—选
  2. 大学物理实验 空气比热容比的测定 数据处理
  3. Pandas里面的加权平均,我猜你不会用!
  4. python中and的用法
  5. 【CV】国内外优秀的计算机视觉团队汇总|最新版
  6. web api接口开发实例_vn.py交易API接口开发小班课(第二期)
  7. 【SIGIR2017满分论文】IRGAN:大一统信息检索模型的博弈竞争
  8. Promethues原理详解
  9. 9月全球搜索引擎市场份额:7个版本Google上榜
  10. Gentoo Linux+KDE Plasma桌面安装教程