作者:来自 Han XIao jina.ai/

将任何多模态 LLM 转换为一个小型音频嵌入模型,使用少 25 倍的数据超越 CLAP。
GitHub - jina-ai/audio-embedding-kickstarter · GitHub
Google 最近发布了 Gemini Embedding 2,这是他们第一个原生多模态嵌入模型。文本、图像、视频、音频、文档,全部映射到一个统一的 3072 维向量空间中。这是更广泛的 全能嵌入模型 趋势的一部分:使用单一架构处理所有模态的统一模型,从 jina-embeddings-v4 到 Omni-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写代码
训练数据
五个音频-文本对数据集,共计 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写代码
来自 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 和语音数据集扩展数据规模。