TTS超全教程
TTS超全教程
TTS超全教程 TTS超全教程 Modified September 28, 2024 Code block Python x = F.leaky relu(x, LRELU SLOPE) fmap.append(x) x = self.conv post(x) fmap.append(x) x = torch.flatten(x, 1, 1) return x, fmap x 是子判别器展平后的整体输出,大小为\[B,l\];fmap 是经过每一层卷积后的特征图(feature map),类型为 list,元素个数为卷积层数,上述代码中有 6 个卷积层,则 fmap 元素个数为 6,每个元素是大小为\[B,C,l',period\]的张量。 损失函数简介 HiFiGAN 的损失函数主要包括三块,一个是 GAN 原始的生成对抗损失(GAN Loss);第二是梅尔频谱损失(Mel Spectrogram Loss),将生成音频转换回梅尔频谱之后,计算真实和生成音频对应梅尔频谱之间的 L1 距离;第三是特征匹配损失(Feature Match Loss),主要是对比真实和合成音频在中间卷积层上的差异。 生成对抗损失 HiFiGAN 仍然是一个生成对抗网络,判别器计算输入是真实样本的概率,生成器生成以假乱真的样本,最终达到生成器合成接近真实的样本,以致于判别器无法区分真实和生成样本。HiFiGAN 使用最小二乘 GAN(LS GAN),将原始 GAN 中的二元交叉熵替换为最小二乘损失函数。判别器的生成对抗损失定义为: 对应的代码实现: Code block Python def discriminator loss(disc real outputs, disc generated outputs): loss = 0 r losses = [] g losses = [] for dr, dg in zip(disc real outputs, disc generated outputs): r loss = torch.mean((dr 1) 2) g loss = torch.mean(dg 2) loss += (r loss + g loss) r losses.append(r loss.item()) g losses.append(g loss.item()) return loss, r losses, g losses 生成器的生成对抗损失定义为: 其中, 表示真实音频, 表示梅尔频谱。 对应的生成器代码实现: Code block Python def generator loss(disc outputs): loss = 0 gen losses = [] for dg in disc outputs: l = torch.mean((dg 1) 2) gen losses.append(l) loss += l return loss, gen losses 更详尽关于 GAN 的理论参见:GAN 万字长文综述 梅尔频谱损失 借鉴 Parallel WaveGAN 等前人工作,向 GAN 中引入重建损失和梅尔频谱损失可以提高模型训练初期的稳定性、生成器的训练效率和合成语音的自然度。具体来说,梅尔频谱损失就是计算合成和真实语音对应频谱之间的 L1 距离: 其中, 表示将语音转换为梅尔频谱的映射函数。 对应的损失函数实现: Code block Python loss mel = F.l1 loss(y mel, y g hat mel) 上述代码中,y mel 表示真实语音对应的梅尔频谱,y g hat mel 表示梅尔频谱合成语音之后,合成语音又转换回来得到的梅尔频谱。 特征匹配损失 特征匹配损失是用来度量神经网络从真实和合成语音中提取的特征差异,具体来说,就是计算真实和合成语音经过特征提取层之后输出之间的 L1 距离: 其中, 表示判别器中特征提取层的层数, 表示提取的特征, 表示第 层判别器网络提取的特征数量。对应的代码为: Code block Python def feature loss(fmap r, fmap g): loss = 0 for dr, dg in zip(fmap r, fmap g): for rl, gl in zip(dr, dg): loss += torch.mean(torch.abs(rl gl)) return loss 整体损失 1. 生成器的整体损失为: 其中, 和 分别为特征匹配和梅尔频谱损失的加权系数,实验中 $\lambda {fm}=2,\lambda {mel}=45$。 因为 HiFiGAN 的判别器是由多尺度判别器和多周期判别器组成,因此生成器的总体损失又可以写作: 其中, 为多尺度判别器和多周期判别器的个数, 表示第 个 MPD 和 MSD 的子判别器。 对应的代码为: Code block Python L1 Mel Spectrogram Loss loss mel = F.l1 loss(y mel, y g hat mel) 45 y df hat r, y df hat g, fmap f r, fmap f g = mpd(y, y g hat) y ds hat r, y ds hat g, fmap s r, fmap s g = msd(y, y g hat) loss fm f = feature loss(fmap f r, fmap f g) loss fm s = feature loss(fmap s r, fmap s g) loss gen f, losses gen f = generator loss(y df hat g) loss gen s, losses gen s = generator loss(y ds hat g) loss gen all = loss gen s + loss gen f + loss fm s + loss fm f + loss mel 2. 判别器的整体损失为: 类似于生成器,由于 HiFiGAN 拥有多个判别器,因此判别器的整体损失可以写作: 其中, 为多尺度判别器和多周期判别器的个数, 表示第 个 MPD 和 MSD 的子判别器。 对应的代码为: Code block Python MPD y df hat r, y df hat g, , = mpd(y, y g hat.detach()) loss disc f, losses disc f r, losses disc f g = discriminator loss(y df hat r, y df hat g) MSD y ds hat r, y ds hat g, , = msd(y, y g hat.detach()) loss disc s, losses disc s r, losses disc s g = discriminator loss(y ds hat r, y ds hat g) loss disc all = loss disc s + loss disc f 语音合成的总体知识体系 语音合成知识结构如下。 基本组成 语音合成(Speech Synthesis)将文本转换为可听的声音信息,它赋予了像人一样说话的能力,是人机交互的重要接口。一般来说,语音合成的概念比文语转换(Text to Speech,TTS)的涵盖范围更广,语音合成包括 TTS、歌唱合成等领域,但大多数情况下可以混用。awesome tts samples 提供了一些端到端语音合成模型的样例,可以简单感受下目前语音合成的发展。 人类可以通过一整套发音器官合成语音,具体来说,肺相当于动力源,喉相当于调制器,声道相当于滤波器,口唇相当于扩音器。研究人员提出了以源 滤波器(source filter)模型为代表的多种模型建模该过程,语音中存在清音和浊音,分别由声带周期性振动对应的周期声源和声带不振动时紊乱气流对应的非周期声源产生。 当代工业界主流语音合成系统包括文本前端和声学后端两个部分。文本前端将输入文本转换为层次化的语音学表征,主要包括文本规范化、韵律分析和文本转音素等模块。声学后端基于文本前端给出的层次化语言学表征(linguistics feature)来生成语音,主要技术路线包括单元挑选波形拼接、统计参数和端到端语音合成方法,当代主要采用端到端声学后端。端到端声学后端一般包括声学模型和声码器两部分,同时也出现了直接从音素映射为波形的完全端到端语音合成系统。声学模型负责将语言学特征转换为中间声学特征,比如梅尔频谱,直接决定合成语音的韵律;声码器将中间声学特征转换为语音波形,直接决定合成语音的音质。 语音合成与语音识别、机器翻译等问题类似,本质是序列到序列的建模问题,另一方面,语音合成是生成类问题,因此自回归生成、VAE、GAN、Flow、扩散模型等生成模型在语音合成上均有应用。 声音转换 狭义上说,将一个说话人(source speaker)的语音转换到另一个目标说话人(target speaker)的语音,这种语音处理技术称之为声音转换(Voice Conversion,VC)。声音转换包括平行和非平行两种,平行语音转换指的是源、目标语音的内容相同,相对应地,非平行语音转换只改变语音的音色,而对语音内容没有要求。声音转换可以借鉴图像中风格转换的成果,比如 StarGAN VC 等模型。更有效的方法是利用语音识别模型提取说话人无关的中间表征,将该中间表征和说话人信息输入生成模型中,生成具有目标说话人音色的语音,可以借鉴 TTS 的研究成果,将 VITS 等作为高质量合成模型。在声音转换中,基频是一个重要特征。参见:An Overview of Voice Conversion and its Challenges: From Statistical Modeling to Deep Learning 多语种语音合成 多语种语音合成的难点主要有五点: 1. 音库制作和构建。 2. 文本前端的构建。需要制定适用于一个语种语音合成的音素体系,构建该语种的文本规范化规则等,特别地,比如俄语、波斯语、阿拉伯语等语种有性数格的变化,提高了文本前端的复杂性。不同语种间文本前端模块也会有所不同,比如中泰越日等语种需要添加分词模块。 3. 语种中特殊发音现象。西班牙语、俄语等语种的升降调对合成语音自然度影响显著,具体来说,在标点处发音会产生较为明显的上扬、下降、先升后降、先降后升和平调现象。因此文本前端最好给出该升降调信息,声学后端需要将该升降调信息作为重要特征,输入到模型的多个模块中,以协助模型产生准确自然的升降调语音。与此同时,由于升降调是一个语块整体的表现,而非仅仅一个字母或者单词的发音变化,比如西班牙语可以将升降调信息标注到整个 L3 块上,而俄语更适合于仅仅标注到中心词上。 4. 跨语种语音合成。当代语种混杂的语言现象愈发明显,比如中文中夹杂英语单词,这就需要实现语种切换(code switch)和跨语种(cross lingual)语音合成。如果语料中存在单说话人跨语种语料,一般来说,直接训练就可以产生跨语种合成效果。实践中,如果跨语种语料较少,比如仅有 200 句跨语种语料,多个语种混训时共享语种间的音素能够获得更好的合成效果;如果跨语种语料较多,可以仅采用主要语种和跨语种语料进行训练,加入其它语种进行混训相反可能会产生较差的效果。如果没有跨语种语料,可以尝试数据增强方法伪造跨语种语料,比如对单语种语料进行拼接,构造跨语种语料;利用跨语种语音合成大模型伪造训练语料,训练跨语种语音合成模型。 5. 低资源语音合成。语料数量的增加可显著提升合成语音的效果,但世界上的语种数量较多,大部分语种并不存在大量高质量语音合成语料。主要的解决方案有跨语种迁移、跨说话人迁移、语音识别和合成对偶学习,以及无监督训练。参见论文速览:低资源语音合成。 1. Latorre J, Bailleul C, Morrill T, et al. Combining Speakers of Multiple Languages to Improve Quality of Neural Voices[J]. arXiv preprint arXiv:2108.07737, 2021. 进阶 语音合成存在比较多的扩展应用,比如: 1. 高表现力语音合成。 2. 个性化语音合成。 3. 情感合成和韵律迁移。 4. 方言迁移。 5. 歌唱合成。 6. 有声人脸合成(talking face synthesis)。 7. 语音合成的稳定性。 8. 语音合成的效率优化。 本部分可参考相关论文和 A Survey on Neural Speech Synthesis 了解具体技术方案。 高表现力语音合成 在交互、小说阅读等应用场景中,对合成语音的表现力要求较高,而表现力由内容、说话人音色、韵律、情感和风格等多个因素决定,因此高表现力语音合成实际涵盖了内容、音色、韵律、情感和风格的建模、分离和控制。 语音中包含的信息可以分为如下四类: 1. 字符或音素,也就是语音的内容。可以通过预训练词嵌入增强合成语音的表现力和质量,或者加入一些额外的信息,比如升降调信息、采用 fulllab 能够增强模型表现力和稳定性。fulllab 及传统语音合成采用的文本、声学特征参见:jsut lab、HTS Data README。 2. 说话人或音色。多说话人语音合成模型可以通过说话人嵌入向量或单独的说话人编码器(speaker encoder)对音色特征进行建模。 3. 韵律、风格和情感。这些特征表示"如何说出文本",表征语音中的语调、重音和说话节奏,韵律、风格和情感是高表现力语音合成的建模重点。 4. 录音设备和环境噪音。这些倒是与语音内容、韵律无关,但会显著影响语音质量,因此可以尝试对语音中的噪音等进行控制和分离。对训练语料本身可以提前进行去噪处理,在模型中可以标识带噪语料,以便在合成语音中去除噪音部分。 利用模型建模这些信息的方法很多,有语种、说话人、风格嵌入向量以及音高、时长、能量编码器等显式建模方法,也有 reference encoder、VAE、GAN/Flow/Diffusion、文本预训练等隐式建模方法。 个性化语音合成 个性化语音合成是语音合成中较为热门的方向,主要应用于定制化场景中,利用任意用户的音色合成语音,又称为语音自适应(Voice Adaptation)、语音克隆(Voice Cloning)、定制化语音(Custom Voice)等,通常要求利用 1 分钟以内甚至几秒钟的语料,就可以实现合成目标说话人的任意语音。目前个性化语音合成的难点如下: 最小二乘 GAN(LS GAN) GAN 万字长文综述 awesome tts samples An Overview of Voice Conversion and its Challenges: From Statistical Modeling to Deep Learning 论文速览:低资源语音合成 A Survey on Neural Speech Synthesis jsut lab HTS Data README x 是子判别器展平后的整体输出,大小为\[B,l\];fmap 是经过每一层卷积后的特征图(feature map),类型为 list,元素个数为卷积层数,上述代码中有 6 个卷积层,则 fmap 元素个数为 6,每个元素是大小为\[B,C,l',period\]的张量。 损失函数简介 HiFiGAN 的损失函数主要包括三块,一个是 GAN 原始的生成对抗损失(GAN Loss);第二是梅尔频谱损失(Mel Spectrogram Loss),将生成音频转换回梅尔频谱之后,计算真实和生成音频对应梅尔频谱之间的 L1 距离;第三是特征匹配损失(Feature Match Loss),主要是对比真实和合成音频在中间卷积层上的差异。 生成对抗损失 HiFiGAN 仍然是一个生成对抗网络,判别器计算输入是真实样本的概率,生成器生成以假乱真的样本,最终达到生成器合成接近真实的样本,以致于判别器无法区分真实和生成样本。HiFiGAN 使用最小二乘 GAN(LS GAN),将原始 GAN 中的二元交叉熵替换为最小二乘损失函数。判别器的生成对抗损失定义为: 最小二乘 GAN(LS GAN) 对应的代码实现: 生成器的生成对抗损失定义为: 其中, 表示真实音频, 表示梅尔频谱。 对应的生成器代码实现: 更详尽关于 GAN 的理论参见:GAN 万字长文综述 GAN 万字长文综述 梅尔频谱损失 借鉴 Parallel WaveGAN 等前人工作,向 GAN 中引入重建损失和梅尔频谱损失可以提高模型训练初期的稳定性、生成器的训练效率和合成语音的自然度。具体来说,梅尔频谱损失就是计算合成和真实语音对应频谱之间的 L1 距离: 其中, 表示将语音转换为梅尔频谱的映射函数。 对应的损失函数实现: 上述代码中,y mel 表示真实语音对应的梅尔频谱,y g hat mel 表示梅尔频谱合成语音之后,合成语音又转换回来得到的梅尔频谱。 特征匹配损失 特征匹配损失是用来度量神经网络从真实和合成语音中提取的特征差异,具体来说,就是计算真实和合成语音经过特征提取层之后输出之间的 L1 距离: 其中, 表示判别器中特征提取层的层数, 表示提取的特征, 表示第 层判别器网络提取的特征数量。对应的代码为: 整体损失 1. 生成器的整体损失为: 其中, 和 分别为特征匹配和梅尔频谱损失的加权系数,实验中 $\lambda {fm}=2,\lambda {mel}=45$。 因为 HiFiGAN 的判别器是由多尺度判别器和多周期判别器组成,因此生成器的总体损失又可以写作: 其中, 为多尺度判别器和多周期判别器的个数, 表示第 个 MPD 和 MSD 的子判别器。 对应的代码为: 2. 判别器的整体损失为: 类似于生成器,由于 HiFiGAN 拥有多个判别器,因此判别器的整体损失可以写作: 其中, 为多尺度判别器和多周期判别器的个数, 表示第 个 MPD 和 MSD 的子判别器。 对应的代码为: 语音合成的总体知识体系 语音合成知识结构如下。 基本组成 语音合成(Speech Synthesis)将文本转换为可听的声音信息,它赋予了像人一样说话的能力,是人机交互的重要接口。一般来说,语音合成的概念比文语转换(Text to Speech,TTS)的涵盖范围更广,语音合成包括 TTS、歌唱合成等领域,但大多数情况下可以混用。awesome tts samples 提供了一些端到端语音合成模型的样例,可以简单感受下目前语音合成的发展。 awesome tts samples 人类可以通过一整套发音器官合成语音,具体来说,肺相当于动力源,喉相当于调制器,声道相当于滤波器,口唇相当于扩音器。研究人员提出了以源 滤波器(source filter)模型为代表的多种模型建模该过程,语音中存在清音和浊音,分别由声带周期性振动对应的周期声源和声带不振动时紊乱气流对应的非周期声源产生。 当代工业界主流语音合成系统包括文本前端和声学后端两个部分。文本前端将输入文本转换为层次化的语音学表征,主要包括文本规范化、韵律分析和文本转音素等模块。声学后端基于文本前端给出的层次化语言学表征(linguistics feature)来生成语音,主要技术路线包括单元挑选波形拼接、统计参数和端到端语音合成方法,当代主要采用端到端声学后端。端到端声学后端一般包括声学模型和声码器两部分,同时也出现了直接从音素映射为波形的完全端到端语音合成系统。声学模型负责将语言学特征转换为中间声学特征,比如梅尔频谱,直接决定合成语音的韵律;声码器将中间声学特征转换为语音波形,直接决定合成语音的音质。 语音合成与语音识别、机器翻译等问题类似,本质是序列到序列的建模问题,另一方面,语音合成是生成类问题,因此自回归生成、VAE、GAN、Flow、扩散模型等生成模型在语音合成上均有应用。 声音转换 狭义上说,将一个说话人(source speaker)的语音转换到另一个目标说话人(target speaker)的语音,这种语音处理技术称之为声音转换(Voice Conversion,VC)。声音转换包括平行和非平行两种,平行语音转换指的是源、目标语音的内容相同,相对应地,非平行语音转换只改变语音的音色,而对语音内容没有要求。声音转换可以借鉴图像中风格转换的成果,比如 StarGAN VC 等模型。更有效的方法是利用语音识别模型提取说话人无关的中间表征,将该中间表征和说话人信息输入生成模型中,生成具有目标说话人音色的语音,可以借鉴 TTS 的研究成果,将 VITS 等作为高质量合成模型。在声音转换中,基频是一个重要特征。参见:An Overview of Voice Conversion and its Challenges: From Statistical Modeling to Deep Learning An Overview of Voice Conversion and its Challenges: From Statistical Modeling to Deep Learning 多语种语音合成 多语种语音合成的难点主要有五点: 1. 音库制作和构建。 2. 文本前端的构建。需要制定适用于一个语种语音合成的音素体系,构建该语种的文本规范化规则等,特别地,比如俄语、波斯语、阿拉伯语等语种有性数格的变化,提高了文本前端的复杂性。不同语种间文本前端模块也会有所不同,比如中泰越日等语种需要添加分词模块。 3. 语种中特殊发音现象。西班牙语、俄语等语种的升降调对合成语音自然度影响显著,具体来说,在标点处发音会产生较为明显的上扬、下降、先升后降、先降后升和平调现象。因此文本前端最好给出该升降调信息,声学后端需要将该升降调信息作为重要特征,输入到模型的多个模块中,以协助模型产生准确自然的升降调语音。与此同时,由于升降调是一个语块整体的表现,而非仅仅一个字母或者单词的发音变化,比如西班牙语可以将升降调信息标注到整个 L3 块上,而俄语更适合于仅仅标注到中心词上。 4. 跨语种语音合成。当代语种混杂的语言现象愈发明显,比如中文中夹杂英语单词,这就需要实现语种切换(code switch)和跨语种(cross lingual)语音合成。如果语料中存在单说话人跨语种语料,一般来说,直接训练就可以产生跨语种合成效果。实践中,如果跨语种语料较少,比如仅有 200 句跨语种语料,多个语种混训时共享语种间的音素能够获得更好的合成效果;如果跨语种语料较多,可以仅采用主要语种和跨语种语料进行训练,加入其它语种进行混训相反可能会产生较差的效果。如果没有跨语种语料,可以尝试数据增强方法伪造跨语种语料,比如对单语种语料进行拼接,构造跨语种语料;利用跨语种语音合成大模型伪造训练语料,训练跨语种语音合成模型。 5. 低资源语音合成。语料数量的增加可显著提升合成语音的效果,但世界上的语种数量较多,大部分语种并不存在大量高质量语音合成语料。主要的解决方案有跨语种迁移、跨说话人迁移、语音识别和合成对偶学习,以及无监督训练。参见论文速览:低资源语音合成。 论文速览:低资源语音合成 1. Latorre J, Bailleul C, Morrill T, et al. Combining Speakers of Multiple Languages to Improve Quality of Neural Voices[J]. arXiv preprint arXiv:2108.07737, 2021. 1. Latorre J, Bailleul C, Morrill T, et al. Combining Speakers of Multiple Languages to Improve Quality of Neural Voices[J]. arXiv preprint arXiv:2108.07737, 2021. 进阶 语音合成存在比较多的扩展应用,比如: 1. 高表现力语音合成。 2. 个性化语音合成。 3. 情感合成和韵律迁移。 4. 方言迁移。 5. 歌唱合成。 6. 有声人脸合成(talking face synthesis)。 7. 语音合成的稳定性。 8. 语音合成的效率优化。 本部分可参考相关论文和 A Survey on Neural Speech Synthesis 了解具体技术方案。 A Survey on Neural Speech Synthesis 高表现力语音合成 在交互、小说阅读等应用场景中,对合成语音的表现力要求较高,而表现力由内容、说话人音色、韵律、情感和风格等多个因素决定,因此高表现力语音合成实际涵盖了内容、音色、韵律、情感和风格的建模、分离和控制。 语音中包含的信息可以分为如下四类: 1. 字符或音素,也就是语音的内容。可以通过预训练词嵌入增强合成语音的表现力和质量,或者加入一些额外的信息,比如升降调信息、采用 fulllab 能够增强模型表现力和稳定性。fulllab 及传统语音合成采用的文本、声学特征参见:jsut lab、HTS Data README。 jsut lab HTS Data README 2. 说话人或音色。多说话人语音合成模型可以通过说话人嵌入向量或单独的说话人编码器(speaker encoder)对音色特征进行建模。 3. 韵律、风格和情感。这些特征表示"如何说出文本",表征语音中的语调、重音和说话节奏,韵律、风格和情感是高表现力语音合成的建模重点。 4. 录音设备和环境噪音。这些倒是与语音内容、韵律无关,但会显著影响语音质量,因此可以尝试对语音中的噪音等进行控制和分离。对训练语料本身可以提前进行去噪处理,在模型中可以标识带噪语料,以便在合成语音中去除噪音部分。 利用模型建模这些信息的方法很多,有语种、说话人、风格嵌入向量以及音高、时长、能量编码器等显式建模方法,也有 reference encoder、VAE、GAN/Flow/Diffusion、文本预训练等隐式建模方法。 个性化语音合成 个性化语音合成是语音合成中较为热门的方向,主要应用于定制化场景中,利用任意用户的音色合成语音,又称为语音自适应(Voice Adaptation)、语音克隆(Voice Cloning)、定制化语音(Custom Voice)等,通常要求利用 1 分钟以内甚至几秒钟的语料,就可以实现合成目标说话人的任意语音。目前个性化语音合成的难点如下: 1. 相似度。仅利用少量语料,很难覆盖完全目标说话人一个语种的所有音素发音,因此要求模型需要拥有一定的泛化能力。实践中,利用目标语料微调整个模型或者声学模型的解码器往往能够大幅提升合成语音的相似度,也有一些工作尝试不进行微调,但相似度一般较低。 2. 稳定性。个性化语音合成在推断时,目标音色一般不在训练集中,因此会让原本脆弱的端到端后端模型合成失败,如果采用微调方案,则尤甚。因此一些带有先验的注意力机制,或者直接利用时长模型替代注意力机制的模型,在这种场景下拥有一定优势。 3. 微调效率。如上所述,整体或解码器微调往往能够提升相似度,但模型微调会带来一定的模型训练时间。 方言迁移 方言迁移一般是指跨方言迁移目标说话人的音色,比如利用普通话发音人说上海话、四川话或粤语,与说话人迁移有些类似,但任务难度比跨语种说话人迁移要简单一些。可以采用"多方言编码器+说话人梯度反转+共享解码器+VAE+多方言混训"的方案解决,也可以尝试类似声音转换的方案:利用语音识别声学模型提取说话人无关的发音内容,然后利用语音合成模型输入该说话人无关的发音内容特征,并加入目标音色,从而实现方言迁移。 歌唱合成 音乐是一个复杂的学科,而音乐合成几乎是另一个领域。 旋律、和声、节奏是音乐的三要素。旋律是音乐的主线,它决定了音乐的调性、曲式和进程,是音乐的灵魂。但如果只有主旋律的话,音乐就显得单调。和声用来哄托主旋律,丰富乐曲的"厚度",节奏强化风格。音乐的创作过程包括:作词作曲(Lyric/Melody),伴奏/谱曲,歌唱合成/乐音合成,混音四个基本步骤,而歌唱合成仅仅探讨第三步,利用已有的乐谱合成人类歌唱的声音。 1. 歌唱合成的任务定义: a. 输入:歌词、音高(基频)、节拍(时长) b. 输出:歌唱声音 a. 输入:歌词、音高(基频)、节拍(时长) b. 输出:歌唱声音 2. 和 TTS 相比: a. 增加了额外的输入:音高、节拍(时长),输出更广范围的声调,更多变化的音素 b. 更加侧重于感情和表达,而非语音本身的内容 a. 增加了额外的输入:音高、节拍(时长),输出更广范围的声调,更多变化的音素 b. 更加侧重于感情和表达,而非语音本身的内容 3. 困难点: a. 数据 i. 数据量少 ii. 质量要求高(歌唱与指定音高、时长的符合程度要求高),标注困难 iii. 难以全面覆盖所有的音高,歌手的声音范围有限,无法覆盖所有的音高 b. 容错率低 i. 音调准确率要求高,简谱基本决定了基频,先验比较强,"跑调"容易听出来 ii. 卡拍子 c. 歌唱额外的特点:比如颤音,转调等 a. 数据 i. 数据量少 ii. 质量要求高(歌唱与指定音高、时长的符合程度要求高),标注困难 iii. 难以全面覆盖所有的音高,歌手的声音范围有限,无法覆盖所有的音高 i. 数据量少 ii. 质量要求高(歌唱与指定音高、时长的符合程度要求高),标注困难 iii. 难以全面覆盖所有的音高,歌手的声音范围有限,无法覆盖所有的音高 b. 容错率低 i. 音调准确率要求高,简谱基本决定了基频,先验比较强,"跑调"容易听出来 ii. 卡拍子 i. 音调准确率要求高,简谱基本决定了基频,先验比较强,"跑调"容易听出来 ii. 卡拍子 c. 歌唱额外的特点:比如颤音,转调等 歌唱合成实际和语音合成十分类似,只是文本输入信息更为丰富,因此可以引入单独的模块建模音高和时长,实际上语音合成中 FastSpeech 2 这些显式建模语音中音高、时长特征的声学模型,可以直接拿来作为歌唱合成的基线,当然也出现了更好的歌唱合成技术方案,参见歌唱合成:数据集的构建,以 Opencpop 为例、歌唱合成:基于 VITS 的歌唱合成声学模型 VISinger、歌唱合成:高品质歌唱合成声码器 SingGAN、muzic 等。 歌唱合成:数据集的构建,以 Opencpop 为例 歌唱合成:基于 VITS 的歌唱合成声学模型 VISinger 歌唱合成:高品质歌唱合成声码器 SingGAN muzic 语音合成的稳定性 端到端语音合成自然度优势明显,但容易出现合成无法停止、调字、重复等合成缺陷,这在生产上是致命的。可以尝试从如下三个方面入手: 1. 训练数据。训练语料中的音频尽量降低背景噪音;控制前后静音段和句中静音,每个句子的前后静音段尽可能一致,句中 L1/L3 的停顿时长尽可能裁剪统一;确保文本标注和实际音频一一对应。 2. 模型。合成语音的正确性是语音合成的基本要求,因此语音合成的稳定性有较多的研究工作。主要思路有: a. 增强注意力机制。由于语音合成任务具有单调性的特点,也就是输入音素一定是从左到右合成,因此可以利用该特点加入先验知识进行合成。 b. 利用时长模型取代注意力机制。 c. 增强自回归过程。比如减少训练、推断时的不匹配,知识蒸馏,教师强制等方法。 d. 采用非自回归合成方法。输入序列进来之后一把出,防止自回归生成带来的累积误差。 a. 增强注意力机制。由于语音合成任务具有单调性的特点,也就是输入音素一定是从左到右合成,因此可以利用该特点加入先验知识进行合成。 b. 利用时长模型取代注意力机制。 c. 增强自回归过程。比如减少训练、推断时的不匹配,知识蒸馏,教师强制等方法。 d. 采用非自回归合成方法。输入序列进来之后一把出,防止自回归生成带来的累积误差。 3. 后处理。比如统计音库中平均音素时长,合成时统计输入音素个数,计算该句子"平均时长",合成语音的时长超过"平均时长"的 30%则认为合成没有正常停止,裁剪该合成语音。 语音合成的效率优化 语音合成在投入使用时,除了纯工程的优化之外,模型侧也可以进行效率优化。主要的思路有: 1. 并行生成。该方法对于利用 GPU 推断的云端模型效果较好,但是对于 CPU 推断的端侧模型效果一般。 2. 轻量化模型。删除模型中不必要的模块,缩减网络节点数,进行模型裁剪、量化和剪枝。 3. 引入领域知识。利用沉淀已久的信号处理方法加速语音合成过程,比如线性预测、多子带建模、多帧并行预测、小尺度预测(subscale prediction)。 抛砖引玉,期待诸位不吝赐教,为开源出一份力 抛砖引玉,期待诸位不吝赐教,为开源出一份力 最新信息 • 语音论文 Audio Plaza:每日追踪最新语音 paper / 项目 / 资源 语音论文 Audio Plaza • 语音资源 Speech Trident:最新语音 LM 模型论文 语音资源 Speech Trident • 语音领域初创公司 语音领域初创公司 • 语音之家Speech Home 助力AI语音开发者的社区 语音之家Speech Home 助力AI语音开发者的社区 推荐教程 • 【台大李宏毅】公开课 迈向语音版ChatGPT 【台大李宏毅】公开课 迈向语音版ChatGPT • A book on “Neural Text to Speech Synthesis”, by Xu Tan has been published by Springe A book on “Neural Text to Speech Synthesis”, by Xu Tan has been published by Springe • A list of open resources for learning and working with digital signal processing. A list of open resources for learning and working with digital signal processing. • B站 Up主 Bugyu ld 的语音系列教程 B站 Up主 Bugyu ld 的语音系列教程 • 【feiteng】GPT、Diffusion、FlowMatching:新一代语音生成大模型的秘密 【feiteng】GPT、Diffusion、FlowMatching:新一代语音生成大模型的秘密 声明 基于冬色 cnlinxi 的博客:https://cnlinxi.github.io/blog/ 新增了一些内容;转载已获得原作者同意;许可协议:Apache 2.0 License 语音合成概述 背景和概述 语音合成(Speech Synthesis),大部分情况下与文语转换(Text to Speech,TTS)同义,是一种将文本转换为语音的技术,是人工智能的子领域之一,赋予机器像人一样自如说话能力的技术,是人机语音交互中重要的一环。语音合成的研究历史可追溯至 18 至 19 世纪,从早期的基于规则的机械式、电子式语音合成器,到基于波形拼接、统计参数的语音合成。近年来,基于深度学习(Deep Learning)和神经网络(Neural Network)的建模方法在机器学习领域各个任务上都取得了快速的发展,语音合成技术也在此基础上得到了显著的提升。随着信息技术及人工智能技术的发展,各种应用场景对语音合成的效果有了越来越高的要求。 背景介绍 语音是最方便最自然的人机交互方式之一,随着近年来智能手机等智能终端的迅速发展,人机语音交互收到了越来越多的关注。人机语音交互