语音合成与语音克隆技术
语音合成(TTS)和语音克隆技术是语音生成的两个核心方向。TTS 将文本转换为自然语音,语音克隆则从少量参考音频中复制说话人的声音特征,两者在数字人、有声读物和辅助技术中广泛应用。
TTS 架构演进
语音合成技术经历了从拼接合成到统计参数合成再到神经网络的演进:
早期方案
- 拼接合成:从语音库中选取合适的语音片段拼接
- 统计参数合成:使用 HMM/DNN 预测语音参数,通过声码器生成波形
神经网络 TTS
- 两阶段方案:文本 → 频谱(Tacotron/FastSpeech)→ 波形(WaveNet/Hifi-GAN)
- 端到端方案:文本直接生成波形(VITS/Voicebox)
python
import torch
import torch.nn as nn
class VITS(nn.Module):
"""VITS 端到端 TTS 架构概要"""
def __init__(self, vocab_size, hidden_dim=192):
super().__init__()
# 文本编码器
self.text_encoder = nn.TransformerEncoder(
nn.TransformerEncoderLayer(hidden_dim, 8, hidden_dim*4),
num_layers=6
)
# 后验编码器(训练时从梅尔频谱提取)
self.posterior_encoder = PosteriorEncoder()
# 流模型(从简单分布变换到复杂后验)
self.flow = FlowSequence(num_flows=4)
# 解码器(HiFi-GAN 声码器)
self.decoder = HiFiGANGenerator()
def forward(self, text_tokens, mel_spectrogram):
# 文本编码
text_features = self.text_encoder(text_tokens)
# 后验编码
z, m_q, logs_q = self.posterior_encoder(mel_spectrogram)
# 流变换
z_p = self.flow(z)
# 解码为波形
waveform = self.decoder(z)
return waveform语音克隆技术
语音克隆分为三种场景:
零样本克隆
仅需几秒参考音频,无需微调:
- SpeakTTS:使用说话人编码器提取声音嵌入
- Voicebox:基于流匹配的零样本语音生成
- ChatTTS:中文零样本 TTS
少样本微调
少量参考音频微调预训练模型:
- So-VITS-SVC:变声与语音克隆
- GPT-SoVITS:仅需 5 分钟音频即可克隆
大规模数据训练
需要数小时目标说话人数据:
- 传统方案,质量最高但成本大
伦理与安全
语音克隆技术存在被滥用的风险(如深度伪造诈骗)。在使用时应遵守法律法规,获取说话人授权,并考虑添加水印等防伪措施。
ChatTTS:中文语音合成
ChatTTS 是专为对话场景设计的中文 TTS 模型:
- 支持细粒度控制:笑声、停顿、韵律
- 零样本说话人克隆
- 对话式语音合成,自然度极高
python
import ChatTTS
chat = ChatTTS.Chat()
chat.load(compile=False)
texts = ["今天天气真好,我们一起出去散步吧。"]
wavs = chat.infer(texts, use_decoder=True)评估指标
| 指标 | 衡量维度 | 说明 |
|---|---|---|
| MOS | 自然度 | 平均意见分(1-5) |
| WER | 准确性 | 词错误率 |
| Speaker Sim. | 相似度 | 说话人嵌入余弦相似度 |
| RTF | 速度 | 实时因子(<1 即实时) |