概述
语音合成技术一直是人工智能领域的一个重要分支,近年来,随着大模型的飞速发展,它在语音合成领域的潜力也逐渐展现了出来,大模型技术的应用让语音合成的效果达到了一个新的高度。本篇文章将详细介绍基于大模型的语音合成的基本框架以及其核心模块--Audio Codec。
在基于大模型的语音合成框架中,主要有以下几个模块:
音频编码器(Audio Codec): 用于将连续的语音特征编码成离散的音频token
大模型(LLM): 建立文本和音频token之间的关系。
声码器(Vocoder):用于从音频token中恢复语音。
在训练阶段,相应的流程如下:
首先文本经过tokenizer离散为token,然后从词表中找到对应的词向量构成大模型的输入,和文本对应的音频经过audio codec得到离散的音频token, 作为大模型的输出。然后大模型不断学习输入(文本)和输出(音频token)之间的关系。
在推理阶段
输入文本经由LLM生成音频token, 然后音频token经过Vocoder恢复成音频。
基于大模型的语音合成从结构上来看是比较清晰的,其中audio token的获取在整个结构中算是比较重要的一环。接下来就简单比较一下大模型语音合成中用的比较多的几种Audio Codec。一个比较通用的Audio codec框架可以表示成下图
Encoder: 从输入的音频特征特征中提取高维表示,音频特征可以是时域波形也可以是梅尔谱,然后将提取到的高维表示送入到Audio Codecs
Audio Codecs: 将Encoder提取的特征进行压缩,然后从压缩的特征先进行恢复然后再送入Decoder, 该模块对整个Audio Codec性能影响大。图中的Audio Codec主要是指quantizer模块,现如今的quantizer方法种类繁多,具体的可以参考
https://github.com/lucidrains/vector-quantize-pytorch
Decoder: 从Audio Codecs压缩-恢复后的特征中解码出语音。
下图比较了常见的几种audio codec的性能
其中A表示SpeechTokenizer, B表示AcademiCodec, C表示AudioDec, D表示DAC(Descript Audio Codec), E表示Encodec, F表示Funcodec。从上表可以看到DAC的性能要明显高于其它几种的codec模型。
上述的audio codec 基本都是使用多码本来编码语音信号,与LLM结合时要么是LLM预测单码本,然后根据预测的单码本再去得到剩下的码本,比如vall-e,或者是预测单码本,然后直接从单码本恢复语音,但此时会带来较大的语音失真,因此需要额外的模块如transformer或者diffusion去恢复剩下码本所携带的信息,如lauratts。又或者LLM直接同时预测多个码本,比如chatTTS或者fishspeech。上述两种方式或多或少增加了LLM的学习难度或者整体生成结构的复杂程度。其实单码本的audio codec 才是最契合大模型的,但由于语音中包含的信息太多,包括说话内容,说话人音色,韵律等等,很难用单码本去压缩语音,因此不得不把某些时不变特征如音色等单独解耦出来,让audio codec只去编码语音中时变的特征如说话内容。这样单码本的audio codec就可以实现了。在Facodec , Ticodec以及single-codec中解耦的思想就得到了很好的体现,这里再简单介绍一下single-codec,single-codec的整体结构如下
它通过reference encoder去提取语音中音色,环境等时不变特征,然后在编码器阶段减掉g即去除音色和环境的影响,最后在解码阶段再把g加回来,用于恢复语音。因此VQ模块(即quantizer)只是对语音内容进行了压缩编码(如果音色,环境等特征提取准确的话)。其中的Hybird Sampling和BLSTM模块旨在减少信息丢失。关于single-codec的效果可以参考:
https://kkksuper.github.io/Single-Codec/
虽然大模型的语音合成结构上看着没有特别复杂的东西,但是如何生成一个自然度高,情绪饱满的音频还是有很长的路要走,很多的细节要挖。比如数据的收集和精细化处理,LLM合成的稳定性和合成速度,如何更好的发挥大模型的能力等等。
领取专属 10元无门槛券
私享最新 技术干货