CosyVoice2 论文
- 2024.12 CosyVoice 2: Scalable Streaming Speech Synthesis with Large Language Models(流式合成)
- paper code: 公开推理和权重,训练过程需要在CosyVoice的基础上修改下。
zero-shot TTS models 零样本 TTS 模型
codec language models 编解码器语言模型
-
speech codec model to extract discrete speech representation:
-
speech codec model + autoregressive model to predict the speech tokens (acoustic tokens):
-
speech codec model (speech semantics Codec) + non-autoregressive masked model to predict the speech tokens (acoustic tokens):
-
codec model (speech acoustic Codec) or vocoder to synthesize waveforms from mel-spectrograms:
-
2023.6 Vocos: Closing the gap between time-domain and Fourier-based neural vocoders for high-quality audio synthesis | paper code | 推理速度快:运行速度比 HiFi-GAN 快约 13 倍,比 BigVGAN 快近 70 倍。在没有 GPU 加速的情况下运行时,这种速度优势尤其明显。这主要是由于使用了短时傅里叶逆变换(ISTFT)算法而不是转置卷积。还评估了 Vocos 的一个变体,它利用 ResBlock 的扩张卷积而不是 ConvNeXt 块。在 GPU 上执行时,深度可分离卷积可提供额外的加速。
-
2023.12 WaveNeXt: ConvNeXt-Based Fast Neural Vocoder Without ISTFT layer | demo samples | paper code基于 ESPNet2-TTS | 一种新型的基于ConvNeXt的快速神经声码器WaveNeXt,它通过替换Vocos中的逆短时傅里叶变换(iSTFT)层为可训练的线性层,直接预测语音波形样本,而不依赖于STFT频谱。这一改进不仅保持了Vocos的快速推理速度,还提高了语音合成的质量。文章还探讨了如何将WaveNeXt与基于JETS的端到端文本到语音(E2E TTS)框架集成,并研究了采样频率为48kHz的全带模型(Full-band Model:能够处理和生成覆盖整个音频频谱范围的模型,通常是指能够处理从最低频到最高频的完整音频信号的模型)。实验结果表明,WaveNeXt在分析-合成和E2E TTS条件下均优于Vocos,同时保持了快速推理的能力。
-
feature diffusion models 特征扩散模型
DDPM + CFM + NAR(non-autoregressive) model, 没有 codec
-
Base module:
- Denoising Diffusion Probabilistic Model(DDPM): 2020.6 Denoising Diffusion Probabilistic Models | paper code
- Conditional Flow Matching (CFM): 2022.10 Flow Matching for Generative Modeling | CFM lib
-
the alignment modeling between input text and synthesized speech:
-
phoneme-level duration model:
- 2024.5 NaturalSpeech 3 and 2023.6 Voicebox use frame-wise phoneme alignment;
- 2023.9 Matcha-TTS adopts monotonic alignment search(MAS) and relies on phoneme-level duration model;
- 2024.6 E2 TTS 和2024.6 Seed-TTS 研究表明在文本和语音之间引入这种僵化和不灵活的对齐方式会阻碍模型生成更自然的结果。
-
E3 TTS 放弃音素级持续时间并对输入序列应用交叉注意力,但产生的音频质量有限;
-
DiTTo-TTS 使用扩散变换器 (DiT) ,并以来自预训练语言模型的编码文本为条件进行交叉注意。为了进一步增强对齐,它使用预训练的语言模型来微调神经音频编解码器,将语义信息注入生成的表示中;
-
相比之下,基于 Voicebox的 E2 TTS采用了更简单的方法,删除了音素和持续时间预测器,直接使用填充token填充到梅尔频谱图长度的字符作为输入。这个简单的方案也实现了非常自然和真实的合成结果。然而,F5-TTS 发现 E2 TTS 中文本和语音对齐存在鲁棒性问题。
-
2024.6 Seed-TTS 采用了类似的策略并取得了优异的结果,尽管没有详细说明模型细节。在这些未明确建模音素级持续时间的方法中,模型学习根据给定的总序列长度分配每个单词或音素的长度,从而改进韵律和节奏。
-
-
2024.10 F5-TTS: A fairytaler that fakes fluent and faithful speech with flow matching 保持了管道的简单性,无需音素对齐、持续时间预测器、文本编码器和语义注入编解码器模型,利用带有 ConvNeXt V2|paper code 的Diffusion Transformer(DiT)来更好地解决上下文学习期间的文本语音对齐问题。
codec language and feature diffusion hybrid systems 混合系统
text-to-codec language model 和 codec-to-feature diffusion model
语言模型解决文本和语音之间的对齐以及话语持续时间预测,而编解码器到特征扩散模型则根据生成的编解码器和其他条件合成语音特征(梅尔谱)。通过利用两种生成模型的优势,混合系统实现了高度多样性、韵律一致性和语音质量。
language model-based zero-shot TTS models streaming synthesis
- 2024.2 BASE TTS: Lessons from building a billion-parameter Text-to-Speech model on 100K hours of data | 小红书的FireRedTTS 来源于此 FireRedTTS paper code
- 2024.6 LiveSpeech: Low-Latency Zero-shot Text-to-Speech via Autoregressive Modeling of Audio Discrete Codes
- 2024.9 Speak While You Think: Streaming Speech Synthesis During Text Generation
- 2024.10 Zero-Shot Text-to-Speech from Continuous Text Streams
CosyVoice2
Cosyvoice2 对 Cosyvoice 进行了升级,主要包括如下四点:(模型精简消融,可替换同类型不同参数量的文本LLMs,提高码本利用率,无损流式合成,语义-声学解耦建模,指令和零样本能力模型整合)
- 将流式和非流式合成统一在单一框架中,并提出统一的文本语音语言模型和块感知因果流匹配模型(chunk-aware causal flow matching model),从而实现与离线模式相比的无损流式合成。
- 通过**删除文本编码器(text encoder)和说话人嵌入(speaker embedding)**来简化LM 架构,允许预先训练的文本大语言模型( LLMs ) 作为骨干,增强上下文理解。
- 用有限标量量化 (finite scalar quantization FSQ | 2023.9 Finite Scalar Quantization: VQ-VAE Made Simple| paper code) 取代语音token器中的矢量量化 (VQ),提高码本利用率并捕获更多语音信息。
- 升级指令TTS 能力,支持更多指令,包括情感、口音、角色风格和细粒度控制。在 CosyVoice 2 中,指令和零样本能力被集成到一个模型中,从而实现更通用和生动的合成。
CosyVoice 2 基于其前身的设计理念,通过分离语音信号的语义和声学信息,并独立地对它们进行建模。语音生成过程被重新定义为一个逐步的语义解码过程,在此过程中逐步引入条件信息。
- 文本-语音语言模型(LM)仅关注语义信息,将高级文本token解码为受监督的语义speech token。
- 在流匹配模型中,通过speaker embedding和参考语音引入声学细节(如音色),将speech token转换为给定说话人的 Mel 频谱。
- 最后,预训练的声码器模型恢复相位,将 Mel 频谱转换回原始音频信号。
以下将详细介绍 CosyVoice 2 以及为流式合成所做的修改,从五个方面进行阐述:
- 文本tokenizer
- 受监督的语义speech tokenizer
- 统一的文本-语音 LM
- 流式/非流式合成
- 块感知流匹配模型
文本tokenizer
CosyVoice 2 直接使用原始文本作为输入,通过基于 BPE 的文本tokenizer进行token化。这消除了需要通过图音转换(g2p)获取音素的前端模型的需求。这种方法不仅简化了数据预处理流程,还使模型能够以端到端的方式学习不同上下文中单词的发音。与文本 LLM 中常用的tokenizer不同,CosyVoice 2 会屏蔽掉一对多的token。这可以防止token的发音变得过长,并减少由于数据稀疏性引起的边缘情况。具体来说,如果一个 BPE token编码了多个中文字符,它将被屏蔽,并且在token化过程中每个字符将分别进行编码。其他语言,如英语、日语和韩语,不进行特殊处理。
受监督的语义speech tokenizer
将有限标量量化(FSQ)模块插入到 SenseVoice-Large ASR 模型的编码器中。在训练阶段,输入语音 X 通过 $Encoder_1$ 获取中间表示,其中 $Encoder_1$ 由六个带有旋转位置嵌入的 Transformer 块组成。然后,中间表示被送入 FSQ 模块进行量化,量化后的表示通过 SenseVoice-Large 的其余模块,包括 $Encoder_2$ 和 ASR Decoder,以预测对应文本token的后验概率。 在 FSQ 模块中,中间表示 $H$ 首先被投影到一个 $D$ 维的低秩空间中,每个维度的值通过有界四舍五入操作 ROUND 量化为 $[-K, K]$ 。然后,量化后的低秩表示 $\bar{H}$ 被投影回原始维度 $\tilde{H}$ 以供后续模块使用:
$$ \bar{H} = \text{ROUND}(\text{Proj}_{\text{down}}(H)); $$
$$ \hat{H} = \text{Proj}_{\text{up}}(\bar{H}) $$
在训练阶段,使用直通估计来近似 FSQ 模块和 Encoder1 的梯度。speech token $\mu_i$ 可以通过计算量化后的低秩表示 $\bar{h}_i$ 在 $(2K + 1)$ 进制系统中的索引来获得:
$$ \mu_i = \sum_{j=0}^{D-1} \bar{h}_{i,j} (2K + 1)^j $$
$Encoder_1$、FSQ 模块的低秩投影器、有界四舍五入操作和索引计算构成了 CosyVoice 2 的speech tokenizer。peech tokenizer的工作速率为每秒 25 个speech token,即每秒 25 个speech token。
统一的文本-语音语言模型(Unified Text-Speech Language Model)
在 CosyVoice 2 中,使用预训练的文本 LLM,Qwen2.5-0.5B,作为文本-语音语言模型,以输入文本为提示自回归地生成speech token。与其它语言模型类似,文本-语音 LM 也以下一个token预测方案进行训练,与之前的 CosyVoice 不同:
- 去除了speaker embedding以避免信息泄露。发现这种话语级向量不仅包含说话人身份,还包含语言和副语言信息(paralanguage information: 指在口语交流中,除了语言内容本身之外的其他声音特征和表达方式。这些信息虽然不直接涉及语言的词汇或语法结构,但对理解和传达说话人的意图、情感和态度等方面起着重要作用),这会损害文本-语音 LM 的语调自然度和跨语言能力。
- 放弃了之前 CosyVoice 的 text encoder,因为发现 Qwen2.5-0.5B 模型足够强大,能够对齐文本和speech token,因此不再需要text encoder。
LM流式/非流式合成(streaming and non-streaming synthesis)
得益于文本-语音 LM 的简洁性,可以构建一个统一的模型,用于流式和非流式合成。在这里,“流式模式(Streaming mode)”意味着输入文本是连续接收的,而不是预先作为完整句子已知的。在 CosyVoice 2 中,流式和非流式模式之间的区别仅在于 LM 的序列构建方式:
- 非流式模式(Non-Streaming mode):将“序列开始” $S$ 、所有文本token、“话语转换”token $T$ 、所有speech token和“序列结束” $E$ 依次连接,如图 2 底部所示。忽略token意味着在最小化交叉熵目标函数时忽略它们的损失。
- 流式模式(Streaming mode):将文本和speech token以预定义的比例 $N:M$ 混合,即每 $N$ 个文本token后面跟随 $M$ 个speech token。如果下一个token是文本token,模型期望预测一个填充token(而不是文本token),这表示在推理阶段应将接下来的 $N$ 个文本token连接起来。一旦文本token用完,“话语转换”token $T$ 和剩余的speech token将依次连接,形成流式模式中的混合文本-speech token序列。在的实验中, $N$ 和 $M$ 分别设置为 5 和 15。
通过同时在上述两种序列上训练文本-语音 LM,可以在单个统一模型中执行流式和非流式语音生成。在实际场景中,例如说话人微调(SFT)和上下文学习(ICL),推理序列有所不同:
- ICL,非流式:在 ICL 中,LM 需要参考音频的提示文本和speech token来模仿口音、语调、情感和风格。在非流式模式中,提示和待合成的文本token被作为一个整体连接起来,提示speech token被视为预生成的结果并固定:“ $S$ ,提示文本,文本, $T$ ,提示语音”。LM 的自回归生成从这样的序列开始,直到检测到“序列结束”token $E$ 。
- ICL,流式:在这种情况下,假设待生成的文本已经已知,speech token应以流式方式生成。同样,将提示和待生成的文本作为一个整体处理。然后,将它们与提示speech token以 $N:M$ 的比例混合:“ $S$ ,混合文本语音, $T$ ,剩余语音”。如果文本的长度大于提示speech token的长度,LM 将生成“填充token”。在这种情况下,手动填充 $N$ 个文本token。如果文本token用完,“话语转换”token $T$ 将被添加。在流式模式中,每生成 $M$ 个token就返回一次生成结果,直到检测到 $E$ 。
- SFT,非流式:在 SFT 场景中,LM 在特定说话人上进行微调,提示文本和语音不再需要。因此,初始序列非常简单:“ $S$ ,文本, $T$ ”。从这里开始,文本-语音 LM 可以自回归地生成speech token,直到 $T$ 。
- SFT,流式:在 SFT 的流式模式中,从以下序列开始语音生成:“ $S$ ,前 $N$ 个文本”。然后,LM 将生成 $M$ 个speech token,手动填充接下来的 $N$ 个文本token。重复上述过程,直到所有文本token用完,然后添加 $T$ 。注意,这种模式也可以被语音到语音多模态大型语言模型采用,以获得极低的延迟。
块感知流匹配(Chunk-aware Flow Matching)
在 CosyVoice 2 中,使用 Mel 频谱作为声学特征,帧率为 50 Hz,采样率为 24000。由于speech token和 Mel 特征之间的帧率不匹配,将speech token上采样两倍以匹配 Mel 频谱的帧率。在上采样操作之前,添加了一个额外的前瞻卷积层,为后续的因果模块提供未来信息。前瞻层通过一个右填充的 1-D 卷积实现,填充大小为 $P$ ,核大小为 $P + 1$ 。之后,跟随几个块感知因果 Transformer 块,以对齐speech token的表示空间以匹配声学特征。
随后,目标是进一步将speech token解码为由speaker embedding和参考语音指定的 Mel 频谱。为了实现这一点,使用条件流匹配(CFM)模型来采样 Mel 频谱,给定speech token、参考语音和speaker embedding作为条件。在 CFM 模型中,目标 Mel 频谱的分布由从先验分布 $p_0(X)$ 和数据分布 $q(X)$ 的概率密度路径描述。概率密度路径可以由一个时间依赖的向量场定义。为了采样效率,使用最优传输(OT)流来匹配向量场 $\omega_t$ ,由一个常微分方程(ODE)给出:
$$ \omega_t(\phi^{\text{OT}}_t(X_0, X_1) | X_1) = X_1 - X_0 $$
$$ \phi^{\text{OT}}_t(X_0, X_1) = (1 - t)X_0 + tX_1 $$
$$ X_0 \sim p_0(X) = \mathcal{N}(0, I) $$
$$ X_1 \sim q(X) $$
一个因果卷积 Transformer UNet 被用来学习上述 ODE,以上采样的token $\mu$、掩蔽的 Mel 频谱 $\tilde{X}_1$ 、speaker embedding $v$ 和时间步 $t$作为条件:
$$ \nu_t(\phi^{\text{OT}}_t(X_0, X_1) | \theta) = \text{UNet}_\theta \left( \phi^{\text{OT}}_t(X_0, X_1), t; v, {\mu}_{1:L}, \tilde{X}_1 \right) $$
在训练阶段,掩蔽的 Mel 频谱是通过随机掩蔽 $X_1$ 中 70% 到 100% 的最终帧获得的。对于推理,它由参考语音提取的 Mel 频谱提供。通过最小化预测和真实 ODE 之间的 L1 损失,可以优化 UNet 参数 $\theta$ : $$ \theta = \arg\min_\theta \mathbb{E}_{p_0(X), q(X), t} \left[ \left| \omega_t(\phi^{\text{OT}}_t(X_0, X_1)) - \nu_t(\phi^{\text{OT}}_t(X_0, X_1) | \theta; \mu, \tilde{X}_1, v) \right|_1 \right] $$
在训练阶段,时间步遵循均匀分布 $U[0, 1]$ 。然而,在推理过程中,使用余弦调度器为初始生成阶段提供更多步骤: $$ t := 1 - \cos \left( \frac{1}{2} t \pi \right) $$ 此外,还在有条件和无条件的情况下训练模型,以便在推理阶段启用无分类器引导(CFG): $$ \tilde{\nu}_t(\phi^{\text{OT}}_t(X_0, X_1) | \theta; \Psi) = (1 + \beta) \cdot \nu_t(\phi^{\text{OT}}_t(X_0, X_1) | \theta; \Psi) - \beta \cdot \nu_t(\phi^{\text{OT}}_t(X_0, X_1) | \theta) $$ 其中, $ \Psi$ 表示条件 ${v, \mu, \tilde{X}_1}$ 。根据实验结果,CFG 强度 $\beta$ 和流估计次数(NFE)分别设置为 0.7 和 10。 当前的流匹配模型通常在离线模式下工作,即只有在所有speech token生成后,Mel 频谱才能被采样,这对流式合成不够友好。为了克服这个问题,将多步流估计视为一个堆叠的更深的神经网络,重复 UNet 十次。因此,通过使展开的神经网络因果化,可以将其应用于流式合成。构建了四种掩码以满足不同应用场景的需求:
- 非因果掩码(Non-causal Mask):用于离线模式,通过关注所有条件帧来实现最佳性能。非因果掩码适用于延迟不敏感的情况。
- 全因果掩码(Full-causal Mask):为需要极低延迟的场景设计,仅关注过去的帧。
- 块-M 掩码(Chunk-M Mask):在延迟和性能之间取得平衡,可以利用过去和 $M$ 个未来帧的信息。这种掩码更适合于低延迟的首个块生成。
- 块-2M 掩码(Chunk-2M Mask):通过牺牲更多的延迟,实现接近离线模式的性能,可用于级联生成块以获得更好的性能。
对于每个训练案例的小批量,在上述四种掩码中均匀分布地随机采样一个掩码。通过这种方式,一个流匹配模型可以兼容不同场景,降低部署复杂度。此外,块感知训练的另一个优点是,具有更多上下文的掩码作为具有较少上下文的掩码的教师,受益于隐式的自蒸馏方案。
流式模式的延迟分析(Latency Analysis for Streaming Mode)
流式合成模型的首个包延迟是一个重要的指标,它显著影响用户体验,特别是在基于 LLM 的语音聊天应用中,如 GPT-4o。在 TTS 的背景下,待合成的文本是预先已知的,延迟来自speech token生成、Mel 频谱重建和波形合成的方面。因此,CosyVoice 2 的首个包延迟 $L_{\text{TTS}}$ 可以通过以下公式获得:
$$ L_{\text{TTS}} = M \cdot d_{\text{lm}} + M \cdot d_{\text{fm}} + M \cdot d_{\text{voc}} $$
其中,$d_{\text{lm}}$ 表示生成一个speech token的计算时间, $d_{\text{fm}}$ 表示生成一个speech token的 Mel 频谱帧的计算时间, $d_{\text{voc}}$ 表示合成对应于一个speech token的波形的计算时间。在基于 LLM 的语音聊天中,首个包所需的文本长度也应考虑在内,首个包延迟 $L_{\text{Chat}}$ 变为: $$ L_{\text{Chat}} \leq N \cdot d_{\text{llm}} + L_{\text{TTS}} $$ 其中, $d_{\text{llm}}$ 表示生成一个文本token的计算时间。注意,由于在 CosyVoice 2 的文本tokenizer中屏蔽了多字符token,文本 LLM 使用的文本token总是比 CosyVoice 2 编码更长的原始文本。因此,首个包延迟 $L_{\text{Chat}}$ 必须低于 $N \cdot d_{\text{llm}}$ 和 $L_{\text{TTS}}$ 的总和。
指令式生成 Instructed Generation
为了增强 CosyVoice 2 的可控性,将指令数据集整合到基础训练集中。收集了 1500 小时的指令训练数据,包括自然语言指令和细粒度指令,如表 1 所示。对于自然语言指令,在待合成的输入文本前添加自然语言描述和一个特殊的结束token“<|endofprompt|>”。这些描述涵盖了情感、语速、角色扮演和方言等方面。对于细粒度指令,在文本token之间插入声音爆发,使用token如“[laughter]”和“[breath]”。此外,还将声音特征标签应用于短语;例如,“<strong> XXX</strong>”表示对某些单词的强调,而“<laughter>XXX</laughter>”表示带着笑声说话。
多说话人微调 Multi-Speaker Fine-tuning
在特定说话人上对预训练模型进行微调(SFT)可以进一步提高生成质量和说话人相似性。在本报告中,引入了多说话人微调(mSFT),在多个说话人上同时进行微调,而不是单个说话人。这种方法确保了多个说话人之间全面的语调和发音覆盖,并减轻了预训练模型可能出现的灾难性遗忘。为了避免不同说话人之间的音色混淆,在特定说话人的输入文本前添加说话人提示标签,如“Speaker A<|endofprompt|>”。如果训练样本未token说话人,则使用特殊标签“unknown<|endofprompt|>”。在整个多说话人微调过程中,学习率设置为 $1 \times 10^{-5}$ 。
SFT的强化学习 Reinforcement Learning for SFT
强化学习是大型语言模型训练中常用的方法,可以使 LM 输出与人类偏好对齐。在 CosyVoice 2 中,使用说话人相似性(SS)和 ASR 系统的识别词错误率(WER)作为奖励函数,以在微调阶段提高说话人相似性和发音准确性。使用 WER 和 SS 来区分首选样本 $x_w$ 和被拒绝的样本 $x_l$ ,并使用直接偏好优化(DPO)优化 TTS 系统: $$ L_{\text{DPO}}(\pi_\theta; \pi_{\text{ref}}) = - \log \sigma \left( \beta \log \frac{\pi_\theta(\mu_w|y)}{\pi_{\text{ref}}(\mu_w|y)} - \beta \log \frac{\pi_\theta(\mu_l|y)}{\pi_{\text{ref}}(\mu_l|y)} \right) $$ 其中,$\mu_w$ 和 $\mu_l$ 是从首选和被拒绝的样本 $x_w$ 和 $x_l$ 中提取的speech token。 然而,这种方法耗时且计算量大,因为它需要通过 TTS 系统反复合成音频以获得可区分的首选和被拒绝的样本。在训练过程中,一个训练步骤需要进行四次前向操作。为了简化这个过程,将 LM 预测的token $\mu_i \in {0, 1, \ldots, (2K + 1)^D - 1}$ 恢复为量化后的低秩表示 $\bar{H}$ ,并直接使用speech tokenizer的 ASR 后端重新预测输入文本。然后,将预测的对数后验概率视为 ASR 奖励函数,以优化文本-语音语言模型。在训练过程中,ASR 后端参数被冻结。 $$ \bar{h}_{i,j} = \left\lfloor \frac{\mu_i}{(2K + 1)^j} \right\rfloor \mod (2K + 1) $$
$$ \hat{H} = \text{Proj}_{\text{up}}(\bar{H}) $$
$$ L_{\text{ASR}} = - \log P(Y | \hat{H}; \theta_{\text{ASR}}) $$
其中, $Y$ 是输入文本, $\bar{H}$ 是恢复的语音低秩表示。由于样本操作 $u_i \sim P(\mu_i|\mu_{1:i-1}, Y; \theta_{\text{LM}})$ 仍然阻止直接优化模型,使用 Gumbel Softmax 采样使其可微分,然后通过 $L_{\text{ASR}}$ 优化 $\theta_{\text{LM}}$ 。
实验设置
Speech Tokenizer的训练数据
使用一个200,000小时的数据集来训练Speech Tokenizer,归一化转录作为标签。详细数据信息如表2所示。训练数据来自三个不同的来源:开源ASR数据集、内部工业数据集和TTS生成数据集。尽管在训练Speech Tokenizer时只使用了中文和英文数据,如表2所示,后续实验表明Speech Tokenizer具有其他语言的零样本能力。它也可以用于日语和韩语的语音合成。
语言 | 时长(小时) |
---|---|
中文 | 110,884 |
英文 | 99,918 |
表 2:Speech Tokenizer训练数据的详细信息。
CosyVoice 2的训练数据
CosyVoice 2与其前身版本共享相同的训练数据。首先使用内部语音处理工具收集仅语音数据。随后,分别使用2022. Paraformer和2024. SenseVoice为中文和其他语言生成伪文本标签。还使用内部强制对齐模型过滤低质量数据并增强标点符号的准确性。数据详细信息如表3所示。
语言 | 时长(小时) |
---|---|
中文 | 130,000 |
英文 | 30,000 |
日文 | 4,600 |
韩文 | 2,200 |
表 3:CosyVoice 2的训练数据详细信息。
评估设置
在两个测试集上评估CosyVoice 2。
- 第一个测试集是从Librispeech语料库的test-clean集中构建的,记为test-clean。这个测试集用于评估CosyVoice 2在有限英文领域上的表现。使用Whisper-large V3作为ASR模型来评估内容一致性。对于说话人相似性(SS),使用2023. ERes2Net模型提取提示和生成话语的speaker embeddings,它们的原始余弦相似度被视为说话人相似性。2020. NMOS分数用于评估客观质量。
- 第二个评估是在2024. Seed-TTS SEED测试集上进行的,该测试集广泛用于评估最近的TTS模型,涵盖各种文本领域和参考语音。在这个评估中,从CommonVoice数据集中选择了约2,000个中文和1,000个英文样本,分别记为test-zh和test-en。
- 此外,还包括约400个硬测试案例,用于评估TTS模型在文本重复、绕口令和其他具有挑战性的合成案例上的鲁棒性,记为test-hard。
- 使用Paraformer识别test-zh和test-hard的合成结果,而使用Whisper-large V3评估test-en的内容一致性。
- 采用两个说话人验证(SV)模型来评估说话人相似性:微软的WavLM-finetuned SV模型和阿里3D-Speaker中的ERes2Net,(后续研究还有采用其他模型进行SS评估)。
日语和韩语的基准测试
准备了两个测试集,分别记为test-ja和test-ko,用于评估日语和韩语的语音合成。
- test-ja包含从CommonVoice数据集中提取的1,000个样本,用于测量模型在各种指标上的表现,如WER、SS、MOS。具体来说,随机打乱并配对了整个CommonVoice JA-test集作为参考话语和目标话语。考虑到JA-test集话语文本长度的广泛范围,从8到32个字符的长度范围内随机选择了1,000对参考-目标话语作为的最终测试集。
- 对于test-ko,选择了1,000个语音样本,WER小于5%,且没有删除或插入错误,使用Whisper-Large V3作为ASR模型。这些样本作为韩语语音合成的参考话语。对于输入文本,从剩余数据中随机选择了1,000个文本样本。已经发布了这两个测试集的提示话语、提示转录和输入文本的列表,以方便结果复现。通过提供这个开源数据,旨在建立一个评估日语和韩语TTS模型的基准。
- Whisper-large V3用于日语和韩语的评估。
实验结果
Speech Tokenizer的评估
理想的Speech Tokenizer应有效利用码本,高保真度地保留信息,并表现出说话人独立性。从四个方面评估受监督Speech Tokenizer:
- 码本利用率;
- 整个编码器内的ASR错误率;
- 不同说话人的token可视化;
- 说话人识别训练。
表4显示了码本利用率和ASR错误率。结果表明,基于FSQ的speech tokenizer完全利用了码本,并在ASR方面保持了更多有效信息,表明FSQ保留了更多语义信息。
方法 | 码本大小 | 码本利用率 | ASR错误率 (C.V. EN) | ASR错误率 (C.V. CN) | ASR错误率 (Fluers EN) | ASR错误率 (Fluers CN) |
---|---|---|---|---|---|---|
VQ | 4,096 | 963 (23%) | 18.26 | 11.56 | 7.65 | 5.03 |
FSQ | 6,561 | 6,561 (100%) | 10.67 | 7.29 | 6.58 | 4.43 |
表 4:Sensevoice-large编码器内VQ和FSQ的比较。C.V.表示CommonVoice基准测试。
进一步通过t-SNE可视化分析FSQ的特性。作为TTS任务的上游模型,speech tokenizer应尽量减少说话人身份信息与语音信号的纠缠。从VoxCeleb1数据集中选择了每名说话人的100个语音样本,并可视化了相应的token。
-
如图4(a)和(b)所示,量化前$Encoder_1$的输出在不同说话人之间表现出不同的分布。相比之下,量化表示的分布几乎无法区分。
-
此外,图4(c)还表明speech tokenizer完全利用了码本。
-
随后,使用S3prl工具包进一步通过执行说话人识别(SID)任务来评估说话人纠缠。使用带有FSQ的Sensevoice-large编码器作为上游特征提取器,并使用量化前或后的表示训练SID任务。图5显示了训练期间的准确率曲线。带有量化token的SID层没有收敛,这证明了speech tokenizer在解耦说话人信息方面的功能。
图 4:Voxceb1数据集中三名不同说话人的语音表示在量化前(a)和量化后(b)的t-SNE可视化。(c)显示了说话人(每个bin 500个token)的token百分比的码本利用率。
图 5:量化前或量化后token的SID训练的收敛曲线。
与基线的比较结果
首先在有限的英文文本域上评估了CosyVoice 2模型,并与几个开源模型进行了比较,如ChatTTS、GPT-SoVITs、OpenVoice、ParlerTTS、EmotiVoice和其前身CosyVoice。
PS: 奇了个怪,为啥没有评估 fish-speech
表5展示了客观结果,包括内容一致性(WER)、语音质量(NMOS)和说话人相似性(SS)。从表中可以看出,CosyVoice 2在Librispeech test-clean集上实现了最先进的性能,超越了所有基线模型的所有评估指标。值得注意的是,CosyVoice 2甚至在内容一致性、语音质量和说话人相似性方面都超过了人类话语,表明其人类水平的合成质量。
模型 | WER (%) | NMOS | SS |
---|---|---|---|
人类 | 2.66 | 3.84 | 0.697 |
ChatTTS | 6.84 | 3.89 | - |
GPT-SoVITs | 5.13 | 3.93 | 0.405 |
OpenVoice | 3.47 | 3.87 | 0.299 |
ParlerTTS | 3.16 | 3.86 | - |
EmotiVoice | 3.14 | 3.93 | - |
CosyVoice | 2.89 | 3.93 | 0.743 |
CosyVoice 2 | 2.47 | 3.96 | 0.745 |
CosyVoice 2-S | 2.45 | 3.90 | 0.751 |
表 5:基线和CosyVoice 2在LibriSpeech test-clean子集上的内容一致性(WER)、说话人相似性(SS)和语音质量(NMOS)结果。使用Whisper-Large V3作为ASR模型,计算WER前排除了标点符号。
还在常用的测试集上评估了CosyVoice 2:SEED test-zh、test-en和test-hard,这些测试集包括来自不同领域的多样化输入文本和参考语音。表6展示了CosyVoice 2和基线模型的实验结果。在test-zh集上,CosyVoice 2在CER和SS方面超越了所有开源模型,仅比商业模型SEED-TTS落后一点点。在test-en集上,CosyVoice 2在WER和SS方面分别排名第四和第三。这可能是由于中文和英文训练数据量之间的不平衡。计划在未来的工作中探索数据扩展,以提高英文的内容一致性。在test-hard集上,离线CosyVoice 2模型在所有比较的基线中实现了最先进的性能,表明其在具有挑战性的合成场景中的鲁棒性。与人类生成的语音相比,CosyVoice 2在内容一致性和说话人相似性方面表现出可比的性能。考虑到识别错误也可能来自ASR模型,合理地得出结论,CosyVoice 2实现了人类水平的合成能力。
还评估了流式模式,记为表5和6中的“CosyVoice 2-S”。对于两种评估设置,流式模式的性能在典型测试案例中几乎无损。只有在具有挑战性的案例中,内容一致性才有轻微下降,突出了统一的流式/非流式框架的优势。实验评估发现,不同SV模型上的说话人相似性结果不一致。这可能表明如何自动评估TTS模型的说话人相似性是一个新的研究课题。由于不同的TTS模型可能使用不同的SV模型来提取说话人信息,使用相同的SV模型评估说话人相似性可以更准确地评估说话人信息的利用。因此,在后续实验中使用ERes2Net3来评估说话人相似性。
表 6:CosyVoice 2和最近的TTS模型在SEED测试集上的结果。†表示闭源模型。对于说话人相似性,括号内的结果是通过ERes2Net测量的,而括号外的结果是通过基于WavLM的模型测量的。
模块化消融研究
在文本-语音语言模型上进行了模块化消融研究,以评估修改的影响,包括LLM初始化、去除speaker embedding和使用FSQ。
表7展示了从其前身逐步发展到CosyVoice 2的过程。
-
+LLM init: 通过将随机初始化的语言模型替换为预训练的LLM,在test-zh和test-hard集上的内容一致性分别实现了18.46%和15.40%的相对改进。
-
+Drop Spk Emb: 从文本到语音语言模型中去除了speaker embeding,这有助于防止信息泄露和上下文学习中的干扰。这一变化显著减少了内容错误,同时保持了说话人相似性,表明内容信息主要由LM建模,而说话人信息主要由流匹配模型恢复。
-
+FSQ(CosyVoice 2): 通过将VQ替换为FSQ,实现了CosyVoice 2模型,注意到内容一致性的显著提高和不变的说话人相似性。通过充分利用码本,FSQ捕获了更多内容信息和上下文变化,从而更好地对齐文本和语音token。
-
+Pitch Loss: 此外,通过在FSQ基础的Speech Tokenizer训练中加入音高损失作为约束进行了比较实验。发现,这种方法在下游TTS任务中表现出了更好的性能,如表7的最后一行所示。在未来的CosyVoice版本中,计划进行更详细的实验和分析。
模型 | test-zh | test-en | test-hard | |||
---|---|---|---|---|---|---|
CER (%) | SS | WER (%) | SS | WER (%) | SS | |
CosyVoice | 3.63 | 0.775 | 4.29 | 0.699 | 11.75 | 0.755 |
+ LLM init. | 2.96 | 0.808 | 4.57 | 0.730 | 9.94 | 0.789 |
+ Drop Spk Emb. | 2.56 | 0.804 | 3.81 | 0.740 | 9.66 | 0.778 |
+ FSQ (CosyVoice 2) | 1.45 | 0.806 | 2.57 | 0.736 | 6.83 | 0.776 |
+ Pitch Loss | 1.19 | 0.802 | 2.40 | 0.728 | 6.29 | 0.769 |
表 7:文本-语音语言模型修改的模块化分析。
还进行了另一项模块化分析,以评估流式模块对合成性能的影响。
表8展示了内容一致性和说话人相似性的结果。
- 发现流式LM对test-zh和test-en集上的典型案例影响最小,表明统一训练框架的有效性。
- 流式LM的主要影响在test-hard集上的具有挑战性的案例中观察到,可能是因为流式模式中上下文信息的丢失。
- 有趣的是,与离线模式相比,流式流匹配模型的说话人相似性略高。这可能是由于流式模式中初始块的提示到生成比例较高,而离线模式中的提示到生成比例可能非常低,包含许多填充token。
- 与流式LM相比,流式流匹配模型对内容一致性的负面影响要小得多,这要归功于CosyVoice 2中的语义-声学解耦建模。
模型 | LM | FM | test-zh | test-en | test-hard | |||
---|---|---|---|---|---|---|---|---|
CER (%) | SS | WER (%) | SS | CER (%) | SS | |||
M1 | 离线 | 离线 | 1.45 | 0.806 | 2.57 | 0.736 | 6.83 | 0.776 |
M2 | 离线 | 流式 | 1.46 | 0.811 | 2.60 | 0.743 | 7.12 | 0.788 |
M3 | 流式 | 离线 | 1.38 | 0.806 | 2.51 | 0.737 | 7.88 | 0.773 |
M4 | 流式 | 流式 | 1.45 | 0.812 | 2.38 | 0.743 | 8.08 | 0.785 |
表 8:CosyVoice 2中流式模块影响的模块化分析。流式模块的块大小设置为15。
日语和韩语基准测试的结果
除了中文和英文,CosyVoice 2还支持日语和韩语。在构建的日语和韩语测试集上评估了内容一致性、说话人相似性和语音质量。
如表9所示,CosyVoice 2在韩语上的表现显著优于日语,这主要是由于日语和中文字符集的重叠,导致在日语上下文中使用中文发音。在未来的工作中,计划探索增强多语言合成的语言上下文的方法。由于韩语与其他语言没有字符重叠,其语音合成表现更好。另一个问题是数据不平衡。相信,增加训练数据量可以进一步提高日语和韩语的合成性能。
模型 | test-ja | test-ko | ||||
---|---|---|---|---|---|---|
CER (%) | SS | NMOS | CER (%) | SS | NMOS | |
CosyVoice 2 | 18.79 | 0.630 | 3.42 | 7.98 | 0.707 | 3.73 |
CosyVoice 2-S | 21.41 | 0.629 | 3.35 | 9.06 | 0.714 | 3.60 |
表 9:CosyVoice 2及其流式对应模型在日语test-ja和韩语test-ko测试集上的内容一致性(CER)、说话人相似性(SS)和语音质量(NMOS)。
指令式生成的结果
为了评估指令式生成的性能,创建了一个包含290个样本的中文测试集。该测试集包括29种指令,如表1所示,每种指令有10个不同的输入文本。使用五名说话人的五个音频提示和说话人嵌入作为流匹配模型的条件。测试是在离线模式下进行的。客观地评估了内容一致性(CER)、说话人相似性(SS)和语音质量(NMOS)。主观上,使用指令的平均意见得分(MOS-I)评估指令的准确性和自然度,范围从1到5。每个样本由10名母语为中文的说话人评估,评分以0.5的增量给出。评估标准侧重于语音是否遵循所有指定的指令,如情感表达、语速调整、方言使用和角色扮演。细粒度控制,包括插入笑声、带笑说话、呼吸控制和强调,评估其自然度和准确性。
如表10所示,CosyVoice 2在内容一致性(CER)、说话人相似性(SS)和指令控制的准确性和自然度(MOS-I)方面表现出色,同时保持了与CosyVoice-Instruct相当的语音质量。当从CosyVoice 2中移除输入指令时,MOS-I显著下降;然而,内容一致性(CER)、说话人相似性(SS)和语音质量(NMOS)有所提高。这表明指令可控性很难从内容文本中隐式地出现。
模型 | CER (%) | SS | NMOS | MOS-I |
---|---|---|---|---|
CosyVoice-Instruct | 1.72 | 0.797 | 3.94 | 3.09 |
CosyVoice 2 | 1.52 | 0.804 | 3.94 | 4.06 |
CosyVoice 2 w/o Instruction | 0.97 | 0.817 | 4.02 | 2.28 |
表 10:在内部中文测试集上对CosyVoice-Instruct、CosyVoice 2和没有指令输入的CosyVoice 2进行内容一致性(CER)、说话人相似性(SS)、语音质量(NMOS)和MOS-I(指令,评估指令的准确性和自然度)的评估结果。使用Paraformer模型作为ASR系统,计算CER时排除了标点符号。由于Paraformer模型无法识别中文方言语音,因此在计算CER时未包括方言数据。
PS:这里的 “w/o” 是 “without” 的缩写,表示“没有”或“不使用”。
说话人微调模型的结果
在微调阶段,对同一说话人的说话人嵌入进行无监督聚类,以确保说话人音色的稳定性。已经证明,目标说话人只要有400个音频记录就可以实现相当好的语音合成性能,不同说话人之间的客观指标变化很小,如图6所示。实验表明,大多数说话人都可以继承零样本TTS模型的强大上下文理解和感知能力,从而自然地表达各种情绪和情感,以响应输入文本。
图 6:CosyVoice 2 SFT模型在SEED评估设置下的结果。CER用于test-zh和test-hard,而WER用于test-en。
使用强化学习的LM微调
尽管SFT可以提高大多数说话人的性能,但Spk E的结果仍然比基础模型差,尤其是在英文方面。因为Spk E的语音更复杂,语速更快。此外,Spk E只有中文录音。因此,对Spk E应用了强化学习以进一步改进。对于DPO,通过SFT模型合成了10,000个样本对,通过ASR和SS奖励改变LM的偏好偏差。还使用可微分的ASR奖励来优化LM参数。经过RL后,在Spk E的测试集上评估了模型的内容一致性(WER)、说话人相似性(SS)和语音质量(NMOS),并进一步在SeedTTS测试集上评估了WER,以探索模型是否能够对域外或跨语言输入文本保持鲁棒性。结果如表11所示。
与预训练的基础模型相比,SFT模型显示出更高的说话人相似性和语音质量,然而,WER可能比基础模型更差。发现基础模型合成的音频总是比SFT和真实音频更慢,这对ASR系统更友好。对于目标说话人数据集,偏好偏差和可微分奖励都可以减少WER,对其他两个指标几乎没有有害影响。但对于SEED测试集,基于DPO的强化学习只对中文和英文子集有益,而硬样本会更差。原因可能是硬样本包含许多重复的单词或短语,它们可能在DPO训练中被视为被拒绝的样本。然而,可微分ASR奖励不会遇到这个问题,因为它可以直接通过ASR后验概率优化TTS系统。这意味着可微分ASR奖励在域外情况下具有更好的泛化能力。最后,可以将它们结合起来以进一步改进。
模型 | 内部目标说话人 | SEED测试 (%) | ||||
---|---|---|---|---|---|---|
WER (%) | NMOS | SS | zh | en | hard | |
真实值 | 6.00 | 3.87 | 0.697 | 1.26 | 2.14 | - |
CosyVoice 2 | 5.34 | 3.91 | 0.721 | 1.45 | 2.57 | 6.83 |
CosyVoice 2-SFT | 7.15 | 3.96 | 0.795 | 1.50 | 4.26 | 7.90 |
+ $L_{ASR}$ | 6.79 | 3.96 | 0.795 | 1.29 | 3.53 | 7.30 |
+ $L_{DPO}$ | 6.83 | 3.96 | 0.792 | 1.43 | 4.02 | 8.31 |
+ $L_{ASR}$+ $L_{DPO}$ | 6.64 | 3.97 | 0.796 | 1.25 | 3.17 | 6.66 |
表 11: Spk E 上强化学习模型的内容一致性 (WER)、说话者相似度 (SS) 和语音质量 (NMOS) 比较。
结论
在CosyVoice的基础上,本报告介绍了CosyVoice 2,这是一个改进的流式语音合成模型,利用大型语言模型(LLMs)。通过在一个框架内统一流式和非流式合成,CosyVoice 2实现了人类水平的自然度、最小的响应延迟,以及在流式模式下几乎无损的合成质量。关键创新包括有限标量量化(FSQ)以充分利用码本、简化文本-语音语言模型架构以整合预训练的文本LLMs,以及开发块感知因果流匹配模型以支持多样化的合成场景。此外,指令式TTS能力的提升允许灵活且生动的语音生成,能够精细控制情感、口音、角色风格和声音爆发。通过系统的修改和优化,CosyVoice 2不仅提供了卓越的合成质量,还放宽了部署要求,使其适用于流式和非流式应用。论文团队认为CosyVoice 2在可扩展、高质量和交互式文本到语音合成方面是一个重要的进步。
PS: 论文中未提到实际部署情况,线上分布式推理服务(infer serve)的指标评估;提供实际生产服务的时候,部署服务和优化与模型结构密切相关,CosyVoice2中简化文本-语音语言模型架构以整合预训练的文本LLMs, 虽然输入的token和文本LLMs稍有不同,但是推理优化工作可以复用;而且还可以复用LLM的scaling工作来进行整合扩展。CosyVoice 2中的语义-声学解耦建模,两者分别支持流式和非流式输出。
限制
CosyVoice 2存在一些需要解决的限制。首先,它只支持有限数量的语言。对于字符集重叠的语言,合成性能可能会下降,这为未来的研究提出了一个开放性挑战。其次,CosyVoice 2无法通过文本指令控制音色等声学特征,这可能是角色扮演应用中一个有趣的探索领域。此外,CosyVoice在执行唱歌任务时表现不佳。
附录:
Paralanguage information(副语言信息)
Paralanguage information(副语言信息)是指在口语交流中,除了语言内容本身之外的其他声音特征和表达方式。这些信息虽然不直接涉及语言的词汇或语法结构,但对理解和传达说话人的意图、情感和态度等方面起着重要作用。副语言信息包括以下几个方面:
1. 语调(Intonation)
语调是指说话时声音的高低变化。不同的语调可以传达不同的情感和意图。例如:
- 升调:通常用于提问,表示疑问或不确定。例如,“你今天去吗?”(升调)
- 降调:通常用于陈述句,表示肯定或结束。例如,“你今天去。”(降调)
2. 语速(Speech Rate)
语速是指说话的快慢。不同的语速可以传达不同的情感和 urgency(紧迫感):
- 快速:通常表示兴奋、紧张或急切。例如,快速说话可能表明说话人很兴奋或有紧急事情要传达。
- 慢速:通常表示沉思、悲伤或强调。例如,慢速说话可能表明说话人在思考或强调某个重要信息。
3. 音量(Volume)
音量是指说话的响度。不同的音量可以传达不同的情感和态度:
- 大声:通常表示愤怒、兴奋或强调。例如,大声说话可能表明说话人很愤怒或在强调某个重要点。
- 小声:通常表示害羞、害怕或保密。例如,小声说话可能表明说话人很害羞或在分享秘密。
4. 停顿(Pauses)
停顿是指说话中的短暂沉默。停顿可以用于强调、思考或情感表达:
- 短暂停顿:通常用于强调某个词或短语。例如,“我——真的——不知道。”(短暂停顿)
- 较长停顿:通常用于思考或情感表达。例如,“我……我不知道。”(较长停顿)
5. 重音(Stress)
重音是指在单词或短语中某个音节的强调。不同的重音可以改变单词的意思或强调某个部分:
- 单词重音:例如,“record”(动词)和“record”(名词)的重音位置不同。
- 短语重音:例如,“我真的很喜欢这个礼物。”(重音在“真的”上)
6. 填充词(Fillers)
填充词是指在说话中用于填充空白或思考的词。这些词可以传达说话人的思考过程或情感状态:
- 常见的填充词:例如,“嗯”、“啊”、“这个”、“那个”等。这些词可以表明说话人在思考或犹豫。
7. 声音质量(Voice Quality)
声音质量是指声音的物理特征,如沙哑、尖锐、柔和等。不同的声音质量可以传达不同的情感和健康状态:
- 沙哑:可能表明说话人感冒或情绪低落。
- 尖锐:可能表明说话人很紧张或兴奋。
- 柔和:可能表明说话人很温柔或关心。
8. 音色(Timbre)
音色是指声音的独特质地或色彩。不同的音色可以传达不同的情感和个性:
- 温暖的音色:可能表明说话人很友好和亲切。
- 冷淡的音色:可能表明说话人很严肃或疏远。
总结
副语言信息在口语交流中起着重要作用,它可以帮助听者更好地理解说话人的意图、情感和态度。通过语调、语速、音量、停顿、重音、填充词、声音质量和音色等副语言特征,说话人可以更有效地传达信息,增强交流的自然度和生动性。在语音合成和语音识别系统中,考虑副语言信息可以显著提高系统的性能和用户体验。
t-SNE可视化
定义
t-SNE(t-distributed Stochastic Neighbor Embedding)是一种用于高维数据可视化的降维算法。它能够将高维数据映射到二维或三维空间中,以便人们能够直观地观察数据的分布情况和内在结构。
工作原理
-
相似度计算:在高维空间中,计算数据点之间的相似度。对于数据点 $x_i$ 和 $x_j$,其相似度 $p_{j|i}$ 表示在以 $x_i$ 为中心的高斯分布下,$x_j$ 出现的概率。计算公式为: $$ p_{j|i} = \frac{\exp(-|x_i - x_j|^2 / 2\sigma_i^2)}{\sum_{k \neq i} \exp(-|x_i - x_k|^2 / 2\sigma_i^2)} $$
其中,$sigma_i$是高斯分布的标准差,通过二分查找法确定,使得每个数据点的困惑度(Perplexity)达到预设值。
-
映射到低维空间:在低维空间中,为每个数据点 $y_i$ 和 $y_j$ 计算相似度 $q_{ij}$,采用 t 分布来计算,公式为: $$ q_{ij} = \frac{(1 + |y_i - y_j|^2)^{-1}}{\sum_{k \neq l} (1 + |y_k - y_l|^2)^{-1}} $$
-
优化映射:通过最小化高维空间和低维空间相似度的差异来优化映射。使用KL散度(Kullback-Leibler Divergence)作为损失函数,通过梯度下降法不断调整低维空间中的数据点位置,使得 (q_{ij}) 尽可能接近 (p_{ij})。
优点
- 能够很好地保持数据的局部结构:t-SNE在映射过程中,注重保持数据点之间的局部邻近关系,使得相似的数据点在低维空间中也能聚集在一起,便于观察数据的簇结构。
- 对高维数据的可视化效果较好:相比其他降维方法,如PCA,t-SNE在处理高维数据时,能够更清晰地展示数据的分布情况,揭示出数据中隐藏的模式和结构。
缺点
- 计算复杂度较高:在计算数据点之间的相似度以及优化映射过程中,需要进行大量的计算,尤其是对于大规模数据集,计算成本较高。
- 结果具有一定的随机性:由于t-SNE的优化过程涉及到随机初始化,每次运行可能会得到略有不同的结果,这给结果的解释和对比带来了一定的困难。
- 难以处理大规模数据:由于计算复杂度和内存消耗的限制,t-SNE在处理大规模数据集时可能会遇到性能瓶颈,需要借助一些优化方法或近似算法来提高效率。
应用场景
- 图像数据可视化:在图像识别、图像分类等领域,可以将图像特征通过t-SNE映射到二维或三维空间中,观察不同类别图像的分布情况,了解模型的分类效果。
- 文本数据可视化:对于文本数据的词向量或文档向量,利用t-SNE进行可视化,能够直观地展示词语或文档之间的语义相似性,发现文本数据中的主题和聚类结构。
- 生物信息学数据可视化:在基因表达数据、蛋白质结构数据等生物信息学领域,t-SNE可以帮助研究人员观察数据的分布特征,发现潜在的生物规律和模式。
说话人纠缠(Speaker Entanglement)
说话人纠缠(Speaker Entanglement)是指在语音处理和语音合成中,语音信号中包含的说话人身份信息与其他语音特征(如语义、情感、语调等)相互混合,难以分离的现象。这种纠缠会使得模型在处理语音时,难以独立地控制和调整说话人的特征,从而影响语音合成的灵活性和自然度。
说话人纠缠的具体表现
- 语义与说话人身份的混合:
- 在语音合成中,理想的模型应该能够将语义信息(即文本内容)与说话人身份信息(如音色、语调等)分开处理。然而,如果存在说话人纠缠,模型在生成语音时可能会将特定说话人的语义特征与身份特征混合,导致生成的语音在不同说话人之间缺乏一致性。
- 情感与说话人身份的混合:
- 情感表达是语音合成中的一个重要方面。如果存在说话人纠缠,模型可能会将特定说话人的情感特征与身份特征混合,使得生成的语音在表达不同情感时,仍然带有特定说话人的特征,而不是根据输入的情感指令进行调整。
- 语调与说话人身份的混合:
- 语调是语音中的一个重要特征,用于表达疑问、陈述、强调等。如果存在说话人纠缠,模型在生成不同语调的语音时,可能会受到特定说话人语调特征的影响,导致生成的语音在语调上不够自然和灵活。
说话人纠缠的影响
- 降低语音合成的灵活性:
- 说话人纠缠会限制模型在生成语音时对说话人特征的独立控制能力。例如,如果模型无法将语义和说话人身份分开处理,就难以实现多说话人的语音合成,或者在不同说话人之间切换时会出现不自然的过渡。
- 影响语音合成的自然度:
- 说话人纠缠会导致生成的语音在语义、情感和语调等方面不够自然。例如,如果模型在生成带有特定情感的语音时,仍然受到特定说话人的情感特征的影响,生成的语音可能会显得生硬和不自然。
- 增加模型训练的复杂性:
- 说话人纠缠会增加模型训练的难度,因为模型需要同时学习和处理多种混合的特征。这可能导致模型在训练过程中出现过拟合或欠拟合的问题,影响模型的泛化能力。
解决说话人纠缠的方法
- 特征解耦:
- 通过设计特定的模型架构,将语义、情感、语调等特征与说话人身份特征解耦。例如,使用自编码器或变分自编码器(VAE)来提取和分离这些特征,然后再进行语音合成。
- 多任务学习:
- 在模型训练中,同时进行多个任务,如说话人识别、情感识别和语义理解,以增强模型对不同特征的区分能力。通过多任务学习,模型可以更好地理解和分离这些特征,从而减少说话人纠缠。
- 数据增强:
- 使用数据增强技术,如语音变调、语速调整、噪声添加等,来增加训练数据的多样性。这可以帮助模型更好地学习和适应不同的语音特征,减少说话人纠缠。
- 正则化技术:
- 使用正则化技术,如dropout、权重衰减等,来防止模型过拟合,增强模型的泛化能力。正则化技术可以减少模型对特定说话人特征的依赖,从而减少说话人纠缠。
总结
说话人纠缠是语音处理和语音合成中的一个重要问题,它会影响模型的灵活性和生成语音的自然度。通过特征解耦、多任务学习、数据增强和正则化技术,可以有效减少说话人纠缠,提高语音合成的质量和灵活性。
硬测试(Hard Testing)
硬测试(Hard Testing)是指在评估模型性能时,使用具有挑战性的、难度较高的测试案例来检验模型的鲁棒性和极限性能。这些测试案例通常包含复杂的输入、边缘情况或极端条件,旨在揭示模型在面对困难任务时的表现。硬测试有助于发现模型的弱点和不足,从而指导进一步的改进和优化。
硬测试的具体内容
- 复杂输入:
- 包含多个语义层面的输入,如包含多个指令、复杂的情感表达或多种语言混合的输入。
- 例如,一个输入文本可能同时包含多种情感指令:“请用高兴的情感说,但中间带点悲伤。”
- 边缘情况:
- 输入文本或语音中包含不常见的词汇、语法结构或发音。
- 例如,包含罕见的方言词汇或生僻字的输入文本。
- 极端条件:
- 输入文本或语音的长度非常长或非常短,或者包含大量的重复内容。
- 例如,一个非常长的文本段落或包含大量重复单词的文本。
- 多模态输入:
- 输入包含多种模态的信息,如文本、语音、图像等,模型需要同时处理这些信息。
- 例如,输入文本和参考语音不匹配,或者输入文本包含图像描述。
硬测试的目的
- 评估鲁棒性:
- 检查模型在面对复杂和困难的输入时是否能够保持稳定和准确的性能。
- 例如,评估模型在处理包含大量重复内容的文本时是否会出现错误或卡顿。
- 发现弱点:
- 通过硬测试,可以发现模型在特定情况下表现不佳的地方,从而指导模型的改进。
- 例如,发现模型在处理罕见方言词汇时的识别率较低,可以针对性地优化模型的词汇表和训练数据。
- 提升性能:
- 通过不断挑战模型的极限,推动模型在各种情况下都能表现出色,提升整体性能。
- 例如,通过硬测试优化模型的语音合成质量,使其在处理复杂情感表达时更加自然和流畅。
硬测试的应用场景
- 语音合成:
- 评估TTS模型在处理复杂情感、多语言混合和长文本时的性能。
- 例如,评估模型在生成带有多种情感的长文本语音时的自然度和一致性。
- 语音识别:
- 评估ASR模型在处理带有噪声、口音和罕见词汇的语音时的性能。
- 例如,评估模型在识别带有强烈地方口音的语音时的准确率。
- 自然语言处理:
- 评估NLP模型在处理复杂语法结构、多模态输入和长文本时的性能。
- 例如,评估模型在处理包含图像描述和复杂指令的文本时的理解能力。
总结
硬测试是一种重要的评估方法,通过使用具有挑战性的测试案例,可以全面评估模型的鲁棒性和性能极限。这有助于发现模型的弱点,指导进一步的优化和改进,从而提升模型在实际应用中的表现。
CER、SS 和 WER
在语音合成和语音识别任务中,CER、SS 和 WER 是常用的评估指标,分别代表不同的性能方面。下面详细介绍每个指标的含义和计算方法:
1. CER(Character Error Rate)
字符错误率(CER) 是衡量生成文本与目标文本之间字符级差异的指标。它通常用于评估语音识别和语音合成任务中文本的准确性。CER 计算了生成文本和目标文本之间的插入、删除和替换操作的总数,然后除以目标文本的字符数。
计算方法: $$ \text{CER} = \frac{\text{插入数} + \text{删除数} + \text{替换数}}{\text{目标文本的字符数}} $$ 示例:
- 目标文本:
"hello world"
- 生成文本:
"helo world"
- 插入数:0
- 删除数:0
- 替换数:1(
"ll"
替换为"l"
) - 目标文本的字符数:11
- CER:$\frac{1}{11} \approx 0.091$ 或 9.1%
2. SS(Speaker Similarity)
说话人相似性(SS) 是衡量生成语音与目标说话人语音在音色和音质上的相似度的指标。它通常用于评估语音合成任务中生成语音的说话人一致性。SS 通常通过说话人验证(SV)模型来计算,SV 模型会提取语音的嵌入向量并计算生成语音和目标语音之间的余弦相似度。
计算方法: $$ \text{SS} = \cos(\text{生成语音的嵌入向量}, \text{目标语音的嵌入向量}) $$ 示例:
-
目标语音的嵌入向量:
[0.1, 0.2, 0.3, $\ldots$]
-
生成语音的嵌入向量:
[0.11, 0.21, 0.31, $\ldots$]
-
余弦相似度:$\cos(\text{生成语音的嵌入向量}, \text{目标语音的嵌入向量}) \approx 0.95$
-
SS:0.95
3. WER(Word Error Rate)
词错误率(WER) 是衡量生成文本与目标文本之间词级差异的指标。它通常用于评估语音识别和语音合成任务中文本的准确性。WER 计算了生成文本和目标文本之间的插入、删除和替换操作的总数,然后除以目标文本的词数。
计算方法: $$ \text{WER} = \frac{\text{插入数} + \text{删除数} + \text{替换数}}{\text{目标文本的词数}} $$ 示例:
- 目标文本:
"hello world"
- 生成文本:
"hello there"
- 插入数:1(
"there"
) - 删除数:1(
"world"
) - 替换数:0
- 目标文本的词数:2
- WER:$\frac{1 + 1 + 0}{2} = 1.0$ 或 100%
总结
- CER:字符错误率,用于评估文本的字符级准确性。
- SS:说话人相似性,用于评估生成语音与目标说话人语音的音色和音质相似度。
- WER:词错误率,用于评估文本的词级准确性。
这些指标在语音合成和语音识别任务中非常重要,它们帮助评估模型的性能,指导模型的优化和改进。通过综合使用这些指标,可以全面评估模型在不同方面的表现。
NMOS (Normalized Mean Opinion Score)
NMOS(Normalized Mean Opinion Score)是一种用于评估语音质量的客观指标,它通过模拟人类听众的主观评价来量化语音的自然度和可理解性。NMOS值通常在0到5之间,其中5表示最佳质量,0表示最差质量。NMOS广泛应用于语音处理、语音合成和语音通信系统中,以评估和优化语音信号的质量。
- 定义:
- NMOS是一种标准化的平均意见得分,用于评估语音质量。它通过算法自动计算,模拟人类对语音质量的主观评价。
- NMOS值越高,表示语音质量越好;值越低,表示语音质量越差。
- 计算方法:
- NMOS的计算通常基于语音信号的多个特征,如信噪比(SNR)、谐波噪声比(HNR)、梅尔频谱失真等。
- 例如,一个常见的NMOS计算方法是使用深度学习模型,如DNSMOS(Deep Noise Suppression Mean Opinion Score),该模型通过训练学习人类对语音质量的主观评价标准,然后对新的语音样本进行评分。
- 应用场景:
- 语音合成:评估生成语音的自然度和可理解性。
- 语音识别:评估语音信号在传输和处理过程中的质量损失。
- 语音通信:评估语音在不同通信环境下的质量,如电话通话、视频会议等。
NMOS的作用
- 评估语音质量:
- NMOS可以快速、自动地评估语音信号的质量,提供一个量化的指标来衡量语音的自然度和可理解性。
- 例如,NMOS可以用于比较不同语音合成模型的输出质量,帮助选择最佳模型。
- 优化系统性能:
- 通过NMOS,可以识别语音处理系统中的问题,如噪声、失真和编码 artifacts,从而指导系统的优化和改进。
- 例如,如果NMOS值较低,可能表明语音信号在传输过程中受到了噪声干扰,需要优化噪声抑制算法。
- 用户满意度预测:
- NMOS值可以预测用户对语音质量的满意度,帮助设计更符合用户需求的语音系统。
- 例如,一个高NMOS值的语音合成系统更可能获得用户的正面评价。
NMOS的计算示例
假设我们使用一个预训练的NMOS模型来评估一段语音的质量。模型的输出是一个0到5之间的分数,表示语音的自然度和可理解性。以下是一个简单的示例:
Python复制
import torch
from dnsmos import DNSMOS
# 加载预训练的NMOS模型
model = DNSMOS()
# 读取语音文件
audio, sr = torchaudio.load('example.wav')
# 计算NMOS
nmoss, mos_sig, mos_bak, mos_ovr = model(audio, fs=sr)
# 输出NMOS值
print(f'NMOS: {nmoss.item():.2f}')
print(f'MOS_SIG: {mos_sig.item():.2f}')
print(f'MOS_BAK: {mos_bak.item():.2f}')
print(f'MOS_OVR: {mos_ovr.item():.2f}')
在这个示例中,nmoss
表示整体的NMOS值,mos_sig
、mos_bak
和mos_ovr
分别表示信号质量、背景噪声质量和整体质量的评分。
总结
NMOS是一种重要的客观指标,用于评估语音质量。通过模拟人类的主观评价,NMOS可以快速、自动地提供语音质量的量化评估,帮助优化语音处理系统,提高用户满意度。在语音合成、语音识别和语音通信等应用中,NMOS广泛用于评估和优化语音信号的质量。
MOS-I(Mean Opinion Score for Instruction)
MOS-I(Mean Opinion Score for Instruction)是一个用于评估语音合成系统中指令式生成(Instruction-based Generation)的主观指标。它通过用户对生成语音的指令遵循程度、自然度和准确性的评分来衡量模型的性能。MOS-I特别适用于评估模型在生成带有特定情感、语速、口音或角色风格的语音时的表现。
-
定义:
- MOS-I:用于评估生成语音是否准确地遵循了给定的指令,如情感表达、语速调整、方言使用和角色扮演等。评分范围通常为1到5,其中5表示最佳表现,1表示最差表现。
-
评分标准:
- 1:生成的语音完全不符合指令,听起来不自然。
- 2:生成的语音部分符合指令,但整体表现不佳。
- 3:生成的语音基本符合指令,但仍有改进空间。
- 4:生成的语音很好地符合指令,表现自然。
- 5:生成的语音完全符合指令,表现非常自然。
-
计算方法:
-
MOS-I 是通过收集多个听众对同一生成语音的评分,然后计算这些评分的平均值来得到的。每个听众根据生成语音对指令的遵循程度、自然度和准确性进行评分。
-
例如,如果有10个听众对同一生成语音进行评分,评分分别为:4, 4, 5, 3, 4, 4, 5, 4, 3, 4,那么MOS-I值为:
MOS-I=(4+4+5+3+4+4+5+4+3+4)/10=4.0
-
应用场景
- 情感表达:
- 评估生成语音是否准确地表达了指定的情感,如高兴、悲伤、惊讶等。
- 例如,指令为“用高兴的情感说”,生成的语音是否听起来确实很高兴。
- 语速调整:
- 评估生成语音是否按照指定的语速进行合成,如快速、慢速等。
- 例如,指令为“语速加快”,生成的语音是否确实更快。
- 方言使用:
- 评估生成语音是否准确地使用了指定的方言,如粤语、四川话等。
- 例如,指令为“用粤语口音说”,生成的语音是否确实带有粤语口音。
- 角色扮演:
- 评估生成语音是否准确地模仿了指定的角色,如机器人、小猪佩奇等。
- 例如,指令为“以机器人的角色和我交流”,生成的语音是否确实听起来像机器人。
评估流程
- 准备测试数据:
- 选择一组具有代表性的输入文本和对应的指令。
- 例如,输入文本为“今天天气真好,适合出去玩。”,指令为“用高兴的情感说”。
- 生成语音:
- 使用语音合成模型生成语音样本。
- 例如,生成带有高兴情感的语音样本。
- 收集评分:
- 邀请多个听众对生成的语音样本进行评分,评分标准为1到5。
- 例如,邀请10名母语为中文的听众对生成的语音样本进行评分。
- 计算MOS-I:
- 计算所有评分的平均值,得到MOS-I值。
- 例如,计算10个评分的平均值,得到MOS-I值为4.0。
总结
MOS-I是一个重要的主观评估指标,用于评估语音合成系统在指令式生成任务中的表现。通过收集多个听众的评分,MOS-I可以全面评估生成语音对指令的遵循程度、自然度和准确性。这有助于优化模型,提高生成语音的质量和用户满意度。在实际应用中,MOS-I常用于评估模型在情感表达、语速调整、方言使用和角色扮演等任务中的表现。
说话人(Spk E)
在语音合成和语音处理的上下文中,“Spk E” 通常是指一个特定的说话人(Speaker E)。说话人(Spk)是语音数据中的一个标识符,用于区分不同的说话者。“Spk E” 可能是数据集中众多说话人中的一个,用于训练和评估语音合成模型或语音识别模型。
- 定义:
- 说话人(Spk):在语音数据集中,每个说话人通常有一个唯一的标识符,如 “Spk A”、“Spk B”、“Spk C” 等。这些标识符用于区分不同的说话者,以便模型可以学习和识别每个说话人的独特语音特征。
- Spk E:具体指数据集中的第五个说话人(假设按字母顺序排列)。
- 作用:
- 训练:在训练语音合成模型时,使用多个说话人的数据可以帮助模型学习不同说话人的语音特征,从而提高模型的泛化能力和多说话人合成能力。
- 评估:在评估模型性能时,使用特定的说话人数据可以测试模型在生成特定说话人语音时的表现,如说话人相似性、语音自然度等。
- 微调:在对模型进行微调时,可以针对特定的说话人进行优化,以提高生成语音的质量和相似度。
说话人相似性(Speaker Similarity)
-
说话人相似性(SS):用于衡量生成语音与目标说话人语音在音色和音质上的相似度。SS 通常通过说话人验证(SV)模型来计算,SV 模型会提取语音的嵌入向量并计算生成语音和目标语音之间的余弦相似度。
-
计算方法:
SS=cos(生成语音的嵌入向量,目标语音的嵌入向量)
说话人微调(Speaker Fine-Tuning)
- 说话人微调(SFT):在特定说话人上对预训练模型进行微调,可以进一步提高生成质量和说话人相似性。通过在特定说话人的数据上进行微调,模型可以更好地捕捉该说话人的独特特征。
- 多说话人微调(mSFT):同时在多个说话人上进行微调,可以确保模型在多个说话人之间具有全面的语调和发音覆盖,减少灾难性遗忘。
示例
假设我们有一个包含多个说话人的语音数据集,其中 “Spk E” 是其中一个说话人。我们可以在训练和评估过程中使用 “Spk E” 的数据:
Python复制
# 示例数据集
speakers = ["Spk A", "Spk B", "Spk C", "Spk D", "Spk E", ...]
# 训练模型
for spk in speakers:
train_model(spk_data[spk])
# 评估模型
for spk in speakers:
evaluate_model(spk_data[spk])
# 特定说话人微调
fine_tune_model(spk_e_data)
# 评估微调后的模型
evaluate_model(spk_e_data)
总结
“Spk E” 是数据集中的一个特定说话人标识符,用于训练、评估和微调语音合成模型。通过使用多个说话人的数据,模型可以学习和识别不同说话人的独特特征,从而提高生成语音的质量和自然度。说话人相似性(SS)和说话人微调(SFT)是评估和优化模型性能的重要手段。