从多模态 LLM 中引导构建音频嵌入

作者:来自 Han XIao jina.ai/

将任何多模态 LLM 转换为一个小型音频嵌入模型,使用少 25 倍的数据超越 CLAP。

GitHub - jina-ai/audio-embedding-kickstarter · GitHub

Google 最近发布了 Gemini Embedding 2,这是他们第一个原生多模态嵌入模型。文本、图像、视频、音频、文档,全部映射到一个统一的 3072 维向量空间中。这是更广泛的 全能嵌入模型 趋势的一部分:使用单一架构处理所有模态的统一模型,从 jina-embeddings-v4Omni-Embed-Nemotron,再到 Omni-5

在去年的 EMNLP BoF 会议中,我将全能模型作为 2026 年稠密检索的关键方向之一进行了介绍。

我们关注的是音频。大多数人听到"多模态嵌入"时,会想到图像,可能还会想到视频。音频是被遗忘的模态:更难收集,更难标注,并且从事这方面研究的人更少。在 Jina AI,我们正好探索了这个问题,构建小型(<1.2B 参数)音频嵌入模型,作为我们迈向全能嵌入模型工作的一部分。Gemini Embedding 2 的发布,是分享我们一路探索过程中所学经验的好时机。

音频嵌入

音频嵌入是音频片段的固定长度向量表示。给定一个原始波形,模型会生成一个稠密向量(通常为 768 到 3072 个维度),该向量捕获声音的语义内容。具有相似含义的两个音频片段会产生相似的嵌入,并且一个音频片段会在共享嵌入空间中靠近它的文本描述。这是全能嵌入拼图中的一部分:一旦你能够在同一个向量空间中嵌入音频、文本和图像,就可以实现跨所有模态的跨模态检索。

自 2022 年以来,主流方法是 对比语言-音频预训练(Contrastive Language-Audio Pretraining,CLAP),它将 CLIP 扩展到了音频领域。LAION-CLAP 使用 630K 对数据和特征融合对其进行了扩展。最强的变体(Elizalde 等人,2023)使用 460 万对数据进行训练,采用一个跨越 22 个多样化音频任务的音频编码器,并与自回归解码器配对,在 AudioCaps 上以 250M 参数实现了 42.0 cvR@5。

我们采用了不同的路径:将已经理解音频的多模态 LLM 转换为嵌入模型。

架构

首先,了解输入和输出内容。输入是原始音频:从任何标准格式(WAV、MP3、FLAC)解码得到的波形,并重新采样为 16kHz 单声道。音频编码器将这个波形转换为 128-bin 对数梅尔频谱,然后将其处理为特征 token 序列,大约每秒 150 个 token。一个 10 秒的音频片段会产生约 1,500 个 token。最大输入长度为 30 秒;更长的音频需要进行分块处理。输出是一个单一的稠密向量(即嵌入),维度通常根据 LLM 主干模型大小不同,在 896 到 3584 之间。

我们从 Qwen2.5-Omni 开始,这是一个具有原生音频理解能力的多模态 LLM。它包含三个组件:一个音频编码器(约 0.6-0.8B 参数),通过约 4.5M 参数的线性投影将波形转换为特征向量;一个 LLM 主干(0.5-7B 参数),使用每个 Transformer 层增加约 0.2B 参数的方式,同时处理音频特征和文本 token;以及一个池化层,将最后隐藏状态进行平均池化,转换为单个嵌入向量。两种模态共享同一个 LLM 主干,因此它们已经通过预训练实现了大致对齐。

左侧:标准方法,对完整的 MLLM 进行端到端微调(3-7B 参数)。右侧:模块组合,将预训练音频编码器与更小的 LLM 主干进行配对。共享主干同时处理音频特征和文本 token,在同一个向量空间中生成嵌入。

训练目标是 InfoNCE 对比损失。每种模态独立进行编码,损失在两个方向上计算并取平均:

ini 复制代码
`

1.  def training_step(audio_batch, text_batch):
2.      audio_embeds = model.encode_audio(audio_batch)  # [B, D]
3.      text_embeds = model.encode_text(text_batch)      # [B, D]

5.      audio_embeds = F.normalize(audio_embeds, dim=-1)
6.      text_embeds = F.normalize(text_embeds, dim=-1)

8.      sim = audio_embeds @ text_embeds.T / temperature  # [B, B]
9.      labels = torch.arange(len(sim), device=sim.device)
10.      loss = (F.cross_entropy(sim, labels) + 
11.              F.cross_entropy(sim.T, labels)) / 2
12.      return loss

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

训练数据

五个音频-文本对数据集,共计 181K 个样本:

数据集 样本数 描述
AudioSetStrong 108K 带时间标签的事件,GPT 生成的描述(AudioSet 的子集)
FSD50K 41K 人工标注的声音事件,200 个类别
Clotho 19K 音频描述生成,详细描述
UrbanSound8K 9K 城市声音分类
MACS 4K 城市声学场景

CLAP 使用了完整的 AudioSet(200 万+ 音频)以及其他来源的数据,总计 460 万对数据。我们仅使用 AudioSetStrong(约 100K)。从预训练 MLLM 开始,大幅减少了所需的数据量。

ini 复制代码
`

1.  def load_sample(audio_path, caption):
2.      waveform, sr = torchaudio.load(audio_path)
3.      waveform = torchaudio.transforms.Resample(sr, 16000)(waveform)
4.      audio_inputs = processor.feature_extractor(
5.          waveform, sampling_rate=16000, return_tensors="pt"
6.      )
7.      text_inputs = processor.tokenizer(caption, padding=True, return_tensors="pt")
8.      return audio_inputs, text_inputs

`AI写代码

四种方法

目标:构建一个小于 1.2B 的音频嵌入模型,并超越 CLAP。

完整模型微调。 在音频-文本对上使用 Qwen2.5-Omni-7B:AudioCaps T2A cvR@5 = 63.2,Clotho T2A = 39.2。这是上限,但 7B 无法部署。Tevatron 2.0 同样仅使用 AudioCaps 进行微调(61.2,但 Clotho 仅为 11.9,表明单数据集训练的泛化能力较差)。ColQwen-Omni 使用视觉文档任务进行微调,没有使用任何音频数据,通过跨模态迁移实现了 37.4。

层剪枝。 从 7B 模型中移除 Transformer 层。每层约 0.2B,因此一个 10 层模型总参数量约为 3.5B。

随着移除 Transformer 层,模型性能与模型大小之间的关系。AudioCaps(红色)从 20 层减少到 5 层时,cvR@5 从 63.2 降低到 56.0。所有配置仍然超过 CLAP 基线(虚线)。即使在 5 层(2.3B 参数)时,模型也无法达到 1B 目标。

层数 参数量 AudioCaps T2A cvR@5 Clotho T2A cvR@5
20 5.8B 63.2 39.2
10 3.5B 58.2 36.5
5 2.3B 56.0 36.0

批次大小(32、64、128)没有带来明显差异。更大的批次最初会有所帮助,但后期可能会导致性能下降:批次大小为 128 时,在 Clotho 上训练 2K 步达到 31.3 NDCG,但在 10K 步时下降到 29.3。

仅文本模态迁移。 仅使用文本对进行微调(MultiNLI、SNLI、FEVER、SciFact),依靠预训练的跨模态对齐能力。在完整的 7B 模型上有效(AudioCaps 46.1,超过 CLAP 的 42.0),但在剪枝后的 10 层模型上完全失败(cvR@5 = 5.9)。跨模态连接分布在整个网络中,无法在剪枝后保留下来。

模块组合。 突破点:从一个模型中获取音频编码器,从另一个模型中获取小型 LLM,甚至可以跨越不同模型系列。Qwen2.5-Omni 通过三个阶段进行训练:(1)冻结 LLM 的情况下训练音频/视觉编码器;(2)解冻所有参数;(3)32K 上下文。我们组合来自不同阶段的模块:

配置 音频编码器 LLM 参数量
M1 Qwen3-Omni(0.6B,预阶段 1) Qwen2.5-0.5B 1.1B
M2 Qwen3-Omni(0.6B,预阶段 1) Qwen2.5-3B 3.6B
M3 Qwen2.5-Omni-3B(0.8B,后阶段 3) Qwen2.5-3B 3.8B
M4 Qwen2.5-Omni-3B(完整) 完整 3B 3.8B

实现细节:Qwen3-Omni 使用 Qwen3OmniMoePreTrainedModel,而独立的 Qwen3 使用 Qwen3ForCausalLM。我们使用匹配维度初始化一个 Omni 模型外壳,并将权重复制到对应位置。

每个配置的 AudioCaps 和 Clotho T2A cvR@5。M1 在 1.1B 参数规模下,AudioCaps 达到 49.7,超过 CLAP(42.0)18%。使用经过后阶段 3 训练、对齐效果更好的音频编码器可以提升结果(M3 对比 M2:AudioCaps 提升 +4.2)。LLM 预训练的阶段 2-3 对嵌入质量并不关键(M3 对比 M4 的差异在噪声范围内)。

评估

评估音频嵌入的核心在于检索质量:给定一个文本查询,模型是否能够找到正确的音频片段?关键挑战在于"正确"取决于数据集。AudioCaps 包含具体描述("一个人在说话,随后一扇门关闭"),而 Clotho 包含抽象描述("带有远处隆隆声的安静氛围")。一个记忆表层音频特征的模型在 AudioCaps 上表现良好,但在 Clotho 上会遇到困难。我们最关注的是跨描述风格的泛化能力。

CV-Recall@5(cvR@5):对于每个文本查询,检查前 5 个结果中是否出现任何正确的音频片段。对所有查询取平均的二元评分。这是 MTEB 音频检索中的标准指标。

ini 复制代码
`

1.  def evaluate_cvr_at_k(model, dataset, k=5):
2.      audio_embeds = model.encode_audio(dataset.audio_clips)
3.      text_embeds = model.encode_text(dataset.text_queries)
4.      sim = F.normalize(audio_embeds) @ F.normalize(text_embeds).T

6.      hits = 0
7.      for i in range(len(dataset.text_queries)):
8.          top_k = sim[:, i].argsort(descending=True)[:k]
9.          if dataset.ground_truth[i] in top_k:
10.              hits += 1
11.      return hits / len(dataset.text_queries)

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

来自 MTEB 的三个评估数据集:AudioCaps(来自视频,人类生成的描述)、AudioSetStrong(带时间标签,GPT 描述)、Clotho(多样化,抽象描述)。CLAP 使用了完整的 AudioSet(200 万+),而我们使用了 AudioSetStrong(约 100K),这部分解释了 CLAP 在该基准测试上的优势。

横向条形图比较所有模型配置在 AudioCaps、AudioSetStrong 和 Clotho T2A 检索上的表现。红色虚线标记 CLAP 基线。模块组合模型(绿色)在小得多的规模下取得了强劲结果。完整的 7B 微调模型(深蓝色)设定了上限。

应用

音频嵌入正在传统检索之外变得越来越重要。在 agent 系统中,音频嵌入可以实现意图路由:接收语音输入的 agent 可以对音频进行嵌入,并根据语义相似性将其路由到正确的工具或子 agent,而无需等待完整转录。声音事件分类可以支持工业环境、智能家居自动化和安全系统中的实时监控。在多模态 agent 工作流中,音频嵌入让 agent 能够像处理文本和图像一样,对音频内容进行搜索、比较和推理。音乐和媒体应用使用它们进行相似性搜索、版权检测和内容推荐。随着语音接口成为 AI agent 的默认交互方式,可以在设备端运行的紧凑型音频嵌入对于低延迟、保护隐私的应用变得至关重要。

结论

从预训练 MLLM 开始是最大的杠杆。它在一个统一组件中提供了跨模态对齐、强大的文本编码器以及高能力的音频编码器。模块组合是最有前景的方向:混合来自不同模型和训练阶段的音频编码器与 LLM,开启了一个几乎未被探索的设计空间。我们的模型在 AudioCaps 上占据优势,但在 Clotho 上只能与 CLAP 持平,而 Clotho 的抽象描述暴露了 AudioCaps 未能发现的弱点。跨模态迁移无法在模型压缩后保留。

这项工作是迈向全能嵌入模型的一步:一个能够将文本、图像、音频、视频和文档嵌入到统一检索空间中的单一模型。模块组合方法表明,你可以通过复用预训练组件高效地引导构建新的模态。下一步包括使用 <500M 激活参数的 MoE 架构,将模块组合与模态迁移结合,以及使用 WavCaps、MusicCaps 和语音数据集扩展数据规模。

原文:jina.ai/news/bootst...

相关推荐
Elasticsearch2 小时前
一笔交易,三个字段名称:使用 ECS 修复大型机数据
elasticsearch
Elasticsearch3 小时前
4 个英伟达人工智能任务,1 个 Elasticsearch 接口:嵌入、聊天、completion 和重排序
elasticsearch
IT新视界19 小时前
Elasticsearch信创国产化替代
大数据·elasticsearch·搜索引擎
Elasticsearch21 小时前
用 Elasticsearch 的 RRF 融合检索,把矿物鉴定准确率从 36% 拉到 92%
elasticsearch
Elasticsearch1 天前
景枢:基于 Elastic AI Agent Builder 的多景区购票智能运维中枢技术解析
elasticsearch
嗝屁小孩纸1 天前
Maven版本升级&Nexus推送极简执行步骤
java·elasticsearch·maven
布局呆星1 天前
Git基础操作:从本地提交到远程仓库
大数据·elasticsearch·搜索引擎
Elasticsearch1 天前
那块从未唤醒的磁盘:究竟是什么决定了我们的 Qdrant 向量搜索基准测试重新对决的结果
elasticsearch
爱学习的小可爱卢2 天前
Git全解析(2W+长文):从原理到高频操作手册
大数据·elasticsearch·搜索引擎