SpeechGPT系列:语音大语言模型

开源:https://github.com/0nutation/SpeechGPT

SpeechGPT (2023/05) - Empowering Large Language Models with Intrinsic Cross-Modal Conversational Abilities
SpeechGPT(2023/05)-为大型语言模型提供内在的跨模态会话能力

SpeechGPT-Gen (2024/01) - Scaling Chain-of-Information Speech Generation
SpeechGPT-Gen(2024/01)-缩放信息链语音生成

SpeechAgents: Human-Communication Simulation with Multi-Modal Multi-Agent Systems
SpeechAgents:多模态多智能体系统的人机交互仿真

SpeechAlign:  
Aligning Speech Generation to Human Preferences
SpeechAlign: 使语音生成与人类偏好保持一致

paper:

   https://arxiv.org/abs/2401.03945 [SpeechAgents]
   https://arxiv.org/abs/2305.11000 [SpeechGPT]
   https://arxiv.org/abs/2401.13527 [SpeechGPT-Gen/SpeechGPT2]
   https://arxiv.org/abs/2404.05600 [SpeechAlign]

这算是复旦大学邱锡鹏组在这个领域一个成系列的工作,我们一个一个来看。SpeechGPT是一种基于深度学习的语言模型,它能够理解和生成自然语言。SpeechGPT是一种新型的大型语言模型,它不仅能够理解语音和文本,还能够在这两者之间自如转换。简单来说,它能够感知和表达情感,并根据上下文和人类指令提供多种风格的语音响应。无论是说唱、戏剧、机器人、搞笑还是低语,SpeechGPT都能够根据需要生成相应风格的语音。

SpeechGPT

SpeechGPT做的是兼具语音理解能力和语音生成能力的多模态模型。在模型的训练上,SpeechGPT大幅度向LLM看齐,使用了三段式的训练方法:第一阶段先做模态适应的预训练,其实就是拿ASR的语音数据来做预训练;第二阶段和第三阶段都是指令微调,不过根据指令模态的不同,细分为了跨模态的指令微调和模态链指令微调。指令微调的数据集都是来自ASR数据集。描述任务需求的指令由GPT-4生成。

在我看来,这个工作还是相当偏学术化的作品,文中有不少点都有值得商榷的地方:第一,语音的离散化仅仅用了HuBERT,模型只能看到语音的语义特征,这对模型合成语音的音质和表现力有非常大的影响,demo的语音也验证了我的判断;第二,指令微调数据集的构造上有问题。他们用的是ASR数据集,其实更好的选择应该是TTS数据集,可惜高质量的TTS数据集实在是太少了。ASR数据集中的文本和语音可能并不是严格对齐的,GPT-4产生的meta-prompt和语音本身的特征也有可能是对不上的,比如prompt要求大声朗读,但语音本身可能是特定低沉的。meta-prompt本身就无法做到足够复杂丰富,不能描述到语音的一些细粒度信息。

这一部分,最好要有像诸如SALMONN这样的多模态语音理解模型的介入,像DALLE3一样丰富指令的多样性。至于语音方面,可以考虑引入zero-shot的语音合成模型或者变声模型来做合成数据。第三,文中的训练方法也没有与人类偏好做对齐。

这项技术的核心在于将连续的语音信号离散化,使其能够与文本模态统一,从而让模型具备感知和生成语音的能力。

SpeechGPT是一种大型语言模型,具有内在的跨模态会话能力,能够按照人类指令感知和生成多模型内容。本文首先利用离散语音表示构造了一个大规模的跨模态语音指令集SpeechInstruct。此外,我们采用了一个三阶段的训练策略,包括模态适应预训练跨模态指令微调,和链的模态指令微调。实验结果表明,SpeechGPT具有良好的多模态人机交互能力,并能在一个模型中处理多种模态。

模型训练过程:

第一阶段,使用LLaMA-7 B初始化,并在LibriLight语音单元上进一步预训练。第二阶段,使用上一步预训练的模型进行初始化,并在SpeechInstruct跨模态指令集上进一步微调。这是一个强大的基础模型,可以对齐语音和文本。第三阶段,在SpeechInstruct模态链指令集上进一步进行lora-finetuning。

数据集格式:

SpeechInstruct-cross-modal:跨模态指令集,mHuBERT从大规模英语ASR数据集中标记了大约900万个单元文本数据对。数据格式:

[
    {
        "prefix": "You are an AI assistant whose name is SpeechGPT.\n- SpeechGPT is a intrinsic cross-modal conversational language model that is developed by Fudan University.  SpeechGPT can understand and communicate fluently with human through speech or text chosen by the user.\n- It can perceive cross-modal inputs and generate cross-modal outputs.\n",
        "plain_text": "[Human]: Try to speak out this sentence, please. This is input: The alchemist rode in front, with the falcon on his shoulder.<eoh> [SpeechGPT]: <sosp><661><588><604><157><596><499><596><106><596><189><63><189><665><991><162><202><393><946><327><905><907><597><660><351><557><794><788><59><754><12><977><877><333><873><835><67><940><118><686><613><169><72><644><553><535><935><101><741><384><173><894><787><380><787><196><555><721><944><250><56><812><222><915><143><390><479><330><435><647><246><650><816><325><506><686><208><613><417><755><193><411><452><111><735><6><735><63><665><644><991><535><271><333><196><918><29><202><393><946><734><390><479><330><776><167><761><907><597><660><351><557><794><75><788><15><366><896><627><168><654><659><177><183><609><710><187><493><361><470><821><59><56><198><912><742><840><431><531><76><668><576><803><791><380><660><325><801><549><366><377><164><309><584><605><193><71><39><eosp><eoa> "
    },
]

SpeechInstruction-chain-of-modality:四种输入输出格式的思想链样式指令,即Speech Instruction-Speech Response、Speech Instruction-Text Response、Text Instruction-Speech Response和Text Instruction-Text Response。

[
    {
        "prefix": "You are an AI assistant whose name is SpeechGPT.\n- SpeechGPT is a intrinsic cross-modal conversational language model that is developed by Fudan University.  SpeechGPT can understand and communicate fluently with human through speech or text chosen by the user.\n- It can perceive cross-modal inputs and generate cross-modal outputs.\n",
        "plain_text": "[Human]: <sosp><661><987><511><732><951><997><111><982><189><63><665><991><535><101><741><173><945><944><503><641><124><565><734><870><290><978><833><238><761><907><430><901><185><403><557><244><583><788><663><969><896><627><143><515><663><969><660><691><251><412><260><41><740><677><253><380><382><268><506><876><417><755><16><819><80><651><80><651><80><987><588><eosp><eoh>. [SpeechGPT]: What is a bad term for poop?; [ta] A bad term for poop is excrement. It is usually used as a polite way to refer to fecal waste.; [ua] <sosp><497><63><264><644><710><823><565><577><154><331><384><173><945><29><244><326><583><728><576><663><969><896><627><143><38><515><663><24><382><251><676><412><260><41><740><677><253><382><268><876><233><878><609><389><771><865><641><124><878><609><423><384><879><487><219><522><589><337><126><119><663><748><12><671><877><377><385><902><819><619><842><419><997><829><111><666><42><277><63><665><644><389><771><685><437><641><124><258><436><139><340><11><59><518><56><948><86><258><436><139><340><347><376><940><118><944><878><173><641><124><362><734><179><961><931><878><609><423><384><879><219><522><866><337><243><935><101><741><822><89><194><630><86><555><105><79><868><220><156><824><998><870><390><422><330><776><663><969><523><105><79><799><220><357><390><479><422><330><776><485><165><86><501><119><716><205><521><787><935><101><741><89><194><664><835><67><940><118><613><417><755><902><415><772><497><eosp><eoa>."
    },
]

Introduction

在本文中,我们提出了SpeechGPT,一个大型的语言模型,具有内在的跨模态会话能力,能够感知和生成多模型内容。我们使用自监督训练的语音模型进行语音离散化,以统一语音和文本之间的模态。然后,离散的语音token扩展到LLM的词汇表中,从而赋予模型固有的感知和生成语音的能力。

为了使模型具有处理多模态指令的能力,我们构建了第一个语音-文本跨模态指令遵循数据集SpeechInstruct。具体地,我们将语音离散化为离散单元(Hsu 等人,2021),并基于现有的ASR数据集构建跨模态单元文本对。同时,我们使用GPT-4为不同的任务构建了数百条指令,以模拟实际的用户指令,如附录B所示。此外,为了进一步增强模型的跨模态能力,我们设计了模态链指令数据,即,该模型接收语音命令,以文本形式思考该过程,然后以语音形式输出响应。

为了更好地进行跨模态迁移和有效的训练,SpeechGPT经历了三个阶段的训练过程:模态适应预训练,跨模态指令微调和模态链指令微调。第一阶段使语音理解与离散语音单元连续任务的SpeechGPT。第二阶段采用SpeechInstruct来提高模型的跨模态能力。第三阶段利用参数有效的LoRA(Hu 等人,2021年)进行微调,以进一步调整模式。

SpeechInstruct Construction:

SpeechInstruct,一个语音文本跨模态解释跟随数据集。该数据集由两部分组成,第一部分称为跨模态指令[Cross-modal Instruction],第二部分称为模态链指令[Chain-of-Modality Instruction]。

Cross-modal Instruction数据集构造:

step1 数据收集: 收集了几个大规模的英语ASR数据集来构建跨模态教学,包括Gigaspeech(Chen et  al.,2021)、Common Voice(Ardila 等人,2020)和LibriSpeech(Panayotov 等人,2015年)。我们采用mHuBERT作为语音分词器,以将语音数据离散化为离散单元,并去除相邻帧的重复单元以获得缩减的单元。最终,我们获得了900万个单元文本数据对。

step2 任务描述生成:我们生成与语音-文本数据对兼容的ASR和TTS任务描述。与自我指导方法不同(Wang 等人,2022),我们通过零zero-shot 方法生成描述。具体来说,我们直接将附录A中所示的提示输入OpenAI GPT-4以生成任务描述。我们的生成方法为每个任务生成100条指令,附录B中显示了一些示例。

step3 数据构造Instruction Formatting :对于离散单元序列 U 及其相关联的转录 T ,我们基于概率 p 来确定它将被用于构造ASR任务还是TTS任务。随后,我们从step2相应的任务描述中随机选择一个描述 D 。表示为 (D,U,T) 。在此之后,使用模板[Human]:{D}。输入:{U}<eoh>。[SpeechGPT]:{T}<eos>。. 为了支持多轮对话,组装的指令以多轮对话的形式连接,遵守模型的最大输入长度。

Chain-of-Modality Instruction数据集构造:

语音指令生成: 由于缺乏语音输入和语音输出的指令数据,我们训练了一个文本到单元【text-to-unit】生成器来将文本指令数据转换为语音指令数据。具体地,文本到单元生成器采用Transformer编码器-解码器架构。我们在跨模态教学中对LibriSpeech unit-text pairs进行了训练。 我们从moss-002-sft-data数据集中选择了37,969个响应长度小于35个单词的样本,通过文本到单元生成器将它们的指令和响应转换为单元序列。结果,我们获得了由语音指令、文本指令、文本响应和语音响应组成的37,969个四元组,表示为 (S​p​e​e​c​h​I,T​e​x​t​I,T​e​x​t​R,S​p​e​e​c​h​R) 。

使用上述四元组,我们可以为四种输入输出格式构建思维链风格的指令,即语音指令-语音响应,语音指令-文本响应,文本指令-语音响应和文本指令-文本响应。其相应模板可参见附录C

Model Structure:

模型由三个主要组件组成:离散单元提取器大语言模型单元声码器。在这种架构下,LLM可以感知多模态输入并生成多模态输出。

离散单元提取器 离散单元提取器利用隐藏单元BERT(HuBERT)模型(Hsu 等人,2021)以将连续语音信号变换成离散单元的序列。HuBERT是一种自监督模型,它通过基于应用于模型中间表示的k均值聚类来预测掩蔽音频片段的离散标签来学习。它具有1-D卷积层和Transformer编码器的组合,将语音编码为连续的中间表示,k-means模型进一步将这些表示转换为聚类索引序列。随后,去除相邻的重复索引,得到表示为 U=(u1,u2,…,uT) 、 ui∈0,1,…,K−1 、 ∀1≤i≤T 的离散单元序列,其中 K 表示簇的总数。

LLM:采用Meta AI LLaMA(Touvron 等人,2023)模型作为我们的大型语言模型。LLaMA包括嵌入层、多个Transformer块和LM头层。LLaMA中的参数总数范围从7 B到65 B。从1.0万亿个令牌的广泛训练数据集中,LLaMA在各种NLP基准测试中与更大的175 B GPT-3相比表现出了竞争力。

Unit Vocoder:训练了一个多说话人 unit  HiFi-GAN来解码语音信号, 离散表示。 HiFi-GAN架构由生成器 𝐆 和多个鉴别器 𝐃 组成。该生成器使用查找表(LUT)来嵌入离散表示,并且嵌入序列由一系列由转置卷积和具有扩张层的残差块组成的块进行上采样。 扬声器嵌入被连接到上采样序列中的每个帧。 该滤波器具有多周期鉴别器(MPD)和多尺度鉴别器(MSD)。

Training:

为了将语音离散表示纳入LLM,我们首先扩展词汇表和相应的嵌入矩阵。我们将培训过程分为三个阶段。第一阶段是对未配对语音数据进行模态自适应预训练。第二阶段是跨模态教学微调。第三阶段是模态链教学微调。

扩大词汇 给定大小为 |V| 的原始LLM词汇表 V ,为了将语音离散表示集成到LLM中,我们用大小为 |V′|=K 的单元标记 V′ 的附加集合来扩展词汇表。扩展词汇表 V′′ 是原始词汇表 V 和新词 V′ 的联合:V′′=V∪V′

我们将原始词嵌入矩阵表示为 E∈ℝ|V|×d ,其中 d 是词嵌入的维数。为了适应扩展的词汇表,我们需要创建一个随机初始化的单词嵌入矩阵 E′∈ℝ|V′′|×d 。 我们通过将 E 的值复制到 E′ 的前 |V| 行来保留原始的单词嵌入:E′[0:|V|,:]=E

Stage 1: Modality-Adaptation Pre-training

为了使LLM能够处理离散单元模态,我们利用未标记的语音语料库在下一个令牌预测任务中训练LLM。这种方法与LLM的文本预训练目标一致。 给定由语音 U1,U2,…,Um 和表示为 L1 的LLM组成的未标记语音语料库 C ,负对数似然损失可以公式化为:

其中, m 是数据集 C 中的语音的数量, nj 是语音 Uj 中的离散单元标记的数量,并且 ui,j 表示第j个语音中的第i个单元标记

Stage 2: Cross-modal Instruction Fine-Tuning 

跨模态教学微调 在这个阶段,我们利用配对数据对齐语音和文本模态。我们将SpeechInstruct中的跨模态指令与moss-002-sft数据集混合以导出混合数据集 I ,其由样本 T1,T2,…,Tx 组成。我们在 I 上对从第一阶段获得的模型 L 进行微调。

由 t1,t2,…,tnj 组成的每个样本 Tj 通过连接前缀和文本来形成。训练目标是最小化负对数似然,损失计算只考虑文本部分,忽略前缀,可以格式化为:

其中 x 是语料库 I 中的样本数, yj 是样本 Tj 中的标记总数, pj 是 Tj 的前缀部分中的标记数,并且 ti,j 表示 Tj 中的第i个单词

Stage 3: Chain-of-Modality Instruction Fine-Tuning

获得阶段2中的模型之后,我们利用参数有效的低秩自适应(LoRA)(Hu 等人,2021年),以微调它的链的模态教学SpeechInstruct。我们将LoRA权重(适配器)添加到注意力机制中,并训练新添加的LoRA参数。我们采用与阶段2相同的损失函数。

附录A:Prompts to Generate Task Description

ASR:
You are asked to come up with a set of 100 diverse task instructions about automatic speech
recognition, which is about recognizing speech.
Here are the requirements:
1. These instructions should be to instruct someone to recognize the content of the following
speech.
2. Try not to repeat the verb for each instruction to maximize diversity.
3. The language used for instruction also should be diverse. For example, you should
combine questions with imperative instructions.
4. The type of instructions should be diverse.
5. The instructions should be in English.
6. The instructions should be 1 to 2 sentences long. Either an imperative sentence or a
question is permitted.
List of 100 tasks:
TTS:
You are asked to come up with a set of 100 diverse task instructions about text to speech,
which is about recognizing speech .
Here are the requirements:
1. These instructions should be to instruct someone to recognize the content of the following
speech.
2. Try not to repeat the verb for each instruction to maximize diversity.
3. The language used for instruction also should be diverse. For example, you should
combine questions with imperative instructions.
4. The type of instructions should be diverse.
5. The instructions should be in English.
6. The instructions should be 1 to 2 sentences long. Either an imperative sentence or a
question is permitted.
List of 100 tasks:

附录B:Examples of Task Description【gpt生成的一些例子】

ASR:
Begin by converting the spoken words into written text.
Can you transcribe the speech into a written format?
Focus on translating the audible content into text.
Transcribe the speech by carefully listening to it.
Would you kindly write down the content of the speech?
Analyze the speech and create a written transcription.
Engage with the speech to produce a text-based version.
Can you document the speech in written form?
Transform the spoken words into text accurately.
How about putting the speech’s content into writing?
TTS:
Can you please read this sentence out loud?
Recite the following words as if you were speaking normally.
Project your voice to clearly articulate this statement.
Would you mind speaking these words as naturally as possible?
Whisper the given sentence softly.
Enunciate each word in this sentence with precision. How would you express this sentence in
 a conversational tone?
Could you please relay the message below verbally?
Emphasize the key points while reading the sentence.
Sing the text provided in a melodic voice.

附录C: Chain-of-Modality Instructions Templates

Speech Instruction-Speech Response:
[Human]: This is a speech instruction: {SpeechI}. And your response should be speech.
 You can do it step by step. You can first transcribe the instruction and get the text Instruction.
Then you can think about the instruction and get the text response. Last, you should speak the
 response aloud <eoh>. [SpeechGPT]: [tq] {TextI}; [ta] {TextR}; [ua] {SpeechR}<eoa>.
Speech Instruction-Text Response:
[Human]: This is a speech instruction: {SpeechI}. And your response should be text. You
 can do it step by step. You can first transcribe the instruction and get the text instruction.
Then you can think about the instruction and get the text response. <eoh>. [SpeechGPT]:
[tq] {TextI}; [ta] {TextR}<eoa>.
Text Instruction-Speech Response:
[Human]: This is a text instruction: {TextI}. And your response should be speech. You can
 do it step by step. You can think about the instruction and get the text response. Then you
should speak the response aloud <eoh>. [SpeechGPT]: [ta] {TextR}; [ua] {SpeechR}<eoa>.
Text Instruction-Text Response:
[Human]: This is a text instruction: {TextI}. And your response should be text. You can
 think about the instruction and get the text response. [SpeechGPT]: [ta] {TextR}<eoa>.

SpeechAgents:多模态多智能体系统的人机交互仿真

SpeechAgents是一个基于多模态LLM的多智能体系统,旨在模拟人类的交流。与现有的基于LLM的多Agent系统不同,SpeechAgents使用多模态LLM作为单个Agent的中央控制,并使用多模态信号作为Agent之间交换消息的媒介。 此外,我们提出了多代理调整,以提高LLM的多代理功能,而不影响一般的能力。为了加强和评估人类通信仿真的有效性,我们建立了人类通信仿真基准。实验结果表明,SpeechAgents可以模拟人类交流对话一致的内容,真实的节奏,丰富的情感和表现出良好的可扩展性,即使多达25个代理,这可以适用于任务,如戏剧创作和音频小说生成。

图3:SpeechAgents中单个代理的训练和推理过程的图示。实心箭头表示推理过程中的数据流。在一个代理的回合中,它接收包括场景、背景、角色、简档和来自语音消息流库的消息流的输入。智能体的输出包括其内部思想、生成的语音响应和相应的风格。然后将具有样式的响应写入语音消息流库。虚线箭头表示训练过程中的数据流。从人类通信模拟基准测试中的脚本解析的代理轨迹指令以图中代理输入和输出的串联的形式可视化地表示,并用于多模态LLM的多代理调整。

Hmuan-Communication Simulation Benchmark构建过程概述。我们通过创建模拟人类交流的各种场景来启动这一过程。随后,为每个场景生成包含各种角色的角色池。然后从池中选择角色,并根据所涉及的特定场景和角色生成通信脚本。最终,通过文本到语音转换来制作多模态人类沟通脚本。

SpeechGPT-Gen[SpeechGPT2]: 缩放信息链语音生成

对于上面的第一个问题,作者在其后的SpeechGPT-Gen中做了解决。解决思路的核心点就是:让模型不仅看到语音的语义token,也要看到语音的声学token。具体做法是:SpeechGPT的HuBERT特征替换成了SpeechTokenizer中的语义特征,用SpeechGPT这一LLM来自回归地建模语义特征,有了语义特征之后,再使用Flow-Matching这样的扩散模型来建模声学特征。这里选用Flow-Matching扩散模型,可能是受了SD3和Voicebox/Audiobox的影响。为了增强两阶段建模的依赖关系,作者将语义特征的先验信息注入到第二阶段扩散模型的先验分布中。可以看到,这里语音的解码其实也是一种层次化渐进式解码。

SpeechGPT 2是一种端到端的语音对话语言模型,类似于GPT-4 o。它可以感知和表达情感,并根据上下文和人类指令提供各种风格的适当语音响应,如说唱,戏剧,机器人,搞笑和耳语。为了解决冗长语音序列的问题,SpeechGPT 2采用了超低比特率语音编解码器(750 bps),该编解码器对语义和声学信息进行建模。它使用多输入多输出语言模型(MIMO-LM)。目前,SpeechGPT 2仍然是一个基于回合的对话系统。我们正在开发实时SpeechGPT 2的全双工版本,并且已经取得了一些有希望的进展。

得益于有效的语音建模,当前的语音大语言模型(SLLM)在上下文语音生成和对未知说话人的有效泛化方面表现出了卓越的能力。然而,流行的信息建模过程是由某些冗余,导致语音生成效率低下。我们提出了信息链生成(CoIG),在大规模语音生成的语义和感知信息解耦的方法。在此基础上,我们开发了SpeechGPT-Gen,这是一个在语义和感知信息建模方面具有80亿参数的SLLM。它包括一个基于LLM的自回归模型用于语义信息建模和一个采用流匹配的非自回归模型用于感知信息建模 [感知信息建模主要关注的是与感官输入(如视觉、听觉等)直接相关的信息处理,非自回归模型通常用于感知信息建模中,因为这些模型可以并行处理数据,更加适合需要实时处理或低延迟的应用场景]。此外,我们引入了新的方法,注入语义信息的先验分布,以提高流匹配的效率。 大量的实验结果表明,SpeechGPT-Gen在zero-shot文本到语音,zero-shot语音转换和语音到语音对话方面表现出色,强调了CoIG在捕捉和建模语音的语义和感知维度方面的卓越能力。

SpeechGPT-Gen基于信息链生成方法,依次进行语义建模和感知建模。SpeechTokenizer(Zhang 等人,2023 b)用于提取语义表示和感知表示。SpeechGPT-Gen由用于语义建模的基于LLM的自回归模型和用于感知建模的基于流匹配的非自回归模型组成。

Speech Tokenization:

SpeechTokenizer(Zhang 等人,2023 b)是基于残差矢量量化(RVQ)的语音标记化方法,并且跨不同RVQ层分层地解开语音信息的不同方面。具体地,第一RVQ量化器生成包含语义信息的令牌,而后续量化器补充剩余的感知信息。 SpeechTokenizer将单声道音频信号表示为 作为输入,其中 d 表示持续时间, fs⁢r 表示采样率。 SpeechTokenizer的输出包括用于对应RVQ层的 Q=8 分层RVQ令牌 (q1,…,qQ) 和 Q 码本 (C1,…,CQ) 。 qi∈ℝT 表示长度为 T 的一维序列。 RVQ令牌 qi 可以由码本 Ci∈ℝK×H 嵌入,从而产生连续矢量序列 vi∈ℝT×H ,其中 vij=Ci⁢(qij) 用于 i∈1,…,Q 、 j∈1,…,T 。 表示为 v1:8=∑i=1Qvi 的来自所有RVQ层的连续表示的总和包含语音内的所有信息。 我们利用来自第一RVQ层 q1 的标记作为包含语义信息的表示,并且利用从第二层到最后一层 v2:7=∑i=2Qvi 求和的连续向量作为包含感知信息的表示。

LLM用于语义建模:

SpeechGPT是一个大型的跨模态语言模型,可以执行跨模态指令跟随和语音到语音对话,表现出出色的语音语义建模能力。 利用HuBERT(Hsu 等人,2021)将语音离散化为单元,SpeechGPT执行模态适应预训练,跨模态指令微调和模态链指令微调。我们通过用SpeechTokenizer RVQ-1令牌 q1 替换HuBERT离散单元来使用SpeechGPT进行语音语义建模。 对于模型结构,我们采用LLaMA 2 – 7 B-Chat作为预训练的LLM。 对于训练数据,我们采用SpeechTokenizer RVQ-1令牌来表示语音,并遵循SpeechInstruct的过程和设置来构造训练数据集 D ,包括跨模态指令集和模态链指令集。我们使用Multilingual  Librispeech 、Gigaspeech(Chen 等人,2021)、Commonvoice(Ardila 等人,2020)和Librispeech(Panayotov 等人,2015年)构建跨模态指令集。 对于训练,我们跳过模态适应预训练,并使用跨模态指令集 I 对LLaMA 2 – 7 B-Chat执行跨模态指令微调。 在模态链指令微调中,我们选择全参数微调而不是模态链指令集上的LoRA微调。 这两个培训阶段的培训目标可以格式为:

感知建模的流程匹配:

给定语音 s 、语义表示 v1 、感知表示 v2:8 和由SpeechTokenizer提取的完整信息表示 v1:8=v1+v2:8 ,感知建模是指在给定提示语音 a 和语义表示 v1 的情况下预测完整表示 v1:8 。 我们提出了两种感知建模的流匹配模式:显式链和隐式链

SpeechAlign :使语音生成与人类偏好保持一致

SpeechAlign做的则是SLM与人类偏好的对齐,彻底地向LLM的训练方法看齐。该工作构建了对比gold token和合成token的encodec数据集,然后进行偏好优化来进行改进。使用的偏好优化方法包括RLHF和Chain of Hindsight。

本文首先分析编解码器语言模型中的分布差距,强调它如何导致训练阶段和推理阶段之间的差异,从而对性能产生负面影响,从而解决这一差距。然后,我们探索利用从人类反馈中学到的知识来弥合分布差距。我们介绍了 SpeechAlign,这是一种迭代式自我改进策略,可将语音语言模型与人类偏好保持一致。SpeechAlign 涉及构建一个偏好编解码器数据集,将黄金编解码器令牌与合成令牌进行对比,然后进行首选项优化以改进编解码器语言模型。这个改进周期是迭代进行的,以稳步将弱模型转换为强模型。通过主观和客观评估,我们表明 SpeechAlign 可以弥合分布差距并促进语音语言模型的持续自我改进。此外,SpeechAlign 具有强大的泛化功能,适用于较小的模型。

Seed-TTS 字节跳动-高质量通用语音生成模型

A Family of High-Quality Versatile Speech Generation Models [字节跳动]

https://bytedancespeech.github.io/seedtts_tech_report/

Seed-TTS,一个大规模的自回归文本到语音(TTS)模型家族,能够生成与人类语音几乎不可区分的语音。Seed-TTS是语音生成的基础模型,具有良好的语音上下文学习能力,在说话人相似度和自然度方面的性能在客观和主观评价上都与真实人类语音相匹配。通过微调,我们在这些指标上获得了更高的主观分数。Seed-TTS提供了对各种语音属性(如情感)的上级可控性,并且能够为现实中的说话者生成高度表达性和多样化的语音。此外,我们提出了一种自蒸馏方法的语音分解,以及强化学习方法,以提高模型的鲁棒性、说话人相似性和可控性。 我们还提出了一个非自回归(NAR)的 Seed TTS模型的变体,命名为 Seed -TTSDiT,它利用了一个完全基于扩散的架构。与以前的基于NAR的TTS系统不同,Seed-TTSDiT不依赖于预先估计的音素持续时间,并且通过端到端处理来执行语音生成。我们证明了这种变体在客观和主观评价中与基于语言模型的变体具有可比性,并展示了其在语音编辑中的有效性。

图1. Seed-TTS推理流水线概述。(1)语音分词器从参考语音中学习标记。(2)自回归语言模型基于条件文本和语音生成语音令牌。(3)扩散Transformer模型以由粗到细的方式在给定生成的语音标记的情况下生成连续语音表示。(4)声学声码器从扩散输出产生更高质量的语音。

主要贡献如下:

1、Seed-TTS,这是一系列语音生成模型,能够生成高度表达性的类人语音。我们证明, Seed- TTS实现SOTA的性能在多个评估数据集。在zero-shot speech in-context learning (ICL)设置下,我们表明Seed-TTS能够生成与人类语音难以区分的鲁棒、相似和高度动态的语音。

2、提出了一种新的用于音色解耦的Seed-TTS自蒸馏扩展,并在语音转换任务中验证了SOTA的性能。

3、针对Seed-TTS模型,提出了一种新的基于RL的训练后扩展方法,从整体上提高了模型的性能。

Seed-TTS主要功能:

  • 高质量语音生成: Seed-TTS采用了先进的自回归模型和声学声码器技术、能够生成接近人类自然语音的高质量语音。模型在大量数据上进行训练,学习到丰富的语音特征和语言模式,从而能够合成清晰、流畅、自然的语音输出
  • 上下文学习: 该模型具备出色的上下文学习能力,可以在理解给定文本的上下文基础上、生成与上下文风格和语义相匹配的语音。无论是连续的对话还是单独的句子,Seed-TTS都能够保持语音的连贯性和一致性
  • 情感控制:Seed-TTS能够根据文本内容或额外的情感标签,控制生成语音的情感色彩用户可以指定语音中应表达的情感,如愤怒、快乐、悲伤或惊讶等,模型会相应地调整语音的音调、强度和节奏,以匹配所选情感比如:把情感标签加入text token 或者 作为扩散模型的条件输入
  • 语音属性可控:除了情感,Seed-TTS还允许用户控制其他语音属性,包括语调、节奏和说话风格。用户可以根据应用场景的需求,调整语音使其更正式或非正式 或者更具戏剧化效果【比如:其他语音属性加入text token 或者 作为扩散模型的条件输入
  • 零样本学习能力(Zero-shot Learnina):即使没有特定说话者的训练数据,SeedTTS也能够利用其在大量数据上训练得到的泛化能力,生成高质量的语音。此能力使得Seed-TTS能够快速适应新的说话者或语言,而无需额外的训练过程
  • 语音编辑:Seed-TTS支持对生成的语音进行编辑,包括内容编辑和说话速度编辑用户可以根据需要修改语音中的特定部分,或调整语速以适应不同的听众或应用场景。
  • 多语种支持:模型设计支持多种语言的文本输入、能够生成相应语言的语音,使得Seed-TTS可以服务于全球化的应用,满足不同语言用户的需求
  • 语音分解:Seed-TTS通过自我蒸馏方法实现了语音的属性分解。例如可以将语音的音色与其他属性(如内容和情感)分离,为语音合成提供了更高的灵活性和控制力,允许用户独立地修改和重组语音的不同组成部分

Seed-TTS 是一种基于自回归 Transformer 模型,如图 1 所示。我们的系统由四个主要构建模块组成:语音分词器、分词语言模型、分词扩散模型和声学声码器我们强调,Seed-TTS 在大量数据上进行训练(数据量级比之前最大的 TTS 系统大得多),以实现强大的泛化能力和新兴能力。

Seed-TTS方法:

Seed-TTS是基于自回归transformer-based(LLaMA:decoder only)的模型,如图1所示。我们的系统由四个主要的构建块:一个语音tokenizer,一个token语言模型,一个token扩散模型,和一个声学声码器。我们强调,Seed-TTS是在大量数据(比以前最大的TTS系统大的数量级)上训练的,以实现强大的泛化和涌现能力。

首先,语音标记器将语音信号转换为一系列语音标记,然后使用类似于 BASE TTS所描述的方法对标记语言模型进行训练。我们研究了连续和离散语音标记器,发现标记器的设计对整个系统的性能至关重要。语言模型是在成对的文本序列和语音标记上训练的。在推理过程中,模型自回归地生成语音标记。请注意,在本技术报告中,我们专注于语音生成任务,因此文本序列的损失是被掩蔽的。这些生成的标记随后由扩散模型处理,以增强声学细节。然后输出通过声学声码器处理,以预测最终的波形。

具体流程如下: 首先语音tokenizer将语音信号转换为语音token序列,在该语音token序列上训练token语言模型,我们研究了连续和离散语音token器,发现 tokenizer 的设计对整个系统的性能至关重要。语言模型在文本和语音token的配对序列上训练。在推理过程中,它自回归地生成语音token。这些生成的令牌,然后用扩散模型进行处理,以增强声学细节。输出被传递到声学声码器以预测最终波形。 声学声码器使用类似于Kumar等人【High-Fidelity Audio Compression with Improved RVQGAN】,并单独进行训练

与基于文本的语言模型类似,Seed-TTS经历三个训练阶段:预训练,微调和后训练。预训练阶段的目标是最大限度地提高场景和说话人的覆盖率,同时为通用语音建模建立一个强大的骨干。如前所述,在该阶段,Seed-TTS利用了比先前的语音生成模型大数量级的大量训练数据和模型规模。

微调阶段包括说话人微调和指令微调。说话人微调的重点是提高选定说话人组的表现,而指令微调的目的是提高可控性和交互性。后期训练通过RL进行,从整体上改进了模型。

我们观察到 Seed-TTS 模型相较于之前的模型有两个主要优势。首先,Seed-TTS 在不同场景下(包括如喊叫、哭泣或高度情感化的语音等具有挑战性的情境)展示了出色的语音合成自然度和表现力。在开发过程中,我们在被认为对于以前的 TTS 系统难以或无法处理的情境中对模型进行了严格测试,结果显示其相对于之前的最先进系统具有明显的优势。

其次,Seed-TTS解决了基于语言模型的TTS系统中普遍存在的稳定性问题,这些问题阻碍了它们在现实世界中的部署。稳定性是通过token和模型设计改进、增强的训练和推理策略、数据扩充和训练后强化学习的组合来实现的。因此,Seed-TTS在测试集上实现了显著更好的鲁棒性。

作为语音生成的基础模型,Seed-TTS可以执行各种任务,例如语音ICL【 zero-shot voice continuation】,可控TTS,跨语言TTS,语音转换,音色生成和说话风格转换。

ICL(上下文学习)结果,也称为零样本语音延续。ICL 被定义为生成一个具有与短参考语音片段相同音色和韵律的全新口语表达。这些 ICL 结果是通过使用预训练的 Seed-TTS 模型对音频和文本提示进行延续而获得的。

Experiments

Zero-shot in-context learning

采用了词错误率(WER)和说话人相似度(SIM)指标进行客观评价。我们确保每个样本包含同一说话人说出的一个参考话语和一个目标话语。所提出的Seed-TTS系统用于基于参考语音生成目标文本的语音作为音频提示。通过这种方式,我们可以直接将合成语音与来自真实的人类的地面真实语音进行比较。参考发音的持续时间范围从3到20秒。

值得注意的是,较低的WER不一定会导致说话者相似性的主观分数提高。我们凭经验观察到,较低的WER通常表明该模型产生更“标准化”的语音,这更容易被ASR系统识别,但以牺牲其他期望的质量为代价。例如,在提示语音包含强口音或高表达力的情况下,从生成的语音获得较低的WER通常指示在模型的输出空间中具有有限变化的较不带口音的语音,这可能听起来不太自然并且当在主观评估中测量时具有降低的说话者相似性。

言语理解评估

我们通过在生成的语音上训练ASR模型来进一步验证Seed-TTS的生成质量。为此,我们生成了LibriSpeech 960小时训练集的合成版本通过“文本波洗牌”策略,并使用合成语料库从头开始训练ASR模型,然后我们使用该模型在原始LibriSpeech开发和测试集上转录语音。具体地说,我们通过采用训练集中的每个话语作为音频提示来生成训练集中的每个话语的合成版本,以使用来自训练集中的随机采样的文本来合成新句子,同时确保所有话语和文本仅被采样一次。通过这种方式,我们创建了一个合成LibriSpeech训练语料库,该语料库保持与原始语料库相同的总说话者和内容信息,以使用WeNet工具包。我们采用了12层挤压成形器作为ASR编码器和3层双向Transformer作为ASR解码器。ASR基线模型也在原始LibriSpeech训练语料库上训练。所有模型均使用相同的超参数进行训练,例如:每个模型都在LibriSpeech开发和测试集上进行了测试,结果如表2所示。

对于干净集,即,dev_cleantest_clean,使用合成数据训练的模型实现了与使用真实的数据训练的模型非常相似的ASR性能。在有噪声的dev_othertest_other集合上分别观察到1.81%和1.6%的绝对WER下降,我们推测这是由于Seed-TTS在生成过程中倾向于减少背景噪声,从而导致对噪声的鲁棒性降低。这一结果表明,在语音理解模型的开发中使用合成数据的潜力,这进一步推动了语音理解和生成的统一。

说话人相似性分析:

为了验证合成语音中音色的保真度,我们使用与上述相同的混排方法生成了 VoxCeleb1 测试集中的英语语句,并使用基于 WavLM 的说话人验证模型获取了它们的说话人嵌入。我们在图 3 中使用 t-SNE绘制了 25 位说话人真实语音和合成语音的说话人嵌入分布图。

我们观察到,同一说话者的真实语音和合成语音的嵌入可靠地聚集在一起,这表明 Seed-TTS 生成的语音在质量和说话者相似性方面与真实人类语音非常接近。

说话人微调

我们在 Seed-TTS 预训练模型的基础上进行了说话人微调(SFT)。在该实验中,我们选择了 5 位说话者(3 位女性和 2 位男性),每位说话者的语音数据时长在 1 到 10 小时之间。我们使用这些说话者的总计 20 小时的合并数据对 Seed-TTS 进行微调,并引入了一个额外的说话人索引标记,用于在推理时选择目标说话者的音色。对于这些选定的说话者,我们使用 WER(词错误率)和 SIM(相似度)客观指标以及主观 CMOS(主观质量评分)研究,评估了微调模型(Seed-TTS SFT)与基础预训练模型(Seed-TTS ICL)生成的语音效果。对于基础模型,每位说话者使用了随机采样的 20 秒语音片段作为音频提示。说话人微调实验的结果在表 3 中进行了汇报。

通过指令微调实现可控性

为了进一步增强说话人微调模型的可控性,我们尝试集成了额外的指令微调(IFT)。IFT 使模型能够灵活控制生成语音的各个方面,例如表现力、语速、风格、情感等。在本报告中,我们仅以情感控制为示例进行展示。

为了验证情感可控性,我们训练了一个类似于Chen等人的语音情感识别(SER)模型,选择了四个主要情感(即,愤怒、高兴、悲伤和惊讶),并测量了从合成语音预测情绪的准确性。我们为每种情绪生成并评估了100个话语,其中合成文本的主题被设计为与目标情绪相匹配。

结果总结于表4中。我们发现,即使没有一个明确的控制信号, Seed-TTSSFT 仍然获得了中等精度的情绪控制。我们推测这是因为该模型能够根据所提供的文本内容推断出适当的目标情感。当与附加的控制信号结合时,获得了显著提高的精度。

低延迟推理和流处理

TTS模型在实际应用中的部署从多个角度提出了一些实际挑战。例如,在基于聊天的应用中,等待时间和第一分组延迟对于用户体验是必不可少的。在时间和内存上的计算开销对于服务并发性是至关重要的。与传统TTS型号相比,Seed-TTS采用了明显更大的型号尺寸,为部署带来了额外的障碍。为了解决这些挑战,我们采用了各种技术来降低推理成本和延迟。

具体地说,我们解决了模型部署的三个方面。首先,实现了一种因果扩散结构,该结构使流处理能够在扩散模块中进行,并显著降低了处理延迟和首包延迟。 其次,我们采用稠度蒸馏(Song 等人,2023)和改进的流量匹配算法Esser 等人(2024),以降低扩散模型的计算成本。另一方面,我们研究了在语言模型侧减少内存和计算消耗的常用方法。

部署模型和离线模型之间的比较。

模型扩展

我们进一步提出了两个扩展的TTS模型,以提高其性能和扩大其适用性。首先,我们介绍了一种自蒸馏的方法,旨在增加音色的可控性。随后,我们提出使用强化学习来全面提高模型的能力。

自蒸馏的语音分解:

语音分解是指将语音分解为各种独立的、分离的属性的过程。该功能允许TTS系统灵活地合成来自不同说话者的具有不同音色、韵律和内容组合的语音,这对于零样本语音转换和因子化零样本TTS等应用至关重要。大多数现有方法通过特征工程特定损失函数或精确的网络架构调整实现属性解耦。然而,将这些方法集成到像Seed-TTS这样的通用语音生成系统中可能具有挑战性。

我们提出了一个自蒸馏方案来实现属性解耦。这种方法的核心原理是创建受控语音对,这些语音对共享大多数信息,但在一个或几个特定的目标属性上有所不同。利用这样的数据对,沿着对模型架构的微小更新,使得Seed-TTS模型能够实现高质量的属性解耦。鉴于Seed-TTS可以为几乎任何说话者生成高质量的零样本生成,生成这些具有不同目标属性的数据对是简单的。在这份报告中,我们特别强调了音色分解的过程和结果。

我们注意到,在Seed-TTS生成过程中,通过在扩散模块中引入说话人扰动,我们能够获得具有相同内容和韵律模式但音色发生变化的合成语音。我们将原始句子和音色改变的句子分别表示为 So⁢r⁢i 和 Sa⁢l⁢t 。

我们使用这些增强的合成数据对重新训练Seed-TTS系统中的扩散模型。具体地,在训练期间,从 Sa⁢l⁢t 提取的令牌被用作网络的输入。从 So⁢r⁢i 提取的音色参考也被集成为扩散输入的一部分。 该网络被优化以恢复从 So⁢r⁢i 中提取的声码器嵌入。值得注意的是, Sa⁢l⁢t 和 So⁢r⁢i 共享相同的内容和韵律,但音色不同。为了恢复 So⁢r⁢i ,网络必须忽略嵌入在来自 Sa⁢l⁢t 的令牌序列中的音色,并且仅依赖于所提供的音色嵌入。这种方法允许我们使用额外的音色参考来修改音色,同时保留原始内容和韵律。我们发现这种直接的方法使得Seed-TTS系统能够实现高质量的音色解缠结。

通过强化学习的偏好偏向

RL已被证明是文本和图像处理中的有效学习范例。我们比较了使用外部奖励模型的RL方法,如近端策略优化和REINFORCE,以及不使用外部奖励模型的RL方法,如DPO。我们的研究结果表明,这两种方法都是有效的。前者允许对特定语音属性进行清晰的控制,而后者受益于更简单的实现。在本报告中,我们展示了前一种方法的有效性。

具体来说,我们使用REINFORCE来微调两个版本,这两个版本基于原始的零触发ICL模型( Seed-TTSICL ),使用不同的奖励函数: Seed-TTSRL-SIM-WER ,使用SIM和WER客观指标作为奖励,以提高说话人相似性和鲁棒性, Seed-TTSRL-SER ,使用SER模型的准确性作为奖励,以提高情感可控性。

完全基于扩散的语音生成【去除token语言模型】

提出了一种仅基于扩散的Seed-TTS模型的变体,表示为 Seed-TTSDiT 。在该变型中,我们去除了扩散模型和声学表征器【acoustic tokenizer】之间的依赖性,使得扩散模型直接将高斯噪声转换成纯粹基于输入文本的声码器的潜在表示。

在我们修改后的 Seed-TTSDiT 设计中,我们直接在扩散模型中采用端到端处理。与估计音素级持续时间相反,该模型预先估计生成的语音的总持续时间。然后优化该模型以估计音频和文本之间的局部对齐。通过这种方式, Seed-TTSDiT 可以动态调整每个音素的持续时间,从而产生高度自然的语音。

我们发现 Seed-TTSDiT 在正确训练时能够预测输入语音的适当总持续时间。然而,不是以这种方式训练,而是选择直接向模型提供总持续时间,这实现了可用于内容编辑和语速编辑的若干附加的期望属性。为此,在训练过程中,扩散模型接收音频提示、目标文本以及一段高斯噪声的片段,所有样本的总时长都相同。模型预测生成语音的潜在表示,保持相同的总时长,然后通过声码器转换成波形。

与采用生成下一个token语言建模的方法相比,纯扩散模型具有更简单的流水线。作为非流模型, Seed-TTSDiT 自然支持内容编辑的应用。在内容编辑任务中,我们屏蔽了一定比例的音频,并使用模型根据每个测试样本提供的文本恢复被屏蔽的部分。

模型应用、局限性和安全性

尽管Seed-TTS具有这些功能,但它仍有一些局限性。虽然观察到了紧急行为,但该模型有时在需要细致入微的情感和上下文理解的场景中存在局限性。此外,尽管使用大量数据进行了训练,但场景覆盖率仍有改进的空间。例如,当前的Seed-TTS模型在唱歌或给出包含背景音乐或过度噪音的提示时表现不佳,通常会产生不一致的背景,例如完全忽略音乐。

考虑到滥用可能会造成有害的社会影响,我们在相关产品中实施了多项安全程序,以防止在该模型的开发和潜在部署过程中发生滥用。例如,我们开发了一种针对语音内容和扬声器音色的多步验证方法,以确保注册音频仅包含授权用户的语音。此外,我们实现了一个多层次的水印方案,这是强制性地包括在创建的内容,如视频背景水印和内容描述中的水印的各个层次。

paraformer-工业级非自回归端到端语音识别模型

论文地址:https://arxiv.org/abs/2206.08317

代码:https://github.com/modelscope/FunASR/

摘要:

Transformers在 ASR 领域占据主导地位。虽然能够产生良好的性能,但它们使用自回归(AR)解码器来逐一生成令牌,这在计算效率上是低效的。为了加快推理速度,可以使用非自回归 (NAR) 方法,例如单步 NAR 的设计是为了实现并行生成。然而,由于输出标签之间的独立性假设,单步 NAR 的性能不如 AR 模型,尤其是在大规模语料库的情况下。改进single-step NAR 面临两个挑战:首先是准确预测输出 token 的数量并提取隐藏变量;其次,增强输出标签之间相互依赖性的建模。为了应对这两个挑战,我们提出了一种快速且准确的并行Transformer,称为 Paraformer。该模型属于单步非自回归模型。这利用基于连续积分和激发的预测器来预测令牌的数量并生成隐藏变量。然后,扫视语言模型(GLM)采样器生成语义嵌入,以增强 NAR 解码器对上下文相互依赖进行建模的能力。最后,我们设计了一种策略来生成负样本以进行最小错误率训练,以进一步提高性能。使用公共 AISHELL-1、AISHELL-2 基准和工业级 20,000 小时任务的实验表明,所提出的 Paraformer 可以达到与最先进的 AR Transformer相当的性能,并且加速超过 10 倍。

1. Paraformer使用基于CIF的predictor预测输出标签的个数并产生隐变量;【文献18】

2. GLM sampler用于产生语义向量增强非自回归模型对上下文的建模能力;【文献19】

3. 最后作者设计了一个策略产生负例,并用MWER损失训练使模型的识别能力进一步提升。【文献20】

介绍:

过去几年,端到端(E2E)模型在自动语音识别(ASR)任务上的性能已经超越了传统层级系统。存在三种流行的 E2E 方法:连接主义时间分类 (CTC)、循环神经网络转换器 (RNN-T) 和基于注意力的编码器-解码器 (AED) 。其中,AED 模型由于其卓越的识别精度而在 ASR 的 seq2seq 建模中占据主导地位。例如 Transformer 和 Conformer。虽然性能良好,但此类 AED 模型内的自回归 (AR) 解码器需要一一生成令牌,因为每个令牌都以所有先前的令牌为条件。因此,解码器的计算效率低下,并且解码时间随着输出序列长度线性增加。为了提高效率并加速推理,有人提出使用非自回归(NAR)模型并行生成输出序列。

基于推理时需要的迭代次数,NAR 模型可以分为迭代模型或单步模型。在前者中,A-FMLM 是单步自回归模型的最早尝试,旨在通过不断迭代来预测以未屏蔽标记为条件的屏蔽标记。由于需要预先定义目标令牌长度,性能受到影响。为了解决这个问题,Mask-CTC 和变体提出通过 CTC 解码来增强解码器输入。即便如此,这些迭代 NAR 模型需要多次迭代才能获得有竞争力的结果,限制了实践中的推理速度。最近,提出了几种单步 NAR 模型来克服这一限制。它们通过消除时间依赖性同时生成输出序列。虽然单步 NAR 模型可以显着提高推理速度,但其识别精度明显不如 AR 模型,尤其是在大规模语料库上评估时。

前面提到的单步非自回归模型主要关注如何预测输出标签的个数和准确提取隐变量。和机器翻译通过predictor预测输出标签个数相比,ASR预测输出标签个数确实比较难,因为有很多的潜在影响因素,比如说话人的语速、静音、噪音。另一方面,经过作者的观察和分析,单步非自回归模型相比自回归模型具有更多的替换错误,如下图1。作者认为缺少上下文依赖信息导致预测标签个数准确率差不多,但替换错误上升明显(AR和vanilla NAR比较),尤其是单步自回归模型的条件独立假设。另外,所有的非自回归模型都是在学术基准阅读音频上实验的,并没有验证这些模型在工业基准数据上的效果。这篇论文的目标是提升单步非自回归模型的识别效果,使其达到和自回归模型相同的水准,并在大规模工业级数据上验证。

图1

文章提出了一个又快又准的并行transformer模型,可以克服上面提到的两个挑战。首先,不像前面的基于CTC的工作,作者提出了使用基于CIF【continuous integrate-and-fire】的predictor网络评估目标长度并产生隐变量。对于第二个挑战,作者设计了基于GLM【glancing language mode】的sampler模块增强非自回归解码器对输出上下文的建模能力。这个工作受到了机器翻译工作的启发。作者另外设计了一个包含负例的策略,利用MWER损失指导模型学习提升模型性能。

Paraformer是第一个在性能上可以和自回归模型媲美,并且在大规模数据集上相比自回归模型有10倍+的推理速度提升。

方法

整体框架

如上图所示,整个框架包含五个模块:encoder、 predictor、sampler、decoder、loss function。其中Encoder和自回归模型的Encoder一样,本文使用SAN-M【multihead-attention的部分换成了san-M】和FFN,也可以使用conformer等结构。Predictor用于生成声学特征指导解码。Sampler模块使用声学特征和标签特征生成语义特征【用于学习输入的上下文内容语义信息,增强非自回归解码器对输出上下文的建模能力】。Decoder和自回归解码器相同,只不过这里是双向解码器[类似bert]。解码器包含多个SAN-M、FNN和cross MHA模块。除了CE loss,还会使用MAE loss训练predictor,MWER损失也一起参与模型训练。

整个流程阐述:
输入音频为X,长度为T;音频对应的文本标签为Y,长度为N。Encoder的输入为X,输出为H。Predictor的输入为H,输出为预测的输出标签长度N’并生成声学向量Ea。第一轮解码Decoder的输入为H和Ea,输出为Y’。图中红色虚线Pass1标记部分表示输入Ea,但是并不对这个输入进行反向传播学习。第二轮解码前会首先经过Sampler模块。Sampler模块在声学向量Ea和输出标签向量Ec之间进行采样得到语义向量Es。其中Char指的是标签Y。采样过程依赖Y和Y’之间的距离。第二轮解码Decoder的输入为H和Es,输出为Y’‘,这次进行反向传播学习。此次反向传播学习指导decoder学习上下文语音信息,同时也会指导predictor和encoder的学习。Sampler使用Y’进行距离计算不会进行反向传播学习。最后输出的Y’’会被采样为MWER训练生成负例候选。使用N和N’计算MAE。MWER、MAE和CE loss一起作为loss进行训练。
推理时,sampler模块是不激活的,并且双向并行解码器只使用声学向量Ea和隐向量H通过一轮输出最终的预测结果。尽管decoder在每次训练时会前向推理两次,但是因为在推理时只进行了一次所以并不会使计算复杂度变大。

Predictor

Predictor由两个卷基层组成,输出的float weight α 在0~1之间。作者通过累计此权重预测输出标签的长度。MAEloss定义为:

其实就是将所有α 进行了累加,加起来的长度就是预测的长度。LOSS就是真实长度和预测长度差的绝对值。作者引入了CIF机制产生声学向量。CIF是一个软的(非0/1,可以是小数)和单一对齐的,在AED模型中作为流式解决方案的实现。声学向量的生成时,CIF对权重α 进行累计,如果超过了设定的阈值β ,说明某一个声学向量的边界确定了。对边界之内的向量H根据权重α 进行缩放累计即可得到某一个声学向量。此过程重复直到结尾,可得到所有的声学向量。如下图所示:

在训练时权重α会根据N进行缩放(比如累计的α为N’,使用N/N’对所有的α 进行缩放,使用缩放后的α计算声学向量Ea。缩放是为了让的Ea维度和Ec的维度保持一致),但是在推理时无法进行缩放,导致训练和推理之间存在不一致。为了弥补这个不一致,作者提出了使用动态阈值β而不是固定阈值。计算公式如下:

下面是一个向上取整,所以分子小于等于分母,阈值β < = 1 。

Sampler 【参考字节Glancing Transformer

GLM目的就是更好的学习输出序列的上下文语义关系,利用上下文进行当前的文本预测 学习输出标签之间的依赖关系

在普通的单步非自回归模型中,优化的目标为:

然而,正如上面所说的,单步非自回归模型中的输出标签独立性假设导致模型识别效果不如自回归模型。GLM模块的loss定义如下:

其中GLM(Y,Y′)表示Sampler模块在Ea​和Ec​中选中Ec​替换Ea​对应的Y′′中token的集合;GLMˉ(Y,Y′)表示Sampler模块在Ea​和Ec​中未选中Ec​替换Ea​对应的Y′′的token的集合;GLM(Y,Y′)的定义如下:

上面公式的含义是从Ec​中采样⌈αd(Y,Y′)⌉个向量替换对应位置的Ea​,生成新的向量为Es​。其中α是控制采样率的采样因子,越大表示使用Ec​替换Ea​的概率越大。该采样概率应该在最初模型效果不好时设置的稍微大一些,然后随着整个的训练过程的进行逐渐减小。为了达到这个目的,作者简单实用汉明距离,其定义为:

也就是,最开始的时候模型学习不好,d会比较大,当模型学习越来越好时,d也逐渐减小。表示最开始训练时,使用较多的Ec​替换Ea​,也就是上下文信息更多和准确,减小模型的学习难度;当模型学习的越来越好时,使用较少的标签信息迫使模型进一步学习。

总结,sampler模块结合了标注标签向量Ec​,实现方法是随机替换Ea​中⌈αd(Y,Y′)⌉个向量生成新的含有语义的向量Es​。训练并行decoder使用语义上下文GLM(Y,Y′)预测目标标签GLMˉ(Y,Y′),使模型学习输出标签之间的依赖关系

补充Glancing Transformer 原理:

自回归模型中最为常用的训练方式是最大似然估计(MLE),不少非自回归模型也直接使用 MLE 进行训练。但是非自回归模型的输出方式是并行的,输出语句中的任何部分在输出之前都无法获得输出语句中其余词的确切值。所以直接使用 MLE 训练并行输出的非自回归模型无法有效地建模输出语句中词之间的依赖关系。值得注意的是,词之间依赖关系的建模对输出通顺的语句至关重要,拥有良好生成质量的自回归模型和多轮迭代解码的模型均对这种依赖关系进行了有效的建模。

直接训练完全并行生成来学习目标语句中词之间的依赖关系对模型并不友好。一种更为简单有效的依赖关系学习方式是根据部分输入词预测其余目标词。但是这种学习方式需要部分目标词作为输入,不符合非自回归模型并行生成的要求。作者观察到随着模型自身更好地学习到词之间的依赖关系,模型对于依赖关系的学习可以逐渐摆脱使用目标语句部分词作为输入的需求。基于以上观察,Glancing Transformer(GLAT)利用了一种 glancing language model 的方法,通过渐进学习的方式进行词之间依赖关系的建模。在渐进学习的过程中,模型会先学习并行输出一些较为简单的语句片段,然后逐渐学习整句话的单步并行生成。

具体地,在第一次解码的时候,和常规的非自回归模型一样,模型使用完全并行解码的方式输出语句。然后将第一次解码得到的输出和训练数据中的目标语句进行对比。如果输出和目标语句差距较大,说明模型在训练中难以拟合该训练样本,因此这时 GLAT 会选择提供更多目标词作为输入来帮助学习词之间依赖关系。反之,如果输出和目标语句比较接近,则模型自身已经较好地学习了如何并行生成该目标语句,所需要的目标词数量也相应减少。

在第二步解码之前,模型的解码器可以得到部分目标词作为输入,这些词的数量由第一步的解码结果所决定。这时,模型在并行输出之前可以获得部分目标词的确切值,所以在学习输出剩余目标词的过程中就可以对目标语句中词之间的依赖关系进行建模。

随着训练的进行,模型对数据拟合程度更高,因此能够更准确地生成目标语句。与此同时,需要作为解码器输入的目标语句中的词的数量会越来越少,在训练后期逐渐接近学习完全并行生成的训练场景(例如上图右边的例子)。具体的方法细节和实现方式可以参考论文。

Loss Function:

一共定义了三个loss:CE、MAE、MWER。训练时进行联合训练:

对于MWER,具体的计算公式如下:

非自回归模型使用贪婪搜索,所以只有一个输出路径。正如前面提到的,在使用MWER训练时作者使用负例采样策略通过随机遮蔽top1分值标签产生多个候选路径。

实验

实验设置

在AISHELL-1、AISHELL-2以及工业级2wh数据集上验证上述方法的效果。其中工业级的测试集有两个:普通30h、远场15h。具体的工业级语料介绍可以参考文献21和28。RTF的测试在NVIDIA tesla V100上完成。

结果如上表格。在上述两个测试集上的测试都是在ESPNET框架上实现的,不包含LM和预训练模型。
AISHELL-1 的AR baseline参考文献15,效果在所有AR模型中是最好的(排除使用更多数据知识的模型)。因为作者当前的目标是通过模型结构提升模型效果而不是通过数据。普通的NAR和Paraformer的结构相同,但是没有Sampler。

结论:
1. 普通NAR的表现超过了其它的NAR工作,比如文献15和文献12
2. 普通NAR模型的表现比AR模型稍微差一些,因为缺乏了输出标签之间的上下文信息。
3. Paraformer通过使用基于GLM的Sampler模块对普通NAR模型增强,得到了和AR模型相近的识别表现。
4. Paraformer模型在dev和test测试上的CER分别为:4.6%和5.2%,推理速度比AR基线模型快12倍

工业级2wh数据集

结果如上表格所示,进行了多个扩展实验。动态β表示2.2节中的动态阈值,CTC表示带有LM的DFSMN-CTC-sMBR系统,参考文献32。RTF在OpenNMT上进行评估。
实验有两个模型,一个41M的一个63M的。AR基线模型中attention的维度为256,和文献21一致。这里的结论和前面有所不同。

结论

  1. 可以看到在大型数据集上,普通NAR模型和AR模型的识别效果差距很大(AISHELL上差别较小)。
  2. 普通NAR模型虽然和CTC都有输出标签独立假设限制,但是普通NAR模型效果优于CTC效果。
  3. 普通NAR模型结合GLM时,效果提升。
  4. 当进一步结合MWER训练方法时,效果进一步提升。
  5. Paraformer模型效果和AR模型效果很接近,差别在相对2%以内,但是推理速度提升10倍+。
  6. Paraformer结合动态β \betaβ,效果进一步提升。因为相比固定阈值,动态阈值减少了推理和训练的不一致,更准确地提取了声学向量信息。
  7. 将模型变大时,得到了和前面相似的结论。Paraformer相比普通NAR模型效果提升;和AR模型效果相当,但是推理速度提升10倍+。
  8. Paraformer-63M和AR transformer-41M模型相比较,尽管Paraformer模型较大,但是Paraformer推理速度更快。也就是说,在远场测试集上Paraformer-63M模型相比AR transformer-41M模型,识别效果相对提升6.0%,并且推理速度提升7.4倍。 也就是,在实际生产中,可以通过使用较大的Paraformer模型达到比AR模型更好的识别效果以及更快的推理速度。

对采样因子α的超参数测试结果参见上表格。和预期相同α变大时,模型效果变好,因为在训练时提供了更多的上下文信息;然而如果该参数太大会导致训练和测试不一致。基本上,α 在0.5~1.0之间的表现比较稳定。

  1. 在小型训练集上普通NAR和AR模型的识别性能差别不大,但是在工业级大数据集上差距明显。这是第一个在大规模工业级数据上验证NAR模型效果的研究。
  2. Paraformer相比普通NAR模型识别效果相对提升11%,和精细训练的AR模型效果相当。

分析:见文章第一张图。普通NAR模型相比AR模型,插入错误多一点,但是删除错误少一点。说明普通NAR模型的predictor预测输出的标签个数较准确。然而替换错误比较多,侧面反应两者性能差距很大。作者认为这是由普通NAR模型的条件独立假设造成的。Paraformer模型相比普通NAR模型替换错误下降很多,也暗示了识别效果提升很多。作者认为这是由于GLM模块使NAR模型学习到了标签之间的依赖关系。Paraformer模型相比AR模型替换错误稍微多一些,也暗示着识别准确率稍微差一些。作者认为AR模型中基于LM的beam search解码扮演了很重要的角色,相比GLM效果更好。为了减少这个性能差距,作者将在未来工作中在Paraformer模型上结合外部语言模型。

个人思考/疑问

  1. MWER loss没看懂,需要看文献20.
  2. Char 的 Embedding使用的torch.nn.Embedding,直接学习嘛?还是预设值好的。
  3. 端到端语音识别中的Embedding,例如wenet框架的token 的 Embedding能不能使用NLP领域用文字训练得到的Embedding,如果能的话为啥主流的不是这种的,这个Embedding不比直接学习更好嘛?
  4. wenet的重打分架构,decoder能不能直接根据CTC N-best结果得到矫正的识别结果,相当于做矫正/纠错?
  5. Paraformer能不能直接结合在当前的wenet框架中,使用conformer那套encoder,而不是SAN-M。从文章结论看,可以使用更大的模型训练Paraformer,效果比之前的模型效果好,且推理速度快,是一个可以实践的方向。
  6. Paraformer结构能不能和wenet重打分那套结合?Pafaformer的输出替代CTC的那一支,然后再加上decoder部分的重打分。这样相当于有了两个decoder。按道理就是训练会慢,但是推理应该还好吧?可能可行。——》Paraformer输出只有一个结果,重打分啥啊。。这个做不了。但是decoder可以作为纠错模型对结果进行纠错。
  7. 作者提出的在外面再结合一个语言模型应该是可行的。

[18] L. Dong and B. Xu, “CIF: Continuous integrate-and-fire for end-to-end speech recognition,” in ICASSP 2020-2020 IEEE Interna-tional Conference on Acoustics, Speech and Signal Processing(ICASSP). IEEE, 2020, pp. 6079–6083.
[19] L. Qian, H. Zhou, Y. Bao, M. Wang, L. Qiu, W. Zhang, Y. Yu,and L. Li, “Glancing transformer for non-autoregressive neural machine translation,” arXiv preprint arXiv:2008.07905, 2020.
[20] R. Prabhavalkar, T. N. Sainath, Y. Wu, P. Nguyen, Z. Chen, C.-C. Chiu, and A. Kannan, “Minimum word error rate training for attention-based sequence-to-sequence models,” in 2018 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2018, pp. 4839–4843

大模型基本概念

什么是Base模型?什么是chat模型?什么是instruct?什么是4Bit?什么是AWQ模型?

大模型库中的basechatinstruct4bit等通常指的是不同类型或配置的预训练语言模型。它们的区别主要在于训练目标、用途和模型参数的精度。以下是对这些术语的解释:

1. Base 模型 (base)

  • 定义Base模型通常是指未经特定任务微调的基础预训练模型,在训练过程中最初被开发和优化的,它旨在平衡性能和资源消耗。
  • 用途这些模型通常用于进一步的微调,以适应特定任务或应用场景。如:智能对话、文本内容生成等
  • 特点:它们包含了大量通用知识,但没有针对特定任务进行优化。

2. Chat 模型 (chat)

  • 定义Chat模型专门为对话系统(聊天机器人)设计和优化
  • 用途:用于生成自然语言对话,能够理解上下文并生成连贯且有意义的回复。如:聊天机器人、智能助力
  • 特点:通常经过大量对话数据微调,具备更好的上下文理解能力和对话生成能力。

3. Instruct 模型 (instruct)

  • 定义Instruct模型是为遵循指令或完成特定任务而设计和优化的模型
  • 用途:用于执行具体指令,如回答问题、生成文本、翻译等任务。
  • 特点:经过指令数据集微调,能够更好地理解和执行用户提供的指令。

4. 4-bit 模型 (4bit)

  • 定义:4-bit模型使用低精度(4位)进行量化,以减少内存占用和计算资源需求。
  • 用途:适用于资源受限的环境,如移动设备或嵌入式系统,同时保持较高的性能表现。
  • 特点:通过量化技术显著减少了模型大小和计算复杂度,但可能会牺牲部分精度。

5. AWQ 模型 (选择性量化)

AWQ即激活值感知的权重量化(Activation-aware Weight Quantization),是一种针对LLM的低比特权重量化的硬件友好方法。通过保护更“重要”的权重不进行量化,从而在不进行训练的情况下提高准确率。

我们的方法基于这样一个观察:权重并非同等重要,仅保护1%的显著权重可以大大减少量化误差。然后,我们建议通过观察激活而不是权重来搜索保护显著权重的最佳通道缩放。AWQ不依赖于任何反向传播或重构,因此可以很好地保留LLMs在不同领域和模态中的泛化能力,而不会过度拟合校准集。AWQ在各种语言建模和特定领域基准上优于现有工作。由于更好的泛化能力,它在面向指令调整的LMs上实现了出色的量化性能,并且首次在多模态LMs上取得了成功,论文地址

AutoAWQ 是一个易于使用的 4 比特量化模型包。 与 FP16 相比,AutoAWQ 将模型速度提高了 3 倍,并将对内存需求降低了 3 倍。 AutoAWQ 实现激活感知权重量化 (AWQ) 算法来量化 LLM。 AutoAWQ 是在 MIT 的 LLM-AWQ 基础上创建和改进的。

6、GPT-Q:GPT模型的训练后量化

GPTQ 是一种针对4位量化的训练后量化 (PTQ) 方法,主要关注GPU推理和性能。

该方法的思想是通过将所有权重压缩到4位量化中,通过最小化与该权重的均方误差来实现。在推理过程中,它将动态地将权重解量化为float16,以提高性能,同时保持内存较低。具体操作包括以下几个步骤:

缩放:将输入张量x除以缩放因子scale。这一步是为了将x的值范围调整到预期的量化范围。

四舍五入:将缩放后的结果四舍五入到最近的整数。这一步是为了将x的值离散化,即将其转换为整数。

限制范围:使用torch.clamp函数将四舍五入后的结果限制在0和maxq之间。这一步是为了确保量化后的值不会超出预期的量化范围。反缩放:将量化后的张量减去零点zero,然后乘以缩放因子scale。这一步是为了将量化后的值恢复到原始的值范围。

7、GGUF | GGML

GGUF是GGML的新版本。尽管 GPTQ 在压缩方面表现出色,但如果你没有运行它所需的硬件,它对 GPU 的依赖性可能会成为一个缺点。

GGUF是一种量化方法,是LLM库的C++复制品,支持多种LLM,如LLaMA系列和Falcon等。它允许用户在 CPU 上运行 LLM,同时将其部分层次转移到 GPU 上以加速运行。尽管使用 CPU 通常比使用 GPU 进行推理要慢,但对于在 CPU 或 Apple 设备上运行模型的人来说,这是一种非常好的格式。特别是我们看到出现了更小、更强大的模型,如 Mistral 7B,GGUF 格式可能会成为一种常见的格式它提供了从2到8位精度的不同级别的量化。我们可以获取原始的LLaMA模型,将其转换为GGUF格式,最后将GGUF格式量化为较低的精度。

8、PTQ 训练后量化(Post-Training Quantization)

PTQ是一种常用于深度学习领域的量化技术。它的基本原理是在模型训练后,通过对模型进行量化,将模型的浮点数权重和激活转换为较低精度的表示,从而减小模型大小和计算复杂度,同时保持模型的精度损失较小。PTQ方法分为两类:只量化模型权重的方法和同时量化权重和激活的方法,像后面要说的AQLM就是第一类方法

9、 QAT 训练感知的量化

QAT 的基本思想是根据该层权重的精度将输入量化为较低的精度。QAT 还负责在下一层需要时将权重和输入相乘的输出转换回较高的精度。这个将输入量化为较低精度,然后将权重和输入的输出转换回较高精度的过程也称为“伪量化节点插入”。这种量化被称为伪量化,因为它既进行了量化,又进行了反量化,转换成了基本操作。

10、AQLM (Additive Quantization LM)

增量语言模型量化(AQLM)于2024年2月发布,已经集成到了HuggingFace中。现有的仅权重量化算法在技术上可以将模型权重量化到2位范围。然而,它们未能有效地保持模型的准确性。AQLM是一种新的仅权重后训练量化(PTQ)算法,为2比特/每参数范围设定了新的技术水平。与现有方法相比,它还提供了更小的基准改进,适用于3位和4位范围。具体来说,AQLM优于流行的算法如GPTQ,以及更近期但较不知名的方法如SpQR和QuIP#。

总结

  • base 模型是通用基础模型,适合进一步微调以适应特定任务。
  • chat 模型专为对话系统设计,擅长生成自然语言对话。
  • instruct 模型专为执行具体指令设计,擅长理解和执行用户提供的任务。
  • 4bit 模型通过低精度量化技术减小了内存占用和计算复杂度,适合资源受限环境。

AnyGPT:具有离散序列建模的统一多模态大语言模型

code:  https://github.com/OpenMOSS/AnyGPT
paper: https://arxiv.org/abs/2402.12226
Demos: https://junzhan2000.github.io/AnyGPT.github.io/

AnyGPT,一种任意到任意的多模态语言模型,它利用离散表示来统一处理各种模态,包括语音、文本、图像和音乐。AnyGPT可以稳定地训练,而无需对当前的大型语言模型(LLM)架构或训练范式进行任何更改。相反,它完全依赖于数据级预处理,促进新模式无缝集成到LLMs中,类似于新语言的合并。基础模型将四种模态对齐,允许不同模态和文本之间的多式联运转换。此外,我们基于各种生成模型构建了AnyInstruct数据集,其中包含任意模态相互转换的指令。它由108k个多回合对话样本组成,这些样本错综复杂地交织在各种模态中,从而使模型能够处理多模态输入和输出的任意组合。经过此数据集的训练,我们的聊天模型可以进行免费的多模式对话,其中可以随意插入多模式数据。实验结果表明,AnyGPT能够促进任何到任何多模态对话,同时实现与所有模态的专用模型相当的性能,证明离散表示可以有效且方便地统一语言模型中的多个模态。

基本模型可以执行各种任务,包括文本到图像、图像字幕、自动语音识别(ASR)、零触发文本到语音(TTS)、文本到音乐和音乐字幕。我们可以按照特定的指令格式执行推理。

所有的模态都转换为离散token

提出了一个可以统一训练的综合框架。 如图1所示,该框架由三个主要组件组成:( 1 )多模态分词器,( 2 )作为主干的多模态语言模型,以及( 3 )多模态de-tokenizer。  分词器将连续的非文本模态转换为离散的标记,这些标记随后被排列成多模态交织序列。 然后,使用下一个标记预测训练目标通过语言模型训练序列。 在推理过程中,多模态令牌被解码回其原始表示的相关的多模态token。 为了丰富生成的质量,可以部署多模态增强模块来对生成的结果进行后处理,包括语音克隆或图像超分辨率等应用。 

AnyInstruct多模态交错指令数据合成过程:

生成108k多轮对话数据,每个对话都交错包含text、speech、image、music模态的数据

1.Generation of text-based conversations incorporating multimodal elements.

•脑暴100个meta topics覆盖大量的音视元素相关场景,再用GPT-4扩展至20000个特定主题 •提示LLM生成基于这些主题的具体对话场景,由于LLM在生成多模态元素时有局限,准备了一些样例尽量包含多个模态 •根据场景使用GPT-4生成多轮对话,多模态用详细的文字进行表述’

2.用DALL-E-3、MusicGen、微软TTS API根据用户提示和模型的文本回复生成对应模态的数据。

最终包含205k图片,503k语音,113k音乐

模型预训练数据:

为了实现从任何模态到任何其他模态的生成,至关重要的是要在这些模态之间保持良好的数据一致。不幸的是,这种数据非常稀缺。为了解决这一挑战,我们构建了一个以文本为中心的双峰对齐数据集。在这里,文本是作为一个重要的中介桥梁之间的差距差距各种形式。通过将不同的模态与语言模型中的文本模态对齐,我们的目标是实现所有模态之间的相互对齐。

预训练数据分布,按令牌计数分段,内部部分指示模态,中间部分详细说明数据类型,外部部分指定单个数据集。

Image & Text :我们利用来自LAION-2B的图像-文本对(Schuhmann 等人,2022)、LAION-COCO(lai,2022 b)、LAION-Aesthetics(lai,2022 a)和JouneyDB(Pan 等人,2023年)。LAION-2B提供了与来自网络的嘈杂替代文本配对的图像,而LAION-COCO代表了其中的600 M子集,由BLIP标题。我们通过过滤文本质量、图像纵横比和剪辑得分等来细化这些数据集,产生了3亿对的高质量语料库。为了提高整体图像生成的保真度,我们用高质量的LAION-Aesthetics子集和Midjourney的合成数据集ColonneyDB补充了我们的数据。

Speech & Text :我们收集了几个大规模的英语自动语音识别(ASR)数据集,Gigaspeech  (Chen et al., 2021), Common Voice (Ardila et al., 2020), and Multilingual LibriSpeech(MLS) (Pratap et al., 2020). 共同构成了57,000小时的语音文本对语料库,涵盖了各种各样的说话人,领域和录音环境。

Music&Text:从互联网上抓取了超过一百万个音乐视频,开始了广泛的数据收集过程。核心步骤涉及使用Spotify API将这些视频的标题与相应的歌曲进行匹配。随后,我们为每个音乐音频收集了一组全面的元数据,包括视频标题、描述、关键字、播放列表名称和Spotify歌词。该元数据被格式化为JSON并输入GPT-4处理。GPT-4作为智能字幕生成器的作用至关重要;它利用嘈杂的元数据提取有意义的信息,并将其简洁地概括为连贯的句子。这种方法使我们能够为大量的音乐音频生成高质量的文本字幕,有效地减少了数据集中幻觉的发生。

Tokenization

Image Tokenizer:

使用SEED tokenizer:

ViT encoder 224x224input 16x16patches

Causal Q-Former 32token

VQ Codebook Codebook大小8192

MLP 将视觉code解码至生成空间的embedding(与unCLIP-SD对齐)

UNet decoder复原图像

Speech Tokenizer:

采用具有残差矢量量化(RVQ)的编码器-解码器架构

•RVQ 8层,每层codebook大小1024

•每秒编码为50帧,10s即500×8 •量化器第1层捕捉语义信息,
2~8层编码副语言细节 •AnyGPT中使用LLM处理第1层语义token,
其余层由声音克隆模型提供?(VALLE中表示声音主要受第1层影响),因此Speech这块新增的token数是1024

Music Tokenizer :

对于音乐,我们采用Encodec(D’efossez 等人,2022),具有使用残差矢量量化(RVQ)量化的潜在空间的卷积自动编码器,作为音乐令牌化器。

•RVQ 4层,每层codebook2048 •每秒编码为50帧 •不同之处在于LLM会依次预测每帧4层的token,然后再下一帧

Language Model Backbone

为了将多模态离散表示合并到预先训练的LLMs中,我们使用新的模态特定令牌扩展词汇表,从而扩展相应的嵌入和预测层,新合并的参数随机初始化。 来自所有模态的标记联合收割机以形成新的词汇表,其中每个模态在语言模型内被训练以在共享的表征空间中对齐。

•统一的多模态语言模型:通过特定模态的tokenizer,可以将多模态数据压缩为离散的token序列,并使用LLM的next token prediction loss训练,天然地统一各种任务形式 • •使用LLaMA-2-7B作为backbone

Multimodal Generation:

为了高质量生成采用2阶段框架,语义信息建模和感知信息建模。LLM在语义层面生成经过融合对齐的内容,然后NAR模型在感知层面将语义token转换成高保真的多模态内容,达到效果与效率间的平衡

•Image
使用Diffusion Model解码SEED tokens生成图片

•Speech
使用SoundStorm从SpeechTokenizer的semantic tokens生成acoustic tokens(LLM生成第1层,SoundStorm生成2~7层?),再用SpeechTokenizer解码生成语音
具备Zero-shot的声音克隆功能

•Music
使用Encodec解码生成音频

Instruction Tuning

实验:

局限性和未来工作:

任意到任意多模式LLM基准测试:任何对任何多模态大型语言模型(LLMs)领域是一个新兴的研究领域。然而,缺乏一个专门的基准来评估模型在多个维度上的能力,以及减轻潜在风险,这是一个相当大的挑战。因此,必须制定一个全面的基准。

增强LLMs:尽管具有离散表示的多模态LLMs可以稳定地训练,但与单模态训练相比,观察到更高的损失,从而阻止了每种模态的最佳性能。改进多模态融合的潜在策略可能涉及扩展LLMs和标记器或采用混合专家(莫伊)架构,以更好地管理不同的数据并优化性能。

更好的Tokenizer:可以从各种角度来增强 Tokenizer ,包括采用上级码本训练方法,开发更具凝聚力的多模态表示,以及在各种模态中应用信息解纠缠。

更长的上下文:多模态内容,例如图像和音频,通常跨越广泛的序列。例如,AnyGPT将音乐建模限制在5秒,这大大限制了其音频输出的实际用途。此外,对于任何对任何多模态对话,扩展的上下文允许更多数量的会话交换,从而丰富交互的深度和复杂性。

ChatTTS

https://github.com/2noise/ChatTTS/blob/main/docs/cn/README.md
https://2noise.com/
https://github.com/libukai/Awesome-ChatTTS
  1. 对话式 TTS: ChatTTS 针对对话式任务进行了优化,能够实现自然且富有表现力的合成语音。它支持多个说话者,便于生成互动式对话。
  2. 精细的控制: 该模型可以预测和控制精细的韵律特征,包括笑声、停顿和插入语。
  3. 更好的韵律: ChatTTS 在韵律方面超越了大多数开源 TTS 模型。我们提供预训练模型以支持进一步的研究和开发。

数据集和模型

  • 主模型使用了 100,000+ 小时的中文和英文音频数据进行训练。
  • HuggingFace 上的开源版本是一个在 40,000 小时数据上进行无监督微调的预训练模型。
###################################
# Sample a speaker from Gaussian.

rand_spk = chat.sample_random_speaker()
print(rand_spk) # save it for later timbre recovery

params_infer_code = ChatTTS.Chat.InferCodeParams(
    spk_emb = rand_spk, # add sampled speaker 
    temperature = .3,   # using custom temperature
    top_P = 0.7,        # top P decode
    top_K = 20,         # top K decode
)

###################################
# For sentence level manual control.

# use oral_(0-9), laugh_(0-2), break_(0-7) 
# to generate special token in text to synthesize.
params_refine_text = ChatTTS.Chat.RefineTextParams(
    prompt='[oral_2][laugh_0][break_6]',
)

wavs = chat.infer(
    texts,
    params_refine_text=params_refine_text,
    params_infer_code=params_infer_code,
)

###################################
# For word level manual control.

text = 'What is [uv_break]your favorite english food?[laugh][lbreak]'
wavs = chat.infer(text, skip_refine_text=True, params_refine_text=params_refine_text,  params_infer_code=params_infer_code)
torchaudio.save("output2.wav", torch.from_numpy(wavs[0]), 24000)

模型组成:LlamaModel、DVAE(VQVAE)、VOCOS声码器

文本控制

  • 1. Input Text : 需要转换的文本,支持中文和英文混杂
  • 2. Refine text : 是否对文本进行口语化处理
  • 3. Text Seed : 配置文本种子值,不同种子对应不同口语化风格
  • 4. 🎲 : 随机产生文本种子值
  • 5. Output Text : 口语化处理后生成的文本

音色控制

  • 6. Timbre : 预设的音色种子值
  • 7. Audio Seed : 配置音色种子值,不同种子对应不同音色
  • 8. 🎲 : 随机产生音色种子值
  • 9. Speaker Embedding : 音色码,详见 音色控制

情感控制

  • 10. temperate : 控制音频情感波动性,范围为 0-1,数字越大,波动性越大
  • 11. top_P :控制音频的情感相关性,范围为 0.1-0.9,数字越大,相关性越高
  • 12. top_K :控制音频的情感相似性,范围为 1-20,数字越小,相似性越高

系数控制

  • 13. DVAE Coefficient : 模型系数码
  • 14. Reload : 重新加载模型系数

播放控制

  • 15. Auto Play : 是否在生成音频后自动播放
  • 16. Stream Mode : 是否启用流式输出
  • 17. Generate : 点击生成音频文件
  • 18. Output Audio : 音频生成结果
  • 19. ↓ : 点击下载音频文件
  • 20. ▶️ : 点击播放音频文件

示例控制

  • 21. Example : 点击切换示例配置

快速体验

网址类型
Original Web原版网页版体验
Forge WebForge 增强版体验
LinuxPython 安装包
Samples音色种子示例
Cloning音色克隆体验

热门分支

功能增强

项目Star亮点
jianchang512/ChatTTS-ui提供 API 接口,可在第三方应用中调用
6drf21e/ChatTTS_colab提供流式输出,支持长音频生成和分角色阅读
lenML/ChatTTS-Forge提供人声增强和背景降噪,可使用附加提示词
CCmahua/ChatTTS-Enhanced支持文件批量处理,以及导出 SRT 文件
HKoon/ChatTTS-OpenVoice配合 OpenVoice 进行声音克隆

功能扩展

项目Star亮点
6drf21e/ChatTTS_Speaker音色角色打标与稳定性评估
AIFSH/ComfyUI-ChatTTSComfyUi 版本,可作为工作流节点引入
MaterialShadow/ChatTTS-manager提供了音色管理系统和 WebUI 界面

Deepseed 深度学习优化库综述

https://github.com/microsoft/DeepSpeed

教程文档:https://www.deepspeed.ai/

DeepSpeed是一个由微软开发的开源深度学习优化库,旨在提高大规模模型训练的效率和可扩展性。它通过多种技术手段来加速训练,包括模型并行化、梯度累积、动态精度缩放、本地模式混合精度等。DeepSpeed还提供了一些辅助工具,如分布式训练管理、内存优化和模型压缩等,以帮助开发者更好地管理和优化大规模深度学习训练任务。此外,deepspeed基于pytorch构建,只需要简单修改即可迁移。DeepSpeed已经在许多大规模深度学习项目中得到了应用,包括语言模型、图像分类、目标检测等等。

DeepSpeed有四大创新支柱:

DeepSpeed提供了一系列系统创新,使大规模DL培训变得有效和高效,大大提高了易用性,并在可能的规模方面重新定义了DL培训景观。这些创新,如ZeRO,3D-Mecelism,DeepSpeed-MoE,ZeRO-Infinity等都属于DeepSpeed-Training支柱。了解更多:DeepSpeed-Training

DeepSpeed汇集了张量、流水线、专家和ZeRO-parallelism等并行技术的创新,并将其与高性能自定义推理内核、通信优化和异构内存技术相结合,以前所未有的规模实现推理,同时实现无与伦比的延迟、吞吐量和成本降低。这种推理系统技术的系统组成DeepSpeed-Inference。了解更多:DeepSpeed-Inference

为了进一步提高推理效率,DeepSpeed为研究人员和从业者提供了易于使用和灵活组合的压缩技术,以压缩他们的模型,同时提供更快的速度,更小的模型大小,并显着降低压缩成本。此外,SoTA在压缩方面的创新,如ZeroQuant和XTC,都包含在DeepSpeed-Compression支柱下。了解更多:DeepSpeed-Compression

DeepSpeed库将DeepSpeed训练、推理和压缩支柱中的创新和技术实现并打包到一个易于使用的开源存储库中。它允许在单个训练,推理或压缩管道中轻松组合多种功能。DeepSpeed库被DL社区广泛采用,并已用于启用一些最强大的模型(请参阅DeepSpeed采用)。

Model Implementations for Inference(MII)是一个开源的存储库,通过减轻应用复杂系统优化技术的需求,使所有数据科学家都可以访问低延迟和高吞吐量的推理。开箱即用,MII为数千种广泛使用的DL模型提供支持,使用DeepSpeed-Inference进行优化,可以使用几行代码进行部署,同时与其香草开源版本相比,实现了显着的延迟减少。

DeepSpeed已与几种不同的流行开源DL框架集成,例如:

https://huggingface.co/docs/transformers/deepspeed

https://www.zhihu.com/people/deepspeed

FunAudioLLM:人类和LLMs之间自然交互的语音理解和生成基础模型

https://funaudiollm.github.io/  [阿里团队]
arxiv.org/abs/2407.04051

[Paper] [Code] [Modelscope:SenseVoiceCosyVoice] [HuggingFace: SenseVoice]

我们介绍FunAudioLLM,本报告介绍了FunAudioLLM,这是一个旨在增强人类与大型语言模型之间的自然语音交互的框架(LLMs)。其核心是两个创新模型:SenseVoice用于高精度多语言语音识别,情感识别和音频事件检测;CosyVoice用于多语言,音色和情感控制的自然语音生成。SenseVoice具有极低的延迟并支持50多种语言,而CosyVoice在多语言语音生成、零触发语音生成、跨语言语音克隆和指令遵循功能方面表现出色。与SenseVoice和CosyVoice相关的模型已经在Modelscope和Huggingface上开源,沿着相应的训练,推理和微调代码发布在GitHub上。 通过将这些模型与LLMs集成,FunAudioLLM可以实现语音翻译、情感语音聊天、交互式播客和富有表现力的有声读物叙述等应用,从而推动语音交互技术的发展。

SenseVoice支持多语言语音识别,其训练时间超过30万小时。具体来说,SenseVoice-Small在推理方面非常高效,其中识别延迟小于80 ms,分别比Whisper-Small和Whisper-large快5倍和15倍以上,SenseVoice-Large支持50多种语言的高精度ASR。此外,SenseVoice支持丰富的转录,包括最先进的情感识别、音频事件检测、反向文本标准化(Pusateri 等人,2017)和标点符号(Chen 等人,2020年)。

语音生成模型,CosyVoice,可以生成多语言的语音,这是超过17万小时和五种语言,包括中文(ZH),英语(EN),日语(JP),广东话(Yue)和韩语(KO)的训练。CosyVoice生成的样本可以实现低于2%的WER和超过75%的说话人相似度,达到人类平价的质量水平。CosyVoice支持零样本上下文学习,这使得语音克隆只需要3秒的提示语音。音色、情感、韵律和风格可以在语言内部或跨语言复制。我们还发布了一个指令模型,它可以控制说话者身份,说话风格(例如,情感)和其他具有自然纹理指令的细粒度语言特征。

Speech-to-Speech Translation:

通过集成SenseVoice、LLMs和CosyVoice,我们可以毫不费力地执行语音到语音翻译(S2ST)。

Emotional VoiceChat 情感语音聊天:

通过集成SenseVoice、LLMs和CosyVoice,我们可以开发一个情感语音聊天应用程序。

Interactive Podcast 互动播客:通过集成SenseVoice,一个基于LLM的多智能体系统,具有实时世界知识,以及CosyVoice,我们可以创建一个交互式播客。

有声书:通过LLMs的分析能力来构建和识别书籍中的情感,并将其与CosyVoice合成,我们实现了具有增强表现力的有声读物。

CosyVoice:

在推理阶段概述CosyVoice模型。概括地说,CosyVoice包括一个自回归Transformer,用于为输入文本生成相应的语音标记,一个基于ODE的扩散模型,流匹配,用于从生成的语音标记重建Mel频谱,以及一个基于HiFiGAN的声码器,用于合成波形。虚线模块在特定模型用途中是可选的,例如跨语言、SFT推理等。[论文]

图1:所提出的CosyVoice模型的概述。(a)演示了 𝒮3
标记器,其中虚线模块仅在训练阶段使用。(b)是CosyVoice的示意图,由文本到令牌LLM和令牌到语音流匹配模型组成。 S、E和T表示“start of sequence”、“end of sequence”和“turn of speech”标记。虚线表示推理阶段的自回归解码。(c)提供了我们的流匹配模型的放大视图,该模型以概率密度路径上的时间步长 t处的说话者嵌入 𝐯、语义标记 μ、掩蔽语音特征 X~和中间状态 Xt为条件。
图2:(a)零触发上下文学习和(B)跨语言语音克隆的序列构建。LID表示目标语言标识符。

CosyVoice由四个组件组成,即文本编码器、语音分词器[ speech tokenizer]、大语言模型和条件流匹配模型。具体地说,文本编码器用于对齐文本和语音token的语义空间,而  speech tokenizer 用于提取语义记号,如图1(a)所示。我们采用一个大的语言模型来学习整个文本编码和语音标记序列,将TTS重新表述为一个给定文本作为提示的自回归序列生成问题。然后,如图1(c)所示,利用条件流匹配模型,通过最佳路径上的去噪过程将语音令牌转换为Mel频谱图 。2020)用于以所生成的Mel频谱图作为输入来合成波形。

语音的受监督语义令牌 [ speech tokenizer] :

采用有监督的自动语音识别(ASR)模型来导出用于语音的有监督的语义语音( 𝒮3 )分词器。该模型是我们专有的SenseVoice ASR模型的微调版本。它接受了多语言音频数据的训练,并具有丰富的音频内容理解能力。 与原始ASR模型不同,我们将编码器分为两部分,并在它们之间插入矢量量化层。给定Mel频谱图 X 作为输入,其经历位置编码和 Encoder1 以获得上下文感知表示 H :

然后,一个矢量量化器(VQ)参与获得离散令牌。 对于帧 l 处的隐藏表示 𝐡l ,码本 C 中的最近嵌入的索引被视为该时间步处的语音令牌 μl :

语音令牌的对应码本嵌入被用作量化的隐藏表示 H¯={𝐜μ1,𝐜μ2,…,𝐜μL} ,并通过剩余的编码器层 Encoder2 :

 在 Encoder2 之后,接下来是基于transformer的ASR解码器,预测文本标签的后验概率:

TTS的大型语言模型:

我们将TTS任务表述为具有大型语言模型的自回归语音令牌生成问题(LLM)。对于LLM,序列构建是最重要的事项,其构建如下:

S and E denote the start and end of sequence, respectively.T is “turn of speech” tokens. 𝐯 is a speaker embedding vector extracted from the speech X with a pre-trained voice-print model2. The text encodings Y¯={𝐲¯u}u⁣∈⁣[1:U] is obtained by passing the text through a Byte Pair Encoded (BPE) tokenizer and text encoder:

由于文本和语音标记位于不同的语义层,因此文本编码器用于对齐它们的语义空间并有利于LLM建模。 在文本编码和语音标记 {μl}l⁣∈⁣[1:L] 之间插入开始标识符T报告问题,语音标记 {μl}l⁣∈⁣[1:L] 是用2.1中描述的监督语义标记器提取的。在训练阶段,我们采用教师强迫方案,其中左移序列作为模式输入,原始序列作为期望输出。 注意,在训练期间仅考虑语音标记的交叉熵损失和:

Optimal-transport Conditional Flow Matching:

在CosyVoice中,采用最优传输条件流匹配模型(OT-CFM)来学习Mel谱图的分布,并以生成的语音令牌为条件从其生成样本。 与扩散概率模型(DPM)相比,OT-CFM可以实现更好的性能,具有更简单的梯度,更容易的训练和更快的生成.

  在连续时间归一化流(CNF)中,从先验分布 p0⁢(X) 到Mel谱图 q⁢(X) 的数据分布构造概率密度路径。 概率密度路径由依赖于时间的矢量场 νt⁢(X):[0,1]×ℝL∗D→ℝL∗D 定义,其通过以下常微分方程(ODE)生成流 ϕt :

流匹配模型(The flow matching model)用于估计条件概率 P(S|X, v, Sref)。其中,X 和 v 分别表示语音片段和说话人嵌入,S 和 Sref 分别表示目标和参考语音的梅尔频谱。该模型使用卷积 Transformer U-Net 来确定最优传输 ODE 中先验分布与目标分布之间的矢量场。在推理阶段,只需五到十次迭代即可生成令人满意的梅尔频谱图。此外,还采用无分类器指导技术,通过屏蔽 70% 到 100% 的前置特征条件来增强上下文学习能力。

在从预测的梅尔频谱图合成波形时,我们使用改进的 HiFTNet 声码器,以支持流式生成。

可以实现的任务:

(a)零触发上下文学习和(B)跨语言语音克隆的序列构建。LID表示语言标识符。

Multi-lingual Voice Generation 【多语言的语音合成】

Zero-shot In-context Generation 零样本上下文生成

CosyVoice模型具有零触发的上下文学习能力,允许仅用简短的参考语音样本复制任意语音。这个过程需要仔细构造令牌语言模型(LM)的输入序列,如图2所示。 对于同一语言的提示语音和输入文本,我们将它们合并成一个统一的输入,将提示语音标记视为预生成的。利用该输入序列,自回归LM迭代地预测后续令牌,直到其遇到针对前一元素的“序列结束”令牌E。 然而,当提示语音和输入文本在语言上不同时,我们省略与提示相关联的文本和标记,以防止原始语言的韵律特征影响目标语言。 重要的是要注意,提示文本(对应于提示语音的内容)可以通过人工注释或ASR模型(如SenseVoice)转录。与提示文本类似,提示令牌是使用 𝒮3 tokenizer从提示语音中提取的。在生成语音标记之后,它们被附加在提示标记之后,形成流匹配模型的复合条件。此外,说话人嵌入和梅尔声谱图的提示语音,以进一步提高音色和环境的一致性。

Instructed Voice Generation指令语音生成:

Speaker Identity Control、细粒度控制、Style Control、情感丰富的声音生成、Speaker Fine-tune、Speaker Interpolation

为了进一步实现对CosyVoice的可控性,我们尝试集成额外的指令微调(Ji 等人,2023年)。CosyVoice-instruct扩展了CosyVoice-base,具有增强的后续功能。具体地说,它支持对诸如说话人身份(即,说话者的特征)、说话风格(包括情感、性别、语速和音调)以及细粒度的副语言特征。这些功能包括插入笑声、呼吸、边笑边说以及强调某些单词的能力。

SenseVoice:

SenseVoice 是具有音频理解能力的音频基础模型,包括语音识别(ASR)、语种识别(LID)、语音情感识别(SER)和声学事件分类(AEC)或声学事件检测(AED)。提出了具有不同大小和架构的两个模型以适应不同的要求:SenseVoice-Small,用于快速语音理解的仅编码器语音基础模型,以及SenseVoice-Large,编码器-解码器(Vaswani 等人,2017)语音基础模型,用于更准确的语音理解,支持更多语言。

SenseVoice模型概述。SenseVoice是一个语音基础模型,具有多种语音理解功能,包括ASR、LID、SER和AED。SenseVoice-Small是一种用于快速语音理解的仅编码器语音基础模型,SenseVoice-Large是一种编码器-解码器语音基础模型,用于更准确的语音理解,支持更多语言。

𝐞LID 、 𝐞SER 、 𝐞AEC 、 𝐞ITN/NoITN 是四个特殊标记的嵌入:

⟨LID⟩ 表示LID任务。如果 ⟨LID⟩ 被放置 ,则模型被训练以预测输出的对应位置处的语言标记。 在训练阶段,我们根据概率0.8用真实语言标记随机替换 ⟨LID⟩ ,以便模型可以预测语言标记,或者在推理阶段配置指定的语言标记。

⟨SER⟩ 表示SER任务。如果 ⟨SER⟩ 被放置,则训练模型以预测输出的对应位置处的语音情感标签。

⟨AEC⟩ 表示AEC任务。如果 ⟨AEC⟩ 被放置 ,则模型被训练以预测输出的对应位置处的音频事件标签。

⟨ITN⟩ 或 ⟨NoITN⟩ 指定转录样式。如果提供了 ⟨ITN⟩ ,则模型被训练为使用反向文本规范化(ITN)和标点符号进行转录。如果提供了 ⟨NoITN⟩ ,则模型被训练为在没有ITN和标点符号的情况下转录。

在训练阶段,利用交叉熵损失对LID、SER和AEC任务进行优化。ASR任务使用CTC损失来优化

SenseVoice-Large是一个自回归编码器-解码器模型,用于多语言ASR和多语音理解任务。与Whisper类似(拉德福 等人,2023),SenseVoice-Large通过解码器的输入令牌序列来指定任务。具体来说,我们通过分别包括 ⟨LID⟩ 、 ⟨SER⟩ 、 ⟨AED⟩ 令牌来指定是否预测具有时间戳的语言、语音情感和音频事件。与SenseVoice-Small相比,SenseVoice-Large的优势在于转录准确性和支持大量语言(50+)。

SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测

  • 多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。
  • 富文本识别:
    • 具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。
    • 支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。
  • 高效推理: SenseVoice-Small 模型采用非自回归端到端框架,推理延迟极低,10s 音频推理仅耗时 70ms,15 倍优于 Whisper-Large。
  • 微调定制: 具备便捷的微调脚本与策略,方便用户根据业务场景修复长尾样本问题。
  • 服务部署: 具有完整的服务部署链路,支持多并发请求,支持客户端语言有,python、c++、html、java 与 c# 等。

推理效率:

表1. 比较了SenseVoice、Paraformer和Whisper的模型结构、参数规模、支持的语言和推理效率。SenseVoice-small采用非自回归架构,与Whisper相比,它在推理效率方面具有显着优势。

性能评测:

我们在开源基准数据集(包括AISHELL-1、AISHELL-2、Wenetspeech、Librisepeech和Common Voice)上比较了SenseVoice和Whisper的多语言识别性能和推理效率。使用A800机器进行推理效率评估。SenseVoice-small采用非自回归端到端架构,推理延迟极低-与Whisper-small相比快7倍,与Whisper-large相比快17倍。

1、文本识别:[在开源基准数据集(包括 AISHELL-1、AISHELL-2、Wenetspeech、Librispeech 和 Common Voice)上比较了 SenseVoice 与 Whisper 的多语言语音识别性能和推理效率。在中文和粤语识别效果上,SenseVoice-Small 模型具有明显的效果优势。]

2、情感识别

SenseVoice也可以用于离散情感识别。支持快乐、悲伤、愤怒和中立。我们在7个流行的情感识别数据集上对其进行了评估。SenseVoice-Large可以在大多数数据集上接近或超过SOTA结果,即使没有目标语料库微调。

由于目前缺乏被广泛使用的情感识别测试指标和方法,我们在多个测试集的多种指标进行测试,并与近年来 Benchmark 上的多个结果进行了全面的对比。所选取的测试集同时包含中文 / 英文两种语言以及表演、影视剧、自然对话等多种风格的数据,在不进行目标数据微调的前提下,SenseVoice 能够在测试数据上达到和超过目前最佳情感识别模型的效果。

我们还在测试集上对多个开源情感识别模型进行对比,结果表明,SenseVoice-Large 模型可以在几乎所有数据上都达到了最佳效果,而 SenseVoice-Small 模型同样可以在多数数据集上取得超越其他开源模型的效果。

3、事件检测

SenseVoice-Small和SenseVoice-Large模型都可以检测到语音中的音频事件,包括音乐、掌声、笑声。SenseVoice-Large可以预测音频事件的开始和结束位置,而SenseVoice Small只能预测音频中发生了什么(只有一个事件),但是,它可以检测更多的事件,例如在人机交互过程中可能发生的咳嗽,打喷嚏,呼吸和哭泣。

尽管 SenseVoice 只在语音数据上进行训练,它仍然可以作为事件检测模型进行单独使用。我们在环境音分类 ESC-50 数据集上与目前业内广泛使用的 BEATS 与 PANN 模型的效果进行了对比。SenseVoice 模型能够在这些任务上取得较好的效果,但受限于训练数据与训练方式,其事件分类效果专业的事件检测模型相比仍然有一定的差距。

限制:

1、SenseVoice有一些需要解决的局限性。首先,对于资源不足的语言,ASR性能通常要低得多。其次,SenseVoice不是为流式转录而设计的。因此,未来的工作可能会集中在开发基于SenseVoice的流式语音理解模型。

2、CosyVoice也有一些限制。首先,它支持的语言数量有限。虽然它可以根据明确的指令表达情感和说话风格,但它不能根据文本的语义内容推断出适当的情感或风格。此外,CosyVoice在唱歌时表现不佳。在保持声音原有音色的同时,实现富有表现力的情感变化仍有改进的空间。

3、另一个限制是FunAudioLLM中的两个创新模型没有使用LLMs进行端到端的训练。这种流水线方法可能会引入错误传播,这可能会影响整体性能。

sensevoice 推理代码:

    def inference(
        self,
        data_in,
        data_lengths=None,
        key: list = ["wav_file_tmp_name"],
        tokenizer=None,
        frontend=None,
        **kwargs,
    ):


        meta_data = {}
        if (
            isinstance(data_in, torch.Tensor) and kwargs.get("data_type", "sound") == "fbank"
        ):  # fbank
            speech, speech_lengths = data_in, data_lengths
            if len(speech.shape) < 3:
                speech = speech[None, :, :]
            if speech_lengths is None:
                speech_lengths = speech.shape[1]
        else:
            # extract fbank feats
            time1 = time.perf_counter()
            audio_sample_list = load_audio_text_image_video(
                data_in,
                fs=frontend.fs,
                audio_fs=kwargs.get("fs", 16000),
                data_type=kwargs.get("data_type", "sound"),
                tokenizer=tokenizer,
            )
            # print(audio_sample_list)
            time2 = time.perf_counter()
            meta_data["load_data"] = f"{time2 - time1:0.3f}"
            speech, speech_lengths = extract_fbank(
                audio_sample_list, data_type=kwargs.get("data_type", "sound"), frontend=frontend
            )
            time3 = time.perf_counter()
            meta_data["extract_feat"] = f"{time3 - time2:0.3f}"
            meta_data["batch_data_time"] = (
                speech_lengths.sum().item() * frontend.frame_shift * frontend.lfr_n / 1000
            )

        speech = speech.to(device=kwargs["device"])
        speech_lengths = speech_lengths.to(device=kwargs["device"])
        print("speech", speech.shape, speech_lengths)
        language = kwargs.get("language", "auto")
        language_query = self.embed(
            torch.LongTensor(
                [[self.lid_dict[language] if language in self.lid_dict else 0]]
            ).to(speech.device)
        ).repeat(speech.size(0), 1, 1)
        print("language_query", language_query.shape)
        use_itn = kwargs.get("use_itn", False)
        textnorm = kwargs.get("text_norm", None)
        if textnorm is None:
            textnorm = "withitn" if use_itn else "woitn"
        textnorm_query = self.embed(
            torch.LongTensor([[self.textnorm_dict[textnorm]]]).to(speech.device)
        ).repeat(speech.size(0), 1, 1)
        print("textnorm_query", textnorm_query.shape)
        speech = torch.cat((textnorm_query, speech), dim=1)
        speech_lengths += 1
        print("speech_add_textnorm", speech.shape, speech_lengths)
        event_emo_query = self.embed(torch.LongTensor([[1, 2]]).to(speech.device)).repeat(
            speech.size(0), 1, 1
        )
        print("event_emo_query", event_emo_query.shape)
        input_query = torch.cat((language_query, event_emo_query), dim=1)
        print("input_query", input_query.shape)
        speech = torch.cat((input_query, speech), dim=1)
        speech_lengths += 3
        print("speech_final", speech.shape, speech_lengths)

        # Encoder
        encoder_out, encoder_out_lens = self.encoder(speech, speech_lengths)
        print("encoder_out", encoder_out.shape, encoder_out_lens)
        if isinstance(encoder_out, tuple):
            encoder_out = encoder_out[0]

        # c. Passed the encoder result and the beam search

        # 束搜索和CTC解码
        ctc_logits = self.ctc.log_softmax(encoder_out)

        results = []
        b, n, d = encoder_out.size()
        if isinstance(key[0], (list, tuple)):
            key = key[0]
        if len(key) < b:
            key = key * b
        for i in range(b):

#对每个 batch 样本提取 CTC logits 输出的前 encoder_out_lens[i] 帧。
#使用 argmax 找到每个时间步概率最大的类别 ID (yseq)。
#使用 torch.unique_consecutive 去除连续的重复类别 ID(CTC 解码中的常见步骤,用于去除重复的符号)。
            x = ctc_logits[i, : encoder_out_lens[i].item(), :]
            yseq = x.argmax(dim=-1)
            yseq = torch.unique_consecutive(yseq, dim=-1) # 使用 torch.unique_consecutive 去除连续的重复类别 ID(CTC 解码中的常见步骤,用于去除重复的符号)

            ibest_writer = None
            if kwargs.get("output_dir") is not None:
                if not hasattr(self, "writer"):
                    self.writer = DatadirWriter(kwargs.get("output_dir"))
                ibest_writer = self.writer[f"1best_recog"]

#使用 mask 去掉 CTC 解码中的 blank ID。
#将整数 ID 列表转化为对应的字符或单词(通过 tokenizer.decode)。
            mask = yseq != self.blank_id
            token_int = yseq[mask].tolist()

            # Change integer-ids to tokens
            text = tokenizer.decode(token_int)

            result_i = {"key": key[i], "text": text}
            results.append(result_i)

            if ibest_writer is not None:
                ibest_writer["text"][key[i]] = text

        return results, meta_data

CTC使用blank id来对齐不同长度的输入和输出:

  • 在语音识别等任务中,输入的语音帧数往往远多于输出的字符数。CTC 通过引入 blank ID 来解决这个问题,使模型能够生成对齐(alignment),从而允许输入长度大于输出长度。
  • blank 用来表示在某个时间步模型没有输出任何字符,或者保持上一个字符的状态不变。

去除重复和冗余:

  • 语音帧与字符之间的对齐并不是一一对应的,CTC 会允许模型在多个时间步中输出相同的字符,同时在其他时间步输出 blank
  • 解码过程中,当遇到连续的相同字符时,只保留第一个字符,忽略重复出现的字符和 blank,这帮助去除冗余。
  • 例如,模型输出可能是 [a, blank, blank, a, a, blank, t, blank, blank],最终解码结果会变为 "a, t"

大模型系列教程

https://github.com/liguodongiot/llm-action?tab=readme-ov-file

目录

LLM训练

LLM训练实战

下面汇总了我在大模型实践中训练相关的所有教程。从6B到65B,从全量微调到高效微调(LoRA,QLoRA,P-Tuning v2),再到RLHF(基于人工反馈的强化学习)。

LLM预训练/SFT/RLHF…参数教程代码
Alpacafull fine-turning7B从0到1复现斯坦福羊驼(Stanford Alpaca 7B)配套代码
Alpaca(LLaMA)LoRA7B~65B1.足够惊艳,使用Alpaca-Lora基于LLaMA(7B)二十分钟完成微调,效果比肩斯坦福羊驼
2. 使用 LoRA 技术对 LLaMA 65B 大模型进行微调及推理
配套代码
BELLE(LLaMA/Bloom)full fine-turning7B1.基于LLaMA-7B/Bloomz-7B1-mt复现开源中文对话大模型BELLE及GPTQ量化
2. BELLE(LLaMA-7B/Bloomz-7B1-mt)大模型使用GPTQ量化后推理性能测试
N/A
ChatGLMLoRA6B从0到1基于ChatGLM-6B使用LoRA进行参数高效微调配套代码
ChatGLMfull fine-turning/P-Tuning v26B使用DeepSpeed/P-Tuning v2对ChatGLM-6B进行微调配套代码
Vicuna(LLaMA)full fine-turning7B大模型也内卷,Vicuna训练及推理指南,效果碾压斯坦福羊驼N/A
OPTRLHF0.1B~66B1.一键式 RLHF 训练 DeepSpeed Chat(一):理论篇 
2. 一键式 RLHF 训练 DeepSpeed Chat(二):实践篇
配套代码
MiniGPT-4(LLaMA)full fine-turning7B大杀器,多模态大模型MiniGPT-4入坑指南N/A
Chinese-LLaMA-Alpaca(LLaMA)LoRA(预训练+微调)7B中文LLaMA&Alpaca大语言模型词表扩充+预训练+指令精调配套代码
LLaMAQLoRA7B/65B高效微调技术QLoRA实战,基于LLaMA-65B微调仅需48G显存,真香配套代码
LLaMAGaLore60M/7B突破内存瓶颈,使用 GaLore 一张4090消费级显卡也能预训练LLaMA-7B配套代码

⬆ 一键返回目录

LLM微调技术原理

对于普通大众来说,进行大模型的预训练或者全量微调遥不可及。由此,催生了各种参数高效微调技术,让科研人员或者普通开发者有机会尝试微调大模型。

因此,该技术值得我们进行深入分析其背后的机理,本系列大体分七篇文章进行讲解。

peft方法

LLM微调实战

下面给大家分享大模型参数高效微调技术实战,该系列主要针对 HuggingFace PEFT 框架支持的一些高效微调技术进行讲解。

教程代码框架
大模型参数高效微调技术实战(一)-PEFT概述及环境搭建N/AHuggingFace PEFT
大模型参数高效微调技术实战(二)-Prompt Tuning配套代码HuggingFace PEFT
大模型参数高效微调技术实战(三)-P-Tuning配套代码HuggingFace PEFT
大模型参数高效微调技术实战(四)-Prefix Tuning / P-Tuning v2配套代码HuggingFace PEFT
大模型参数高效微调技术实战(五)-LoRA配套代码HuggingFace PEFT
大模型参数高效微调技术实战(六)-IA3配套代码HuggingFace PEFT
大模型微调实战(七)-基于LoRA微调多模态大模型配套代码HuggingFace PEFT
大模型微调实战(八)-使用INT8/FP4/NF4微调大模型配套代码PEFT、bitsandbytes

⬆ 一键返回目录

LLM分布式训练并行技术

近年来,随着Transformer、MOE架构的提出,使得深度学习模型轻松突破上万亿规模参数,传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此,我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。

而利用AI集群,使深度学习算法更好地从大量数据中高效地训练出性能优良的大模型是分布式机器学习的首要目标。为了实现该目标,一般需要根据硬件资源与数据/模型规模的匹配情况,考虑对计算任务、训练数据和模型进行划分,从而进行分布式训练。因此,分布式训练相关技术值得我们进行深入分析其背后的机理。

下面主要对大模型进行分布式训练的并行技术进行讲解,本系列大体分九篇文章进行讲解。

⬆ 一键返回目录

分布式AI框架

分布式训练网络通信

待更新…

LLM训练优化技术

  • FlashAttention V1、V2
  • 混合精度训练
  • 重计算
  • MQA / GQA
  • 梯度累积

LLM对齐技术

  • PPO(近端策略优化)
  • DPO
  • ORPO

⬆ 一键返回目录

LLM推理

LLM推理框架

LLM推理优化技术

LLM压缩

近年来,随着Transformer、MOE架构的提出,使得深度学习模型轻松突破上万亿规模参数,从而导致模型变得越来越大,因此,我们需要一些大模型压缩技术来降低模型部署的成本,并提升模型的推理性能。 模型压缩主要分为如下几类:

  • 剪枝(Pruning)
  • 知识蒸馏(Knowledge Distillation)
  • 量化

LLM量化

本系列将针对一些常见大模型量化方案(GPTQ、LLM.int8()、SmoothQuant、AWQ等)进行讲述。

LLM剪枝

结构化剪枝

  • LLM-Pruner(LLM-Pruner: On the Structural Pruning of Large Language Models)
  • LLM-Shearing(Sheared LLaMA: Accelerating Language Model Pre-training via Structured Pruning)

非结构化剪枝

  • SparseGPT(SparseGPT: Massive Language Models Can be Accurately Pruned in One-Shot)
  • LoRAPrune(LoRAPrune: Pruning Meets Low-Rank Parameter-Efficient Fine-Tuning)
  • Wanda(A Simple and Effective Pruning Approach for Large Language Models)
  • Flash-LLM(Flash-LLM: Enabling Cost-Effective and Highly-Efficient Large Generative Model Inference with Unstructured Sparsity)

LLM知识蒸馏

Standard KD:

使学生模型学习教师模型(LLM)所拥有的常见知识,如输出分布和特征信息,这种方法类似于传统的KD。

  • MINILLM
  • GKD

EA-based KD:

不仅仅是将LLM的常见知识转移到学生模型中,还涵盖了蒸馏它们独特的涌现能力。具体来说,EA-based KD又分为了上下文学习(ICL)、思维链(CoT)和指令跟随(IF)。

In-Context Learning:

  • In-Context Learning distillation

Chain-of-Thought:

  • MT-COT
  • Fine-tune-CoT
  • DISCO
  • SCOTT
  • SOCRATIC CoT

Instruction Following:

  • Lion

低秩分解

低秩分解旨在通过将给定的权重矩阵分解成两个或多个较小维度的矩阵,从而对其进行近似。低秩分解背后的核心思想是找到一个大的权重矩阵W的分解,得到两个矩阵U和V,使得W≈U V,其中U是一个m×k矩阵,V是一个k×n矩阵,其中k远小于m和n。U和V的乘积近似于原始的权重矩阵,从而大幅减少了参数数量和计算开销。

在LLM研究的模型压缩领域,研究人员通常将多种技术与低秩分解相结合,包括修剪、量化等。

  • ZeroQuant-FP(低秩分解+量化)
  • LoRAPrune(低秩分解+剪枝)

LLM数据工程

LLM Data Engineering

预训练语料处理技术

llm-pretrain-pipeline
  • 数据收集
  • 数据处理
    • 去重
    • 过滤
    • 选择
    • 组合

LLM微调高效数据筛选技术

提示工程

  • Zero-Shot Prompting
  • Few-Shot Prompting
  • Chain-of-Thought (CoT) Prompting
  • Automatic Chain-of-Thought (Auto-CoT) Prompting
  • Tree-of-Thoughts (ToT) Prompting

LLM算法架构

llm-famliy
llm-famliy

LLM应用开发

大模型是基座,要想让其变成一款产品,我们还需要一些其他相关的技术,比如:向量数据库(Pinecone、Milvus、Vespa、Weaviate),LangChain等。

LLM国产化适配

随着 ChatGPT 的现象级走红,引领了AI大模型时代的变革,从而导致 AI 算力日益紧缺。与此同时,中美贸易战以及美国对华进行AI芯片相关的制裁导致 AI 算力的国产化适配势在必行。本系列将对一些国产化 AI 加速卡进行讲解。

⬆ 一键返回目录

AI编译器

AI编译器是指将机器学习算法从开发阶段,通过变换和优化算法,使其变成部署状态。

框架:

  • MLIR
  • XLA
  • TVM

AI基础设施

AI加速卡

AI集群

待更新…

AI集群网络通信

待更新…

  • 分布式训练网络通讯原语
  • AI 集群通信软硬件

LLMOps

LLM生态相关技术

LLM面试题

正在收集中…

⬆ 一键返回目录

服务器基础环境安装及常用工具

基础环境安装:

常用工具:

多模态视觉-语言大模型的架构演进

https://zhuanlan.zhihu.com/p/693885420

A Survey on Multimodal Large Language Models

https://github.com/BradyFU/Awesome-Multimodal-Large-Language-Models

多模态视觉-语言大模型的架构演进

本文回顾了多模态LLM (视觉-语言模型) 近一年来的模型架构演进,对其中有代表性的工作进行了精炼总结.这篇综述一张图总结了多模态LLM的典型架构:

BLIP

【2022.01发布】https://arxiv.org/abs/2201.12086

统一视觉-语言理解和生成,使用captioner+filter高效利用互联网有噪数据

Refer to caption
我们使用Captioner(Cap)为Web图像生成合成标题,并使用Filter(Filt)删除嘈杂的标题。

模型架构:

  • Image/text encoder: ITC loss对齐视觉和语言表征,基于ALBEF提出的momentum distillation
  • Image-grounded text encoder: ITM loss建模视觉-语言交互,区分positive/negative图文对,使用hard negative mining挖掘更高相似度的负例优化模型
  • Image-grounded text decoder: LM loss实现基于图像的文本解码,将双向self-attention替换为causal self-attention
Refer to caption

BLIP-2

【2023.01发布】https://arxiv.org/abs/2301.12597

使用相对轻量的Q-Former连接视觉-语言模态,通过两阶段训练:第1阶段基于冻住的视觉编码器,第2阶段基于冻住的LLM

Refer to caption
BLIP-2的框架概述。我们按照两阶段策略预训练轻量级Querying Transformer,以弥补模态差距。第一阶段从冻结图像编码器引导视觉语言表示学习。第二阶段从冻结的LLM引导视觉到语言的生成学习,这使得零拍摄指令的图像到文本生成成为可能

第1阶段:同样优化ITC/ITM/LM loss,使用不同的self-attention mask,query和text端共享self-attention参数,使得可学习的query embedding提取与text语义最相关的视觉表征;使用BERT-base初始化,32个768维的query作为信息瓶颈

  • ITC:计算每个query与text的相似度,取最大的;使用batch内negatives,不再使用momentum queue
  • ITM:对每个query与text的分类logits取平均,使用hard negatives mining挖掘难负例
  • LM:text token和frozen image encoder不能直接交互,要求query能提取有益的视觉特征
Refer to caption

第2阶段:可基于decoder-only/encoder-decoder LLM进行适配,FC层对齐维度

Refer to caption

LLaVA

【2023.04发布】https://arxiv.org/abs/2304.08485

  • 使用仅文本模态的GPT-4生成视觉-语言指令遵循数据,用于微调多模态LLM
    • 使用图片的dense captions和bounding boxes作为prompt,可以生成对话、细节描述、复杂推理等指令
  • CLIP ViT-L/14 + Vicuna,使用简单的线性层进行映射
    • 更复杂的:Flamingo中gated cross-attention,BLIP-2中的Q-former

Qwen-VL

【2023.08发布】https://arxiv.org/abs/2308.12966

支持中英双语、多图像输入

Qwen-7B + OpenCLIP ViT-bigG,输入图像直接resize到视觉编码器输入

位置感知的VL adapter:使用基于Q-former的单层的cross-attention,将图像特征维度压缩到256,在query-key pairs中引入2D绝对位置编码增强位置信息

图像输入:<img>256-dim图像特征</img>

bounding box输入输出:<box>(X_topleft, Y_topleft), (X_bottomright, Y_bottomright)</box>, <ref>…</ref>标记box所指内容

三阶段训练:

stage1. 预训练:基于大规模、弱标注、网络爬取的图像-文本对,输入分辨率224×224,冻住LLM,训练ViT和Q-former,主要目的是模态对齐

stage2. 多任务预训练:基于7种下游视觉-语言理解任务的高质量、细粒度标注数据训练,输入分辨率448×448,图像/文本数据交错,训练整个模型

stage3. 指令微调:提升指令遵循和多轮对话能力,冻住ViT,训练LLM和Q-former

Qwen-VL-Plus和Qwen-VL-Max提升了视觉推理能力、图像细节的识别/提取/分析能力(尤其是文本导向的任务)、支持高分辨率和极端纵横比的输入图像;在部分中文场景超过了GPT-4V和Gemini

InternLM-XComposer

【2023.09发布】https://arxiv.org/abs/2309.15112

交错图文构成:自动在输出文本中插入合适的图片

EVA-CLIP ViT + InternLM-7B + Q-former (将图像特征压缩到64个embedding)

两阶段训练:

stage1. 预训练:冻住ViT,训练LLM和Q-former

stage2. 监督微调:包括多任务训练和指令微调,冻住ViT和LLM,训练Q-former,对LLM进行LoRA微调,增强指令遵循和图文混排能力

Fuyu-8B

【2023.10发布】https://huggingface.co/adept/fuyu-8b

模型架构和训练过程简单,易于scaling;支持任意图像分辨率;推理速度快

decoder-only的transformer,没有专门的图像编码器;image patch直接线性映射到transformer第一层

LLaVA-1.5

【2023.10发布】https://arxiv.org/abs/2310.03744

仍使用MLP作为模态连接,突出了训练的数据高效性

CogVLM

【2023.11发布】https://arxiv.org/abs/2311.03079

深度视觉-语言模态融合,而不影响LLM原有的语言能力:冻住LLM和ViT,在attention和FFN层训练一份视觉专家模块

CogAgent

【2023.12发布】https://arxiv.org/abs/2312.08914

针对GUI场景的多模态理解和导引,使用高分辨率-低分辨率双编码器,支持1120×1120的屏幕输入

高分辨率分支使用更轻量的ViT,基于cross-attention将高分辨率图像特征与LLM每层进行融合

VILA

【2023.12发布】https://arxiv.org/abs/2312.07533

探索了视觉-语言模型训练的设计选择:

  1. 预训练阶段冻住LLM虽然能取得较好的zero-shot性能,但上下文学习能力依赖对LLM的微调
  2. 图文交错的预训练数据是有益的,只用图文数据对效果不够好
  3. 将纯文本的指令微调数据加入SFT阶段有助于缓解纯文本任务的能力退化,同时也能够增强视觉-语言任务的准确性

LLaVA-Next

【2024.01发布】https://llava-vl.github.io/blog/2024-01-30-llava-next/

相对于LLaVA-1.5,保持了极简的设计和数据高效性:

  1. 提高了输入图像的分辨率 (4x),支持3种纵横比:672×672, 336×1344, 1344×336
  2. 更好的视觉推理和OCR能力:更好的指令微调数据配比
  3. 更好的多场景视觉对话:更好的世界知识和逻辑推理
  4. 更高效的部署和推理:SGLang

动态高分辨率:视觉编码器支持336×336的图像输入,对于672×672的图像,按照{2,2}的grid split成4个图像patch过encoder,downsample到336×336也过encoder,特征拼接作为visual tokens输入到LLM中

收集高质量用户数据,包括真实场景中反映用户更广泛意图的指令数据,利用GPT-4V进行数据构造

多模态文档/图表数据,增强文档OCR和图表理解能力

InternLM-XComposer2

【2024.01发布】https://arxiv.org/abs/2401.16420

提出了新的模态对齐方法partial LoRA:只在image token上添加LoRA参数,保证预训练语言知识的完整性,这样一个更轻量的视觉编码器同样有效

OpenAI CLIP ViT-L/14 + InternLM2-7B + partial LoRA (rank=256)

两阶段训练:

stage1. 预训练:冻住LLM,微调ViT和partial LoRA模块,包括通用语义对齐(理解图像基本内容)、世界知识对齐(进行复杂的知识推理)、视觉能力增强(OCR、物体定位、图表理解)

stage2. 监督微调:微调整个模型,包括多任务训练、自由形式图文排布

InternLM-XComposer2-4KHD

2024.04发布了4KHD版本:https://arxiv.org/abs/2404.06512

支持动态分辨率(336px → 4K (3840×1600)):改进了patch division范式,保持训练图像原有的纵横比,自动变化patch数目,基于336×336的ViT配置layout

动态图像划分:将输入图像resize and pad到336的整数倍宽高

结合图像的global和local视角:global视角由输入直接resize到336×336,使用sep token分隔两种视角的token

图像2D结构的换行符:可学习的\n token分隔图像token行

Mini-Gemini

【2024.03发布】https://arxiv.org/abs/2403.18814

使用双视觉编码器提取低分辨率embedding作为query,高分辨率特征区域作为key/value,两者之间做cross-attention,输出挖掘的tokens作为prompt前缀,输入到LLM做推理,外接图像解码器生成图像(SDXL)

LLaVA-NeXT系列

LLaVA-1.5

23年10月,LLaVA-1.5发布,通过在视觉和语言模态间添加简单的MLP层实现了训练样本高效性,为多模态大模型在低数据业务场景的落地提供了可能。

[2310.03744] Improved Baselines with Visual Instruction Tuning

LLaVA-NeXT

24年1月,LLaVA-NeXT(1.6)发布,在1.5的基础上保持了精简的设计和数据高效性,支持更高的分辨率、更强的视觉推理和OCR能力、更广泛场景的视觉对话。模型分为两阶段训练:阶段1预训练只训练连接层,阶段2指令微调训练整个模型。

LLaVA-NeXT: Improved reasoning, OCR, and world knowledge

  • 动态高分辨率AnyRes:如上图,为了让模型能感知高分辨率图像的复杂细节,对图像进行网格划分。比如,对于672×672的图像,一方面按2×2的网格切分为4张336px的输入图像送给ViT编码成特征,另一方面将图像直接resize到336px进行编码,最后将两部分特征合并输入到LLM中,这样模型具备了全局和局部的视觉推理能力。
  • 指令数据混合:一方面保证指令数据具有高质量、多样性,反映真实场景的广泛用户意图;另一方面,补充文档和表格数据,提升模型的OCR和图表理解能力。
  • 扩大LLM尺寸:考虑了7B、13B、34B的LLM。

24年5月,团队发布基于更强LLM的LLaVA-NeXT版本,支持LLaMA3(8B)和Qwen1.5(72B/110B)。更大的LLM提供更好的视觉世界知识和逻辑推理能力,最大的模型接近GPT-4V的性能,同时保证了训练高效性。

LLaVA-NeXT: Stronger LLMs Supercharge Multimodal Capabilities in the Wild

LLaVA-NeXT-Video

24年4月,LLaVA-NeXT-Video发布,展现出强大的zero-shot视频理解能力。LLaVA-NeXT中的高分辨率图像动态划分可以很自然地迁移到视频模态用来表示视频的多帧,使得只在图文模态上训练的LLaVA-NeXT能在视频任务上泛化。此外,推理时的长度泛化用于有效处理超出LLM最大长度的长视频输入。基于LLaVA-NeXT-Image模型,作者发布了在视频数据上监督微调的LLaVA-NeXT-Video,以及在AI反馈的监督下使用DPO偏好对齐的LLaVA-NeXT-Video-DPO。使用SGLang部署和推理,支持可扩展的大规模视频推理。可以想到,这有助于海量视频的高效文本标注,催生了未来更强大视频生成模型。

LLaVA-NeXT: A Strong Zero-shot Video Understanding Model

  • AnyRes:可以将N帧视频看作{1xN}的网格,而LLM的最大长度限制了可以处理的帧数,很自然地会考虑对图像进行下采样减少每帧token数,但作者发现为保证效果仍只能处理16帧。
  • 长度泛化:基于LLM的长度外推技术(RoPE的线性扩展),推理时扩展2倍,从之前的16帧扩展到56帧,大大提升了模型分析长视频序列的能力。
  • 基于LLM反馈的DPO偏好优化:偏好数据由LLM生成,视频表示为详细的说明文字,带来了很大的性能增益。
  • 对于视频数据的微调,作者进行了ablation study:(1) 在LLaVA-NeXT图像级指令微调后,继续在视频级指令上增量微调;(2) 在LLaVA-NeXT图像级预训练后,在图像级和视频级数据联合微调,每个batch数据包含一种类型或者混合两种类型,实验表明混合图像和视频模态数据效果最佳。

指令微调Ablation Study


团队还分享了视觉指令微调过程中除数据之外的因素的ablation study,从模型架构、视觉表征、训练策略角度进行分析。

LLaVA-NeXT: What Else Influences Visual Instruction Tuning Beyond Data?

  • 模型架构:扩展LLM比扩展视觉编码器更有效,视觉输入配置(分辨率、token数)比视觉编码器大小更关键。
    • 学习率:为了训练更稳定,视觉编码器的学习率通常应该比LLM学习率小10倍~5倍,更大的LLM需要更小的学习率,尽量避免loss跑飞。
    • 视觉编码器:相较于模型大小,基于分辨率、token数的视觉特征支持编码更多的视觉细节,预训练数据支持编码更多的视觉知识,作用更重要。
  • 视觉表征:分辨率、特征空间视觉token数都重要,相对来说扩展分辨率更有效,建议使用AnyRes时下采样。
    • 对于更高分辨率图像或者更长的视频,AnyRes需要更多的格子。比如,对于超过768×768的图像,以前的方案首先resize到768×768会导致细节丢失。这里考虑划分成更多的格子,然后对编码的特征进行双线性插值(下采样)到更小的特征,以防止视觉token数过多。
  • 训练策略:在互联网级低质数据上大规模预训练后,指令微调前,增加一个阶段,使用一些高质量合成数据增强知识。

LLaVA-NeXT-Interleave

24年6月,LLaVA-NeXT-Interleave发布,提出图文交错格式可以作为通用模版统一不同的视觉模态,比如单图像(multi-patch)、多图像(multi-image)、视频(multi-frame)、3D(multi-view)。在保证LLaVA-NeXT单图像输入的性能下,可以提高其它模态任务的性能,而且在不同模态任务上具有初步的迁移能力。这种大一统的模型支持更广泛真实场景的应用,比如多页PPT的总结和问答、生成图像编辑的提示词、多文档的汇总和比较。

LLaVA-NeXT: Tackling Multi-image, Video, and 3D in Large Multimodal Models

作者在训练策略上进行了ablation study:

  • 从LLaVA-NeXT单图像模型继续训练,从stage2单图像指令微调后的模型开始训练效果更好,可以继承单图像任务的指令遵循能力。
  • 两种组织格式:将所有图像token放在最前面,在文本中使用特殊token指代图像 (in-the-front),将图像token放在其原来的位置,与文本交错 (interleaved)。实验表明,在训练阶段混合两种格式有助于在推理阶段这两种格式都取得更好的性能。

InternVL系列

InternVL-1.0

23年12月,上海AI Lab @OpenGVLab发布InternVL。该工作在模态对齐中视觉编码器和LLM之间在参数规模和特征表征能力上存在较大的差距,自然地提出扩大视觉端的参数量到6B (InternViT-6B),然后使用不同质量的图文数据逐渐与LLM对齐。此外,连接层的参数量也扩大了,类似Q-Former,这里设计了一个8B的语言中间件QLLaMA,使用Chinese-LLaMA的参数初始化增强其跨语言理解能力,新增96个可学习query token和cross-attention层 (1B),实现视觉和语言模态进一步对齐。

[2312.14238] InternVL: Scaling up Vision Foundation Models and Aligning for Generic Visual-Linguistic Tasks

下图是InternVL的三阶段渐进式训练策略,训练数据质量逐渐提高,最开始使用大规模有噪的图文对进行对比预训练 (类似CLIP),接着加入冻结参数的QLLaMA连接件,只学习cross-attention,使用图文匹配/对比/生成loss (类似BLIP),最后引入LLM进行监督微调,赋予多模态对话和问答能力。

InternVL训练的多阶段性赋予其内在的多功能性,通过灵活组合不同模块,可以支持各种视觉-语言任务,如下图。

这里值得讨论的一个点在于,InternVL为了让视觉端和语言端参数量平衡,对视觉端和连接层都进行了scale up。一个很自然的问题是,视觉端真的需要这么heavy的参数量吗?因为当前最新的LLaVA-NeXT仍然使用约300M的ViT和轻量的MLP连接层,仅通过扩展LLM提升多模态任务性能。我的个人拙见是,视觉理解包括感知和推理,感知部分可能并不需要那么大的参数量,而推理部分作用于high-level的视觉特征,通过微调LLM赋予其理解推理视觉模态的能力,所以为了性能、效率和稳定性的平衡,似乎这里scale up必要性不是很强,当然这里值得深入实验的验证和讨论。看到这篇论文中的图,让我想到了22年Google的Coca论文,作者把文本解码器按层对半划开,浅层一半用于文本单模态,深层一半用于图文多模态,可以看到下图视觉端参数量占比也相当高。

[2205.01917] CoCa: Contrastive Captioners are Image-Text Foundation Models

InternVL-1.5

24年4月,InternVL-1.5发布,综合性能更强,且支持推理时高达4K的分辨率。

[2404.16821] How Far Are We to GPT-4V? Closing the Gap to Commercial Multimodal Models with Open-Source Suites

上图为模型整体架构,采用了类LLaVA的ViT+MLP+LLM范式,结合了增强的InternViT-6B-448px-V1.5和中英双语InternLM2-Chat-20B,总体参数约26B。相比于InternVL-1.0,在输入端支持了动态高分辨率,连接层改为轻量的MLP,使用pixel shuffle操作将输出的视觉token数减为1/4。训练分为两阶段,预训练阶段训练InternViT和MLP映射,随后微调整个模型。

  • 这里不再使用Q-Former作为连接层的原因,可以参考作者 @Weiyun 大佬的回答:多模态大语言模型(MLLM)为什么最近的工作中用BLIP2中Q-Former结构的变少了? – Weiyun的回答 – 知乎,大致意思是说相比于MLP,Q-Former参数量大收敛更慢,数据量小的场景无法达到LLaVA-1.5这样的性能,而且提高数据量和计算量,Q-Former也没有明显的性能优势。
  • 这里的pixel shuffle操作来源于16年的一篇论文,本质是对特征元素进行重排列,将 (𝐶×𝑟2,𝐻,𝑊) 的特征变换为 (𝐶,𝐻×𝑟,𝑊×𝑟) ,对特征进行了空间维度的上采样,但通道维度缩小为原来的 1/𝑟2 。这里输出的视觉token数可以理解为通道数,主要目的是通过提升特征维度换取更少的token数,从而可以支持更高的图像分辨率。这样,448×448的输入图像,patch size=14,总共有32×32=1024个token,设置上采样系数r=2,则该图像可以表示为256个token。

接着我们来看InternVL-1.5的三个重要改进:

  • InternViT增强:V1.2版本去掉了模型的最后3层,将分辨率扩展为固定448×448,而V1.5进一步扩展为动态448×448,即每张训练图像可分块,每块大小为448×448,支持1~12个块。此外,还增强了数据规模、质量和多样性,提高了OCR和高分辨率处理能力。
  • 动态高分辨率:基于图像的分辨率和纵横比,将图像切分为448×448的分块,训练阶段最多12块,测试阶段可以外推到40块,即4K分辨率,这样模型训练和推理能适应多种分辨率和纵横比,避免了强行resize带来的失真和细节丢失。如下图,具体来说,对于一张800×1300的图像,从预定义的纵横比中匹配一个最接近的纵横比2:3,然后将图像resize到896×1344,并切分为多个448×448的图像块,再添加一个缩略视图 (直接resize到448×448) 用于图像全局理解。
  • 高质量中英双语数据集:包含自然场景、图表、文档、对话等多样化的数据,借助LLM实现数据集英文到中文的转换。

此外,翻译的prompt值得我们学习:

System:
You are a translator proficient in English and {language}. Your task is to translate the following English text into {language}, focusing on a natural and fluent result that avoids “translationese.” Please consider these points:
1. Keep proper nouns, brands, and geographical names in English.
2. Retain technical terms or jargon in English, but feel free to explain in {language} if necessary.
3. Use {language} idiomatic expressions for English idioms or proverbs to ensure cultural relevance.
4. Ensure quotes or direct speech sound natural in {language}, maintaining the original’s tone.
5. For acronyms, provide the full form in {language} with the English acronym in parentheses.
User:
Text for translation: {text}
Assistant:
{translation results}

作者在ablation study部分研究了更大的LLM是否需要更大的视觉编码器,实际上是针对我们上面对InternVL-1.0视觉端参数量的问题的实验。实验对比了LLaVA-NeXT和InternVL-1.2,两者都使用34B的LLM,在尽量保证对比公平的条件下,实验证明更大的视觉模型能提供模型解决多模态任务的整体性能(不过原论文好像没有给具体数据?)。团队后续也发布了蒸馏版的视觉模型InternViT-300M-448px,与LLaVA-NeXT的视觉端保持了同等规模。

MiniCPM-V系列

MiniCPM-V是 @面壁智能 发布的一系列支持高效端侧部署的多模态LLM。

MiniCPM-V 2.0

24年4月,MiniCPM-V 2.0发布,仅有2.8B参数,整体性能超过了Yi-VL 34B、CogVLM-Chat 17B、Qwen-VL-Chat 10B等更大的开源模型,OCR能力突出,支持中英双语对话,部分指标接近Gemini Pro。
视觉编码器使用SigLIP SO400M/14-384px,LLM使用MiniCPM-2.4B,连接层使用Flamingo中的Perceiver Resampler (类似Q-Former使用可学习query提取显著视觉信息,但不以输入文本为条件)。基于自研的RLHF-V实现可信行为对齐,在缓解多模态幻觉问题上接近GPT-4V。基于自研的LLaVA-UHD支持高达1344×1344的分辨率和任意纵横比输入。基于自研的VisCPM实现跨语言的多模态能力泛化,进而有良好的中英双语能力。此外,该模型在端侧部署内存开销较小、速度较快,即便是处理高分辨率的图像。官方还提供了安卓端部署的mlc-MiniCPM示例。

MiniCPM-Llama3-V 2.5

24年5月,MiniCPM-Llama3-V 2.5发布,总共8B参数,整体性能超过了GPT-4V-1106、Gemini Pro、Qwen-VL-Max、Claude 3等闭源模型,OCR和指令遵循能力进一步增强 (增强了全文本OCR提取、表格到Markdown转换等功能),支持超过30种语言对话,在量化、编译优化、高效推理等加持下,同样可以在端侧高效部署。
在MiniCPM-V 2.0基础上,LLM替换为Llama3-8B-Instruct,基于更新的RLAIF-V进一步降低幻觉率。当前,官方支持了llama.cpp和ollama的高效CPU推理、GGUF 16-bit量化、LoRA微调等实用功能。

VILA1.5

24年5月,NVIDIA发布VILA1.5,提供视频理解能力,开源了3B/8B/13B/40B的模型,位于当前开源榜单MMMU和Video-MME前列。VILA详见我的上篇文章,这里简单回顾一下:VILA在大规模交错图文数据上预训练,从而具有多图理解能力,作者通过实验发现:(1) 图文交错排布比较关键;(2) 交错图文预训练过程中微调LLM能赋予其上下文学习的能力;(3) 混合只有文本的指令数据有助于提升性能;(4) 压缩视觉token可以扩展视频帧数。

CogVLM2

24年5月,智谱 @GLM大模型 发布CogVLM2,随后发布了GLM-4V。CogVLM2基于Llama3-8B-Instruct,支持8K上下文、1344×1344分辨率、中英双语对话。GLM-4V-9B替换为GLM-4-9B语言模型,采取同样的数据和训练策略,去除CogVLM原有的视觉专家,将模型大小减为13B。CogVLM和CogAgent详见我的上篇文章。

Cambrian-1

24年6月,LeCun&谢赛宁团队发布Cambrian-1,关注以视觉为中心的多模态LLM,开源了8B/13B/34B的模型。当前多模态LLM仍存在较大的视觉缺陷,需要增强视觉表征以更好地和语言模态交互,赋予模型在真实场景更强的感知定位能力。这项研究的一大意义在于影响多模态LLM的工作开始重视视觉表征质量的提升,而非一直scale up LLM。

[2406.16860] Cambrian-1: A Fully Open, Vision-Centric Exploration of Multimodal LLMs

如上图,该工作围绕多模态LLM的5个核心设计要素展开研究,分别是:视觉表征、连接器设计、指令微调数据、指令微调策略、评估基准。

  1. 视觉表征

作者评估了多种视觉编码器及其组合,下图表明以语言监督的CLIP模型优势较强,但自监督方法在提供充足数据和适当微调的情况下性能也能接近。而且,结合多种类型的视觉编码器有助于提升多模态LLM的性能,尤其是以视觉为中心的任务。注意到,高分辨率的编码器大大增强了图表和以视觉为中心任务的性能,而基于ConvNet的架构适合处理这类任务。

2. 连接器设计

提出Spatial Vision Aggregator (SVA),一个动态的、具备空间感知的连接器,以将 (来自多个视觉编码器的) 视觉特征与LLM深度融合。如下图,该方法设置一些可学习的latent query tokens,通过cross-attention与多个视觉特征交互 (视觉特征作为key/value)。SVA的设计有两点要素:(1) 通过显式定义每个query token对应的视觉特征图子区域,引入空间inductive bias,便于模型在处理视觉信息时保留对空间结构的理解,更准确地定位和整合局部特征;(2) 在LLM的多层聚合视觉特征,让模型在不同层级特征上反复利用视觉信息,增强模型对视觉内容的深入推理能力。该方法可以有效减少需要的视觉token数,例如相比于Mini-Gemini和LLaVA-NeXT,Cambrian-1的视觉token数是其20%。

3. 指令微调数据

作者发布了指令微调数据集Cambrian-10M,综合了OCR、通用VQA、纯语言等指令数据,还筛选了质量更高的7M版本。不同类型的视觉指令数据能赋予模型不同的能力,因此数据配比的平衡性也很关键,实验结果表明,平衡OCR、通用数据和语言数据的比例很重要。此外,在实验中作者发现,训练好的多模态LLM可能在基准测试上指标表现好,但实际对话能力弱,回复简短。因此,作者在训练期间引入了额外的系统提示,鼓励模型输出更长的回答和思维链推理,增强数学推理等任务的表现。

4. 指令微调策略

作者遵循LLaVA的两阶段训练策略,先使用适配数据只微调中间的MLP连接层,再打开LLM和连接器微调。结果表明,第一阶段对连接器的预训练可以提高性能,而使用更多的适配数据可以进一步增强。此外,作者对比了是否微调视觉编码器带来的性能影响,表明微调视觉编码器能增强性能,尤其对自监督预训练的视觉编码器 (如DINO v2、MoCo v3、MAE等),在以视觉为中心的测试上提升明显。

5. 以视觉为中心的基准CV-Bench

现有多数benchmark无法正确评估模型的视觉感知定位能力,而且相应的样本数量有限。CV-Bench重新利用现有视觉benchmark中的样本,包含2638个以视觉为中心的VQA问题,涉及2D的空间位置关系和物体计数、3D的深度次序和相对距离。


最后,让我们共同期待我国的AGI基础模型不断取得新的突破,引领世界潮流!