前言
近期,字节跳动的豆包大模型团队发布了其语音合成大模型的成果。其合成的语音效果与真人无异,在说话人的相似度和自然度方面都有非常好的表现,可谓是遥遥领先,远超竞品模型。在笔者体验到的诸多语音合成产品和模型中,seed-tts的合成效果可以算是最为惊艳的。
其技术报告虽然有刷KPI的嫌疑,隐藏了好些技术细节,但到底也像OpenAI的Sora一样,透露了一些值得玩味和借鉴的技术经验。因此,笔者想要借此机会对Seed-TTS的技术报告做一个简单粗陋的技术解读,与大家分享自己的技术观点。
总览
那么,Seed-TTS的效果有多惊艳呢?我们来看一个简单的示例:
Seed-TTS可以根据小说情节和不同的角色特质,呈现对应角色和情绪的“说书”。这个在微信读书、网易蜗牛读书、番茄小说等阅读APP中应用特别合适;
例如,对于下面这一段略显劲爆的有声小说文本:
我也不知是哪里来的勇气,一把抓住那放肆的手,可就在我抓住那手的瞬间,他将脸埋在我的耳边深吸一口,“别动。”“你……你到底要干什么呀?你饶了我吧,我真的错了,只要你放了我,你要我烧什么给你都行!”“你是我的女人,我只要你。”“欸哟,我给你烧蚕丝被,烧电热毯,再给你烧十个仿真娃娃,要啥明星款式都有。欸呀求求你放了我吧。”我说着都快哭了,抓着他的手也抖的厉害。哪知他听了噗嗤一笑,一口咬住我的耳珠狠狠的吮吸着,“不要再挣扎了,你生是我的妻,死是我的鬼!”
可以合成这样富有表现力的语音,每个角色的性格特质和情绪都传达得十分到位,不禁令人有身临其境之感。这样的小说,听着比读着更有滋味。
https://bytedancespeech.github.io/seedtts_tech_report/audios/Novel_samples/single-speaker/-3810254197712667818.wav
更多惊艳的音频样例,大家可以通过下面这个传送门来体验:
音频样例传送门:https://bytedancespeech.github.io/seedtts_tech_report/#model-overview
至于本文解读的技术报告原文,我也将链接放在下面。感兴趣的读者可以快速过完本文之后,再去阅读原汁原味的文章。
技术报告传送门:https://arxiv.org/abs/2406.02430
综观全文,笔者总结了以下几个要点:
Seed-TTS其实有两条技术路线:一个是基于decoder-only transformer的自回归路线,一个是基于扩散模型的非自回归路线。因为语音同时具备文本和图像的属性,究竟是偏向文本的自回归路线好,还是偏向图像的非自回归路线好,这一点其实谁也不知道。所以,字节跳动两套都做了。这基本上也是一些大研究团队在TTS大模型领域的通用做法。一个初步的结论是:Seed-TTS的自回归版本对流式处理相对友好,非自回归版本则对编辑任务更为合适;
Seed-TTS的自回归版本做了大规模预训练、说话人微调(Speaker Fine-Tuning, SFT)、指令微调(Instruction Fine-Tuning)和基于强化学习的对齐。说话人微调可进一步强化模型在特定人物上的表现;指令微调可以用自然语言提示去控制语音的情感等属性;基于强化学习的对齐则可以整合人类对于合成语音的偏好,鲁棒性、相似度和可控性。可以说,NLP中的常规做法,在TTS仍然行之有效;
Seed-TTS的自回归版本在自动评估和人类评估中都达到了与真人语音相当的水平;
Seed-TTS的非自回归版本(也称扩散版本),采用在Sora/SD3中大放异彩的DiT(Diffusion Transformer)作为主干,抛弃预估音素级时长的“祖宗家法”,大大简化了模型的pipeline;
Seed-TTS的纯扩散版本在自动评估中取得了和人类语音、自回归版本语音相当的结果,鲁棒性也有保证。至于人类评估结果怎么样,本文倒是并未提及。
如果仔细审视Seed-TTS的模型设计,我发现,它们大抵遵循三个原则:
全都要:既又自回归,又有非自回归,两手都要抓,两手都有硬;
极简化:在海量数据的加持下,追求模型的极度简化;
迁移借鉴:Copy from LLM and Image Generation,一切在LLM和图像合成上行之有效的良好实践,都值得在TTS上尝试一遍;
过完了要点和原则,让我们分别来看一下Seed-TTS的自回归路线和扩散路线分别是怎么走的吧。
01
自回归路线:基于tortoise-tts,化繁为简!
模型架构
对于TTS大模型,从2023年以来,学术界和工业界其实出了不少具备in-context learning(zero-shot/few-shot)能力的TTS模型(关于这些TTS大模型的简单介绍,可以参看笔者的另一篇文章的zero-shot TTS部分)。这些TTS模型通常会将低信息密度、长序列的连续语音数据压缩为高信息密度的tokens或者latents(其实就是码本中具体的token embedding),然后学习tokens/latents和文本之间的关系,最后将tokens/latents还原为音频波形。一句话总结成三段式:speech tokenizer + GPT/diffusion + token decoder。
其中最为关键地是token decoder的设计。已有的模型给出的解决方案基本上都遵循一个准则:语义token和声学token层次化解码,先语义后声学,或者先解码成MEL再后接声码器,并且非必要不做自回归(毕竟自回归上限虽高,但太吃数据了)!但这个准则就一定成立吗?
从报告中展示的模型架构来看,Seed-TTS自回归路线的模型架构仍然遵循上述的三段式。它的模型架构可以拆分为四个部分:
1) speech tokenizer:负责将参考音频转换成离散的speech tokens;
2) 自回归语言模型(autoregressive transformer):也就是GPT,基于参考音频的speech tokens和文本的text tokens生成输入文本对应的speech tokens;
3) 其后的diffusion transformer:则起到了脑补细节,增强音质的作用;
4) 最后的声码器(vocoder):负责将diffusion transformer的连续向量输出转换为音频波形。
其中3)的diffusion transformer可以看做是对GPT(Autoregressive Transformer)的补充。
图1:Seed-TTS自回归版本的模型架构
看完如图1所示的模型架构之后,笔者的脑海中顿时浮现出了三个问题:
问题1:链路上的Diffusion Transformer是否是必要的?
问题2:Speech Tokenizer对语音的编码结果是否细分为了语义(semantic)tokens和声学(acoustic)tokens,最后的解码是否也要做层次化的解码?
问题3:模型架构和tortoise-tts高度相似,那为什么不直接用tortoise-tts?
问题1: Diffusion的必要性?
对于这一点,笔者的回答是:在当前的算力和技术下,diffusion在TTS的模型架构中还是必要的。之所以会持有这样的论点,原因无非是以下几点:
其一,Diffusion可以增强合成语音的音质,脑补audio tokenization阶段丢失的细节信息,就像是text-to-image和video generation任务中扩散模型的作用一样。一个更为直接的论据是,SOVITS-SVC的新版本在引入diffusion之后,生成音频的音质提升非常大。
其二,目前的各种音频编解码器(neural codec)对音频的压缩还是非常保真和高效的,diffusion结合声码器(vocoder)的结构可以稳定还原出连续表征空间中的audio latent。但是,基于GPT的离散audio tokens的还原做得还不是很好。
其三,随着算力的持续上升和audio tokenization技术的不断改进,离散的audio token的还原效果会越来越好,diffusion在图像、视频和音频的就业空间也会被以GPT为代表的自回归建模所取代。那个时候,diffusion在TTS中就没有必要了,直接audio tokenization + decoder-only transformer + token decoder就能完美解决TTS这个任务了。
问题2: speech tokens的猜想
对于speech tokenizer,它的设计非常重要,需要考虑到训练数据(人声、音乐还是普通的音频,比如风声、狗叫声等)、采样率、比特率以及码本大小等诸多因素。参考李宏毅组关于audio language modeling的综述论文,表1中列出了当前常见的speech tokenizer。
不过,该技术报告并未明确指出使用了何种speech tokenizer,也没有透露任何关于码本数、采样率、比特率等关键信息,,只是说它很重要(当然,这谁都知道!)。
不过,我们也能从上述的模型架构图中发现一些端倪:Seed-TTS的speech tokens解码似乎并不遵循先语义tokens后声学tokens的层次化解码方式。
表1:常见的Speech Tokenizer
这一点发现似乎有点违背当前的学术共识,因为层次化解码的流程已经在VALL-E和SpearTTS等一众TTS大模型中被广泛采用。表2中罗列了常见的TTS大模型的基本情况。而且,根据谷歌的AudioLM的实验结果来看,如果没有文本或者语义(semantic) tokens的引导,模型在解码声学(acoustic) tokens时就会胡言乱语。
表2:常见的TTS大模型拆解,基于自回归路线
但是,只要我们注意到GPT架构的特性,再联想起Ilya Sutsekever关于GPT/BERT的话,我们就能很自然地想到这样一个问题:如果语音数据的规模进一步扩大的话,即使我们不做文本引导和语义引导,只训练acoustic tokens,模型估计也不会胡言乱语。笔者算是scaling law的坚定信徒,笔者相信:语音数据如果扩展到100万小时的话,我们仅用acoustic tokens,也能做好TTS;在低数据量(低于65万小时)的情况下,模型训练加入语义信息,对最终合成的质量确实是大有帮助,但是数据量进一步提升之后,这种由语义信息带来的提升收益会逐渐收窄。
还有一点,Seed-TTS训练用到的数据量非常大,远超以往,可能是千万小时。结合这一点,笔者猜测Seed-TTS的speech tokens用更简洁,应该只需要acoustic tokens就够了。一个最容易想到的结构就是:Flattened RVQ + GPT。毕竟,数据规模都搞得这么大了,模型肯定是越简洁越好的。
问题3: 为什么不用tortoise-tts?
不难看出,Seed-TTS的模型架构和tortoise-tts高度类似:二者都具有语音离散化、自回归语言建模、扩散模型补充细节、以及最后的声码器还原。不同点在于:Seed-TTS的语音离散化方法似乎是对tortoise-tts的“梅尔频谱图+VQ”的音频离散化方法做了优化。之所以会这么做,应该是因为tortoise-tts本身的VQ训练得并不充分,导致tortoise-tts合成语音的音质并不是十分令人满意。
如果深究的话,语音数据使用梅尔频谱图作为中间表征,其实也有一些局限性:梅尔频谱图和图像其实形似神不似,它在频率轴上其实并不具备平移不变性。如果模型中使用卷积模块来处理梅尔频谱图特征的话,inductive bias其实并不是十分充足。个人认为,这也是导致tortoise-tts音质并不令人十分满意的一个原因。
图2:tortoise-tts的模型架构
下面是tortoise-tts在三万小时中文数据上微调的音频示例。比较参考音频和合成语音,二者的音色相似度是非常高的,合成语音的音质不是太好,最后会有非常明显的摩擦电音。
参考音频:
https://github-production-user-asset-6210df.s3.amazonaws.com/27419496/297261171-a6cf9634-cf09-4e27-baf9-b4f86ce6533c.webm?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240630%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240630T051149Z&X-Amz-Expires=300&X-Amz-Signature=5cc7a3de83dcd3c56b63fb4943edf2063a81e8a865a065f27ba33f91ef0c1c14&X-Amz-SignedHeaders=host&actor_id=19572535&key_id=0&repo_id=709361780
合成文本:
四是四,十是十,十四是十四,四十是四十。
合成语音:
https://github-production-user-asset-6210df.s3.amazonaws.com/27419496/304432990-1c0129e8-bc18-41e6-a43c-3f795a90ac2e.webm?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240630%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240630T051343Z&X-Amz-Expires=300&X-Amz-Signature=0317d2f14f2a0fa22be09c1f6e05708725ff60b9f9cd3dba527348495dbd84ef&X-Amz-SignedHeaders=host&actor_id=19572535&key_id=0&repo_id=709361780
在问题2的解答中,我们提到了对Seed-TTS训练数据量的猜测。既然数据规模可能达到了千万小时的级别,根据scaling law,TTS模型的参数量也应该随之增大。报告中提到:他们的模型特别大,部署难度也大。字节跳动的MegaTTS2最大的参数量是1.0B,合理推测:Seed-TTS估计会超过7B。模型这么大,势必会对部署和落地造成极大的挑战。由此,我们有问题4。
问题4:如何降低模型的推理时延
关于这一点,报告中有明确提及一些技术点,我们罗列如下:
其一,既然自回归版本的模型中有GPT,那在LLM上用来降低显存和计算复杂度的技巧,同样用在这里。典型的技巧包括:GQA(Grouped Query Attention, 分组查询注意力)、paged attention(分页注意力)和flash attention 1/2以及模型量化;
其二,模型链路上有扩散模型,而且扩散模型还是用transformer实现的,那流式处理肯定是能做的。扩散模型再叠加Flow Matching/Rectified Flows以及基于logit-norm/mode的噪声采样技术的buff,采样效率与合成速度是可以进一步提升的。如果再用上扩散模型单步蒸馏的trick,那更是可以在保证合成质量的情况下,将采样效率提升到极致。
其三,笔者自己想到的,GPT为了提速,像投机解码这样方法也不是不能用。
当然,上面罗列的技术点不一定就是最终的解决方案。如果非要用一句话来概括的话,那就是我们在前文提到的一个原则:一切在LLM和图像合成上行之有效的良好实践,都值得在TTS上尝试一遍!!!
02
训练方法
除了模型架构方面,Seed-TTS在训练方法上也有较大不同。在如今大语言模型(Large Language Model, LLM)大行其道的时代,TTS模型的训练也不可避免地走上了LLM的来时路,也就是大家熟悉的三阶段训练方法。
第一阶段是大规模的预训练。训练语料是海量的粗对齐的文本和语音,这个和LLM还不一样。这一阶段的任务是让模型见够世面,熟悉各种社会场景和说话人特性。典型的社会场景有:有声书、新闻、访谈、电视剧、电影、开放世界游戏等;典型的说话人特性包括:语速、音高、情感、口音。前面也提到,字节的Seed-TTS在这方面似乎是做到了极致。文章宣称,其使用的训练数据量超过了以往最大TTS,而且是超过若干数量级。从公开发布的信息来看,目前最大的训练数据量在65万小时(吉利汽车的HAM-TTS)。如果是要超过若干个数量级的话,估计应该有千万小时了。
第二阶段是微调阶段,具体分为:说话人微调(Speaker Fine-Tuning, SFT)和指令微调(Instruction Fine-Tuning)。说话人微调就是要特地增强某一类人的合成性能,就是我们常说的语音克隆;指令微调则是允许用户通过自然语言提示去控制合成语音的某些特性,比如情感、语速、语调等,增强模型的可控性和交互性。这在游戏配音的业务场景中可以说是刚需。
第三阶段是基于强化学习的对齐。这个阶段的方法有两类:一类是以PPO为代表的on-policy路线;一类是以DPO为代表的off-policy路线。前者需要模型在训练过程中做生成,更占显存,训练也会更耗时,但这种方法的上限显然更高,毕竟我们对模型的能力进行的实时打分,给予的是及时反馈。后者的优势就在于实现简单,但要求给定的水和模型自身能合成的语音是接近的。当然,针对PPO吃显卡、训练慢的缺点,诸如ReMax、GRPO这样的改进方案也值得尝试。DPO即使是在数据分布接近的情况下,也有自身的局限性。TDPO、ORPO之类的方法也值得尝试。不过,纵观全文,文章仅仅简单论述了PPO和DPO的优点就完事了。对其中的一些坑,没有做过多地提及。
文章宣称,Seed-TTS模型有两大优点:
其一,模型在情感表达上有显著优势,可以应付这种情绪起伏大的场景。这或许强化学习拔高情感表现力的结果,其后的实验结果可以证明这一点。
其二,Seed-TTS较好地解决了长期以来困扰自回归建模的稳定性问题。
至于解决方案,该技术报告中并没有明确提及,但应该不是像HAM-TTS/RALL-E那样引入外部信息来做,也不像VALL-R/ELLA-V/VALL-T那样做音素的单调对齐,这样就复杂化了,不利于模型的规模化和数据的规模化。在笔者看来,像VALL-E 2那样的分组解码策略或许是一个解决方案。当然,Seed-TTS本身海量的数据也有助于改善自回归模型的稳定性。现在的speech tokens编码的大多是小于40ms的帧,其对应的时长小于音素,若能提升speech tokens编码单位的大小,加强其整体性,自回归的稳定性估计也会有改善。
03
实验结果
对应训练方法中的三个阶段,对模型能力的评估也可以分为三个方面,即:零样本语音合成能力的评估、说话人微调能力的评估、指令微调能力的评估以及强化学习作用的评估。
评估指标
语音合成的评估指标,可细分为客观评估和主观评估。
客观评估,看的就是词错误率(WER)和说话人相似度(SIM)。所谓词错误率,就是把合成的语音丢给ASR模型去识别出对应的文本内容,看识别出的文本和输入的文本差别多大。所谓的说话人相似度,就是将参考语音和合成语音都扔给某个模型去抽取speaker embedding,然后比较两个speaker embedding的相似度。
主观评估,也就是人工评估,把不同模型合成的语音或者ground truth扔给同一个人去听,看人对语音的偏好。这个指数就是CMOS。值得一提地是,人工评估的数据集包含了口音、方言、情感和说话风格,这也确保了评估的挑战性。
零样本语音合成的能力评估
与人类的真实语音比较,有这么几点值得注意的结论:
WER和人类表现相当,说话人相似度会比人类要高;
WER低,并不与语音合成质量高等价,它只能说明模型合成的语音更加标准化,口音口癖少(比如口吃),变化有限,不如人类的真实语音来得自然,因而更加容易被ASR(Automatic Speech Recognition,自动语音识别)模型识别出内容。
从人工评估的结果来看,模型合成的语音几乎可以达到以假乱真的地步。报告强调,竞品模型的CMOS通常都会低于-1,Seed-TTS可以说是“遥遥领先”!
还有一点,就是TTS模型一直以来的通病:合成语音的韵律变化明显不足,相比于人类的真实语音都太平了。因为真实的人类语音在句子间是会有变化的。对于这一点,本人在实践中深有体会,也是最经常被策划同学所诟病的。也正是因为如此,TTS模型合成的语音还不能应用在开放世界游戏的主线剧情中。对于这一点,作者指出,可能得用few-shot learning来解决。
图3:Seed-TTS自回归版本的合成性能与人类表现的对比
除了与人类的真实语音相比较,报告还将Seed-TTS的合成性能与传统的微调模型相比较。对于这一点,笔者是比较欣喜的。早在VALL-E的解读文章中,我就提出了一个疑惑:以VALL-E为代表的TTS大模型能否在in-context-learning的情况下,合成比VITS/FastSpeech这样经过下游说话人数据微调后的模型更好的效果呢?遗憾地是,迄今为止,笔者读过的所有TTS大模型文章都对这一点避而不谈、讳莫如深。因为笔者做的是游戏配音的业务需求,游戏本身的角色数据其实够多,zero-shot的音色克隆虽然fancy,但如果效果不如经过微调后的VITS/FastSpeech的话,那TTS大模型对我们的价值其实并不大。因而,笔者猜测,可能是这些模型的训练数据量还不大,导致zero-shot的性能比如下游微调的性能。这一情景,与NLP中的GPT-3不如诸多特定领域的NLP小模型相比,感觉并无二致。更有可能地是,今天的你我,在TTS领域,依然会重复昨天发生在NLP上的故事。
Seed-TTS算是第一个给出这方面比较结果的报告了,非常有参考意义。他们的实验分了两种场景:其一,普通的日常语音;其二,包含强烈口音或者非常独特、夸张的说话风格(这一类语音在游戏场景中十分常见)。在比较的时候,Seed-TTS随机抽取一个平均时长为15秒的语音作为提示,微调模型的主干是FastSpeech,数据用了5个小时。最终的比较结果如图。主要结论如下:
对于简单的日常语音,Seed-TTS的zero-shot合成完全可以cover了;
对于复杂的语音,Seed-TTS依然做不好,VITS/FastSpeech在这一块依然有就业空间;
图4:Seed-TTS自回归版本的合成性能与微调模型的对比
对于第二点,报告认为,使用更长的语音提示和更加全面的训练数据,这一情况是可以缓解的。对于更长的语音提示,字节的megatts2已经有过尝试,直接凑同speaker的数据硬训就可以了。而且,现在TTS的底层模型也在往GPT为代表的decoder-only transformer上切换,那些NLP领域的长上下文技术在TTS领域也会有很大的用武之地。还是那句话,一切在LLM上的良好实践,都值得在TTS上尝试一遍!
为了进一步秀肌肉,论证模型合成语音的质量实属上乘,作者用纯合成的数据来训练ASR模型。合成数据训练出的ASR模型完全可以识别干净的语音的内容,但做不好包含噪声的脏语音的识别。这是因为:在TTS数据构造的过程中,我们通常会倾向于构造干声数据,去除原始语音中的背景音和噪声,让TTS合成的语音也相对比较干净。但是,用这种相对干净的数据去训练ASR模型,鲁棒性显然是不够的。笔者觉得,作者可以在这里补充一些实验,给合成数据加噪,再训练一个ASR模型看看效果,应该是会有提升的。
图5:Seed-TTS自回归版本的合成数据可以训练出不错的ASR模型
此外,合成语音和提示语音的音色相似度也是有保证的。
图6:Seed-TTS自回归版本的合 成语音与参考语音的音色聚类
微调能力的评估
在这一部分中,作者做了两个方面的实验:一个是用说话人的数据做微调,做声音克隆;一个是做指令微调,语音合成的时候不仅参照transcription,也要参照description。
对于说话人微调,作者用了5个说话人,共计20小时的数据。结果显示,微调后的模型和ICL模型在客观指标上相似,但在主观指标上有明显提升。比如说,微调后的模型更加能够捕捉到说话人的细微的语调变化和句末独特的发音模式。
不过,这里笔者有两个疑问:
不微调的模型在CMOS测试中人类真实语音都不相上下了,那微调后的模型呢?作者并没有给出这方面的比较结果。
TTS大模型经过微调之后,与在同一份数据上微调的VITS/FastSpeech相比,模型性能孰优孰劣呢?这一部分的结果,作者也没有给出。
图7:Seed-TTS说话人微调前后的性能对比
在指令微调的实验中,作者希望通过自然语言提示来控制合成语音的属性,如表达力、语速、风格、情感等。对于这一部分,作者仅仅展示了情感控制的结果。对于属性控制的实现方式只字未提。
对于这里的实现方式,可以参考笔者在另一篇文章中引述的一些工作,最典型的就是ParlerTTS和VoiceLDM。
从实验结果中可以看出,经过SFT微调后的模型本身就可以到speaker utterance中的部分情感,加入情感控制的提示之后, 模型对于情感的控制力得到了很大程度的拔高。
图8:Seed-TTS自回归版本指令微调前后的情感控制力对比
强化学习作用的评估:调整模型的偏好
把强化学习用在语音合成领域,Seed-TTS不是第一个,复旦大学的SpeechGPT-Align已经做了这方面的研究。报告称,它将PPO和DPO都用了一遍,发现前者允许对特定的语音属性进行明确的控制,后者的优势在于实现简单。不过,报告展示的实验结果到底是PPO还是DPO得到的,并没有明说,不过估计应该是PPO。
报告尝试了两种奖励函数:一是WER和说话人相似度,让强化学生直接拉升这两个指标;二是情感的准确度。从结果来看,强化学习确实可以拔高合成语音对人类偏好的契合程度。
图9:Seed-TTS自回归版本经过WER-SIM强化前后的性能对比
图10:Seed-TTS自回归版本经过SER强化前后的性能对比
04
非自回归路线:纯扩散,不法常可!
Seed-TTS除了做了自回归版本,也做了非自回归版本。非自回归版本的Seed-TTS的模型架构如图所示。有以下几个显著的特点:
Diffusion模型的主干使用transformer实现,也就是diffusion transformer(DiT)。DiT在视频生成的Sora、图像合成的SD3(Stable Diffusion 3)都已经显示了其比UNet主干更大的优势。Transformer相比与UNet,在扩展性更加具有优势,以后应该会是基于扩散的TTS的主流选择。
不做音素级时长的估计,只做语音整体时长的估计。这种设计的灵活性更大,能调整每个音素的持续时间,从而产生高度自然的语音。其实,字节会采用这种做法,应该是很自然的。他们之前的megatts1/2都需要做音素级别的对齐。现在数据量上去了,再做这种麻烦且耗时的操作,就很没有必要了。
图11:Seed-TTS的纯扩散版本的模型架构
模型架构
尽管报告中并未详细论述纯扩散版本的模型架构,笔者还是想结合一些自己的经验和近期的阅读,谈谈对这部分内容的看法。在我看来,一个纯扩散的语音合成模型要想取得好的效果,必须做到以下几点(有几点已经在报告中提及):
其一,扩散模型的主干用上diffusion transformer,易于做模型的规模化和数据的规模化;
其二,以前用扩散模型做非回归的TTS,很容易被FastSpeech这样的“祖宗家法”束缚住手脚,要单独训练音素级别的时长预测模型和音高预测模型。这在大数据规模的情况下会非常耗时,处理起来也会非常麻烦。要想办法去掉这两个音素级别的模型。至少退化成话语(utterance)级别的模型也行;
其三,扩散模型的建模目标用上更为高效的Flow Matching/Rectified Flows,提升采样效率。像logit-norm那样的采样技术也能用上;
其四,扩散模型的建模还能再用上单步蒸馏,将采样效率做到极致;
对于上述几点要求,近期发表的一些论文可以作为支撑。我们来简单地过一下。
DiTTo-TTS:DiT + 抛弃音素级时长建模
DiTTo-TTS由韩国的游戏开发公司KRAFTON在今年6月份发表。
DiTTo-TTS这篇文章为笔者的第一点和第二点看法提供了非常有力的支撑:其一,TTS扩散模型用DiT,确实能取得更好的效果;其二,DiT抛弃音素级的时长信息,不仅能简化数据处理的流程,助力模型规模化,在鲁棒性、说话人相似度和推理速度上也有明显的提升(图13中的蓝框对比)。这一现象背后的原因也不难想到:模型在合成语音的时候,只是限定总体时长,每个音素的持续时长可以根据实际情况自由调配,这样合成出的语音的自然度和多样性都会有保证。而且,只预测一个总体时长,耗时肯定小于预测所有音素的时长,推理耗时的降低也在情理之中。
当然,这篇文章对于一些DiT的一些改进工作也有值得借鉴的地方:
DiT的位置编码用旋转位置嵌入(Rotary Position Embedding, RoPE);
使用结合全局AdaLN(Adaptive Layer Normalization,自适应层归一化)的交叉注意力;
此外,语音的离散表征使用压缩效率更高的MelVAE,而不是Encodec。
图12:DiTTo-TTS的模型架构
图13:DiTTo-TTS的消融实验结果
当然,这篇文章的一些做法也有见仁见智的地方:
文章使用的训练数据在10万小时以内(8.2万小时),为了保证顺利地解码去噪,仍然使用了语义注入的方式。从实验结果来看,语义注入的方式固然可以显著提升WER和CER等鲁棒性指标,但说话人相似度指标是下降或者是略微提升的。笔者认为,当训练数据较少并且音频编码器不包含语义信息的时候,这种语义注入的方式是可取的。当训练数据较大的时候,可能就得打破常规了,这种做法就没必要了。
文中的扩散模型采样25步会有比较好的结果,WER和说话人相似度给出的更是250步采样的结果,合成10秒的语音大概需要1秒的推理时间。因此,DiTTo-TTS这一工作还是有较大局限性的。它的采样效率与合成速度还有很大的提升空间。笔者认为,如果扩散模型不用经典的DDPM,而是用(Conditional) Flow Matching和Rectified Flows等方法来做,再结合一些单步蒸馏的做法,DiTTo-TTS的采样效率与合成速度是可以进一步提升的。文章给出的结果还是挺学术化的。
用Flow-Matching提升采样效率与合成质量
那么,扩散模型要怎么用Flow Matching来提升性能呢?TTS上的这类做法可能不多,我们不妨参考一些图像合成任务上的工作。笔者比较推荐的一篇是工作是StabilityAI的:《Scaling Rectified Flow Transformers for High-Resolution Image Synthesis》。从题目上来看,就知道它是大规模论证Flow Matching/Rectified Flows + Diffusion Transformer在图像合成任务上的优势的文章。有点类似于OpenAI的ADM和GLIDE。
这个工作给人印象深刻的点有两个:
其一,改进了Rectified Flows的噪声采样技术,加大损失函数对中间点的权重,减少对采样过程的起点和终点的关注;
其二,就是做了大规模的实验来论证改进后的Rectified Flows模型相对于现有的经典扩散模型(LDM)的优势。
关于第一点,其实也很好想,套一个中间高、两边低的转换函数上去就完事了。如果要想利用像高斯分布这样现成的概率分布,还要再做一下定义域的转换。为简单起见,咱们就不给转换函数的表达式,直接上图。至于哪种函数效果好,哪种参数设置效果更优,一切都要由实验决定。
图14:两种常用噪声采样函数
咱们直接看实验结果。不难看出,"rf/lognorm(0, 1)"(这里的0和1代表高斯分布的均值和标准差)配置下的模型在各种情况下基本上就是最优解。不论是少少数的5步、多数的50步,经过lognorm(0, 1)加权后的Rectified Flows都极具竞争力!
图15:不同配置下的扩散模型在图像合成任务上的性能对比
即便是看不同步数下的采样结果,也是Rectified Flows + lognorm(0, 1)的组合配置最有优势。
图16:Rectified Flows模型在采样效率上的优势
因此,在笔者看来,这种Rectified Flows + lognorm加权的配置完全可以迁移到语音合成任务上,让语音合成任务跑5步、10步就能有非常不错的效果。而不是为了得到好的词错误率和说话人相似度,去跑茫茫多的250步。这样的模型在业务上的应用是有限的。
至于Flow-Matching能否用于语音合成,用在语音合成任务上效果如何,感兴趣的读者们可以参考ICASSP 2024上的几篇论文。这几篇论文分别是Matcha-TTS、VoiceFlow、ReFlow-TTS。算是Flow-Matching效果的一个初步验证吧,数据规模都不大,最大的也就用到了585小时的LibriTTS。
单步蒸馏+多步预测:将采样效率提升到极致!
既然诸如Rectified Flows + 噪声加权的形式可以压缩扩散模型的采样步数,那何不压缩到极致,压缩到单步,甚至是半步(一步跑两个tokens)、1/4步(一步跑四个tokens)。这有点类似大语言模型中流行的投机解码了。
港中深一篇名为《Autoregressive Diffusion Transformer for Text-to-Speech Synthesis》做了这方面的工作,非常值得一读!这篇文章有几个创新点非常令人耳目一新:其一,在每个自回归步骤中使用积分KL散度进行蒸馏,提升样本的感知质量,并将扩散模型的迭代迭代采样过程压缩为单步;其二,文中提到的ARDiT模型可以在训练中一步预测多个连续的向量,显著降低采样过程中的延迟;其三,通过RoPE的旋转角度可以控制合成语音的时长。
图17:ARDIT的模型架构图
实验结果
和Seed-TTS的自回归版本相比,Seed-TTS的DiT版本的实验结果并不是很多。报告仅给出其在zero-shot客观评估、内容编辑和语速控制上的结果。说话人微调、指令微调、强化学习这些内容都没有给出。
从图的实验结果来看,纯扩散的模型比相比于自回归模型,在说话人相似度上更有优势,在WER则基本相当。这样看来,在TTS领域,基本上是扩散模型和自回归两分天下的局面。
图18:Seed-TTS纯扩散版本的模型性能:客观评估
纯扩散模型在内容编辑和语速控制任务上也有非常好的鲁棒性。
图19:Seed-TTS纯扩散版本鲁棒性的评估
05
全文总结
读罢全文,不得不感叹字节跳动语音合成技术团队的强大。他们用上了海量的数据和极大规模的参数量,可以说是彻底打破了传统的TTS技术路线也不为过。另外,在语音领域,新技术的应用可能都没那么及时。很多大语言模型和图像合成上行之有效的方法都还没用到TTS,这些东西都值得在TTS中尝试一遍。
参考文献
(tortoise-tts) Better speech synthesis through scaling
hungyi-lee’s survey:Towards audio language modeling - an overview
SpeechTokenizer: Unified Speech Tokenizer for Speech Large Language Models
(AcademiCodec) HiFi-Codec: Group-residual Vector quantization for High Fidelity Audio Codec
AudioDec: An Open-source Streaming High-fidelity Neural Audio Codec
(DAC) High-Fidelity Audio Compression with Improved RVQGAN
(Encodec) High Fidelity Neural Audio Compression
(VALL-E) Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers
(SpearTTS) Speak, Read and Prompt: High-Fidelity Text-to-Speech with Minimal Supervision
AudioLM: a Language Modeling Approach to Audio Generation
RALL-E: Robust Codec Language Modeling with Chain-of-Thought Prompting for Text-to-Speech Synthesis
HAM-TTS: Hierarchical Acoustic Modeling for Token-Based Zero-Shot Text-to-Speech with Model and Data Scaling
VALL-E R: Robust and Efficient Zero-Shot Text-to-Speech Synthesis via Monotonic Alignment
ELLA-V: Stable Neural Codec Language Modeling with Alignment-guided Sequence Reordering
VALL-T: Decoder-Only Generative Transducer for Robust and Decoding-Controllable Text-to-Speech
VALL-E 2: Neural Codec Language Models are Human Parity Zero-Shot Text to Speech Synthesizers
VoiceCraft: Zero-Shot Speech Editing and Text-to-Speech in the Wild
Mega-TTS: Zero-Shot Text-to-Speech at Scale with Intrinsic Inductive Bias
Mega-TTS 2: Boosting Prompting Mechanisms for Zero-Shot Speech Synthesis
NaturalSpeech 3: Zero-Shot Speech Synthesis with Factorized Codec and Diffusion Models
(Flow Matching) Flow Matching for Generative Modeling
(Rectified Flow) Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow
(ParlerTTS) Natural language guidance of high-fidelity text-to-speech with synthetic annotations
VoiceLDM: Text-to-Speech with Environmental Context
(DiT) Scalable Diffusion Models with Transformers
DiTTo-TTS: Efficient and Scalable Zero-Shot Text-to-Speech with Diffusion Transformer
关于LitGate
大家好,我是LitGate,一个专注于AI创作的游戏社区。我们的新版官网已经上线✨你可以在里面找到各种AI创作的实操案例,以及已经沉淀的AI游戏创意demo,相信一定能让你大开眼界!
我们还有一个讨论群📣,如果你对AI创作感兴趣,或者有什么问题想要咨询,欢迎加入我们的讨论群,和大家一起交流学习!(PS:目前群内人数较多,为了有一个优质的讨论环境,请各位添加社区管理员企业微信账号邀请入群
更多精彩活动和功能筹备上线中,敬请期待~
关注我们,一起探索AI创作的无限可能吧!
新版官网地址:www.litgate.ai