论文阅读_语音合成_Spear-TTS

news2024/11/28 6:39:08

论文信息

number headings: auto, first-level 2, max 4, _.1.1
name_en: Speak, Read and Prompt: High-Fidelity Text-to-Speech with Minimal Supervision
name_ch: 说话、阅读和提示:少量监督实现高保真文本转语音
paper_addr: http://arxiv.org/abs/2302.03540
date_read: 2023-04-25
date_publish: 2023-02-07
tags: [‘深度学习’,‘TTS’]
author: Eugene Kharitonov, Google research
code: https://google-research.github.io/seanet/speartts/examples/

1 读后感

这是一个完整的TTS系统,可视为AudioLM的延展。

2 摘要

多语言的语音合成系统,使用大量无监督数据,少量有监督数据训练,结合了两种类型的离散语音表示,解耦了:从文本生成语义标记(读),由语义标记再生成声音标记(说)两部分,用大量纯音频数据训练“说模块”,减少“读模块”对并行数据(并行数据指:文本语音数据对)的需求。
为控制说话人,使用提示方法,只需要3秒音频即可合成在训练集中未见过的说话人的语音。
实验表明,SPEAR-TTS 仅使用 15 分钟的并行数据即可与最先进的方法的字符错误率相比较,主观测试证明其可在自然度和声学质量方面与真实语音相媲美。

3 离散的语音表示

详见AudioLM

3.1 语义token

语义标记的作用是提供一个粗略的、高层级的条件来生成随后的声学标记。因此,应该提供一种表示,其中语言内容(从语音到语义)是显著的,同时不考虑说话人身份和声学细节等副语言信息。
为了获得这样的表示,训练了一个基于 w2v-BERT 的自监督语音表示模型。该模型结合了Mask语言建模对比学习以获得语音表示。训练结束后,对特定层的均值方差归一化输出运行 k 均值聚类。使用质心索引作为离散标记

3.2 声学token

声学标记是离散的音频表示,可提供声学细节的高保真重建。训练了一个 SoundStream 神经编解码器来重建语音,同时将其压缩成一些离散单元。 SoundStream 通过在卷积自编码器的瓶颈中添加一个残差量化器来实现这一目标。

4 SPEAR-TTS 概述

SPEAR-TTS 通过将文本作为生成条件来扩展 AudioLM。如图-1所示,主要分为两个场景:S1文本转成离散的语义标记,S2将语义转声学标记,再利用SoundStream转成音频
其中需要两步转换,原因是:语义信息在逻辑上介于文本和声学信息之间;且语义转声学只需要无标注的音频数据训练。另外,还可以再加入与 AudioLM类似的第三种场景,通过预测与精细残差矢量量化级别对应的声学标记,来提高合成语音的质量。

5 S1:提升监督效率

通过有监督学习从文本到语义标记的映射,使用语音合成数据集提取语义标记,将S1变为序列到序列seq2seq的任务,具体使用Transformer结构。

有监督学习需要大量标注数据,对于小语种比较困难,文中使用了两种改进策略:

5.1 预训练

在一个去噪预训练任务上对Encoder-Decoder的Transformer进行预训练。给模型提供了一个原始语义token序列的损坏版本,目标是产生相应的未损坏token序列。
典型的损坏方法包括随机替换、删除和遮蔽单个token或整个token范围。在初步研究中观察到独立地以恒定概率删除单个token的方法比其他替代方案更有效。
在对模型进行去噪任务的预训练之后,对S1任务进行微调。微调时冻结编码器的上层和解码器的参数。

5.2 回译:Backtranslation

相同的文本序列可以对应多种音频,比如不同的声音、口音、韵律、情感内容和录音条件。这使得文本和音频高度不对称。回译方法是:使用可用的并行数据对来训练语音到文本模型,并使用它和来自纯音频的语料来生成并行数据,增加模型的训练数据。

从左下开始看图-2,首先,利用有限数据的损坏方法(加噪再去噪)来预训练模型P,生成语义token表征音频数据;然后训练回译模块,利用少量的并行数据微调解码器,训练模型B;利用模型B的回译方法以及大量无标签数据生成大量可用于训练的并行数据(右上);最后用所有并行数据精调模型(右下)只精调编码器的下面几层。

6 S2:控制生成过程

第二个场景是将语义标记映射到声学标记,此处,可从只有音频的数据集的句子中提取语义声学标记,然后训练Transformer模型实现seq2seq的翻译功能。第二阶段生成语音、节奏和录音条件随机变化的话语,再现训练数据中观察到的特征分布。
由于 S1 和 S2 的训练是解耦的,因此当 S1 在单说话人数据集上训练时,S2 可保留生成语音的多样性

为了控制说话者声音的特征,在训练的时候就考虑了有音频提示和无音频提示两种情况。如图-3所示:

这里的红色块是语义token,黄色块是声学token,灰色为提示分隔符。在按音频提示生成语音的场景中(下图),用以下训练连接序列:来自提示的语义token,来自目标的语义token,来自提示的声学token。该模型生成与来自目标的语义标记相对应的声学token(Output),同时保留来自提示的声学标记中的语音和说话条件。
在训练时,从每个训练集中随机选择两个不重叠的语音窗口,从中计算语义和声学标记的序列。将其中一个窗口视为提示,将另一个视为目标输出
在推理时,输入也是前三块,使用自回归方式生成Output。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/550925.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统理解 什么事件可以造成进程的产生和消亡呢?当然有很多这样的事件。对于进程产生来说,主要的事件有:造成进程消亡的事件则可以分为四种情况:

目录 什么事件可以造成进程的产生和消亡呢?当然有很多这样的事件。对于进程产生来说,主要的事件有: 造成进程消亡的事件则可以分为四种情况: 好好理解计算机是人造的,这句话的含义,特别是计算机这是西方人…

【ChatGPT】人工智能发展的背后厉害:跌宕起伏的近百年

文章目录 前言一、麦卡洛克-皮特斯神经元二、赫布式学习三、感知机四、反向传播算法五、卷积神经网络六、递归神经网络七、通用计算GPU芯片八.生成式神经网络与大型语言模型总结 前言 今天,ChatGPT等大型语言预训练神经网络模型已经成为广为人知的名字,…

算法笔记:A2-A4-RSRQ切换算法

1 LTE 切换 LTE切换是移动通信网络中的一个过程,移动设备在保持无间断服务的情况下,将其连接从一个基站切换到另一个基站。当移动设备离开当前基站的覆盖范围或网络资源拥塞时,就需要进行切换。LTE切换通常是基于特定的条件触发的&#xff0…

Ansys Lumerical | FDTD 应用:设计光栅耦合器

本文将设计一个光栅耦合器,将光子芯片表面上的单模光纤连接到集成波导。内置粒子群优化工具用于最大化耦合效率,并使用组件S参数在 INTERCONNECT 中创建紧凑模型。还演示了如何使用 CML 编译器提取这些参数以生成紧凑模型。(联系我们获取文章…

第十章 Productions最佳实践 - 路由Production的设计模型

文章目录 第十章 Productions最佳实践 - 路由Production的设计模型配置项应用规范 第十章 Productions最佳实践 - 路由Production的设计模型 本章介绍了客户成功用于构建接口路由解决方案的设计模型。因此,它可以被认为是开发路由制作的最佳实践的集合。 本章仅介…

Go colly爬虫框架精简高效【杠杠的】入门到精通

1 前言 1.1 Go Colly 爬虫介绍 爬虫框架中,各中流行的编程语言都有自己热门框架,python中的selenium、Scrapy、PySpider等,Java中的Nutch、Crawler4j、WebMagic、WebCollector等。golang中colly使用Go语言编写的功能强大的爬虫框架&#xf…

cpp11实现线程池(七)——线程池cached模式设计实现

用vector::size() 获取当前容器元素数量不是线程安全的,所以采用atomic_int 来实现当前容器元素数量的改变能够保证线程安全 线程池成员变量的修改 添加变量记录当前线程数量、空闲线程数量,以及线程数的上限: int threadSizeThreshHold_; …

由浅入深Netty源码分析

目录 1 启动剖析2 NioEventLoop 剖析3 accept 剖析4 read 剖析 1 启动剖析 我们就来看看 netty 中对下面的代码是怎样进行处理的 //1 netty 中使用 NioEventLoopGroup (简称 nio boss 线程)来封装线程和 selector Selector selector Selector.open();…

Trie与可持久化Trie

Trie Trie,也称为字典树或前缀树,是一种用于高效存储和检索字符串的树形数据结构。它的主要特点是利用字符串的公共前缀来减少存储空间和提高查询效率。下面是对 Trie 的常见操作的介绍: 插入(Insertion)&#xff1a…

PETRv2 论文学习

1. 解决了什么问题? 过去,一般使用基于单目视觉进行 3D 目标检测。现在进行 3D 任务的方法大致分两类。一类是基于 BEV,将多视角图像映射为 BEV 表征,然后使用 3D 目标检测方法。另一类是基于 DETR,如 DETR3D 和 PETR…

xhs-xs webmsxywx分析

近期又更新了,先是改了x-s生成,然后又加上了a1校验。 后面可能会全参校验,比如再加上gid、deviceId、profileData、x-s-common、smidV2之类。 估计以后不能写xhs了,大家且看且珍惜吧。之前相关的文章都被下架了 危!…

K8s日志组件-Loki是如何存储数据的?

文章目录 为什么需要loki为什么不是EFK?Loki是如何存储数据的?底层的LSM treeB tree 和LSM tree的区别?Ref参考链接 为什么需要loki 日志记录本质上是一个事件。大多数语言、应用程序框架或库都支持日志,表现形式可以是字符串这样…

安卓动画壁纸实战:制作一个星空动态壁纸(带随机流星动画)

前言 在我之前的文章 羡慕大劳星空顶?不如跟我一起使用 Jetpack compose 绘制一个星空背景(带流星动画) 中,我们使用 Compose 实现了星空背景效果。 并且调用非常方便,只需要一行代码就可以给任意 Compose 组件添加上…

30多家投递石沉大海,总算上岸了

大家好,我是帅地。 今年的行情,无论是暑假实习还是春招校招,都比往年要难一些,很多人在三月份要嘛简历石沉大海,要嘛面试一轮游,但也有部分人最后都拿到了不错的 Offer,包括我 训练营 里&#…

企业级信息系统开发——初探Spring-采用Spring配置文件管理Bean

初探Spring 一、Spring框架(一)Spring框架优点(二)Spring 框架因何而来(三)Spring框架核心概念 二、采用Spring配置文件管理Bean(一)创建Maven项目(二)添加Sp…

在C++中,怎么把string转换成char*?

2023年5月21日,周日中午: 今天在写项目的时候遇到了这个问题,也解决了,所以记录一下 通过string类的copy成员函数就可以解决这个问题 copy函数的函数原型: string& copy(char* s, size_t n, size_t pos 0); 其…

【框架源码】SpringBoot核心源码解读之启动类源码分析

首先我们要先带着我们的疑问,spring boot是如何启动应用程序?去分析SpringBoot的启动源码。 我们在新建SpringBoot项目时,核心方法就是主类的run方法。 SpringApplication.run(ArchWebApplication.class, args) 我们点击run方法进入到源码中…

A survey of Large Lanuage models

一.引言 语言建模的四个阶段,统计语言模型(SLM):基于马尔科夫假设建立词预测模型,n-gram,神经语言模型(NLM):word2vec,预训练语言模型(PLM&#…

Godot引擎 4.0 文档 - 入门介绍 - 学习新功能

本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面: Learning new features — Godot Engine (stable) documentation in English 学习新功能 Godot 是一个功能丰富的游戏引擎。有很多关于它的知识。本页介绍了如何使用…

English Learning - L3 作业打卡 Lesson2 Day11 2023.5.15 周一

English Learning - L3 作业打卡 Lesson2 Day11 2023.5.15 周一 引言🍉句1: Sometimes a person may be upset because he does not have something as nice as a friend has, like a fast new car.成分划分弱读连读爆破语调 🍉句2: That person may say…