小米开源 CocktailASR-1:用参考语音直接识别目标说话人

0 阅读

不靠语音分离,直接听清“你想听的人”

在嘈杂的会议室里,你只想记录某位同事的发言;在家庭聚会时,智能音箱只该响应你的指令——这些场景背后都需要一种特殊能力:从多人同时说话的音频中,准确识别出特定说话人的内容。传统做法通常分两步:先用语音分离技术把不同人的声音拆开,再对每一路单独做语音识别。但这种级联方案容易累积误差,且计算复杂。

小米最近开源的 Xiaomi-CocktailASR-1 模型换了个思路:跳过分离步骤,直接用一段目标说话人的参考语音作为“提示”,让模型在识别过程中自动聚焦于这个人的声音。结果不仅简化了流程,还在多个公开测试集上刷新了性能纪录。

一个模型,三种能力

CocktailASR-1 的核心设计目标是统一处理三类任务:

  • 多人混音中的目标说话人识别(比如会议录音)
  • 常规单人语音识别(比如手机录音)
  • 目标不在场时的拒识(避免胡乱转写)

这听起来简单,实则挑战不小。多数 ASR 模型在多人场景下表现糟糕,而专门做目标说话人识别的系统往往无法兼顾单人场景的精度。更麻烦的是,当目标说话人根本没出现在音频里时,很多模型仍会强行输出一段“合理”的文字,造成误触发。

CocktailASR-1 通过巧妙的训练策略和架构设计,把这三种能力整合进同一个模型。用户只需提供一段目标说话人的参考音频(哪怕只有几秒),再给一段待识别的混合或单人音频,模型就能返回对应的转录文本——如果目标没出现,就直接返回空字符串。

架构:参考语音当“声纹提示”

模型整体采用端到端结构,由三部分组成:

  1. 音频编码器:基于 Data2Vec2 改进的 0.6B 参数网络,负责将原始音频转换为帧级特征。
  2. 轻量 Adapter:将音频特征映射到大语言模型的隐空间。
  3. LLM 骨干:使用 Qwen3-8B 作为解码器,生成最终文本。

关键创新在于输入方式:把参考语音、1 秒静音、混合语音按顺序拼接成一个长音频输入。编码器在处理这段组合信号时,会利用 Data2Vec2 的自监督机制,同时学习语义内容和说话人特征。由于参考语音在前,模型在提取后续混合语音特征时,会自然地“记住”目标说话人的声学特性,并抑制其他干扰源。

这种方式省去了独立的声纹编码器或语音分离模块,从源头避免了级联系统的误差传递问题。

训练:百万小时数据平衡多种能力

为了让模型同时掌握目标提取、单人识别、拒识和可解释推理,团队设计了多阶段训练策略,总共用了约 100 万小时 的语音数据:

  • 40 万小时多说话人数据:用于训练模型从混音中提取目标说话人。
  • 60 万小时同说话人配对数据:即参考语音和目标语音来自同一人,防止模型在单人场景下过度抑制自身语音。
  • 1 万小时错配负样本:参考语音和混合音频中无目标说话人,让模型学会“沉默”。
  • 额外 CoT 数据:教模型先输出推理链(如说话人数、性别、相似度),再给出最终答案。

这种配比确保模型不会在某一任务上过拟合,而是在各种场景下保持稳健表现。

实测:多人场景大幅领先

在多个主流多说话人基准测试中,CocktailASR-1 显著优于现有方法:

  • AliMeeting Far-field(远场会议场景):词错误率(WER)降至 20.63%,此前 SOTA 为 27.5%。
  • LibriMix 2-speaker mix:WER 仅 4.11%,而通用 ASR 模型如 Qwen3-ASR 在此任务上高达 68.75%。

在单人场景下,它的表现也毫不逊色:

  • LibriSpeech test-clean WER 为 1.73%(Qwen3-ASR 为 1.87%)
  • CommonVoice 中文测试集 WER 为 4.95%(Qwen3-ASR 为 5.39%)

更关键的是拒识能力:在 LibriSpeech 构造的负样本测试中,CocktailASR-1 的拒识率达到 79.59%,而 Qwen3-ASR 和 StepAudio 等模型拒识率为 0——意味着它们总会输出一段文字,哪怕目标根本没说话。

可解释性:不只是黑箱输出

除了标准模式,模型还支持 思维链(CoT)。开启后,输出会包含 <think> 标签内的推理过程,例如:

<think>
检测到2位说话人,性别分别为男和女。参考语音与混合音频中第一位说话人声纹相似度为0.87,判定为目标。
</think>
<answer>
今天的会议重点讨论预算分配问题。
</answer>

这种设计不仅让用户知道“为什么这么识别”,还能小幅降低 WER——因为模型在生成答案前先理清了上下文。

使用:一行代码搞定

模型已通过 HuggingFace 开源,使用门槛很低:

import torch
from transformers import AutoModel

model = AutoModel.from_pretrained(
    "Ease3/Xiaomi-CocktailASR-1",
    trust_remote_code=True,
    torch_dtype="bfloat16"
).cuda().eval()

![Loomy](https://cdn.aiinking.com/imgs/SFJ1g73TDy23.png)

# 单条推理
text = model("meeting_mix.wav", "target_speaker_ref.wav")
print(text)  # 若目标未出现,返回空字符串

# 启用思维链
result = model("mix.wav", "ref.wav", cot=True)

音频需为 16kHz 单声道,非标准采样率会自动重采样。批量处理可通过 TSV 文件配合脚本完成,项目仓库提供了完整示例和正负样本 Demo。

应用场景不止会议转写

虽然论文以会议场景为例,但这类技术的实际用途更广:

  • 智能家居:电视开着、孩子在吵闹时,音箱只响应机主的“关灯”指令。
  • 车载语音:副驾乘客聊天不影响驾驶员对导航系统的语音操作。
  • 客服质检:从客户与坐席的通话中自动提取坐席话术,用于合规审查。
  • 无障碍设备:听障人士在餐厅聚会中,设备实时转写特定朋友的发言。

这些场景的共同点是:环境中有多个声源,但用户只关心其中一个。传统 ASR 很难应对,而 CocktailASR-1 正是为此而生。

开源协议与获取方式

模型采用 Apache 2.0 协议 开源,允许商用。代码、权重和论文均已公开:

对于需要处理真实世界复杂语音的应用开发者来说,这或许是一个值得尝试的新工具——毕竟,有时候我们不需要听清所有人,只需要听清那个重要的人。