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

作者:来自 Han XIao https://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 对比损失。每种模态独立进行编码,损失在两个方向上计算并取平均:

复制代码
def training_step(audio_batch, text_batch):
    audio_embeds = model.encode_audio(audio_batch)  # [B, D]
    text_embeds = model.encode_text(text_batch)      # [B, D]
    
    audio_embeds = F.normalize(audio_embeds, dim=-1)
    text_embeds = F.normalize(text_embeds, dim=-1)
    
    sim = audio_embeds @ text_embeds.T / temperature  # [B, B]
    labels = torch.arange(len(sim), device=sim.device)
    loss = (F.cross_entropy(sim, labels) + 
            F.cross_entropy(sim.T, labels)) / 2
    return loss

训练数据

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

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

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

复制代码
def load_sample(audio_path, caption):
    waveform, sr = torchaudio.load(audio_path)
    waveform = torchaudio.transforms.Resample(sr, 16000)(waveform)
    audio_inputs = processor.feature_extractor(
        waveform, sampling_rate=16000, return_tensors="pt"
    )
    text_inputs = processor.tokenizer(caption, padding=True, return_tensors="pt")
    return audio_inputs, text_inputs

四种方法

目标:构建一个小于 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 音频检索中的标准指标。

复制代码
def evaluate_cvr_at_k(model, dataset, k=5):
    audio_embeds = model.encode_audio(dataset.audio_clips)
    text_embeds = model.encode_text(dataset.text_queries)
    sim = F.normalize(audio_embeds) @ F.normalize(text_embeds).T
    
    hits = 0
    for i in range(len(dataset.text_queries)):
        top_k = sim[:, i].argsort(descending=True)[:k]
        if dataset.ground_truth[i] in top_k:
            hits += 1
    return hits / len(dataset.text_queries)

来自 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 和语音数据集扩展数据规模。

原文:https://jina.ai/news/bootstrapping-audio-embeddings-from-multimodal-llms/

相关推荐
hai3152475434 小时前
AI会不会产生意识,从黄仁勋的论断,以物理底层原理来理一理
人工智能
头茬韭菜4 小时前
4.3 BashTool 防御链 — 七层安全防御的工程实现
安全·ai
犀利豆4 小时前
AI 时代使用 Obsidian 作为 IDE
人工智能·后端
明志数科4 小时前
具身智能全栈模型开源:从模型架构演进看数据需求的范式转移
人工智能·机器人
Elasticsearch4 小时前
Elastic 被评为 2026 年 Gartner® 可观测性平台魔力象限™领导者
elasticsearch
中微极客4 小时前
RAG评估工具2026横向测评:从手工到自动化
人工智能·自动化
三品吉他手会点灯4 小时前
嵌入式机器学习 - 学习笔记1.2.3 - 机器学习软件框架
人工智能·笔记·嵌入式硬件·学习·机器学习
LaughingZhu4 小时前
Product Hunt 每日热榜 | 2026-07-15
前端·人工智能·神经网络·react.js·搜索引擎·前端框架
互联网科技看点4 小时前
2026年短信服务性价比分析:飞鸽云与头部云厂商
大数据·网络