你有没有注意过,十年前车载导航说’前方五百米右转’的时候,每个字都像从塑料管子里挤出来的?而现在,你可以让 AI 用你妈妈的声音读一段童话。这中间发生了什么?

我最早以为 TTS 就是把录音切碎再拼起来,后来发现这个想法对了一半——早期技术确实是这么干的,但今天的技术路线已经完全不同了。整个演进过程,其实就是两代技术逻辑的交替:从’人肉拼积木’到’让模型自己学会说话’。
从人肉录音到拼积木:拼接合成把门槛堆到了天上
最早的实用 TTS 系统,叫拼接合成(Concatenative TTS)。它的思路很直接:把预先录好的语音片段,按照目标文本的拼音序列,挑出来拼在一起。
拼接的最小单位不是单词,而是双音素(diphone)——两个相邻音素中间的过渡段。为什么用双音素?因为单个音素在拼起来时会显得特别生硬,而双音素能保留一点前后的衔接信息。
于是问题来了:你要录多少句子才能覆盖所有双音素?答案是几千句,而且要在一个隔音室里,用同一种语气、同一个语速念完。然后人工标注每一段是哪个音素。合成的时候,再用 PSOLA 算法调整音高和时长,试图让拼接点不那么突兀。
结果怎么样?你听过的早期导航语音就是典型产物。它最大的问题是:拼接点永远是断裂的,语调永远是平的。更尴尬的是,一旦遇到语料里没有的词,比如一个人名,系统直接崩。
这条路走到头了。录音成本太高,而且你永远录不完所有可能的语境。
深度学习的第一次革命:Tacotron 把语音变成了图像
2016 年,DeepMind 发布了 WaveNet,它首次证明了用神经网络可以直接生成原始波形。但 WaveNet 是自回归的——每个采样点都要看前面所有采样点,一秒 16000 个点,生成一秒钟语音要跑 16000 次计算。慢得离谱。
2017 年,Google 推出 Tacotron,这才是真正让 TTS 进入深度学习时代的转折点。Tacotron 做的事,是把文本转换成梅尔频谱图(mel spectrogram)——一种像图片一样的声音表示。注意,它没有直接生成波形,而是生成了一张’声学图像’。
为什么要中间转一道?因为波形太长了,直接预测难度大。而梅尔频谱在时间上压缩了几十倍,模型更容易学。然后,再让 WaveNet 或它的加速版(如 Parallel WaveNet)把这图像’画’成波形。
这套两阶段方案的效果,比拼接合成自然了不止一个数量级。但它有个隐患:注意力机制偶尔会跳字、重复字。而且训练需要文本和语音的精确对齐,这个对齐本身就要靠另一个模型(比如蒙特利尔强制对齐工具)来生成。
到这里,TTS 已经有了’理解’的影子,但还远远不是端到端。
VITS:把两头接起来,顺便学会了随机韵律
2021 年,一篇名为 VITS 的论文发表,标题里就写着’端到端’。它干了什么?直接把文本变成波形,中间不再需要梅尔频谱作为中间产物。
VITS 的架构很巧妙,它融合了三个东西:变分自编码器(VAE)、标准化流(Normalizing Flow)、对抗训练(GAN)。
说人话:它把语音波形看作一个’隐藏变量’经过某种变换后的结果。训练时,真实波形通过一个后验编码器压缩成隐藏变量 z,然后一个解码器从 z 生成波形,同时一个判别器判断波形是真是假——这就是对抗训练。推理时,没有真实波形了,那就用文本先验分布采样一个 z,再让解码器生成。
关键设计来了:随机时长预测器。传统 TTS 对每个字分配固定的帧数,所以读出来永远一个节奏。VITS 的时长预测器是随机的,同一个句子每次生成,每个字的时长都不一样,就像真人说话时语速的自然波动。这个设计让 VITS 的韵律比前代自然很多。
我当年看到 VITS 的架构图时,第一反应是:这里没有一个模块是传统语音合成里见过的。它不再是’先预测参数再合成波形’,而是直接用一个可微分的生成模型把文本变成声音。
但 VITS 有个问题:它只能模仿训练时见过的说话人。你想要一个全新的声音?要么微调模型,要么录大量数据重新训练。这个门槛催生了下一场革命。
零样本克隆:你的声音被’分词’了
2023 年,微软发布 VALL-E,标题很嚣张:Neural Codec Language Models。它把 TTS 彻底变成了一个语言模型问题。
做法是这样的:先用一个叫 EnCodec 的神经编解码器,把任意语音波形压成离散的 token 序列——就像把声音’分词’了。每 10 毫秒一个 token,而且每个时刻有 8 层 codebook,类似一个分层树状结构。然后,训练一个 Transformer 语言模型:输入是目标文本的拼音序列,输出是对应的音频 token 序列。
零样本克隆是怎么实现的?推理时,你给它 3 秒参考音频,它把这段音频也编码成 token,当作’前缀’(prompt),然后语言模型一边看着这个前缀、一边生成目标文本的 token。由于语言模型在训练时见过成千上万的说话人,它学会了把’音色’和’内容’分开——音色从 prompt 里来,内容从文本里来。
这个思路的颠覆性在于:克隆一个陌生声音,不再需要训练,只需要几秒参考音频。
跟 VITS 对比一下,VITS 是多说话人模型,但需要为每个新说话人做 fine-tune;VALL-E 是零样本,但代价是训练数据量巨大——VALL-E 用了 6 万小时英语音频,而 VITS 在单说话人数据上就能出效果。两种路线各有各的适用场景。
开源社区这边,YourTTS 基于 VITS 做了零样本扩展,用说话人编码器把参考音频变成固定向量,再注入生成网络。后来 Coqui 的 XTTS 延续了这个思路,支持多语言。这条路线训练成本低,但克隆相似度略逊于 VALL-E 那种大模型。
边界在哪:声音能克隆,但’像人一样说话’还很难
我现在用零样本 TTS 生成声音,最深的感受是:音色克隆已经接近满分,但情感和重音仍然很塑料。
比如让模型用愤怒的语气读’你再说一遍’,它大概率会读成平淡的陈述句。因为当前模型学的是’音色’和’内容’的映射,而不是’情绪’和’内容’的映射。VALL-E 能复现参考音频的语调,但那只是模仿,不是理解。
另一个实际问题是稳定性。零样本克隆在 3-10 秒参考音频下效果不错,但如果参考音频噪声大、或者目标文本有生僻词,模型可能突然崩掉。长文本生成超过一两分钟,韵律就开始失去全局一致性——它会忘记前面说了什么情绪。
最后是伦理问题。微软在 VALL-E 论文里明确说,考虑到语音伪造风险,不打算开源模型。现在开源社区有类似能力的模型,但大多加了使用限制。这个技术如果被滥用,后果比 Deepfake 更直接——因为语音是实时通信里最容易被信任的媒介。
我的判断是:TTS 的’克隆’能力已经进入实用阶段,但’表现力’还停留在儿童水平。下一个突破点可能不是模型架构,而是如何让模型理解’语义’和’情感’的关系——比如让模型在读一段悲伤的新闻时,自动降低语速、增加停顿。这条路,比想象中要长。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/244.html