Meta 最近开源了一个 7B 尺寸的 Spirit LM 的多模态语言模型,能够理解和生成语音及文本,可以非常自然地在两种模式间转换,不仅能处理基本的语音转文本和文本转语音任务,还能捕捉和再现语音中的情感和风格。
在纯文本大模型取得进展的同时,其他模态数据,如语音与文本结合的语言模型(SpeechLMs)也成为了一个热门的研究领域,但现有的模型要么在仅包含语音的数据上进行训练,要么是关注特定任务,如文本转语音(TTS)、自动语音识别(ASR)或翻译,在其他模态数据和任务上的泛化能力十分有限。
在大型语言模型(LLM)性能不断提升的情况下,一个常用的方法是先用 ASR 模型将语音转录成文本,然后用文本模型来生成新的文本,最后再用 TTS 模型将文本转换成语音,这种流程的一个显著缺陷就是语音表达性不佳,语言模型无法建模并生成富有表现力的语音数据。
Meta 开源了一个基础多模态语言模型 Spirit LM,基于一个 70 亿参数的预训练文本语言模型,交错使用文本和语音数据进行训练,使模型能够自由地混合文本和语音,在任一模态中生成语言内容。
将语音和文本序列拼接成一条 token 流,并使用一个小型的、自动整理(automatically-curated)的语音-文本平行语料库,采用逐词交错的方法进行训练。
Spirit LM 有两个版本:基础版(Base)使用语音音素单元(HuBERT),表达版(Expressive)还额外使用音高和风格单元来模拟表达性,以增强模型在生成语音时的表现力,也就是说模型不仅能够理解和生成基本的语音和文本,还能在表达情感和风格方面表现得更加丰富和自然。
对于两个版本的模型,文本都使用子词 BPE 标记进行编码,最终得到的模型既展现了文本模型的语义能力,也具备语音模型的表达能力;模型还能够在少量样本的情况下跨模态学习新任务(例如自动语音识别、文本转语音、语音分类)。
不过需要注意的是,和其他预训练模型一样,Sprit LM 也可能会生成一些不安全的内容,所有基于该技术的应用都需要进行额外的安全测试和调整。
Spirit LM
模型的架构比较简单,训练过程就是基本的「预测下一个词」,不过「词」是通过编码器从语音或文本中提取的,然后通过解码器以原来的模态进行重新呈现;训练数据包括三种:仅包含文本的序列、仅包含语音的序列以及交错的语音-文本序列的混合数据。
基础版
语音编码器
使用的 HuBERT 模型,该模型在多个数据集的混合上进行训练,包括多语言的 LibriSpeech、Vox Populi、Common Voice、Spotify 以及 Fisher,最后得到一个包含 501 个音素语音 token 的词汇表。
语音和文本分词器
使用 LLaMA 默认的分词器来处理文本,使用前述的 HuBERT 分词器来处理语音;为了提高模型的质量,对 HuBERT 的 token 进行了去重处理;对于单模态数据集(仅文本和仅语音),在分词后的数据前加上相应的模态标记。
交错语音和文本(Interleaving Speech and Text)
对于对齐的语音 + 文本数据集,通过在单词级别交错语音和文本来混合“[TEXT] the cat [SPEECH][Hu3][Hu7]..[Hu200][TEXT] the mat”。
研究人员认为,交错训练可以帮助模型学习语音和文本之间的对应关系,从而实现更好的文本到语音的转换;在每个训练步骤中,句子中的语音和文本部分是随机采样的。
语音解码器
在从语音 token 进行语音合成方面,研究人员在 Expresso 数据集上训练了一个 HifiGAN 声码器,其依赖于 HuBERT 语音 token 和 Expresso 特定说话人的嵌入向量。
在训练期间,HifiGAN 模型会输入重复的 token,但同时也会训练一个时长预测模块,可以更准确地知道每个语音 token 在实际语音中应该持续多久,最终生成一个语音波形。
表达版
HuBERT 能够从语音中捕获良好的音素信息,但在表达性方面表现不佳。
研究人员的目标是在不依赖生物特征识别的情况下,模型依然能够理解和保留输入语音中的情感,所以需要用额外的音高 token 和风格 token 来补充 HuBERT 的音素语音 token,并将其包含在语言模型训练中,以便训练后的 Spirit LM Expressive 模型能够捕获并生成更具表现力的语音。
pitch(音高) token
在语音合成和处理中,音高是一个关键因素,决定了声音的高低,对人类理解语句的情感和语气来说非常关键。音高 token 可以用来捕捉音高变化。当我们说话时,声音的高低起伏不仅可以表达不同的情感,比如兴奋时声音高亢,悲伤时声音低沉,还可以帮助我们在口语交流中区分不同的词语和句子的意图。
研究人员在 Expresso 数据集上训练了一个 VQ-VAE 模型,码本大小为 64,下采样率为 128,即每秒可以产生 12.5 个音高 token;在训练音高量化器时,使用 pyaapt8 提取基频(F0);使用 FCPE9,一个基于 Transformer 的快速音高估计器,来提高推理速度。
style(风格) token
研究人员提取了语音风格特征来捕捉输入语音的表达风,在输入片段上进行平均池化处理,每秒生成一个特征,然后在 Expresso 数据集上微调特征来预测表达风格,从而进一步从语音风格特征中去除说话人信息,最后在 Expresso 数据集的规范化特征上训练了一个有 100 个单元的 k 均值聚类。
表达性语音分词器(Expressive Speech Tokenization)
将三种类型的标记(每秒 25 次的 HuBERT 标记、每秒 12.5 次的音高标记和每秒 1 次的风格标记)按照对应的时间戳进行排序,混合成一个单一的 token 序列。
与 Spirit LM 基础版相同,表达版同样对 HuBERT 的 token 和音高 token 进行去重,最后输入序列类似于:[SPEECH][St10][Pi0][Hu28][Hu22][Pi14][Hu15][Pi32][Hu78][Hu234][Hu468]
表达性语音解码器(Expressive Speech Decoder)
研究人员训练了一个 HifiGAN 模型,依赖于 HuBERT token、音高 token、风格 token 以及来自 Expresso 声音的 1-hot 说话人嵌入向量。同时还训练了一个时长预测器来预测 HuBERT token 持续时间。在推理过程中,将每个 HuBERT token 与相应的音高 token 和风格标记 token,并根据需要进行重复。
实验结果
Spirit LM 能够在接收语音 token 或文本 token 的提示时,生成语义和表达上一致的内容,将通过定量评估一系列需要生成文本或语音 token 的基准测试,特别评估 Spirit LM 在单模态和跨模态场景中的语义能力。
自动语音识别(ASR)和文本转语音(TTS)
与文本语言模型类似,SPIRIT 语言智能体可以通过少量样本提示来执行特定任务。
可以看到,Spirit LM 使用 10 个样本的提示能够获得最佳性能,最佳模型在 Librispeech 清洁数据上的词错误率为 21.9,文本转语音的字符错误率为 45.5
在训练中加入平行的 ASR 和 TTS 样本可以极大提高性能,但加入 ASR 和 TTS 数据对其他任务的影响非常有限。
在执行语音意图分类(IC)任务时可以发现,随着样本数量的增加,准确率也提高了,模型准确率达到了 79%。
跨模态对齐
为了更好地理解模型在仅在交错数据和原始语音和文本上训练的情况下,如何实现良好的跨模态性能的隐藏机制,研究人员查看了模型特征的 token 级相似性,其中特征来自于 HuBERT token 的输入序列和相应的 BPE token,计算了从不同层提取的语音和文本特征的相同单词的最大相似性。
结果发现,模型内部口语和书面序列之间的相似性从第 2 层和第 20 层开始增加,并且在早期到中间层中,在用单词级转录训练的模型中效果较差,表明模态混合可以对齐语音和文本,使模型能够将语音序列与相应的文本序列映射起来。
表达性建模
当不给智能体任何先前的样本,直接根据语音或文本提示生成内容(零样本)时,可以发现带有额外音高和风格 token 的表达版模型在大多数情况下都比基础版模型的表现更好,只是在文本内容生成(文本到文本)方面两者表现差不多。
当给模型少量样本来学习时,可以发现这种方法对于除了语音内容生成(语音到语音)之外的所有情况都有帮助。无论是零样本还是少量样本,保持情感的连续性在相同类型的数据(比如文本到文本或语音到语音)中比在不同类型的数据(比如语音到文本)中做得更好;在所有测试中,语音到文本的方向得分最低。
此外,研究人员还直接评估了模型对输入提示的处理能力,结果发现,无论是哪种提示,模型都能得到很高的评分,表明还有很大的空间来进一步提高模型在保持情感表达方面的能力,也意味着,智能体在理解和生成情感丰富的内容方面还有很大的潜力可以挖掘。
参考资料: