文本转语音是怎么工作的
两个阶段:文本变成频谱图,频谱图变成音频。另外,为什么韵律才是难点,而延迟才是现实问题。
文本转语音就是把语音识别反过来跑,它分成两个阶段,通常由两个独立的模型承担。
第一阶段把文本变成梅尔频谱图——和识别所消费的是同一种「频率随时间变化」的图像。
第二阶段叫声码器(vocoder),把那张频谱图变成真正的波形。
之所以要拆开,是因为这两个问题性质不同。预测声音应该长什么样,是语言和韵律问题。从这个描述里产出可信的音频样本,是信号生成问题。
第一阶段:文本到频谱图
输入文本要先归一化,而这一阶段造成的现实错误比神经网络那些部分还多。Dr. 可能是「doctor」也可能是「drive」。1996 可能是年份也可能是数量。St. 可能是「street」也可能是「saint」。这些地方弄错,产出的就是自信地读错音的结果,而解法是规则和词典,不是更好的模型。
然后文本——或者由它推导出的音素序列——被编码并映射到频谱图帧上。
这里的根本困难在于这个映射是一对多的。 一个句子没有唯一正确的读法。哪些词重读、停顿落在哪里、句尾音高要不要上扬——全都是合法的变化,而模型必须选一种。在多种可能上取平均,得到的就是老系统那种平淡、没有个性的念读。
韵律就是全部关键,而它取决于含义。「I never said she stole it」这句话,重音不同就有七种不同的读法。一个不表达意图的模型,没法可靠地挑中正确的那一种。
第二阶段:频谱图到波形
频谱图丢掉了相位信息,所以重建不是简单求逆——声码器必须生成合理的波形细节。
早期的神经声码器逐样本自回归地生成音频。质量极高,但以每秒几万个样本的速度,慢到无法实用。
如今的系统改为并行生成,通常用对抗方式训练:一个生成器产出音频,一个判别器判断它听起来像不像真的,两者互相对抗着训练。质量逼近自回归的做法,成本却只是零头,实时合成这才变得可行。
声音克隆
一个说话人 embedding 为合成提供条件,把音色和说话风格捕捉成一个向量。
有一位说话人足够多的录音,你就能微调出一个高度还原的声音。更惊人的是零样本克隆:几秒钟的参考音频就能产出一个足够好的说话人 embedding,不用任何训练就能做出可辨认的模仿。
这确实有用——无障碍、本地化、统一的品牌声音——也确实危险。声音在银行业、在家庭关系里、在新闻报道中都被当作身份信号。由此引出两件值得直说的事:克隆任何人的声音之前先取得同意,并且不要再把声音当作可靠的身份验证手段。基于声音的身份核验不可靠,现在还依赖它来搭系统,就是一种设计错误。
端到端的转变
更新的系统在减少甚至取消这个两阶段拆分,用单个 transformer 直接从文本生成音频 token——把音频当作来自一张学出来的码本的离散 token 序列,和文本使用词表的方式完全一样。
好处在韵律。一个同时看到文本、产出音频 token 的单一模型,可以基于整句话的含义来决定语调,而不是在还不知道听起来会怎样的时候就先定死一张频谱图。近来音质的提升就来自这里。
实操要点
延迟分成两个数字,和流式输出文本一样:首个音频出来的时间,以及相对实时的生成速度。对对话类应用来说,前者重要得多——开口前的延迟才是让人觉得「坏了」的东西。
两个阶段都要流式。 语言模型的文本一边到达,你一边逐句合成,而不是等完整回复。这就是一个感觉灵敏的助手和一个感觉迟钝的助手之间的差别。
控制标记各不相同。 大多数系统都接受某种指定停顿、重音或发音的方式。任何生产用途都值得学一学——模型读错的地方,就是靠它来修。
拿你真实的文本去测。 数字、缩写、代码和专有名词是合成最容易出洋相的地方,而通用 demo 从来不包含它们。
要点回顾
- 两个阶段:文本 → 频谱图(韵律问题)和频谱图 → 波形(声码器,信号问题)。
- 文本归一化造成的错误比神经组件更多——缩写和数字尤其。
- 这个映射是一对多的;韵律取决于含义,这正是端到端模型在改善它的原因。
- 并行的对抗式声码器取代了逐样本生成,让实时变得可行。
- 零样本声音克隆只需几秒音频:先取得同意,并且别再拿声音当身份验证。
下一篇: 文档理解与 OCR