VibeVoice-ASR:微软多任务语音识别模型

概述

VibeVoice-ASR 是微软开源的90亿参数统一语音识别模型,基于Qwen2 Decoder架构,采用64K token超长上下文窗口与7.5 Hz超低帧率语音分词技术,实现了ASR(自动语音识别)、说话人分离(Diarization)和时间戳标注(Timestamping)三大任务的端到端联合建模。该模型支持中英双语,可单次处理长达60分钟的连续音频,输出”Who-When-What”结构化转录结果,并通过自定义热词功能适配医疗、法律等专业领域

🕒 60 分钟单次处理
不同于传统 ASR 模型需要将音频切分为多个短片段(这通常会导致全局上下文丢失),VibeVoice ASR 在 64K token 长度限制内 可直接接收最长 60 分钟的连续音频输入,从而在整段音频范围内保持说话人一致性语义连贯性

👤 自定义热词(Customized Hotwords)
用户可以提供自定义热词(例如人名、专业术语或背景信息)来引导识别过程,显著提升特定领域内容的识别准确率。

📝 丰富的结构化转写(Who / When / What)
模型联合完成 语音识别(ASR)说话人分离(Diarization)时间戳标注(Timestamping),输出结构化结果,清晰标注是谁在什么时间说了什么内容

当前主流的长音频处理方法采用级联流水线架构,将连续语音切分为短片段(通常小于 30 秒)进行独立处理,尽管这种 “分而治之” 的策略具备实用性,但存在两个根本性缺陷上下文碎片化流水线复杂度。首先,片段独立处理会切断全局语义依赖,使模型丢失跨语句上下文信息,这对于消除同音词歧义、解决长对话中的指代消解问题是致命的。其次,传统系统将自动语音识别(ASR)说话人分轨(Diarization)和时间戳标注视为相互独立的任务,由互不相关的模型分别处理。调和其输出往往需要复杂的启发式规则,进而导致错误传播:一旦分段或说话人分轨出现错误,就会污染最终转录结果。 为弥补这一差距,我们提出 VIBEVOICE-ASR,一个面向高保真长语音理解的统一通用框架。

Method

模型

VibeVoice-ASR采用声学-语义双编码器架构:

  • 声学编码器:基于VAE结构,将16kHz音频压缩为7.5 Hz离散token(码本大小8K),捕捉音色、语调等声学细节
  • 语义编码器:类似HuBERT架构,提取语音的语义表示,确保内容理解准确性

双编码器特征融合后,通过声学连接器(Acoustic Connector)映射至LLM语义空间,实现声学信息与语言知识的深度耦合。

传统梅尔频谱以50 Hz帧率提取特征,1小时音频产生18万帧,超出Transformer处理能力。VibeVoice创新性地采用7.5 Hz帧率,压缩比高达2133:1,将长音频转化为LLM可处理的token序列。这种超低帧率设计不仅解决长度瓶颈,更通过连续语音分词器保留韵律与语气信息,为后续TTS任务提供统一表征基础。

这种超低帧率至关重要,一小时连续音频可换算为:3600 秒×7.5 token/秒=27000 个 token这一长度可以轻松放入现代大语言模型的单遍上下文窗口中。

大语言模型主干( Qwen 2.5-7B)处理,自回归地生成目标序列。

Pre-training

预训练数据英文占比最高66%,中文占比 14%,覆盖了 50 余种语言。该流水线包含三个阶段:分段与转录说话人分轨以及质量过滤

首先,利用 Silero 语音活动检测(VAD)将长录音切分为最长 30 秒的片段,再使用 Whisper-large-v3-turbo 进行转录,得到带标点的文本与词级时间戳;通过在标点结束时间戳(如句号、问号、感叹号)处进行切分,进一步优化分段边界,使其与说话人轮次更好对齐。 随后,使用 WeSpeaker 工具包 中的 vblinkp 模型执行说话人分轨:从重叠帧(窗口 1.5 秒,步长 0.75 秒)中提取说话人嵌入,使用 HDBSCAN进行聚类,并将质心余弦相似度大于 0.67 的簇进行合并优化,得到最终的说话人轮次标注。

最后,为保证标注可靠性,我们使用另一套 ASR 模型 对片段重新转录;若超过 30% 的片段词错误率(WER)高于 20%,或语音时长占总时长不足 60%,则将该条录音丢弃。 为验证数据处理流水线的有效性,我们将其与两种广泛使用的音频处理流水线 WhisperX和 Emilia 进行了对比实验。实验在三个常用的公开多人会议数据集上开展:AMI 、AliMeeting 和 AISHELL-4 ,并同时报告说话人分轨错误率(DER)与分轨不变词错误率(WER)。为保证公平对比,我们关闭了 Emilia 中的数据过滤模块,因其默认配置会剔除大量音频样本。

如表 1 所示,在大多数测试数据集上,本文提出的数据流水线相比两个基线系统均能持续获得更低的 DER 与 WER。结果表明,在不同声学环境下,我们的流水线在分段、说话人分轨与转录任务上均具备更稳健的性能。

对大语言模型的输入序列长度采用了课程学习策略,从 8192 个 Token 逐步增加到 65536 个 Token。

SFT

构建了四类高质量数据进行微调:

  1. 标准语音与音乐数据集:提升多说话人识别与音乐场景鲁棒性;
  2. 上下文感知合成数据:用 GPT‑5 生成带上下文提示的中英混流对话脚本,再通过 VIBEVOICE 合成约 6000 小时高质量音频;
  3. 长语音修复数据:用 GPT‑5 对碎片化转录做全局语义校正,并标注非语音片段以抑制幻觉;
  4. 最后按 0.5: 0.1: 0.1: 0.3 的比例混合训练,让模型在常规识别、音乐、上下文感知、长语音理解上能力更均衡。

流式处理与内存优化

通过VibeVoiceTokenizerStreamingCache缓存机制,模型在处理超长音频时采用分块编码策略:将60分钟音频切分为60秒块流式处理,缓存卷积层状态,最终统一采样确保块间一致性。配合FlashAttention-2技术,内存复杂度从O(N²)降至O(N),使得90亿参数模型可在单卡24GB显存环境下运行。

结果

在所有测试数据集上,VIBEVOICE‑ASR 在 DER 和 tcpWER 指标上均持续优于 Gemini‑2.5‑Pro 与 Gemini‑3‑Pro,表明其说话人建模能力更强、说话人轮次时间对齐精度更高。 在更直接反映模型说话人一致性保持能力的 cpWER 指标上,我们的模型在 16 个评测配置中的 11 个取得最优性能,显著优于两个 Gemini 版本,说明在多说话人场景下说话人区分效果更可靠。 在 WER 方面,我们的模型在 16 个配置中的 8 个取得最低错误率,在其余数据集上仅出现小幅下降。

Limitations

监督微调中的多语言遗忘:虽然预训练覆盖了 50 余种语言,但监督微调阶段主要聚焦于英语、中文及语码切换数据。因此,对于未出现在指令微调中的低资源语言,模型性能可能出现下降。

重叠语音问题:当前架构生成序列化输出流,并未显式处理重叠语音(即 “鸡尾酒会问题”)。在多人同时说话的场景中,模型倾向于转录主要说话人内容,可能丢失次要信息。未来版本将探索带语音分离感知的建模方式来应对这一挑战。

对模型设计和数据的思考

多任务的模型设计

虽然模型命名为VibeVoice-ASR,但它并非单纯的语音转文字模型。VibeVoice-ASR集成了说话人日志、时间戳以及部分声音事件检测功能。

这样的多任务设计符合大模型时代的技术趋势,也契合未来的用户需求。如今,仅实现语音转录已远远不够。无论是底层模型还是上层应用,乃至用户对智能体验日益提升的期待,都要求我们从语音数据中提取更丰富的信息。用户对产品的追求不再停留在基础功能,而更多地转向情感价值与类人体验。

关注声音特性

声音在机器理解用户方面的价值被严重低估了。理解声音,是通往“世界模型”、理解世界不可或缺的一环。

遗憾的是,目前除了Gemini,我还没看到能与之比肩的系统。我也认为这是谷歌布局未来重要的一步。(不得不提一句,至于那些号称超越的,或许在某些测试集和指标上能实现超越,这一点我并不否认。)

VibeVoice-ASR模型其实让我有所期待。至少,它是开源模型中明确对声纹进行建模(另外还有阿里的 SpeakerLM ,也是对声纹进行建模识别),并且在我真实测试集(家庭录音,包括男性、女性、儿童)中,在区分度较大的场景下是可用的。

  • “建模声纹很难吗?”“是的。”
  • “声纹识别现在做得很好了吗?”“并没有。”

声纹作为声音的底层属性,与语音语义有很大不同。识别一个人的声纹,对人类来说也并非易事。我们觉得容易,大多是因为我们接触的声纹往往是“已注册”的。从模型实现来看,声纹的做法看似简单,但实际效果并不理想,原因有多方面:

极易受环境干扰

与ASR相比,声纹更易受声学环境干扰。训练数据的覆盖范围、环境噪声、信道差异,以及注册与使用条件的不一致,都会影响最终效果。

声纹具有时变性

声纹会随时间发生漂移,比如儿童的声音变化最快,不同儿童之间的声音区分也很困难,成人的声音也会因状态(如感冒、情绪)而改变。

声纹数据自动标注困难

从数据标注角度看,由于历史上声纹模型效果一般,再加上上述难点,导致自动化标注很难做到准确。

幻觉问题较为突出

在体验VibeVoice-ASR模型的过程中,发现最明显的问题是幻觉。测试中,注意到一个特别的现象:数据中孩子的哭声极容易触发模型的幻觉。

这背后最主要的原因,应该还是接下来要谈的数据覆盖问题。

长度真的那么重要吗?

对于文本大模型,长度等于上下文,上下文窗口的确很重要。但对于语音模型,特别是偏重转录的模型,在当前阶段,长度是否真的如此关键,我持保留态度。

VibeVoice-ASR提出的理由是:当前的系统存在两个根本性局限:上下文碎片化(Context Fragmentation)与流水线复杂度(Pipeline Complexity)。首先,独立处理各个片段会割裂全局语义依赖,导致模型无法追踪跨句子的上下文信息。这在处理长对话时尤为致命——例如,难以消解同音词歧义,或无法正确解析跨句的指代关系。其次,传统系统通常将自动语音识别(ASR)、说话人日记化(Speaker Diarization)和时间戳标注视为相互独立的任务,由彼此分离的模型分别处理。要协调这些模型的输出,往往需要依赖复杂的启发式规则,这容易引发误差传播:一旦分段或说话人划分环节出现错误,最终的转写结果就会受到污染。

首先,关于上下文断裂问题——纯音频的上下文真能解决这个问题吗? 或许能部分缓解,但对多数场景来说,可能并非至关重要。文本层面的上下文或许已足以提升准确率。

其次,工程复杂度方面,文中提到的说话人日志优势我很认同,但这个和长度其实关系不是特别大,我认为更多的优势来自于识别+说话人的联合建模。短句说话人日志的确很困难,但几分钟的数据进行说话人相关的工作也没有太大问题。如果可以把效果做好,后续通过一个混淆矩阵进行相同说话人的聚类。如果长语音识别确实可以做的好,那么降低系统复杂度的优势肯定是有的。

综上所述,在当前条件尚不成熟的情况下,过度强调长度或许并不是最优先的。相比长度,我们更应关注模型的稳定性与准确性。 当然,如果能处理更长的音频,那自然是更好的。

“垃圾”数据也有价值

从我测试中遇到的幻觉问题,结合当前主流数据清洗流程的做法,会发现一个现象:

人们常用多个模型交叉验证,筛选出“有用且正确”的数据。

什么是“有用且正确”的数据?如果一条数据包含文字,且多个模型识别结果一致,就被认为是有价值且标注正确的。那么,那些被过滤掉的数据,其价值又该如何看待?

事实上,它们的价值在今天更应被重视。原因如下:

幸存者偏差

这种方式筛选出的数据,都是以往模型基础上的“幸存者”,数据质量虽高,但对模型来说难度较低。换句话说,大量这类数据对模型能力的提升并无太大增益。如果模型只用这类数据训练,那么无论输入什么,哪怕是人耳都难以听清的语音,模型都可能用最大似然的方式“猜”一个最可能的结果,而不是“承认困难”。一个懂得“示弱”的模型,或许也有其价值。

“垃圾”数据的价值

所谓“垃圾数据”,正是那些被自动标注流程过滤掉的数据,它们的价值应当被重新审视。比如我测试数据中的哭声片段,很可能会被清洗流程过滤掉。再加上这类声音重复性强,更容易导致模型产生幻觉。

在强化学习中,也应该加强对“坏”数据如何给予正确反馈的机制。

阿里音频大模型强化学习 RL 框架

在语音技术领域,ASR(语音识别)和 TTS(语音合成)早已进入 LLM 时代,但 “能用” 和 “好用” 之间,还隔着一道难以逾越的鸿沟:ASR 会出现幻觉、漏检关键词;TTS 发音虽准,却缺自然韵律,甚至越优化语速越慢。

问题的核心在于:LLM 的 “文本 RL” 经验,没法直接套用到音频领域。音频是连续信号,既要处理声学特征,又要对齐语义,传统 RL 框架又笨重又低效。

阿里通义实验室的论文《Explore the Reinforcement Learning for the LLM based ASR and TTS system》,给出了一套 “轻量、高效、通用” 的解决方案。它不仅设计了适配音频大模型的 RL 框架,还在 ASR 和 TTS 任务上做了深度探索:ASR 用 GRPO + 规则奖励,WER 相对下降 5.3%;TTS 把 GRPO 和 DiffRO 结合,既提升发音准确率,又保住自然度,彻底解决了 “顾此失彼” 的问题。实验结果表明,即使在训练数据有限且优化步骤较少的情况下,RL 也能显著提升 ASR 和 TTS 系统的性能。

相关概念

  • GRPO(组相对策略优化):轻量化 RL 算法,对一组(G 个)模型输出打分,通过组内奖励归一化计算优势函数,无需单独训练 Critic 网络。降低计算成本,适配音频大模型的多输出评估。ASR、TTS 均适用
  • DiffRO(可微分奖励优化):直接对 TTS 生成的声学 token 打分,通过 Gumbel-Softmax 采样实现梯度回传,无需合成完整音频即可优化。奖励函数:Token2Text 模型(类 ASR)训练一个Token2Text 模型(输入语音 token,输出文本概率分布),作为核心奖励器。以WER(词错误率) 为核心奖励信号:Token2Text 预测文本与目标文本的差异,转化为可微分奖励。解决 argmax 不可导问题:用Gumbel Softmax对 token 分布采样,实现端到端梯度回传。
对比维度GRPODiffRO
核心逻辑组内对比打分,优化 “相对优势”单样本 token 级打分,优化 “绝对奖励”
奖励来源规则函数(如 WER、关键词准确率)或简单奖励模型可微分模型(如 token 级 ASR)
依赖数据少量标注数据 + 硬样本(如 ASR 的 hallucination 样本)无需大量配对音频 – 文本数据
优势适配主观体验优化(如韵律、多样性)发音准确率提升明显,训练稳定
劣势训练步数过多易退化难以优化主观体验指标
  •  强化学习的训练框架 TRL 提供了简单的强化学习实现方案,但效率较低;它在训练和推理阶段均直接依赖 PyTorch,并采用手动资源管理方式。 相比之下,VeRL 和 OpenRLHF 等更先进的工业级框架利用 Ray 灵活的分布式计算原语,简化了分布式操作与部署流程。这些框架进一步集成了 VLLM、SGLang 等高效推演引擎用于响应生成,并采用搭载 ZeRO 策略的 Deepspeed/FSDP 进行策略优化。

轻量音频 RL 框架设计

音频领域 RL 的 3 大核心难题,这也是其技术方案的出发点:

  • 模态复杂:音频大模型既要处理连续声学嵌入,又要生成离散文本 /token,比纯文本 LLM 的 RL 复杂得多;
  • 框架笨重:传统 RL 框架(如 TRL)需要同时维护 Actor、Critic、Reward Model 等多个模块,GPU 资源冲突严重,训练效率低;
  • 奖励难设计:ASR 的幻觉、TTS 的韵律自然度等痛点,没法用单一指标(如 WER)衡量,复杂奖励模型又难以训练。

为了简化计算资源的管理,设计了一个强化学习(RL)训练框架,该框架可以交替地在不同的组件之间分配 GPU 资源。整个框架如图1 所示。

轻量音频 RL 框架 —— 交替调度 GPU,效率翻倍。核心思路是:按训练步骤交替分配 GPU 资源,避免多模块抢占,具体流程如下:

1)框架核心设计

训练阶段占用 GPU 的模块核心任务资源释放逻辑
阶段 1:特征处理PyTorch-based 音频编码器(ASR)/ 解码器(TTS)ASR:将音频转为嵌入;TTS:将文本转为声学 token处理完后释放 GPU,嵌入 /token 存入主存
阶段 2:生成候选输出SGLang-based LLM 生成引擎基于特征生成多组候选(ASR 生成文本,TTS 生成声学 token)生成完成后释放 GPU
阶段 3:奖励计算PyTorch-based 奖励模型 / 规则函数对候选输出打分(如 ASR 的 WER、TTS 的 ASR 准确率)打分完成后释放 GPU
阶段 4:策略优化FSDP-based LLM 策略模型用 GRPO/DiffRO 更新模型参数,同步回生成引擎一轮更新后进入下循环

(2)关键优势

  • 效率高:8 张 A100 GPU 上,ASR 单步训练仅需 54.6 秒,TTS 仅 16.73 秒,远超 VeRL 等开源框架;
  • 通用性强:一套框架适配 ASR 和 TTS,无需为不同任务单独搭建;
  • 资源省:避免多模块同时占用 GPU,显存消耗降低 30% 以上。

ASR 的 RL 优化 —— GRPO + 规则奖励

ASR 的核心痛点是 “基础准确率(WER)达标,但幻觉、关键词漏检影响实际使用”,因此奖励函数聚焦 “准确率 + 抗幻觉 + 关键词保障” 三大目标,采用 “基础奖励 + 惩罚性奖励 + 强化奖励” 的组合逻辑:

(1)奖励函数设计:3 条规则,精准打击幻觉与关键词漏检

基础奖励 R1:ASR 识别准确率(核心基础)

  • 设计逻辑:以 “词错误率(WER)” 为核心指标,奖励与准确率正相关,确保模型优先优化基础识别能力。
  • 计算公式1 − WER(y, y), 其中 y:音频对应的真实标注文本,y:ASR 模型的输出文本,WER:词错误率(插入、删除、替换错误的综合指标,范围 0~1)。
  • 数值范围:0~1(WER=0 时R1=1,完全错误时R1=0)。
  • 核心作用:保证 RL 训练不偏离 “提升基础识别准确率” 的核心目标,避免为了优化其他指标而牺牲 WER。
  • 惩罚性奖励 R2:幻觉检测(优先级最高)
    • 设计逻辑:ASR 的幻觉(无中生有、重复生成、翻译错误)对用户体验伤害极大,因此采用 “一票否决” 式惩罚,检测到幻觉直接将奖励设为 – 1,强制模型规避该行为。
    • 幻觉判定规则
      • 无中生有:生成文本中包含音频中不存在的词(如音频说 “苹果”,ASR 输出 “苹果手机”);
      • 重复生成:连续重复相同短语(如 “今天今天今天天气好”);
      • 翻译错误:将一种语言误译为另一种(如英文音频被识别为中文)。
    • 奖励逻辑:若检测到上述任意一种幻觉 →R2 = -1 ;无幻觉 →R2 = 0 (不额外加分,仅避免惩罚)。
    • 核心作用:针对性解决长音频、噪声环境下的 ASR 幻觉问题,实验中长音频插入错误率(Ins)从 2.72 降至 0.86。
  • 强化奖励R3 :关键词准确率与召回率(工业场景关键)
    • 设计逻辑:人名、品牌名、专业术语等关键词的识别准确率,直接影响 ASR 的工业实用性(如智能客服、语音助手),因此单独强化该维度。
    • 数值范围:0~1(关键词完全命中时R3 = 1 ,完全漏检 / 误检时 R3 = 0)。
    • 核心作用:保证基础准确率的同时,重点强化关键信息的识别能力,提升模型的工业落地价值。
  • ASR 最终奖励聚合
    • 聚合逻辑:惩罚性奖励优先级最高,其次是基础奖励和强化奖励的加权求和(论文未明确权重,实验中采用等权求和)。
    • 最终公式:1) 若存在幻觉 → RASR = R2 = -1;2) 无幻觉 → RASR = (R1+R3) / 2 (范围 0~1)。
    • 设计巧思:通过 “惩罚优先” 避免模型 “为了加分而牺牲关键词 / 抗幻觉”,平衡基础性能与工业需求。

(2)训练数据构建:专挑 “硬骨头”,少而精 RL 训练不用海量数据,重点在于 “针对性”。论文构建了 4 类训练集,每类 2 万条,精准命中 ASR 的失败模式:

数据集数据来源训练目标
D0:随机样本普通语音数据作为对照,保证基础性能
D1:难样本不同 ASR 系统输出不一致的音频(如歧义句、噪声环境)提升复杂场景鲁棒性
D2:长音频样本时长 > 20 秒的音频解决长语音的幻觉、漏检问题
D3:关键词样本含人名、品牌名、专业术语的音频强化关键词识别能力

(3)训练配置与实验结果

  • 核心参数:batch size=32,组大小 G=12,学习率 = 1e-5,KL 系数 = 0.1,训练 1 天即可收敛;
  • 评估指标:WER(词错误率)、Ins(插入错误率)、Del(删除错误率);
  • 关键结果
    • 短音频(<10 秒):最优配置(全奖励 + 全数据集)WER 从 10.25 降至 9.71,相对下降 5.3%;
    • 长音频(>20 秒):Ins 错误率从 2.72 降至 0.86,幻觉问题大幅缓解
    • 结论硬样本 + 关键词奖励是提升 ASR 性能的关键,单纯增加长音频样本效果有限

TTS 的 RL 优化 —— GRPO+DiffRO 融合,发音与自然度双提升

TTS 的核心痛点是 “发音准确率与自然度失衡”(如 DiffRO 提升发音但牺牲语速,GRPO 优化自然度但易发音不准),因此奖励函数聚焦 “发音准确率 + 语速控制 + 韵律多样性”,覆盖客观指标与主观体验:

(1)单一算法对比:各有优劣

先分别用 GRPO 和 DiffRO 做实验,结果如下:

方法核心优势核心劣势中文 WER中文 SS(说话人相似度)
基线(无 RL)4.28077.64
DiffRO发音最准(WER 最低)SS 下降最多(77.00)3.41877.00
GRPOSS 下降少(77.26)发音提升有限3.71077.26

(2)GRPO 的奖励扩展:3 条规则,兼顾准确率与自然度

  • 核心奖励 R1:ASR 识别准确率(保证发音准确)
    • 设计逻辑:TTS 合成音频的 “可懂性” 是基础,通过 ASR 模型反向验证发音准确率,ASR 能准确识别的音频,说明发音无明显错误。
    • 两种计算方式(适配不同场景): 
      • 方式 1(音频级):用标准 ASR 模型识别 TTS 合成的完整音频,计算识别准确率(同 ASR 的R1); 
      • 方式 2(token 级):直接用 DiffRO 的 token-based ASR 模型,对 TTS 生成的声学 token 打分,无需合成完整音频(效率更高)。
    • 数值范围:0~1(ASR 完全识别正确时R1=1,完全无法识别时 R1= 0)。
    • 核心作用:锚定 TTS 的发音准确性,避免 RL 优化过程中出现 “自然但听不懂” 的问题。
  • 约束奖励 R2:音频时长控制(防止语速变慢)
    • 设计逻辑:论文发现 “TTS 为提升 ASR 识别率,会主动放慢语速”,导致语音不自然,因此通过时长约束强制模型保持合理语速。
    • 计算公式
  • 其中|oi|:第 i 个 TTS 候选输出的音频时长;Tm同组候选输出的音频时长中位数;abs:绝对值函数。
    • 数值范围:-1~0(时长与中位数完全一致时=0,偏差越大越接近 – 1)。
    • 核心作用:惩罚语速过快 / 过慢的输出,实验中成功避免 TTS “为准确率牺牲语速”,说话人相似度(SS)也同步提升。
  • 增强奖励 R3:token 与音调多样性(提升韵律自然度)
    • 设计逻辑:TTS 的 “机械感” 源于韵律单一,因此奖励模型生成多样化的声学 token 和音调变化,模拟人类自然 speech 的韵律波动。
    • 计算公式(双维度加权求和)
  • 第一部分(token 多样性)
  • 其中G:GRPO 的组大小(实验中 G=8),:第 i 个与第 j 个候选输出的声学 token 编辑距离;dist(oi,oj):第 i 个候选的 token 长度;组内候选的 token 差异越大,得分越高。 
  • 第二部分(音调多样性)std(F0),其中F0:归一化后的基频(音调);std:标准差函数;音调波动越大(标准差越高),韵律越丰富,得分越高。
    • 数值范围:0~+∞(无上限,多样性越高得分越高)。
    • 核心作用:提升 TTS 的主观自然度,实验中该奖励虽未优化客观 WER,但人类主观评估中 “韵律自然度” 得分最高。
  • TTS 最终奖励聚合
    • 聚合逻辑:核心奖励(R1)保证基础发音,约束奖励(R2)控制语速,增强奖励(R3)优化韵律,三者加权求和(论文实验中采用等权)。
    • 最终公式:Rtts = R1+R2+R3
    • 设计巧思:通过 “核心 + 约束 + 增强” 的组合,平衡客观准确率与主观体验,为 GRPO 与 DiffRO 的融合奠定基础。

实验验证

训练效率:新框架碾压开源方案

在 8 张 A100 GPU 上,论文提出的交替调度框架,训练速度远超基于 VeRL 的开源方案:

  • ASR 单步训练时间:54.6 秒(RTF=0.015),是开源方案的 2.3 倍快;
  • TTS 单步训练时间:16.73 秒(batch size=128),是开源方案的 1.8 倍快;
  • 关键原因:避免了多模块 GPU 资源冲突,SGLang 和 FSDP 的并行优化大幅提升效率

ASR 关键结论

  • 奖励设计比数据量更重要仅用R1(WER)效果有限,加入R2(幻觉惩罚)和R3(关键词奖励)后,性能大幅提升;
  • 长音频训练需针对性数据单纯增加长音频样本(D2)无法解决幻觉,需结合困难样本(D1)和关键词样本(D3);
  • 工业场景优先选 “全奖励 + 全数据集” 配置,WER 和抗幻觉能力均最优。

TTS 关键结论

  • 发音准确率:DiffRO > 融合方案 > GRPO > 基线;
  • 说话人相似度:GRPO > 融合方案 > 基线 > DiffRO;
  • 稳定性:DiffRO > 融合方案 > GRPO;
  • 落地推荐:优先选择 “样本过滤 +R1+R2” 融合方案,兼顾准确率、自然度和稳定性。

研究价值与未来展望

核心价值

  • 技术层面:首次提出适配音频大模型的轻量 RL 框架,解决了模态复杂、资源冲突的核心难题;同时探索了 GRPO 与 DiffRO 的融合方案,为 TTS 的 “准确率 + 自然度” 双优化提供了可落地的范式;
  • 工业层面:规则型奖励 + 困难样本训练的思路,无需标注海量偏好数据,降低了 RL 在 ASR/TTS 中的落地成本;实验结果可直接复用,加速工业产品迭代。

未来展望

  • 多语言扩展:当前实验主要基于中英双语,未来可扩展至低资源语言,优化小语种 ASR/TTS 的性能;
  • 奖励模型融合:将规则奖励与训练后的奖励模型结合,进一步提升奖励的精准度;
  • 多模态扩展:将框架适配到语音翻译、语音情感合成等更复杂的音频任务;
  • 轻量化部署:在保证性能的前提下,优化框架的显存占用,适配边缘设备训练。

LLM-ForcedAligner:多语种长语音非自回归强制对齐器

  • 论文题目:LLM-ForcedAligner: A Non-Autoregressive and Accurate LLM-Based Forced Aligner for Multilingual and Long-Form Speech
  • 论文预印版:https://arxiv.og/pdf/2601.18220

背景

在语音处理中,强制对齐(Forced Alignment,FA)的目标是在给定相应转录文本的情况下,估计语音信号中每个词或字符的起始和结束时间戳。FA在众多应用中不可或缺,包括大规模语音语料库的构建与清理、自动字幕生成和词级高亮显示,以及语音合成中的时长建模和韵律分析。随着多语言和多模态应用的不断发展,高效且准确的FA变得日益重要。

现有的FA方法大致可分为两大类:传统混合系统和端到端模型。Montreal forced aligner(MFA)通常是一种混合高斯混合模型-隐马尔可夫模型(GMM-HMM)框架,通过维特比解码计算帧级音素到文本的对齐路径来获取时间戳。CTC是一种常见的端到端强制对齐方法,它利用基于CTC的自动语音识别(ASR)模型计算的帧到token对齐,采用动态规划在受限的搜索路径中找到与文本序列对齐的最优路径。CIF为每个编码器输出帧预测一个权重,并随时间对这些权重进行积分。当累积权重超过阈值时,会触发一个触发事件,此时计算累积的帧级声学向量的加权和,生成与输出token对齐的声学嵌入,从而能够为每个token分配相应的时间戳。WhisperX采用轻量级端到端音素识别模型对语音进行帧级音素分类,然后使用动态时间规整(DTW)将得到的音素序列与转录文本对齐,通过聚合音素级时间戳来获取词级时间戳。

然而,上述FA方法与特定语言的音素、词汇或结构设计紧密相关,这意味着在多语言场景中,部署通常需要一系列结构各异的独立系统,导致工程成本和维护复杂度随语言数量呈线性增长。此外,以往的FA方法可概括为一个先计算局部声学相似度,再进行单调路径搜索的过程。虽然这些方法能为短片段生成相当准确的边界,但在长语音中,它们往往会积累显著的系统性时间偏移。

大型语言模型(LLMs)在多语言文本理解和长序列处理任务中展现出了强大的能力,为支持多语言、跨语言和长语音的语音文本对齐提供了新的可能性。越来越多的研究探索将语音编码器与LLMs相结合,构建语音大语言模型(SLLMs),以在统一框架内处理语音和文本。然而,现有的SLLMs主要在高级语义任务上取得了成功,例如ASR、语音理解、语音合成和口语对话。对于对声学特征更为敏感的FA,这些SLLMs通常将其视为ASR的副产品,通过next-token prediction来生成词级或字符级的时间戳。这种模式容易产生时间非单调的幻觉,并且会导致显著的推理延迟。

LLM-ForcedAligner

提出了一种新的强制对齐(Forced Alignment, FA)框架,称为 LLM-ForcedAligner该方法将强制对齐重新表述为一种槽位填充(slot-filling)范式

将每个单词或字符的起始和结束时间戳视为离散的时间索引,并在转录文本中插入专门的特殊标记作为“槽位”。这样,在语音嵌入表示以及插入了这些槽位的转录文本作为条件输入的情况下,语音大语言模型(SLLM)可以直接在指定的槽位位置预测对应的时间索引。

这一新的强制对齐范式有效利用了大语言模型在槽位填充能力长上下文处理能力方面的优势,将传统基于纯声学、音素级别的对齐方法扩展为具备语义边界感知能力的字符级或词级对齐方法

在具体实现上,为了进行槽位填充,我们在训练阶段采用了因果注意力掩码(causal attention masking),且不对输入序列和标签序列引入任何偏移(shift)。这使得每个槽位可以基于其自身及其之前的上下文信息来预测对应的时间索引。同时,损失函数仅在槽位位置上进行计算。

此外,我们采用了一种动态槽位插入策略:在转录文本中,随机决定是否为每个单词或字符插入特殊标记,从而使 LLM-ForcedAligner 能够对任意单词或字符进行时间戳预测。

在推理阶段,LLM-ForcedAligner 支持非自回归(non-autoregressive)解码,相比自回归解码方式可以完全避免幻觉(hallucination)问题,并且实现更快的推理速度。

实验结果表明,在多语言、跨语言以及最长达 300 秒的长语音场景下,LLM-ForcedAligner 相较于以往的强制对齐方法,在累计平均偏移(Accumulated Averaging Shift, AAS)指标上实现了 69%~78% 的相对下降,同时仅带来了轻微的实时因子(Real-Time Factor, RTF)增加。

在训练过程中,我们将转录文本中词级或字符级的起始和结束时间戳替换为一个特殊标记 [time],将其作为“槽位(slot)”。同时采用动态槽位插入策略,随机决定忽略哪些词或字符对应的槽位。
由 AuT 编码器生成的语音嵌入(speech embeddings)随后与文本序列拼接,并输入到 LLM 中,在**因果注意力掩码(causal attention masking)**下进行训练。

Overall Architecture

LLM-ForcedAligner将FA构建为一种槽位填充范式:给定语音信号和一个添加了表示词级或字符级的开始和结束时间槽位特殊token“[time]”的转录文本,SLLM直接为每个槽位预测相应的离散时间戳索引。与以往首先进行帧级或音素级的对齐,然后将结果聚合为词级或字符级的时间戳FA方法不同,LLM-ForcedAligner则直接预测词级或字符级的时间戳索引。

训练LLM-ForcedAligner需要大量语音-转录文本对的词级或字符级时间戳标签;然而,由于人工标注成本过高,我们采用了由MFA生成的伪时间戳标签,因为MFA是现有对齐方法中准确率最高的。需要强调的是,MFA伪标签本身存在噪声和系统性偏移。

LLM-ForcedAligner并非简单复制MFA的输出,而是利用SLLM对这些伪标签进行提炼和平滑处理,从而实现更稳定、偏移更小的时间戳预测。

LLM-ForcedAligner 中的语音编码器来自AuT,其输出的每个语音嵌入帧对应80毫秒的语音信号。在将带有MFA伪标签的转录文本输入Tokenizer之前,我们用[time] 替换所有MFA伪标签时间戳。此外带有MFA伪标签的转录文本同时将每个时间戳除以80毫秒以离散成时间序列索引,作为模型训练时的标签。

时间戳预测层是一个线性层,具有3750个输出类(300秒除以80毫秒),用于预测整个输入序列的时间戳索引。

LLM-ForcedAligner的多语言和跨语言能力由AuT语音编码器和多语言LLM共同提供。具体而言,在大规模多语言语料库上预训练的AuT编码器能为多种语言生成有效的帧级语音嵌入,而多语言LLM则处理不同语言的语义信息。此外,特殊token[time]和时间戳预测层不依赖于特定语言的音素集或词典。因此,LLM-ForcedAligner能够处理多语言和跨语言的语音-文本对,克服了以往FA方法的特定语言限制。

训练策略

SLLM通常采用一种训练方案,即移除输出序列的最后一个标记和标签序列的第一个标记,使两个序列之间产生一个位置的偏移;然后计算交叉熵损失,从而实现标准的下一个标记预测范式。然而,这种范式并不适合填充时间戳槽位填充。

相反,我们采用因果训练,使输出和标签序列不发生偏移,这让LLM-ForcedAligner在训练过程中能够明确感知时间戳槽位,并预测要填充到这些槽位中的时间戳。此外,因果训练使LLM-ForcedAligner在预测当前槽位的时间戳时能够结合先前的上下文,确保时间戳预测的全局一致性。在训练过程中,我们仅在时间戳槽位位置计算交叉熵损失,从而将LLM-ForcedAligner的训练目标集中在时间戳槽位填充上。

此外,在训练过程中为每个词或字符持续插入开始和结束时间戳槽位,会导致LLM-ForcedAligner过度依赖之前预测的时间戳。我们提出了一种训练过程中的动态槽位插入策略,以增强LLM-ForcedAligner的泛化能力。具体而言,对于每个样本,我们以50%的概率决定是否应用动态槽位插入。当应用动态槽位插入时,样本中的每个词或字符有50%的概率在其后插入开始和结束时间戳槽位。该策略使LLM-ForcedAligner能够预测任意位置的词或字符的开始和结束时间戳。

非自回归推理

由于在训练过程中输出和标签序列保持不偏移,LLM-ForcedAligner能够使用非自回归解码同时预测转录文本中所有槽位的时间戳索引。具体来说,对于一个语音-转录文本对,用户可以在任意单词或字符之后自定义起始和结束时间戳槽位。给定用户定义的时间戳槽位位置,LLM-ForcedAligner通过非自回归解码预测其时间戳索引,然后将时间戳索引乘以80毫秒就转换为毫秒级时间戳。

实验

我们的实验基于56000小时的语音数据展开,涵盖10种语言:中文、英语、法语、德语、意大利语、日语、韩语、葡萄牙语、俄语和西班牙语。这些数据来源于内部和开源数据集的组合,覆盖了多种场景,如朗读语音、对话语音、播客和会议等。所有训练和测试数据集都标注了由MFA生成的伪时间戳,此外,我们还在一个带有手动标注时间戳的内部中文测试数据集上评估了LLM-ForcedAligner的性能。训练数据集中的转录文本要么来自人工标注,要么来自ASR模型的预测结果,这增强了LLM-ForcedAligner对不同质量转录文本的泛化能力。

LLM-ForcedAligner中的AuT编码器包含316.42M参数,其初始化源自Qwen3-Omni的AuT编码器,LLM使用的是Qwen3-0.6B,时间戳预测层是一个单一的线性层,具有3750个输出时间戳类别,包含3.84M参数

在训练过程中,AuT编码器、LLM和时间戳预测层联合优化。我们使用累积平均偏移(AAS)来衡量时间戳预测的性能。AAS值越低,表明时间戳预测性能越好。具体来说,AAS计算每个时间戳槽位的平均偏移,其定义为测试数据集中所有槽位的预测时间戳与真实时间戳之间的平均绝对差。

实验结果

表1和表2在多语言、跨语言和长语音场景下,基于MFA标注的测试数据集,将LLM-ForcedAligner与其他FA方法进行了比较。Monotonic-Aligner只支持中文,NFA和WhisperX需要根据不同的语言切换模型。我们观察到,LLM-ForcedAligner不仅支持多种语言且无需切换模型,而且与其他FA方法相比,在多语言原始语音上的AAS相对降低了66%~73%。此外,LLM-ForcedAligner在多语言和跨语言长语音上实现了极低的平均AAS,而在这种场景下,其他FA方法往往表现不佳。

表1 LLM-ForcedAligner和其他FA方法在MFA标注测试数据集上的毫秒级别AAS,每种语言的测试数据集均由该语言的开源测试数据集和内部测试数据集的原始语音组成
表2 LLM-ForcedAligner和其他FA方法在MFA标注测试数据集上的毫秒级别AAS,每种语言的测试数据集由该语言开源和内部测试数据集中的原始语音拼接而成,时长最长为300秒,“Mixed-Crosslingual”是由任意语言的开源和内部测试数据集中的语音拼接而成,时长最长为300秒

表3在人工标注的中文测试数据集上对LLM-ForcedAligner与其他FA方法进行了比较,涵盖了带噪声、跨语言和长语音场景。我们发现,在人工标注的测试数据集上,LLM-ForcedAligner的平均AAS相较于其他FA方法实现了68%~78%的相对降低,这表明使用MFA标注数据训练的LLM-ForcedAligner能够很好地泛化到真实世界的场景中。

表3 LLM-ForcedAligner与其他FA方法在人工标注测试数据集上的毫秒级别AAS,“Raw”指数据集中的原始语音;“Raw-Noisy”指添加了背景噪声的原始语音;“Mixed-60s”和“Mixed-300s”是将原始语音拼接成最大时长分别为60秒和300秒的语音;“Mixed-Crosslingual”是人工标注的原始语音与MFA标注的多语言语音的拼接

此外在表2中,MFA标注测试数据集上长语音的平均AAS略高于原始语音的平均AAS,这反映了MFA在长语音上的系统性偏移。相比之下在表3中,在人工标注的测试数据集上,长语音的平均AAS低于原始语音的平均AAS,这表明LLM-ForcedAligner并非简单复制MFA的时间戳预测,而是学习到了更稳健、更可靠的时间戳预测,能够在长语音场景中有效修正MFA的标签。此外,在长语音推理过程中,LLM-ForcedAligner可以利用更长的历史上下文来预测当前片段的时间戳,从而在人工标注的长语音测试数据集上取得了更优异的性能。

表4报告了在相同的推理条件下,LLM-ForcedAligner与其他FA方法的平均实时因子(RTF)。随着模型参数数量的增加,RTF略有上升。由于LLM-ForcedAligner采用非自回归推理的优势,它在AAS上实现了大幅降低,RTF仅略有增加。用户可以根据AAS与RTF的权衡来选择最合适的FA方法。

表4 LLM-ForcedAligner和其他FA方法在推理期间的平均RTF

表5展示了在MFA标注和人工标注的测试数据集上,使用不同时间戳token时长训练的LLM-ForcedAligner的平均AAS结果。当时间戳token时长为120毫秒时,时间戳预测层有2500个类别(300秒除以120毫秒);当时长为80毫秒时,有3750个类别(300秒除以80毫秒);当时长为40毫秒时,有7500个类别(300秒除以40毫秒)。随着时间戳token时长的缩短,MFA标注测试数据集上的AAS稳步下降,这表明更精细的时间戳预测更符合MFA标签。然而,在人工标注的测试数据集上,更精细的时间戳预测并没有带来更低的AAS,因为它更贴合MFA的时间戳分布,从而导致泛化能力下降。80毫秒的时间戳token时长是最佳选择因为AuT编码器输出的每个帧也代表80毫秒的语音,这有助于LLM-ForcedAligner根据语音边界更好地确定单词或字符的起始和结束时间戳。

表5 不同时间戳token时长的消融研究在MFA标记和人工标记测试数据集上的毫秒级别AAS,“Raw”指原始语音,“Mixed”指最长达300秒的单语和跨语言拼接语音

表6展示了LLM-ForcedAligner在MFA标注和人工标注的测试数据集上的平均AAS结果,并对比了训练期间有无动态槽位插入的情况。动态槽位插入会随机决定是否在每个单词或字符后插入时间戳槽位,使LLM-ForcedAligner能够在任意位置预测开始和结束时间戳并防止其过度依赖先前预测的时间戳。我们发现,动态槽位插入降低了两个测试数据集上的AAS,其中对长语音的改进更为明显。这一现象的原因是,动态槽位插入通过随机决定是否在每个单词或字符后插入时间戳槽位,避免了LLM-ForcedAligner过度依赖历史预测的时间戳,否则可能会导致系统性的时间偏移此外,动态槽位插入使LLM-ForcedAligner能够在任意位置为单词或字符预测开始和结束时间戳,支持用户自定义的时间戳预测。

表6 动态槽位插入的消融研究在MFA标注和人工标注测试数据集上的毫秒级别AAS,“Raw”指原始语音,“Mixed”指长达300秒的单语和跨语言拼接语音

图3展示了在 LLM-ForcedAligner 以不同动态槽位插入比例进行训练时,在人工标注的测试数据集上的AAS结果。当动态槽位插入比例低于训练样本的50%时,LLM-ForcedAligner的AAS较低,且随着比例的增加,AAS持续下降。然而,当该比例超过训练样本的50%时,AAS开始上升,在100%时达到最高值。因此,选择50%这一合适的动态槽位插入比例对于增强LLM-ForcedAligner的泛化能力至关重要。

图4展示了在不同参数设置下,LLM-ForcedAligner在MFA标注和人工标注的测试数据集上的AAS结果。当LLM-ForcedAligner的参数规模小于0.9B时,时间戳预测性能受到模型容量不足的限制。当参数规模超过0.9B时,MFA标注测试数据集上的AAS没有显著变化,而人工标注测试数据集上的AAS则有所上升,这表明LLM-ForcedAligner过拟合了MFA时间戳分布。因此,0.9B的参数规模是最优的。在这一规模下,LLM-ForcedAligner不会严格拟合MFA时间戳分布,而是学习到更平滑、更稳健的时间戳预测行为,具有更好的泛化性能。

图3 LLM-ForcedAligner在不同动态槽插入比例下,在人工标注测试数据集上的毫秒级别AAS
图4 不同参数设置下,LLM-ForcedAligner在MFA标注和人工标注测试数据集上的毫秒级别AAS

参考文献

  • [1] Michael McAuliffe, Michaela Socolof, Sarah Mihuc, Michael Wagner, and Morgan Sonderegger. 2017. Montreal Forced Aligner: Trainable Text-Speech Alignment Using Kaldi. In Proc. Interspeech, pages 498–502.
  • [2] Xian Shi, Yanni Chen, Shiliang Zhang, and Zhijie Yan. 2023. Achieving Timestamp Prediction While Recognizing with Non-Autoregressive End-to-End ASR Model. CoRR, arXiv:2301.12343.
  • [3] Max Bain, Jaesung Huh, Tengda Han, and Andrew Zisserman. 2023. WhisperX: Time-Accurate Speech Transcription of Long-Form Audio. In Proc. Interspeech
  • [4] Xian Shi et. al., Qwen3-ASR Technical Report, https://arxiv.org/abs/2601.21337

Qwen3-ASR 支持多语种识别大模型

Qwen3-ASR 是由Qwen开发的一系列功能强大的语音识别模型,包括两个强大且全面的语音识别模型 Qwen3-ASR-1.7B 与 Qwen3-ASR-0.6B,以及一个创新的语音强制对齐模型 Qwen3-ForcedAligner-0.6B。Qwen3-ASR 系列的语音识别模型支持 52 个语种与方言的语种识别与语音识别。

依托创新的预训练 AuT 语音编码器与 Qwen3-Omni 基座模型的强大多模态能力,Qwen3-ASR 实现了精准与稳定的语音识别,其 1.7B 模型在中文、英文、中文口音与歌唱识别等场景下达到 SOTA,具有复杂文本识别能力以及强噪声下的稳定性;0.6B 模型在性能与效率上实现了均衡,在保证语音识别准确率的情况下,128 并发异步服务推理能够达到 2000 倍吞吐,即 10 秒钟处理五个小时以上的音频。

强制对齐模型 Qwen3-ForcedAligner-0.6B 是基于 NAR LLM 推理的时间戳预测模型,支持 11 个语种的任意位置的灵活精准的强制对齐,其时间戳预测精度超越传统的 WhisperX,Nemo-Forced-Aligner 等模型,单并发推理 RTF 达到了高效的 0.0089。

Introduction

核心特性与贡献可概括如下:

  • 实现一体化 ASR 与 LID 的最先进性能。
    Qwen3-ASR-1.7B 与 Qwen3-ASR-0.6B 支持 30 种语言、22 种中文方言的自动语音识别,以及覆盖全球不同国家和地区的英语变体。这两款模型在复杂环境下同样具备鲁棒识别能力,包括但不限于歌唱语音与歌曲识别、噪声环境识别以及复杂文本模式(如混合语言、口语化表达等)的识别。
  • 提出新型语音强制对齐架构。
    首次引入了基于大语言模型的语音强制对齐器,可在灵活时间粒度下生成高精度时间戳,包括词级、句级和段落级。不同于现有工具(如 Montreal Forced Aligner, MFA 和 NeMo Forced Aligner, NFA),我们的 Qwen3-ForcedAligner-0.6B 提供统一的多语言解决方案,弥补了 Qwen3-ASR 系列中缺乏一体化强制对齐系统的不足,补全了综合口语语言处理体系中的关键功能模块。
  • 开源模型与完整的推理及微调框架。
    除发布三款模型权重外,我们还提供了一个完全开源、易于使用的代码框架,支持多种推理能力(如多粒度对齐、流式转写和多语言处理),并提供可复现的微调方案。我们希望这一统一工具链能够加速自动语音识别领域的研究与应用开发。

Qwen3-ASR

Architecture

Qwen3-ASR 系列模型以 Qwen3-Omni 作为基础模型,该模型已被验证具备强大的音频理解能力。待识别语音首先输入至 AuT 编码器AuT 编码器独立于 Qwen3-Omni 和 Qwen3-ASR 进行预训练。

如图 2(左)所示,AuT 是一种基于 Attention Encoder-Decoder (AED) 架构的 ASR 模型。其对 128 维 Fbank 特征进行 8 倍下采样,从而生成 12.5Hz token 率的音频表示。为兼顾流式与离线推理能力,我们采用 动态 Flash Attention 窗口机制,窗口大小在 1 秒至 8 秒之间自适应变化,使 Qwen3-ASR 既可处理短语音块进行流式推理,也可支持长语音的离线推理。

本次发布模型的整体架构如图 2(右)所示,具体如下:

  • Qwen3-ASR-1.7B
    由 Qwen3-1.7B 主干模型、一个 projector 模块以及一个参数规模为 3 亿(300M)、隐藏维度为 1024 的 AuT 编码器构成。该模型在多语言及方言语音识别任务上表现突出,同时在复杂声学环境和复杂文本模式下具有较强鲁棒性。
  • Qwen3-ASR-0.6B
    由 Qwen3-0.6B 主干模型、一个 projector 模块以及一个参数规模为 1.8 亿(180M)、隐藏维度为 896 的 AuT 编码器构成。该紧凑型模型在识别精度与推理效率之间取得良好平衡,在参数规模低于 10 亿的 ASR 模型中保持较强竞争力。

整体而言,该系列模型通过模块化音频编码器与大规模语言模型的融合,实现了高性能、多语言、可扩展的统一语音识别框架。

训练策略

Qwen3-ASR 的训练过程包括 AuT 预训练、Omni 预训练以及 ASR 后训练 三个阶段,其中前两个阶段与 Qwen3-Omni 完全一致。

(1)AuT 预训练

在该阶段,我们的目标是在 AED(Attention-based Encoder-Decoder)框架下,利用大规模标注数据训练一个预训练编码器。

我们使用了约 4000 万小时的伪标注 ASR 数据,其中大部分为中文和英文数据。实验表明,该预训练编码器在 动态注意力窗口大小 下能够提供通用且稳定的音频表示。


(2)Omni 预训练

我们以预训练好的 Qwen3-Omni 模型作为 ASR 训练的基础模型。

Omni 预训练在 多任务音频、视觉和文本数据 上进行。在该阶段,Qwen3-ASR-0.6B 和 Qwen3-ASR-1.7B 均使用 3 万亿 token 进行训练,从而获得多模态理解能力。

(3)ASR 监督微调(SFT)

在 SFT 阶段,我们对 ASR 的输入/输出格式进行风格迁移训练,所使用的数据规模显著小于预训练阶段,且与预训练语料不重叠

除标准的中文、英文和多语种 ASR 数据外,SFT 阶段还使用了:

  • 非语音数据
  • 流式增强数据
  • 上下文偏置数据

具体而言,我们将模型训练为一个 仅用于 ASR 的模型不遵循 prompt 中的自然语言指令,从而缓解指令注入(instruction injection)和指令跟随失败的问题

Qwen3-ASR 对给定音频的输出分为两种类型:

(4) ASR 强化学习(RL)

在最后阶段,我们采用 Group Sequence Policy Optimization(GSPO) 进一步提升识别质量。事实证明,强化学习在提升模型的抗噪声能力、转写稳定性以及处理复杂疑难语音的能力方面发挥了关键作用。

在强化学习阶段共使用约 5 万条语音数据,其中包括:

  • 35% 的中英文数据
  • 35% 的多语言数据
  • 30% 的功能性数据

该阶段的目标是在复杂环境下提升转写的稳定性。

特点

基于上述架构与训练策略,Qwen3-ASR 系列模型在以下方面表现突出:

Qwen3-ASR-1.7BQwen3-ASR-0.6B 支持 52 种语言和方言,包括 30 种语言和 22 种汉语方言。Qwen3-ForcedAligner-0.6B 支持 11 种语言。Seq. Len.表示单次推理的最大音频长度(以秒为单位),NAR 表示非自回归推理。

(1)高精度中英文识别
在各个训练阶段中,中英文数据占据了训练数据的主要比例。与众多竞争系统相比,该模型在多个基准测试中取得了领先的中英文识别性能。

(2)支持多语言与多方言
Qwen3-ASR-1.7B 和 Qwen3-ASR-0.6B 支持 30 种语言和 22 种方言,详见表 1。

(3)长音频与流式推理能力
Qwen3-ASR-1.7B 和 Qwen3-ASR-0.6B 原生支持最长不超过 20 分钟的单段语音输入,并支持流式与离线统一推理。

(4)歌声与歌曲识别能力
Qwen3-ASR-1.7B 和 Qwen3-ASR-0.6B 能够准确识别歌声与歌曲内容。除具备较强的歌声识别能力外,Qwen3-ASR 系列还支持在含有背景音乐(BGM)的情况下直接转写完整歌曲,体现出对伴奏和复杂音乐混合场景的鲁棒性。

推理效率

Qwen3-ASR 的速度基准测试在两种场景下进行:离线批量推理在线异步推理

  • 前者通过 vLLM 的离线批量生成方式进行评估;
  • 后者基于 vLLM Serve 的多并发请求设置进行评估,更贴近工业环境中的实际推理效率表现。

所有实验均基于 vLLM v0.14.0 运行,启用了 CUDA Graph,并采用 bfloat16 精度进行推理。表 2 的结果显示,在不同并发水平下,Qwen3-ASR-0.6B 的平均首 Token 延迟(Time-to-First-Token, TTFT)最低可达 92 毫秒

在并发数为 128 时:

  • 实时因子(Real-Time Factor, RTF)最低可达 0.064
  • 吞吐量最高可达 2000

这意味着该模型每秒可以处理 2000 秒的音频

Qwen3-ForcedAligner

Overview

Qwen3-ForcedAligner-0.6B 旨在在已知对应文本转写的情况下,估计语音中每个单词或字符的起始和结束时间戳。该模型将强制对齐(Forced Alignment)任务重构为一种槽位填充(slot-filling)形式。具体而言,在输入语音及其转写文本的基础上,在文本中插入特殊标记 [time],用于表示词级或字符级的起止时间槽位。随后,Qwen3-ForcedAligner-0.6B 直接预测每个槽位对应的离散时间戳索引

表 2: Qwen3-ASR 系列模型的效率。Qwen3-ASR-0.6B 和 Qwen3-ASR-1.7B 支持基于 vLLM 的离线批处理和在线异步推理模式,而 Qwen3-ForcedAligner-0.6B 仅支持 PyTorch 下的离线批处理推理。表中所有测量结果均基于时长约为 2 分钟(ASR)和 1 分钟(FA)的输入音频,所有推理均在单个典型计算资源上执行。Conc. 表示并发级别。TTFT p95 表示第 95 百分位 TTFT 延迟。

高精度时间戳预测
Qwen3-ForcedAligner-0.6B 在时间戳预测偏移方面显著降低误差。与其他强制对齐方法相比,在人工标注测试数据集上,其累计平均时间偏移实现了 67%~77% 的相对下降

广泛的应用场景
Qwen3-ForcedAligner-0.6B 支持 11 种语言 的语音输入,最长可达 300 秒,包括跨语言场景。同时,用户可以灵活地对任意单词或字符进行时间戳预测定制。

快速推理速度
Qwen3-ForcedAligner-0.6B 摒弃了传统的“下一个 Token 预测”范式,采用非自回归(NAR)推理方式进行时间戳预测,从而显著提升推理效率。

模型设计

如图 3 所示,Qwen3-ForcedAligner-0.6B 采用一个预训练的 AuT 编码器(AuT encoder) 来处理输入语音信号,并生成语音嵌入表示(speech embeddings)。转写文本会被重新格式化:为每个单词或字符添加起始和结束时间戳标签。随后,每个时间戳标签都会被替换为特殊标记 [time],并输入到分词器(tokenizer)中。此外,文本中的时间戳标签会通过将时间戳数值除以 AuT 编码器输出的 80ms 帧时长进行离散化,转换为对应的时间索引。

语音和文本的嵌入序列随后一起输入到 Qwen3-0.6B 大语言模型(LLM) 中处理,之后通过一个时间戳预测线性层,对整个输入序列的时间戳索引进行预测

在本工作中,时间戳预测的最大类别数为 3750,对应支持最长 300 秒的语音输入。

在训练阶段,会将随机掩蔽的时间戳槽位动态插入到 token 序列中,用以表示单词或字符的边界。随后,将组合后的序列输入到 Qwen3-0.6B 大语言模型(LLM) 中,并通过时间戳预测层为每个槽位预测对应的时间戳索引。在监督训练过程中,对同步对齐的标签序列与模型输出序列之间计算交叉熵损失(cross-entropy loss)

训练策略

训练 Qwen3-ForcedAligner-0.6B 需要大量带有词级或字符级时间戳标注的语音–文本对。然而,由于人工标注成本极高,本文采用 Montreal Forced Aligner(MFA)生成的伪时间戳标签。MFA 是当前最准确的强制对齐方法之一。

需要注意的是,MFA 生成的伪标签天然包含噪声和系统性偏移。Qwen3-ForcedAligner 并非简单复现 MFA 的输出,而是对这些伪标签进行蒸馏与平滑,从而获得更稳定、时间偏移更小的时间戳预测结果

传统的大语言模型(LALMs)通常采用一种训练方案:移除输出序列的最后一个 token 以及标签序列的第一个 token,在两者之间引入一个位置偏移,并基于此计算交叉熵损失,从而实现标准的“下一个 token 预测”范式。然而,该范式并不适用于时间戳槽位的填充任务。

Qwen3-ForcedAligner-0.6B 采用因果训练(causal training)方式,保持输出序列与标签序列不做位置偏移。这样,模型在训练过程中可以显式地识别时间戳槽位,并直接预测用于填充这些槽位的时间戳索引。

此外,因果训练使 Qwen3-ForcedAligner-0.6B 在预测当前时间戳槽位时能够利用之前的上下文信息,从而保证整体时间戳预测的全局一致性。交叉熵损失仅在时间戳槽位上计算,使训练目标专注于时间戳槽位填充这一核心任务。

此外,为了增强模型的泛化能力,Qwen3-ForcedAligner-0.6B 在训练过程中采用了动态槽位插入策略。具体而言,对于样本中的每个单词或字符,模型会随机决定是否在其后插入起始和结束时间戳槽位。

推理与可用性

由于训练过程中 token 序列保持未偏移(non-shifted),用户可以在任意单词或字符之后插入起始和结束时间戳槽位。Qwen3-ForcedAligner-0.6B 使用非自回归(NAR)解码,能够一次性同时预测文本中所有时间戳槽位对应的时间索引

当获得时间索引后,将每个索引乘以 80ms,即可恢复出实际预测的时间戳。

Qwen3-ForcedAligner 的速度基准测试基于 FlashAttention 和 bfloat16 进行。由于该模型是非自回归的,Transformers 与 vLLM 在推理速度上的差异相对较小,因此所有基准测试均使用 Transformers 进行。表 2 的结果表明,即使在高并发场景下,该模型仍能保持接近 0.001 的实时率(RTF),也就是说,它可以每秒处理 1,000 秒的音频。

Experiments

评估细节

基线系统

为验证 Qwen3-ASR 系列模型的性能,我们将其与当前最先进(SOTA)的闭源 ASR API 以及广泛使用的开源模型进行对比评估。具体而言,我们将 Qwen3-ASR 与三种领先的专有服务进行比较:

  • OpenAI 的 GPT-4o-Transcribe
  • Google DeepMind 的 Gemini 2.5 Pro
  • ByteDance 的 Doubao-ASR

此外,我们还纳入了多个多语言开源基线模型:

  • Whisper-large-v3
  • FunASR-MLT-Nano
  • GLM-ASR-Nano

这些基线系统涵盖了强大的商业系统以及具有竞争力的开源替代方案,从而能够在具有代表性的真实场景下对 Qwen3-ASR 进行全面评估。

采用四部分评估协议来衡量 Qwen3-ASR 系列模型的语音识别性能:

  • 公共基准测试(英语与中文)
  • 内部鲁棒性测试套件:全面的内部测试集,在具有挑战性的真实场景下对模型进行压力测试
  • 多语言评估
  • 歌声识别:重点关注长音频场景,即将整首歌曲作为单一输入

评估指标

  • 识别准确率:CER/WER
  • 语种识别准确率
  • 时间戳精度:使用 Accumulated Average Shift(AAS)作为评估指标。AAS 数值越低表示时间戳预测越准确。预测时间戳与参考时间戳之间的平均绝对差值:

English & Chinese ASR Performance

Opensource ASR Benchmarks

Qwen3-ASR 在英语、普通话和多种汉语方言基准测试中均表现出色。它不仅能与领先的商业 API 相媲美,而且性能远超广泛使用的开源基线模型。从 Qwen3-ASR-0.6B 扩展到 Qwen3-ASR-1.7B,性能提升显著且稳定,表明该模型能够有效受益于容量的增加。

在英语基准测试上,Qwen3-ASR 在多样化的真实场景数据(例如众包或网络采集语音)上表现尤为出色。这类数据相比朗读式语音(read-speech)通常存在更明显的分布偏移。在这些情况下,Qwen3-ASR-1.7B 在多个数据集上取得了整体最佳成绩,同时在诸如 LibriSpeech 等标准学术评测中也保持接近最优系统的表现。相比之下,一些商业 API 的性能在不同数据集之间波动较大,而 Qwen3-ASR 在广泛的英语场景下展现出更为稳定和一致的识别准确率。

在普通话基准上,Qwen3-ASR 展现出明显优势。它在表中大多数普通话评测数据集上取得了最佳整体表现,并在更具挑战性的大规模评测中依然保持稳定性能。尤其是在 WenetSpeech 数据集上(该数据集包含多样化声学环境和会议场景语音),Qwen3-ASR 相比现有基线模型取得了显著领先。

在中文方言基准上,Qwen3-ASR 在存在显著发音和词汇差异的情况下仍保持较强的识别精度。在粤语及其他方言数据集中,它始终位列表现最优的系统之一,并且在更具挑战性的长语句场景下表现尤为突出,体现出超越短句、干净测试条件的鲁棒性。尽管在少数特定方言场景中,一些专门优化的商业 API 略占优势,但总体而言,Qwen3-ASR 依然具有很强竞争力,能够在无需针对每种方言单独定制的情况下提供通用且高性能的解决方案。

总体而言,表 3 总结了 Qwen3-ASR 的三大优势:

  1. 在英语基准上具备强大的跨领域泛化能力,尤其是在超越精心筛选的朗读语音场景下表现突出;
  2. 在普通话多个公开数据集(包括大规模、噪声较多的会议语音)上达到当前最先进水平;
  3. 在中文方言处理方面表现稳健,尤其是在粤语以及长短语句混合的方言语音上具有显著优势。

这些结果表明,Qwen3-ASR 在多样化的公开基准测试中展现出强大且可复现的性能,同时在与顶级闭源商业 API 的对比中也保持了高度竞争力。

内部 ASR 基准测试

为进一步评估模型在真实部署环境下的鲁棒性,我们在内部鲁棒性测试套件上对 Qwen3-ASR 进行了评测,结果汇总于表 4。Qwen3-ASR 在所有子集上均表现出稳定而强劲的性能,并且从 0.6B 扩展至 1.7B 带来了持续且稳定的性能提升。

在带口音英语评测中,Qwen3-ASR 取得了所有对比系统中最低的词错误率(WER),优于商业 API 和开源基线模型,表明其对口音变化具有更强的泛化能力。在普通话评测中,Qwen3-ASR-1.7B 在所有测试子集上均取得最佳表现,展现出在复杂声学环境和多样说话条件下的鲁棒性。

在中文方言评测中,Qwen3-ASR 同样在粤语对话测试和 22 种方言汇总评测中取得最佳结果;尤其是在多方言混合场景下,性能提升更加显著,表明随着语言多样性的增加,模型的鲁棒性进一步增强。

总体而言,这些内部评测结果与公开基准测试的结论一致,进一步验证了 Qwen3-ASR 在高变异性场景下能够提供稳定且可靠的识别质量。

Multilingual ASR and Language Identification

 多语言自动语音识别性能

总体而言,Qwen3-ASR-1.7B 在大多数测试设置中取得了最佳的平均性能,展现出强大的跨语言和跨领域的泛化能力,而 Qwen3-ASR-0.6B 则提供了一个具有竞争力的轻量级替代方案。

在 MLS、Common Voice 和 MLC-SLM 基准测试中,Qwen3-ASR-1.7B 的性能始终优于所有评估的开源基线模型,包括广泛使用的 Whisper-large-v3,并且显著优于规模较小的多语言模型。对于涵盖更多语言和多样化录音条件的 Fleurs 数据集,Qwen3-ASR-1.7B 在 12 种和 20 种语言的子集上取得了最佳性能。然而,相对于 Whisper-large-v3,其在完整的 30 种语言设置下的性能有所下降,表明其在处理日益增长的语言多样性和长尾语言方面仍有改进空间。尽管如此,Qwen3-ASR-1.7B 仍然明显优于 0.6B 版本,这表明模型扩展能够提高其在更具挑战性的多语言环境下的鲁棒性。

Language Identification Performance

Qwen3-ASR 不仅能够将语音解码为文本,还可以在进行 ASR 解码之前,通过自然语言提示完成语言识别(LID)。在本节中,我们在 4 个多语言基准数据集上评估语言识别准确率:

  • FLEURS(30 种语言)
  • MLS(9 种语言)
  • Common Voice(13 种语言)
  • MLC-SLM(11 种语言)

各数据集所覆盖的语言种类详见第 2.3 节。

如表 6 所示,我们将 Qwen3-ASR-0.6B 和 Qwen3-ASR-1.7B 与 Whisper-large-v3 进行对比。Whisper-large-v3 是一个具备内置语言识别能力的强大多语言 ASR 模型。实验结果表明,两种 Qwen3-ASR 模型均优于 Whisper-large-v3,在这些主流语言上展现出稳定而有效的语言识别能力。

在 FLEURS 数据集上的剩余错误主要来源于对马来语(ms)和印尼语(id)的混淆。这两种语言在语言学上高度接近,且在声学特征上具有较高相似性,因此较易产生识别混淆。

Singing Voice & Songs Recognition Performance

 歌声识别和歌曲转录结果。表中列出了仅包含歌声的基准测试和包含背景音乐的长歌曲的词错误率 (WER) (%)。“N/A”表示由于性能不佳,该模型不支持长歌曲识别。

表 7 汇报了歌声转写以及带背景音乐的长时歌曲转写结果。总体来看,Qwen3-ASR-1.7B 在面对旋律引起的发音变化和音乐伴奏干扰时表现出较强的鲁棒性,在所评测的数据集上优于大多数商业 API 和开源基线模型。

在纯歌声(无伴奏)基准上,Qwen3-ASR-1.7B 在以下数据集上取得最佳表现:

  • M4Singer
  • MIR-1k
  • PopCS

在 OpenCpop 上,其表现略低于 FunASR-MLT-Nano,位列第二,但差距较小。这表明模型在不同演唱风格和录音条件下具有较强的泛化能力,并且对音高漂移、音素拉长以及节奏变化等歌声特有现象的敏感性较低。

在包含背景音乐的完整歌曲转写任务中,Qwen3-ASR-1.7B 显著优于开源基线模型;Whisper-large-v3 和 FunASR-MLT-Nano 在长时、音乐混合场景下性能明显下降。Qwen3-ASR-1.7B 在英语和中文歌曲上都取得了较高准确率:在中文数据集上排名第一,在英语数据集上也与表现最佳的商业系统保持竞争力。

这些结果表明,Qwen3-ASR 在真实含音乐场景下具有良好的适应能力,对背景音乐干扰具有较强鲁棒性,并在一定程度上缩小了传统语音识别与歌声/歌曲转写之间的性能差距。

Streaming Speech Recognition

本节在离线(offline)和流式(streaming)两种推理模式下评估 Qwen3-ASR-1.7B 和 Qwen3-ASR-0.6B 的性能。得益于动态注意力窗口机制,Qwen3-ASR 系列模型能够自然支持流式推理。

表 8 展示了在三个开源测试集上的评测结果,实验设置为:分块大小为 2 秒、5 个 token 回退(fallback),并保持最近 4 个分块处于未固定(unfixed)状态。

总体而言,Qwen3-ASR 提供了一个同时适用于离线与流式场景的统一模型架构,并且在流式推理模式下仍然保持了较强的识别准确率。

Precision of Timestamps

表 9 报告了 Qwen3-ForcedAligner-0.6B 与其他强制对齐(forced-alignment)方法在 MFA 标注和人工标注测试集上的 累积平均偏移(AAS, Accumulated Average Shift) 表现。

主要结论如下:

  1. 多语言覆盖与跨语言能力
    • 其他方法通常需要特定语言模型,支持语言数量有限。
    • Qwen3-ForcedAligner-0.6B 通过单一模型覆盖多种语言,并能处理跨语言和混合语言(code-switched)场景。
  2. 长短语音表现稳定
    • Qwen3-ForcedAligner-0.6B 对短句和长句均表现一致。
    • 基线方法在长句或长语音上,时间戳预测准确度显著下降。
  3. 训练来源与泛化能力
    • 虽然模型使用 MFA 伪标注训练,但在人工标注的测试集上依然保持较低的 AAS。
    • 表明模型具有 强大的实际场景泛化能力,能够稳健预测各类语音的时间戳。

简单总结:Qwen3-ForcedAligner-0.6B 在多语言、长语音及真实数据上的时间戳预测都优于传统方法。

结论

本文介绍了 Qwen3-ASR 模型家族,包括两款自动语音识别(ASR)系统和一款强制对齐(FA, Forced Alignment)模型,这些模型均在大规模语音语料上训练得到。

核心特点与贡献如下:

  1. 性能与训练策略
    • 利用基础模型 Qwen3-Omni 的强大音频理解能力,以及四阶段训练流程,
      Qwen3-ASR-1.7B 和 Qwen3-ASR-0.6B 在语音覆盖率和识别准确率上,均优于同等规模或更大规模的竞品模型及商业 API。
  2. 多语言与语音场景支持
    • 支持 30 种语言的语言识别(LID)和语音识别(ASR)。
    • 在复杂声学环境下表现稳健,对口音与方言具备鲁棒性。
    • 对唱歌语音及其他真实场景语音同样有效。
  3. 强制对齐模型
    • 引入 Qwen3-ForcedAligner-0.6B,基于 LLM 的非自回归(NAR)时间戳预测器,
      支持 11 种语言的强制对齐,端到端处理时间低于 5 分钟。
    • 在时间戳准确率、推理速度和语言覆盖方面,均优于三种主流端到端 ASR 基础的 FA 方案。
  4. 开源与易用性
    • 发布了三款模型权重,同时开源了统一、易用的推理框架。

总结:Qwen3-ASR 家族在真实场景评测和公开基准测试中均达到 最先进水平,而开源的强制对齐模型解决了语音技术栈中的关键空白。团队将持续提升该开源模型家族的准确性与功能性。

音频 Tokenizer的方法:Moshi 团队分享

原文链接:https://kyutai.org/codec-explainer

方案:将语言模型嵌入音频编码器/解码器对(=神经音频编解码器)中,使其能够预测音频的后续内容。

截至 2025 年 10 月,Speech LLM 的表现还很糟糕。许多 LLM 都提供了语音接口,但它们的工作流通常是:语音转文字,生成文本答案,再通过 text-to-speech (TTS) 读出来。这在很多场景下够用了(比如 Unmute),但这本质上只是一个 wrapper,并非真正的语音理解。模型无法感知你声音里的沮丧并共情地回应,无法在回答中强调重点,也听不出讽刺。

是的,现在确实有一些 LLM(如 Gemini、ChatGPT 的 Advanced Voice Mode、Qwen、Moshi)能够原生 (natively) 理解和生成语音。但在实践中,它们要么不够智能,要么其行为就像一个 text model wrapper。你可以试试用很高的音调问它们任何一个:“我说话的声音是低还是高?”,它们都答不上来。

显然,Speech LLM 的发展滞后于 Text LLM。但为什么呢?对于文本,我们几年前就发现,只要有海量文本数据、一个巨大的 Transformer 模型和大量的 GPU,就能得到效果惊人的文本续写模型。那为什么我们不能直接把 text 换成 audio,然后得到同样惊人的语音续写模型呢?

先卖个关子,如果你真的天真地这么做了,就会得到下面这种结果(警告,音量很大):

接下来,我们将探讨为什么 audio 比 text 更难建模,以及如何利用 neural audio codec 来降低建模难度。——这已是将 audio 输入和输出 LLM 的实际标准方法。通过 codec,我们可以将连续的音频信号转换成更大粒度的离散 token,然后训练模型来预测这些 token 的后续序列,最后再将这些 续写的token 解码还原成 audio:请看上面的动画。

Kyutai 的同仁们在这个领域做了大量工作,这也是我选择这个主题的部分原因。我们将从基础讲起,一直讲到我们的 neural audio codec——Mimi。它最初是为 Moshi 开发的,后来被其他模型所采用,包括 Sesame 的 CSM 模型

Text is easy

在文本分词方面,业界普遍采用一种称为字节对编码(Byte-Pair Encoding, BPE)的技术,并且极少对分词器进行更改。以 OpenAI 为例,自 GPT-4o 以来一直沿用同一套分词器——如果以大语言模型的发展节奏来衡量,GPT-4o 已可算作“相当久远”的模型。

A random text from Wikipedia tokenized via the GPT-4o tokenizer

即便完全不对文本进行分词、仅对单个字符进行逐字符预测,也能够取得相当不错的效果。早期让我对机器学习产生浓厚兴趣的一篇文章,是 Andrej Karpathy 于 2015 年发表的关于循环神经网络(RNN)有效性的博客。在那篇文章中,Karpathy 使用单块 GPU 训练了一个三层 LSTM 模型,使其能够生成结构上较为合理的代码与 LaTeX 文本。

要知道,这可是十年前的事了,那时候我们甚至还不知道 “attention is all we need”。现在,我们再来对比一下 Karpathy 的结果和 WaveNet 的样本,后者是 DeepMind 在一年后发布的模型:

从纯声学角度来看,这段音频的听感质量较高,但却几乎无法生成哪怕一个正确的英文单词。当然,我们也不应对 WaveNet 过于苛责。Karpathy 的 RNN 所生成的文本样本长度不过数千个字符,而这段 10 秒的音频却包含约 16 万个音频采样点;并且,WaveNet 是以逐采样点预测(sample-by-sample generation)的方式,极其细致地生成整段音频的。

一秒钟的音频通常包含数以万计的采样点,然而其语义内容往往只对应少量几个词语。(动画引自 WaveNet 博客文章。)

在如此长的时间尺度上维持生成内容的连贯性是极具挑战性的;同时,由于需要执行数量庞大的逐步预测,模型的运行开销也十分高昂。

因此,与其让模型直接逐采样点地进行预测,不如先训练一个模型,将音频压缩到更易处理的表示空间。具体而言,可以先对音频进行压缩,在压缩后的表示上利用大语言模型预测其后续内容,再将预测结果解压还原为音频信号。

Sample by sample

不过,在此之前,我们先构建一个基线模型,像 WaveNet 那样逐采样点生成音频。这些实验的代码均已开源,可在相应仓库中获取。我基于 Andrej Karpathy 的 nanoGPT 仓库进行了复现与扩展;该仓库是 GPT-2 的一个简洁实现版本。

从语言模型的视角来看,文本与音频在形式上并无本质区别:本质都是“输入 token,输出 token”。因此,我们需要做的仅是将连续的音频采样值量化为离散的取值区间。与 WaveNet 类似,我们采用 μ-law(μ律)算法,将连续振幅映射到 256 个离散桶(buckets),并将其视作 256 个可能的离散 token。

在此基础上,我们使用这种逐采样点量化后的音频 token 来训练一个语言模型。数据集方面,沿用 AudioLM(Neil Zeghidour 与 Eugene Kharitonov)的设置,采用 Libri-Light 数据集。该数据集的训练集总时长约为 5 万小时,但在本实验中我们仅使用其中 1000 小时的数据。采用逐采样点的离散化方式后,最终得到的训练数据规模约为 53GB。

模型方面,我们训练了一个规模相对较小的 Transformer,总参数量为 151.28M,与最小规格的 GPT-2 模型大致相当。当从该模型进行采样生成时,其输出表现为类似咿呀学语般的声音(提示:音量有时较大)。

模型往往会进入一种“噼啪杂音模式”(crackling mode),并且一旦陷入其中,似乎难以自行恢复:

我还训练了一个较小的模型,就是之前开头提到的那个。它容易生成令人不适的尖锐噪声(音量较大!)。

正如你所看到的,我们还远未达到通用人工智能(AGI)的水平。模型生成的音频听起来像是语音,但你几乎听不出任何单词,而且声音也在不断变化。这也不足为奇:模型的上下文长度为 2048,对于 16 kHz 的音频而言,仅相当于 128 毫秒,连一个单词的长度都不到。此外,这些 10 秒的音频样本在 H100 上生成耗时约 30 分钟——距离实时生成还有几个数量级的差距。

因此,我们需要构建一个神经音频编解码器(neural audio codec)来压缩音频。思路是:如果将采样率降低 100 倍,模型生成的内容也有望变得“100 倍更连贯”。在机器学习中,一个经典方法是使用自编码器(autoencoder):该模型接收输入,将其压缩到较小的“潜在空间(latent space)”,然后尝试重构原始输入。

在我们的场景下,需要一个潜在表示可量化(quantized)的自编码器,这样才能将潜在向量输入到语言模型中,并生成后续内容。当然,也可以使用未量化的潜在向量生成后续音频,但操作会更复杂——具体可参见“进一步阅读”部分。

Autoencoders with vector quantization (VQ-VAE)

请耐心一点,因为我们将从音频领域绕个弯:让我们基于 Fashion MNIST 的图像来构建一个量化的自编码器(quantized autoencoder)。我们会使用一个包含前三个类别的数据子集:T恤裤子套头衫

首先,我们先训练一个普通自编码器,将图像编码到二维潜在空间(2D latent space)中:

Training a regular autoencoder on Fashion MNIST

每一帧显示的是一个训练批次(有些批次被略过)。小图像表示自编码器对该批次图像的重构结果。我为三类图像添加了颜色标记(T 恤/上衣 = 蓝色、裤子 = 绿色、套头衫 = 黄色),但自编码器并没有接收类别信息作为输入——潜在空间自然会根据类别形成聚类。接下来,我们放大观察几张重构结果:

Original images (top) and their reconstructed versions (bottom)

如你所见,重构效果并不理想。图像比较模糊,而且前两张重构几乎完全相同。但我们使用的网络非常小——编码器和解码器各只有四层全连接网络,并且只将数据投影到二维空间,因此不能对模型期望过高。

接下来,我们将对这些潜在向量进行量化(quantization),方法是通过聚类实现。大致步骤如下:

  1. 类似 k-means:维护一个簇中心(cluster center)的位置列表。
  2. 簇中心初始化为随机位置。
  3. 对每个训练批次:
    • 查看每个潜在向量属于哪个簇(assignment),注意我们 不修改潜在向量,仅进行分配。
    • 将每个簇中心向其所属潜在向量的平均位置轻微移动(nudge)。
  4. 如果某个簇中心长时间未被分配到任何潜在向量,则将其重新“传送”到当前批次的某个随机潜在向量上,以避免簇中心陷入局部停滞。
Quantizing by fitting a clustering on top of the autoencoder

你可以看到,随着训练的进行,簇中心的重构效果逐渐被优化和细化。

接下来,我们希望让编码器(encoder)和解码器(decoder)在训练过程中更好地处理量化后的潜在向量(quantized embeddings)。目前,我们只是将聚类操作叠加在一个对量化“未知”的自编码器之上——也就是说,模型在训练时并没有意识到潜在向量会被量化。我们希望自编码器在训练过程中适应量化操作,从而生成更易重构的量化表示。目前的做法是:

x = get_batch()
z = encoder(x)
x_reconstructed = decoder(z)
loss = reconstruction_loss(x, x_reconstructed)

与其将未量化的潜在向量直接输入解码器,我们先将其映射到最近的簇中心

x = get_batch()
z = encoder(x)

z_quantized = to_nearest_cluster(z)     # 👈
x_reconstructed = decoder(z_quantized)  # 👈

loss = reconstruction_loss(x, x_reconstructed)

这里有一个问题:如果直接这样做,自编码器就无法继续训练了。原因是量化操作不可微,也就是说,损失函数的梯度无法传回编码器的权重。本质上,模型无法回答这个问题:“如果我想让损失减少一点,应该沿哪个方向调整编码器的权重?”

解决方法很巧妙:假装这个问题不存在。具体来说,我们将量化后的潜在向量 zquantized 看作是原向量 z 加上一个任意向量,但不影响梯度。这样, zquantized 的梯度就等同于 z 的梯度。这就是所谓的 straight-through gradient estimator(直通梯度估计器) 的原理。

x = get_batch()
z = encoder(x)

residual = z - to_nearest_cluster(z)
# .detach() means "forget that this needs a gradient"
z_quantized = z - residual.detach()
x_reconstructed = decoder(z_quantized)

loss = reconstruction_loss(x, x_reconstructed)

在前向传播(forward pass)中, zquantized ​ 的取值与之前相同,但关键是:z 的梯度现在被设置为等同于 zquantized ​ ​ 的梯度,而不是因为不可微的 to_nearest_cluster(z) 操作而为 0。

这种“假装”做法是有代价的:在训练时,编码器的权重会根据重构损失进行更新,但更新的方向是假设量化不存在的方向,因此不一定是最优的梯度方向。但只要潜在向量大致保持在各自簇中心附近,这个梯度方向仍然是“基本正确”的。

为了让编码器生成更容易量化的潜在向量,我们可以引入承诺损失(commitment loss)对每个潜在向量根据其距离簇中心的远近施加惩罚。这一损失的梯度会将潜在向量推向对应的簇中心,从而提高量化友好性。

通过在训练时进行量化并加入承诺损失,模型不再只是单纯在嵌入上做聚类,而是自编码器本身被训练成对量化友好,从而在后续生成和压缩中表现更好。

An autoencoder trained explicitly to be easy to quantize

你会注意到,训练动态发生了变化:加入承诺损失(commitment loss)为潜在向量增加了一定的“约束力(stiffness)”,使它们不再像之前那样自由移动。

下面是使用量化潜在向量进行重构的效果:

注意前两张图被重构成了完全相同的图像。这只是因为它们的潜在向量被分配到同一个簇,因此量化后取到了相同的值。

这里描述的模型被称为 VQ-VAE(向量量化变分自编码器)。其中的“变分(variational)”一词在这里已经没有实际意义,只是历史遗留的命名。

Residual vector quantization

为了提高重构的保真度,我们可以简单地增加簇中心的数量。但如果簇中心过多,计算和内存开销会变得非常昂贵。因此,我们采用一个巧妙的做法:如果希望潜在向量有 2^20(约 100 万)种可能值,我们不会直接创建 2^20 个簇。相反,我们使用两个独立的量化器(quantizer),每个量化器有 2^10=1024 个簇,然后将它们的结果组合起来。这样,每个潜在向量就量化为两个整数的元组(每个在 0–1023 之间),总共有 2^20 种可能组合。

那么具体怎么做呢?回想一下我们在直通梯度估计器(straight-through estimator)中使用的残差变量:residual=z−to_nearest_cluster(z)

它表示在量化到最近簇中心时,原向量 z 中未被捕捉到的部分。

对于批次中的每个潜在向量,我们都有对应的残差向量。解决方案很自然:用与原始潜在向量相同的方法对残差向量进行量化,通过训练另一个向量量化器实现。

这一次,由于我们需要组合两个量化器,单个量化器的二维簇位置并不再对应图像,因此我们将其可视化为点的分布即可:

这是二级量化(two-level quantization)的思路:在第一级量化器量化后的残差(residuals,也就是第一级量化器的误差)上,再训练一个量化器进行进一步量化,从而更精细地表示潜在向量。

这样,每张图像就可以用潜在向量所在簇的索引残差簇的索引来表示。接下来,我们用这个二级量化器尝试重构几张图像:

原始图像(顶部)、一级量化重构(中部)、二级量化重构(底部)。这些图像在二级量化下分别被编码为索引对:(4, 3)、(4, 5)、(16, 21) 和 (30, 3)。

前两张图像的重构仍然相似,但不再完全相同:第一张图被编码为 (4, 3),第二张图为 (4, 5)。换句话说,它们在第一级量化器上使用相同的 token,但在残差的量化上有所不同。由于差异较为微小,下面是一级量化与二级量化重构效果的对比

我想强调的是,第二级量化作用在潜在向量(embedding)上,而不是直接修改输出像素。这一点可以从最左和最右的图像看出,它们分别编码为 (4, 3) 和 (30, 3)。也就是说,它们使用了相同的残差编码 3,但对两张重构图像的影响却不同。

显然,重构效果仍然不够精确。潜在向量未量化时的重构质量才是上限,因此如果自编码器本身性能不好(我们的就是如此),改进量化方法也无法带来显著提升。

到这里我们先暂停,但这个思路的自然延伸是超过两级量化:对二级重构的残差继续量化,依次我们在这里就先停下。不过,这个思路的一个自然扩展是引入多于两级的量化。只需要对 two-level reconstruction 的 residual 再次进行量化,如此反复即可。这个广义的 Residual Vector Quantization 算法形式如下:

def rvq_quantize(z):
    residual = z
    codes = []

    for level in range(levels):
        quantized, cluster_i = to_nearest_cluster(level, residual)
        residual -= quantized
        codes.append(cluster_i)

    return codes

残差向量量化(Residual Vector Quantization, RVQ)最早在 SoundStream 中应用于神经音频编解码器,但这一思想其实早在 1980 年代就已出现。

Now let’s tokenize audio

将 RVQ 应用于音频是相当直接的。作为我们的自编码器(autoencoder),我们将使用一个类似于 Jukebox 所使用的卷积神经网络(CNN)。这里的架构细节并不太重要。重要的是,这是一个能接收 t 个采样点的音频,并将其转换为形状为 (t/128, 32) 的向量的网络。换句话说,它以 128 倍的系数进行降采样(downsamples),并为我们提供 32 维的浮点数表示。然后,解码器(decoder)接收这个 (t/128, 32) 的嵌入(embeddings),并将它们解码回 t 个采样点。

audio = get_batch()               # shape: [B, T]
z = encoder(audio)                # shape: [B, T/128, 32]
audio_reconstructed = decoder(z)  # shape: [B, T]

和之前一样,我们将在编码器之后添加一个 RVQ。与处理图像的唯一区别是,对于每个音频样本,我们有 t/128 个嵌入向量,而不仅仅是像图像那样只有一个。我们只需独立地对这些向量进行量化(即使编码器“看到”的音频范围比单个向量所对应的范围要广)。在训练期间,我们还有一个批次维度(batch dimension),所以我们的模型现在看起来是这样的:

audio = get_batch()                         # [B, T]
z = encoder(audio)                          # [B, T/128, 32]

# Combine the batch and time dimensions
z = rearrange(                              # [B*T/128, 32]
    z, "b t_emb d -> (b t_emb) d"
)

codes = rvq_quantize(z)           # integers, [B*T/128, levels]
z_quantized = codes_to_embeddings(codes)    # [B*T/128, 32]
z_quantized = rearrange(                    # [B, T/128, 32]
    z_quantized, "(b t_emb) d -> b t_emb d"
)

audio_reconstructed = decoder(z_quantized)  # [B, T]

在我们训练第一个神经音频编解码器(neural audio codec)之前,最后缺少的一块是损失函数(loss function)。关于选择哪一个损失函数,我们可以深入探讨一整套复杂理论,但我们将避开它,只使用一个非常简单的。我们会计算原始音频和重建音频的对数振幅谱图(log amplitude spectrogram),然后取它们的差值。这个差值的均方值就是损失。

为了让模型更难对这个损失函数过拟合,我们使用三种不同的短时傅里叶变换(short-time Fourier transform)参数来计算谱图,并将我们的损失设为这三个子损失的平均值。这被称为多尺度频谱损失(multi-scale spectral loss)

最后,让我们来训练一些编解码器(codecs)吧!我们将观察改变 RVQ 的层级(levels)数量如何影响重建质量。正如我们所预期的,增加层级数量有助于降低频谱损失(spectral loss):

让我们听听这些编解码器听起来怎么样。我们将使用这三个编解码器来重建来自 Expresso 数据集的这段音频:

原始音频

重建结果:

4 RVQ levels 
8 RVQ levels
12RVQ levels

显然,随着增加更多的残差向量量化(RVQ)级数,音频质量逐渐提升。

即便使用 16 级量化,仍然会出现一些噼啪杂音,音频听起来有些闷,并伴随持续的高频噪声。后续我们会讨论进一步改进编解码器的方法,但出于演示目的,目前的效果已经足够。

为什么要关心音频

所以现在我们有了一个 神经音频编解码器:我们可以把音频转换成适合 LLM 的 token,然后再还原回音频。这里的 “Codec” 本质上就是音频的 分词器(tokenizer),但我们用 “codec” 这个词,是因为它在经典压缩格式(比如 MP3)里已经被使用。我会把 codec 和 tokenizer 交替使用。

回到我们最初想做的事情:建模音频。具体来说,我们要做一个模型,它可以接受一段音频前缀,然后生成一个合理的续段。

提醒一下,我们的目标是训练优秀的音频 LLM,使模型能够 原生理解并生成语音,理解情绪、重音等特征。它们还可以进一步微调成 文本转语音、语音转文本、翻译模型 等。

既然你已经相信音频 LLM 是通向 AGI 的路径,那我们就开始训练几个模型吧。

在数据集方面,我们将使用 Libri-Light,就像之前训练逐样本模型时用的那样。这一次我们会使用 10000 小时音频,而不是之前的 1000 小时。这个数据集是 公共领域有声书,所以如果我们训练出了一个不错的模型,也许能生成更多故事(不过不要抱太大希望)。我们唯一需要做的,就是把音频数据集转换成 离散 token 序列,以便输入到 LLM 中。

处理多个层级(levels)

我们将使用我们的 8 层 RVQ codec 来实现这一点。对于一个有 t 个采样点的音频,我们将得到一个形状为 (t/128, 8) 的 token 数组。但现在有一个问题:如何处理在每个时间步(time step)不是一个而是 8 个 token 的情况?在文本 LLM 中我们无需处理这个问题,因为我们只有一个 token 序列。

我们将采取最简单的方法,直接将该数组展平(flatten)成一个形状为 (t/128 * 8) 的一维数组,并让我们的 LLM 在不同的时间步中预测这八个层级。

lattening a three-level RVQ to allow it to be fed into a language mode

这样做的一大缺点是我们损失了一部分时间压缩(temporal compression)能力。我们将音频降采样了 128 倍,但现在通过展平层级,又将其“膨胀”了 8 倍。这使得推理(inference)效率降低,并且可能导致质量下降,因为有效上下文大小(context size)减小了。我们将使用 8 层的 RVQ codec 而不是 16 层的,以避免让压缩情况变得更糟。

你也可以一次性预测单个时间步的所有 RVQ 层级(“并行模式”,parallel pattern),但这也会让模型更难处理,因为它必须一次性决定所有层级。人们还尝试了许多其他方案来平衡压缩与质量。以下是 MusicGen 中尝试过的几种方案:

有趣的是,截至 2025 年,还没有一个“胜出”的统一解决方案:每篇论文的做法都不同,而且这些方案可能变得相当复杂。看看这个来自 MiMo-Audio 的图表就知道了,这是一个在 2025 年 9 月发布的模型:

处理 多个 RVQ 级别 的方法可能会相当复杂。

Finally, let’s train

终于到了训练一个封装了 codec 的语言模型的时候了!正如我所提到的,我们的代码基于 Andrej Karpathy 用于训练文本 LLM 的 nanoGPT 代码库。我们只需要修改它以接受音频作为输入。但这很简单,因为 LLM 并不关心你输入的是哪种 token——对它来说都只是数字而已。一旦我们将数据集标记化(tokenized)并将其展平(flattened)为一维序列,我们就可以开始了。以这种方式标记化后,我们 10000 小时的音频占用了 134 GB 的空间。相比之下,将这么多数据存储为未压缩的音频将需要超过 1 TB。

我们将使用与逐样本(sample-by-sample)模型完全相同的模型架构和超参数(hyperparameters):唯一的区别在于标记化(tokenization)方式。我们的数据集也大了 10 倍,但逐样本模型甚至连 1000 小时的数据集都无法容纳,所以更多的数据也救不了它。

我用 8 个 H100 显卡训练了这个模型大约 5 天。为了得到一些样本,我决定用 Michael Field 的诗《七月》中的两行 Libri-Light 朗读样本来提示(prompt)模型。(在做这个项目时我了解到,Michael Field 是 Katherine Harris 和 Edith Emma Cooper 的笔名。)让我们看看能从我们的模型中得到什么样的诗歌:

可以看到一些“生命的迹象”,但我们还没有一个真正的“诗人”。听起来就像有人在 帘幕后面说话:你无法完全听清它在说什么,但 语调是存在的——听起来像有人在朗读书本,而这正是模型训练时的内容。

它还能保持 连贯的声音,直到最后几秒才切换到另一个声音。这也与训练数据一致:我们从所有有声书中 剪切片段并混合在一起 来采样训练数据,所以模型确实会遇到 不同说话人之间的界限

一个 codec 能带我们走多远?

我们的 codec 是有意设计得非常简单的,这也解释了为什么结果不尽如人意——但在过去四年里,关于神经音频编解码器的研究已经相当丰富,我们可以加以利用。我们不会在这里实现所有的改进,而是看看当我们使用 Mimi 作为分词器(tokenizer)时会发生什么。

Mimi 是 Kyutai 为我们的音频语言模型 Moshi 构建的一款现代神经音频编解码器。此后,它也被用作其他模型的分词器,如 Sesame CSM、VoXtream 和 LFM2-Audio。

不出所料,Mimi 听起来比我们之前训练的自制 codec 好得多。

Mimi 没有使用多尺度频谱损失(multi-scale spectral loss),而是使用了像 GAN 一样的对抗性损失(adversarial loss)。有一个判别器网络(discriminator network)试图将音频分类为原始的或由 codec 重建的,而 codec 的目标就是骗过这个判别器。

Mimi 增加的另一个改进是使用 RVQ dropout:它使用 32 个 RVQ 层级,但在训练期间,重建有时会随机截断到较少的层级数。这使得我们可以在推理时以较少的 RVQ 层级运行 Mimi,并且仍然获得不错的结果,因为它不依赖于所有层级的存在。而对于我们的自制 codec,我们必须分开训练。

让我们听听用 Mimi 重建的示例音频:

Original:

重建:

4 RVQ levels
16 RVQ levels
32 RVQ levels

就我们的目的而言,层级较少的变体可能更容易建模,因为它压缩程度更高。让我们用 8 层和 32 层的 Mimi 来训练模型,并比较结果。

我训练了和之前完全相同的模型架构,唯一改变的是分词器。数据集仍然是来自 Libri-Light 的 10000 小时音频,就像我们使用简单 codec 时一样。Mimi 的采样率是 24 kHz,但 Libri-Light 使用的是 16 kHz,这限制了声音的最高品质,因为我们丢失了音频的更高频率部分。

Mimi 对音频的降采样(downsample)也更激进:它的帧率是每秒 12.5 帧,而我们的 codec 是每秒 125 帧——高了 10 倍!这意味着数据集在磁盘上的体积也更小。用我们的 codec,它占了 134 GB,但用 Mimi,“仅仅”是 54 GB。

这是一首用在 Mimi 标记化数据上训练的模型生成的诗。我和之前一样,用诗中的两行来提示它:

这是我尽力尝试的转录:

When the grass is gone
And corn still grassy;

Illness worried in the fur
this and pelan in stones
during the turan’s ciscerey
headforths nepet Paul Twain.
He sees zin in them.

对我来说有点太超现实主义了,但也许刘易斯·卡罗尔会喜欢。

语义 token (Semantic tokens)

我得坦白一件事:我刚才对你撒谎了。但只是一点点,而且是为了教学目的。实际上,上面的模型是在一个 31 层的 Mimi 音频上训练的,我省略了第一层,也就是包含 “semantic token” 的那一层。

这个 token 的作用是表示音频的语义信息,而不一定有助于重建。我不会深入探讨它们的工作原理,但简单来说,Mimi 的 semantic tokens 是从 WavLM 中提炼出来的,你可以把它看作是语音领域的 BERT。

为了感受 semantic tokens 编码了什么信息,让我们以这个示例音频为例,将其通过 Mimi 处理:

现在,让我们训练一个基于完整 Mimi(包括 semantic tokens)的语言模型。我们将以一种特殊的方式运行模型:保留原始音频的 semantic tokens,但丢弃其他所有 token,然后让模型来预测它们。这意味着来自 semantic tokens 的信息是固定的(“teacher-forced”),但模型可以根据它认为合理的延续自由决定其他 token。

通过固定 semantic tokens 并让模型重新生成其余部分,我们可以了解 semantic tokens 中包含了哪些信息。

听听我们用这种方式得到的两个不同的重建版本:

声音完全不同,但说的内容是一样的!这意味着 semantic tokens 编码了说话者在说什么,但与嗓音无关。这很有用,因为它帮助模型专注于 说什么,而不是 怎么说。在这方面,它们更接近于文本 token,因为文本 token 也不包含关于嗓音、语调、时间或情感的信息。

让诗歌更具语义

现在,让我们用在包含语义的 Mimi 上训练的模型来完成这首诗:

When grass is gone
and corn still grassy;

from the man was nothing moan.
The low death and heart
She came fyde wood.
A finteriest, a fall,
all them
.

它仍然会编造词汇,句子也不太连贯,但很明显,真实单词的比例高了很多;模型变得“更具语义”了。声音质量和之前一样,这也符合我们的预期。

让我们听第二首诗:

When grass is gone
and corn still grassy;

hope won and she
who is just a night in Tatan
in doe ock-ohm?
the whom?

确实,the whom?

语义与声学的权衡 (Semantic–acoustic tradeoff)

我们可以 牺牲一些声学质量 来提升语义效果,通过 减少 RVQ 级别的数量。我们选择 8 级。这样一来,我们获得了 更高的音频压缩率,同时损失中 语义 token 占比也相应提高,因为现在是 1/8 的 token,而不是之前的 1/32。

我对这个模型的第一印象之一是,它学会了 记忆 Librivox 的版权声明,所以有时它会生成类似这样的内容:

Chapter 6 of The Founday, by R. Auclair.
This is a Librivox recording. All Librivox recordings are in the public domain. For information, or to volunteer, please visit librivox.org.
Reading by: Kelvert

重复训练数据通常不是你想要的,但在我们的案例中,这是一个极好的生命迹象,因为之前的模型甚至连这个都做不到。它还编造了书名、作者和朗读者,所以这里仍然有创新性。

现在,让我们尝试创作更多的诗:

When grass is gone
and corn still grassy;

When so we could say
that in fairy interesting wife
who lay there and gone
that save the rosy light of life
Jay Dien, the antique mollity
and a mollity the beast of gray failed summon

end of poem.

This recording is in the public domain.

[different voice]
So we have formed a float that sent in would rattle down. The piece of opportunity reading and assimila—

这太棒了。有几个迹象表明这个模型比之前的更好。我喜欢它编造了“mollity”这个词,然后在下一行重复它。而且,它意识到自己正在背诵一首诗,并在该部分结尾加上了 “end of poem”。然后它认为这是章节/部分的结尾,并以“This recording is in the public domain.”的声明结束。之后,它换了个声音继续说话。这是合理的,因为在训练过程中,来自不同有声读物的片段只是被随机打乱并连接在一起,所以在这里模型模拟了一个片段边界。

如果我们给 semantic tokens 的损失赋予比声学 tokens 更高的权重,可能会得到更好的结果,让模型更关注意义而非声音——事实上,Moshi 使用了高达 100 倍的 semantic loss !但我们总得有个终点。

Conclusion

我们成功地使用神经音频编解码器制作了一个能生成某种程度上连贯语音的音频语言模型。显然,这还不是 2025 年的顶尖水平(我们在这里也并非追求于此),但请记住,使用完全相同的模型,若不采用神经音频编解码器,我们得到的是类似于开头的音频。

当然,要赶上文本模型还有很长的路要走!目前,语音理解和推理能力之间似乎存在一种权衡。在文章开头我提到,那些原生支持语音的模型(Gemini、ChatGPT 的高级语音模式、Qwen、Moshi)都无法判断你是在用高音还是低音说话,尽管它们被训练来原生理解音频。这可能是因为它们在大量使用文本到语音技术合成的数据上进行训练,或因为理解声音的音调(显然)并不能帮助模型做出更准确的预测。

Kyutai 曾尝试用 Moshi(demo,论文)创建一个基于音频语言模型的语音聊天应用,并于 2024 年 7 月发布。Moshi 可能不是你会选择帮你做作业的 AI,但请对它宽容一些:它是第一个端到端的语音 AI,甚至比 OpenAI 的高级语音模式发布得还要早。

Moshi 为自己和用户并行地模拟了一个“内心独白”的文本流和音频流。文本流帮助它规划要说什么,而消融研究(ablations)表明,文本流对模型的帮助巨大。同时,这也有点可悲:大部分的推理似乎都被委托给了文本流,而音频流只是用来提供集成的语音到文本和文本到语音功能。

Moshi models two audio streams and a text stream in parallel

这不仅仅是 Moshi 的问题:正如“我是在用高音说话吗”的实验所示,这种对文本而非音频的过度依赖是所有音频 LLM 的一个问题。尽管主流的建模方法与 Moshi 有所不同:它们是交错处理文本和音频 token,而不是在并行流中建模。

在 Moshi 发布一年多后,音频模型仍然落后于文本 LLM。但为什么呢?对我来说,这个神秘且未解的“模态鸿沟”(modality gap)使得音频机器学习成为一个令人兴奋的研究领域。