Qwen-Audio-CSDN博客

模型体系结构

在这里插入图片描述

主要组件

Qwen-Audio 模型包含两个主要组件:

  1. 音频编码器(Audio Encoder):用于将音频信号转换为有效的特征表示。
  2. 大型语言模型(Large Language Model, LLM):用于处理和生成文本。

输入数据是成对的音频序列aaa和文本序列xxx,即训练数据是音频和文本的配对。目标是训练模型能够根据给定的音频表示Encoder(a)\text{Encoder}(a)Encoder(a)和之前的文本序列 x<tx_{<t}x<t​ 来预测下一个文本标记 xtx_txt​,最大化下一个文本标记的条件概率 :
Pθ(xt∣x<t,Encoderϕ(a))P_{\theta}(x_t | x_{<t}, \text{Encoder}_{\phi}(a))Pθ​(xt​∣x<t​,Encoderϕ​(a))

  • θ\thetaθ:语言模型的可训练参数。
  • ϕ\phiϕ:音频编码器的可训练参数。
1. 音频编码器(Audio Encoder)

Qwen-Audio 使用一个 音频编码器 来处理各种类型的音频数据。该音频编码器的初始化基于 Whisper-large-v2 模型,它是一个 32 层的 Transformer 模型,包含两个卷积下采样层作为 stem(即基础层)。

  • Whisper 模型最初是为了语音识别和翻译任务而训练的,但它的编码表示包含了丰富的信息,如背景噪声等,因此可以用于恢复原始语音,甚至可以作为其他任务的特征表示。

音频数据预处理:

  • 频率重采样:音频数据首先被重新采样到 16kHz 的频率。
  • 梅尔频谱图转换:然后将原始波形转换为 80 通道的梅尔频谱图,使用的窗口大小为 25ms,步长为 10ms。梅尔频谱图是音频信号的频率表示,通常用于语音识别任务。
  • 池化层(Pooling Layer):为了减少音频表示的长度,加入了一个池化层,池化的步幅为 2。这意味着每个编码器输出的帧大约对应原始音频信号的 40ms 长度。
  • 数据增强(SpecAugment):在训练过程中,使用 SpecAugment 进行数据增强,增强音频数据的多样性,提高模型的鲁棒性。

音频编码器输出:
音频编码器处理后的输出是一个向量表示,它捕捉了音频的多维信息。这些输出特征将会作为模型的输入之一,供语言模型使用。

数学公式表示:

  • 假设音频输入为 aaa,经过音频编码器后得到的表示为Encoderϕ(a)\text{Encoder}_{\phi}(a)Encoderϕ​(a),即:
    Faudio=Encoderϕ(a) F_{\text{audio}} = \text{Encoder}_{\phi}(a) Faudio​=Encoderϕ​(a)
    其中 Faudio∈RT×DF_{\text{audio}} \in \mathbb{R}^{T \times D}Faudio​∈RT×D,TTT 是时间步数,DDD 是特征维度。
    • *
2. 大型语言模型(Large Language Model, LLM)

Qwen-Audio 中使用的大型语言模型是基于 Qwen-7B 的,该模型是一个 32 层的 Transformer 解码器模型,隐藏层大小为 4096,包含约 7.7 亿个参数。这个语言模型的作用是处理文本序列,生成下一个文本标记。

  • 模型初始化:Qwen-7B 使用来自预训练的权重进行初始化。这些预训练的权重使得模型可以快速适应文本生成任务,尤其是在没有足够任务数据时,通过迁移学习提高性能。

数学公式表示:

  • 假设当前文本序列是 x<tx_{<t}x<t​,模型通过语言模型进行处理,生成下一个文本标记xtx_txt​ 的条件概率:
    Pθ(xt∣x<t,Encoderϕ(a)) P_{\theta}(x_t | x_{<t}, \text{Encoder}_{\phi}(a)) Pθ​(xt​∣x<t​,Encoderϕ​(a))
    其中:

    • xtx_txt​ 是模型预测的下一个文本标记。
    • x<tx_{<t}x<t​ 是当前的文本序列(包括当前时刻之前的所有文本标记)。
    • Encoderϕ(a)\text{Encoder}_{\phi}(a)Encoderϕ​(a) 是音频经过编码器后的表示。
    • *
3. 训练目标

Qwen-Audio 的训练目标是通过最大化条件概率 Pθ(xt∣x<t,Encoderϕ(a))P_{\theta}(x_t | x_{<t}, \text{Encoder}_{\phi}(a))Pθ​(xt​∣x<t​,Encoderϕ​(a)) 来训练模型,使得模型能够根据音频信号和前面的文本序列预测下一个文本标记。

数学公式表示:

  • 假设训练数据集为 {(a,x)}\{(a, x)\}{(a,x)},其中 aaa 是音频序列,xxx是对应的文本序列。
  • 对于每个样本 ( (a, x) ),训练目标是最大化下一个文本标记的条件概率:
    L=−∑i=1N∑t=1Tlog⁡Pθ(xt(i)∣x<t(i),Encoderϕ(a(i))) \mathcal{L} = - \sum_{i=1}^N \sum_{t=1}^{T} \log P_{\theta}(x_t^{(i)} | x_{<t}^{(i)}, \text{Encoder}_{\phi}(a^{(i)})) L=−i=1∑N​t=1∑T​logPθ​(xt(i)​∣x<t(i)​,Encoderϕ​(a(i)))
    其中:

    • xt(i)x_t^{(i)}xt(i)​ 是第 iii 个样本的第 ttt 个文本标记。
    • Encoderϕ(a(i))\text{Encoder}_{\phi}(a^{(i)})Encoderϕ​(a(i)) 是第 iii 个样本的音频表示。
    • 该损失函数旨在最大化整个数据集上,给定音频和前面文本的情况下,预测下一个文本标记的概率。
    • *

具体例子:

输入:
  • 音频输入:假设有一个音频片段,包含一句话“这是一只狗”的语音信号。

    • 音频通过 Whisper 音频编码器转换为梅尔频谱图,并经过池化和 SpecAugment 处理,最终得到一个音频特征表示 FaudioF_{\text{audio}}Faudio​。
    • 假设 Faudio∈RT×DF_{\text{audio}} \in \mathbb{R}^{T \times D}Faudio​∈RT×D,其中TTT是音频的时间步数,DDD 是每个时间步的特征维度。
  • 文本输入:与该音频片段对应的文本是“这是一只狗”。

    • 文本序列 xxx 会被输入到语言模型,模型生成下一个文本标记。
训练目标:
  • 给定音频表示 FaudioF_{\text{audio}}Faudio​ 和文本序列的前面部分(例如,x<t=“这是一只”x_{<t} = \text{“这是一只”}x<t​=“这是一只”),模型的目标是预测下一个文本标记xt=“狗”x_t = \text{“狗”}xt​=“狗”。

    换句话说,模型在训练过程中通过最大化条件概率来学习音频和文本之间的关系。具体来说,训练的目标是最大化:
    Pθ("狗"∣"这是一只",Faudio) P_{\theta}(\text{"狗"} | \text{"这是一只"}, F_{\text{audio}}) Pθ​("狗"∣"这是一只",Faudio​)

输出:
  • 文本输出:模型通过语言模型解码器生成下一个文本标记(例如,“狗”)。
  • 音频生成:模型也可以扩展为生成语音,而不仅仅是文本输出,这需要进一步的训练和模型扩展。
    • *

多任务训练框架

1. 背景与问题:

在音频处理领域,已经开发了多种不同的音频数据集,目的是解决不同的任务。例如,自动语音识别(ASR)、情感识别(SER)、说话人验证(SV)等任务每个都需要不同的数据集。

Qwen-Audio 的目标:
Qwen-Audio 的目标是 联合训练,也就是说,模型在训练时可以同时处理不同类型的任务,并且使得这些任务之间能够相互受益。这样,模型就不再需要频繁地在不同任务之间切换,也能够通过多个任务的协作和共享知识来提高性能。

2. 任务之间的互惠互利:

在多任务训练中,任务之间的协作非常重要。Qwen-Audio 提出的原因如下:

  1. 相似任务之间的共享和协作:

    • 相似的任务会共享音频信号中的基本信息。例如,语音识别(ASR)和语音翻译(S2T)任务都依赖于音频中的语言信息,它们可以通过共享相同的特征来提升性能。
  2. 低级任务帮助高级任务:

    • 低级的任务(如语音活动检测、音频事件检测)可以帮助那些需要更高层次理解或推理能力的任务(如情感识别、语音问答)提高性能。如,语音活动检测能够帮助模型准确地判断音频信号中的语音片段,从而提高语音识别的准确性。
    • *

3. 数据集差异和标签问题:

不同的数据集通常存在较大的差异,主要体现在 文本标签 上。例如:

  • 任务的焦点不同,标签的格式和粒度也不同。
  • 有些数据集的标签是结构化的,而有些则是非结构化的。

例如:

  • 语音识别(ASR) 任务中,标签通常是转录的文字。
  • 情感识别(SER) 任务中,标签可能是情感类别,如“开心”、“悲伤”等。
  • 语音问答(QA) 中,标签则是问题的答案。

4. 多任务训练问题:

直接将这些差异较大的数据集混合进行训练,可能导致任务之间的干扰,效果反而不好。为了避免这种干扰,现有的多任务训练方法通常会:

  • 将相似的任务分组(例如,语音转录和语音翻译)。
  • 给每个数据集分配一个专门的任务标识符,避免任务之间的干扰。

然而,这种方法仍然存在改进空间。

5. Whisper 的方法:

Whisper 是一种多任务训练的格式,通过输入特殊的标记(token)来明确指定任务类型和条件信息。Whisper 在处理 语音识别语音翻译 任务时,使用了标记来指定任务类型:

  • 语音活动检测(Voice Activity Detection, VAD)
  • 语言识别(Language Identification, LID)
  • 句子级别时间戳(Sentence-level Timestamps)

然而,Whisper 主要关注语音识别和翻译任务。

    • *

6. Qwen-Audio 的多任务训练框架:

Qwen-Audio 提出了一个改进的多任务训练框架,其核心目标是通过共享标签来促进相似任务的协作,并确保不同任务的输出格式能够区分开来,避免模型产生“一对多”的映射问题。

多任务训练框架的设计:
  1. 转录标签(Transcription Tag):

    • 当任务涉及 语音转录(例如语音识别和语音翻译)时,使用 <|startoftranscripts|> 标签表示开始预测。
    • 对于其他任务,则使用 <|startofanalysis|> 标签。
    • 例如,语音识别任务开始时,模型会接收到 <|startoftranscripts|> 标签,表示任务是转录语音。
  2. 音频语言标签(Audio Language Tag):

    • 每个音频任务会有一个 语言标签,用于指示音频中使用的语言。每种语言都有一个唯一的标记(例如,中文用 <|zh|>,英语用 <|en|>)。
    • 如果音频中没有语音内容(例如背景噪音或音乐),则使用 <|unknown|> 标签。
**例子:**

*   对于英语音频,标签是 `<|en|>`。
*   对于没有语音的音频(如自然声音或音乐),标签是 `<|unknown|>`。
  1. 任务标签(Task Tag):

    • 每个音频任务都会指定一个任务标签,以指示任务类型。例如:

      • <|transcribe|>:表示语音转录任务。
      • <|translate|>:表示语音翻译任务。
      • <|caption|>:表示自动音频描述任务。
      • <|analysis|>:表示音频分析任务。
      • <|question-answer|>:表示音频问答任务。
**例子:**

*   任务是 **音频转录**,则标签为 `<|transcribe|>`。
*   任务是 **音频问答**,则标签为 `<|question-answer|>`,并且附上对应的 **问题**。
  1. 文本语言标签(Text Language Tag):

    • 用于指示输出文本的语言类型。例如,如果生成的是英文文本,标签为 <|en|>;如果是中文文本,标签为 <|zh|>
  2. 时间戳标签(Timestamps Tag):

    • 如果任务需要预测 时间戳,则会使用 <|timestamps|> 标签。对于没有时间戳预测需求的任务,则使用 <|notimestamps|> 标签。
    • 细粒度时间戳预测:在进行语音识别时,模型不仅需要预测每个词,还需要预测每个词的 开始时间结束时间
**例子:**

*   对于语音识别任务,使用 `<|timestamps|>` 标签来启用细粒度时间戳预测(如单词级别的时间戳)。
*   如果只是普通的语音识别任务,没有时间戳需求,则使用 `<|notimestamps|>` 标签。
  1. 输出指令(Output Instruction):

    • 最后,使用 输出指令 来进一步指定任务和输出格式。例如,告诉模型该如何格式化生成的输出。
    • *

7. 框架的工作原理:

  • 共享标签(Knowledge Sharing):相似的任务通过共享标签来增强协作学习。例如,语音转录和语音翻译任务共享 <|startoftranscripts|> 标签和 <|translate|> 标签,它们共同学习音频中语言信息的转录和翻译能力。
  • 区分不同任务(Avoiding One-to-Many Mapping):通过为每个任务指定独特的标签,可以确保不同任务的输出格式能够被区分开,避免“多对一”映射的问题。

数据流动:

  • 输入音频:音频经过 音频编码器,得到音频的特征表示。
  • 输入标签:模型根据任务标签(如 <|transcribe|>, <|translate|>, 等)开始特定任务。
  • 输出文本或其他信息:模型根据任务类型生成不同的输出(如文本、时间戳、翻译等)。
    • *

微调

监督微调(Supervised Fine-tuning)

监督微调是基于 多任务预训练(Multitask Pretraining) 的基础上,通过 指令驱动的微调技术 来改善模型对人类意图的对齐能力,从而使得模型能生成更符合需求的输出。

Qwen-Audio-Chat 的构建:

Qwen-Audio-Chat 是 Qwen-Audio 的一种 交互式聊天模型,它的核心目的是让模型能够处理多轮对话和音频输入。为了实现这一目标,使用了指令驱动的微调技术,让模型能够理解和回应用户的请求,生成更符合对话语境的回答。

1. 微调的具体过程:

在监督微调阶段,Qwen-Audio 会做以下几件事:

  1. 创建任务演示:

    • 为每个任务手动创建演示,这些演示包含 原始文本标签问题答案
    • 这些任务演示数据帮助模型理解如何执行特定任务,例如如何回答问题、识别情感等。
  2. 使用 GPT-3.5 来生成问题和答案:

    • 使用 GPT-3.5来生成进一步的问题和答案,这些问题和答案是基于提供的原始文本标签创建的。
    • 比如,给定一个描述,GPT-3.5 会生成一些相关的对话问题和答案,帮助模型在多轮对话中理解和生成合适的响应。
  3. 创建音频对话数据集:

    • 使用手动注释、模型生成和策略连接等方法,创建一个包含音频对话的数据集。
    • 这个数据集帮助模型具备推理能力、故事生成能力和多图像理解能力,使得模型可以处理更复杂的对话任务。

2. 处理多音频对话和多个音频输入:

为了有效处理多音频对话和多个音频输入,论文中提出了一种新的标签方法:

  • “Audio id:” 标签:在多音频对话中,每个音频都被赋予一个 Audio idid 对应音频输入对话的顺序。这样模型能够区分不同音频的来源,知道每段音频是在哪个对话轮次中产生的。

3. 使用 ChatML 格式:

  • 为了构建对话数据集,模型使用 ChatML 格式进行指令微调。这个格式通过使用特殊标记(tokens)来划定对话的起始和结束:

    • <im_start><im_end> 用于标记对话的开始和结束。
    • 这种格式使得模型能够理解每一轮对话的上下文。
数据流动与示例:

假设正在与 Qwen-Audio-Chat 模型进行对话,以下是数据流动:

  1. 用户输入(音频):

    • 用户通过语音输入问题:"Speaker 1: What does the speaker say?"
    • 音频经过音频编码器处理,生成音频特征FaudioF_{\text{audio}}Faudio​。
  2. 模型处理:

    • 模型接收到音频特征并将其转换为文本:"The speaker says in English, 'Won’t you draw up, gentlemen.'"
  3. 用户输入(文本):

    • 用户接着问:“What’s the mood of the person?”
  4. 模型生成回答:

    • 根据音频特征,模型回答:“Based on the voice, the mood of the person is disgusted.”

通过这种方式,Qwen-Audio-Chat 模型能够处理用户输入的音频,并生成相应的文本回答。

    • *

4. 使用多模态数据和指令微调:

监督微调 阶段,Qwen-Audio-Chat 处理的输入不仅限于纯文本,还包括 音频输入,这使得模型能够同时理解音频和文本,并且处理多轮对话。指令微调的训练数据集包含了 音频指令数据纯文本指令数据,允许模型无缝地处理来自不同模态的输入。

数据格式示例:

以下是模型如何接受输入和生成输出的一个示例:

<im_start>user
Audio 1: <audio>emov-db/141-168-0155.wav</audio> What does the speaker say?<im_end>
<im_start>assistant
The speaker says in English, "Won’t you draw up, gentlemen.".<im_end>
<im_start>user
What’s the mood of the person?<im_end>
<im_start>assistant
Based on the voice, the mood of the person is disgusted.<im_end>

示例解析:

  • 输入音频:音频 emov-db/141-168-0155.wav 中包含一句话。
  • 模型解析:模型听到音频后,生成文本:“The speaker says in English, ‘Won’t you draw up, gentlemen.’”
  • 问题:用户接着询问情感(“What’s the mood of the person?”)。
  • 模型回答:根据音频中的语气和语调,模型回答:“Based on the voice, the mood of the person is disgusted.”

这种训练方式确保了 Qwen-Audio-Chat 能够在音频输入和文本输入之间进行有效的转换,并生成合理的回答。

    • *

5. 实验与评估:

实验配置:
  • 多任务预训练 阶段,Qwen-Audio 冻结语言模型的权重,只优化音频编码器。
  • 监督微调 阶段,固定音频编码器的权重,只优化语言模型(LLM)。这个训练后的模型被称为 Qwen-Audio-Chat
评估:

Qwen-Audio-Chat 在多个任务上的表现进行了评估,涵盖了诸如 自动语音识别(ASR)语音到文本翻译(S2TT)自动音频描述(AAC) 等任务。在所有这些任务中,Qwen-Audio-Chat 都展示了出色的性能。

表格:

在论文中提供的评估表格显示了 Qwen-Audio 在多个数据集上的表现,如 LibriSpeech(ASR任务)、CoVoST2(语音翻译任务)等。

6. SRWT(Speech Recognition with Word-level Timestamps)

Qwen-Audio 引入了一个新的任务,SRWT(带有单词级时间戳的语音识别),模型不仅需要识别语音的转录内容,还需要为每个单词预测时间戳。

  • SRWT 的目的:

    • 提高模型对音频信号与精细时间戳对齐的能力。
    • 支持基于音频和时间戳的 问答任务(QA)
    • *

原网址: 访问
创建于: 2025-07-23 20:50:24
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论