在大语言模型(LLM)迅猛发展的时代,语音技术正迎来新一轮变革。本文整理自阶跃星辰语音模型负责人杨学锐在 2025 年 QCon 全球软件开发大会(上海站) 的分享“端到端语音模型:从语音表征到模型架构”。
以下是演讲实录(经 InfoQ 进行不改变原意的编辑整理)。
我想从语音的角度,谈谈大模型给这一领域带来的范式变化。我所在的公司阶跃星辰专注基础模型,因此我会更多从基模的视角来分享。内容大致分三块:第一,看看大模型技术如何重塑语音能力;第二,我们怎样搭建一个真正的端到端语音模型;第三,什么样的端到端语音模型才算“好”。
先进入第一部分,看看大模型技术对语音能力的具体影响。上一代语音系统,其实也不算“上古”,就是深度学习时代,大家都不陌生:无论识别还是合成,都是级联或流水线结构,模块多、调优难。理解侧只能处理简单指令,无法做多轮、多模态的深度推理;生成侧(TTS)即便加了情感标签,韵律仍显模板化,离“人感”还有距离。
大模型对语音的渗透,最早可从 2022 年底的 Whisper 说起。它发布时间早于 ChatGPT,却已经把大模型范式搬进语音识别:把语种识别、语音活动检测(VAD)和转写任务统一在一个 encoder-decoder 框架里。Whisper 仍依赖 cross-attention,计算效率不高,流式改造也麻烦,但它已经能 scale:从 80 M 到 1.5 B 的多个版本,ASR 性能随参数增加稳步提升。这算是大模型与语音结合的第一次认真尝试。
再往前看,同一时期还有一套并非大模型路线的方案——阿里的 Paraformer。它效果也不错,但结构里严格来说有四个模块,比 Whisper 复杂不少。Paraformer 能不能继续放大、能不能 scale up,得打个问号;而能不能 scale,正是大模型时代最关键的观察点之一。
再往后,就到了更彻底的大模型范式:我们今年上半年发布的 StepASR。它完全用大模型思路做语音识别:语音先过一个 Audio Encoder,再送进大模型的 Decoder,以自回归方式逐 token 输出文本。这样既能把语种识别、语音转写、上下文理解、热词增强全包在一起,也能借助大模型本身的 context 能力,把整段对话或文档当作提示,提高准确率;还可以在 prompt 里塞热词,让专有名词一次到位。碰上特别冷门的术语,也能用类似 function call 的机制去外部查,再回填结果,这些在传统流水线里很难一口气做完。
从结果看,我们拿 Librispeech 这个经典英文测试集做对比:从传统语音时代到大模型时代,字错率一路往下走。Librispeech 本身声学环境相对干净,如果在更复杂的场景里,提升幅度还会更大。
说完识别,再看合成。TTS 也经历了从 CNN、RNN 到生成式模型,再到如今大模型的迭代。灰色部分代表基于大模型的方案,2023 年开始陆续出现,到现在已经和 diffusion 路线平分秋色。这张图只更新到今年 3 月,如果拉到 10 月,大模型范式的 TTS 已经明显占上风。
再具体看几个典型的 TTS 方案。最早把大模型用在自回归语音合成上的工作之一是 VALL-E。今天回头看,它的架构确实有些粗糙,甚至缺了不少细节,但它像一块敲门砖:用大语言模型建模,把语音转成 token 后自回归地预测音频 token,再经过一个音频 decoder 还原音色。现在的大模型 TTS 基本还是这个套路,只是做了点小改动,比如直接喂文本,不再先把文本转成音素序列。下图绿色框里那个“文本→音素”的步骤,在 VALL-E 里还存在,我们后来把它省掉了。VALL-E 算是奠基性的工作,后面业界又冒出很多有影响力的项目。
接着说说我们自己的 StepTTS。模型本身没开源,但会开放部分接口或能力。和 VALL-E、CosyVoice 相比,StepTTS 更端到端、也更“大模型”:它的输入跟文本大模型完全对齐,支持 Chat 格式的文本 - 音频混合输入。这样做的好处是天然支持多轮上下文。大家都在谈“理解与生成一体化”,TTS 怎么一体化?如果只给一句文本、吐一段音频,那只是个映射;真实对话里,背景知识、音色、韵律都藏在上下文里。传统 TTS 范式抓不到这些,而 Chat 格式的多轮输入让模型能利用大模型的理解能力,实现可控生成,甚至音频编辑。
再提几篇比较新的工作,就是所谓“Diffusion-AR”路线,比如字节的 DiTAR 和微软的 VibeVoice。它们在前段时间热度很高,思路是文本进去,直接输出连续声学表征,属于一种还在探索的前沿范式,后面讲到表征时还会再提。
前面分别讲了语音识别和合成这两个典型能力。实际使用时,它们常被塞进同一个系统,也就是语音对话系统。一两年前,这类系统普遍是三段式:语音先进 ASR 转成文本,再由语言模型生成文本回复,最后经 TTS 合成语音。大模型时代,我们能不能把这三段压成一段,实现“理解 - 生成一体化”?答案是肯定的。
说到端到端语音模型,绕不开 GPT-4o Audio。在它发布前,很多人对“语音进、语音出”的端到端对话持怀疑态度。GPT-4o 直接给出证明:纯音频输入,端到端模型输出语音,一气呵成。接下来我就说说怎么搭这样的模型,以及业界是怎么一步步走到今天的。
我想从四个角度说说怎么搭一个端到端语音模型:语音表征、训练与推理、模型架构,以及它到底能干什么。先谈表征。
传统语音系统里,大家习惯用人工设计的特征,最典型的是梅尔谱。它模仿人耳听觉,要经过模数转换、分帧、加窗、傅里叶变换等一堆信号处理步骤,才得到一张频谱图。可这些专家特征对模型来说是不是最优,一直是个问号。
于是很自然想到:如果人设计的不是最好,那就让模型自己学。大概三四年前,这类方法陆续出现。最简单的思路是先把音频送进一个语音编码器,变成连续隐向量,再交给大语言模型的 decoder。这里有几个代表性工作。
最早的是 2019 年的 Wav2Vec。它把原始波形过卷积提特征,再用对比学习训练。那时 Transformer 还没现在火,主干是 CNN。后来迭代到 Wav2Vec 2.0,才把主干换成 Transformer。
另一个影响很大的工作是 HuBERT。它先用 CNN 提特征,再用类似 BERT 的掩码语言模型训练:随机 mask 一些帧,让网络猜这些帧对应什么。HuBERT 其实对原始音频做了聚类,这和后面要说的语音离散化密切相关。
另外,Whisper 识别能力那么强,它的 encoder 表征肯定不差,于是很多人直接拿 Whisper encoder 当语音表征提取器。
上面说的都是大模型出现前的语音表征方法。那大模型怎么表征文本?文本天然是离散的,用 BPE 之类方法切成词表,每个词对应一个 ID,就能在模型里自回归训练。语音是连续波形,怎么变成离散 token?这就出现了语音离散化方案,大致分三类:语义 token、声学 token,以及把两者统一起来的统一 token。此外还有一些额外维度,比如音高、韵律、风格等表征。
我们先来看看最常见的 Semantic Token(语义 Token)方案。所谓语义 Token,指的是那些更高层、更抽象的信息,主要对应说话内容本身,也就是“说了什么”。前面提到的连续表征模型,比如 Wav2Vec、HuBERT,都可以通过离散化手段得到语义 Token。以 HuBERT 为例,它先用 k-means 把连续向量聚类到若干邻近空间,再把这些空间映射成离散的 Token ID。
比较有代表性的工作是 BEST-RQ。它的做法与 HuBERT 类似:先对频谱做掩码,再用 encoder 预测被掩掉的帧。不同之处在于,BEST-RQ 的码本是随机初始化的,听起来有些反直觉,但实际效果却很好,因此字节跳动等公司在训练语音表征时常常采用这一方案。另一个例子是 CosyVoice 的 TTS 系统:既然 ASR 模型的 encoder 对语音的抽象能力已经很强,那就直接对它的输出再做一次离散化,得到的 Token 自然就是高层的语义 Token。
接下来是声学 Token。声学 Token 粒度更细,除了“说了什么”,还包含“怎么说”,节奏、停顿、韵律、情绪等。早期声学建模并非神经网络,而是用于音频传输的编解码器,比如 Opus、LPCNet。这些方案追求低码率与可恢复性,但压缩率高时音质损失大,压缩率低又不够精简。神经网络兴起后,CNN 等方法能更好地建模底层信息。Encodec 是其中的代表:它用 encoder-decoder 结构,中间插入量化器,并采用多级残差量化。一次量化(如 float32→int8)会丢失大量信息,Encodec 通过多层残差逐步保留细节,从而获得更好的还原效果。
最后,一个很自然的想法是把语义 Token 与声学 Token 融合。人与人交流时,两种信息缺一不可:听不懂内容不行,忽略说话方式也会带来误解。因此,目前主流方案是所谓的 unified token,即同时兼顾语义与声学还原度。大体上有三种做法,第一种是语义蒸馏。以 SemanticCodec 为例,先训练一个语义 Codec,再通过蒸馏把知识迁移到声学 Codec,使最终 Token 同时携带语义与声学信息。不过这种方法在 TTS 任务里常会出现说话人相似度下降的问题。
第二种做法是开两条通道,一条跑语义,一条跑声学,量化时再把两条通道的信息合并,这样既能保留语义,又能保留声学细节。一个典型例子是 EXACT,不少 TTS 或其他语音任务都基于这种表征来做。
说完连续和离散两种表征,我们简单回顾一下它们各自的优缺点。先说输入侧——也就是语音理解。右边那张表里列了实验结果,一眼就能看出:连续表征在理解任务上普遍优于离散表征。道理很直观,离散化必然丢掉信息,而 ASR、声音事件检测、情绪识别等都需要丰富的声学细节,因此直到今天,输入侧用连续表征仍是更稳妥的选择。
再看输出侧,情况略有不同。目前主流观点认为,离散表征在生成任务里更稳定。以 TTS 为例,它本质上是“一对多”的生成:同一句文本可以对应多种自然发音。如果输出是连续向量,取值范围太大,训练容易发散。所以大多数 TTS 仍采用离散 Token,后面再挂一个 diffusion 模型来补回声学细节。连续表征的问题除了不稳定,还有过度平滑,导致风格、情绪等维度不容易拉开差距。
既然我们已经能把语音表征出来,下一步就是把它们塞进大语言模型,搭一个真正的端到端架构。这里仍然要区分理解侧和生成侧。
理解侧相对直接:可以喂连续向量,也可以喂离散 Token;离散 Token 可以用单码本,也可以像 EnCodec 那样用多级残差码本,把更多声学细节保下来。
生成侧就复杂得多。如果让大模型只输出语音 Token、不碰文本,训练容易发散,语义也容易出现长程断裂。因此多数做法都会让模型先给出文本或更高层级的引导信息。最朴素的想法是先完整生成文本,再用文本去指导音频生成——类似 CoT,但延迟高,且文本一长就可能和音频对不齐。于是业界主要走两条路:Multi-head 和 Interleaved。
Interleaved 是在 Token 层面做交错:每生成一个文字 Token,就立刻跟上一段对应的音频 Token,再下一个字、再一段音,像拉链一样咬合。Multi-head 则是给大模型加多个输出头,每个头负责不同粒度的信息。Delay pattern 也可以看成 Multi-head 的一种变体,这里不再展开。
还有一个关键问题:我们最终听到的是声音,不是 Token。因此模型输出的 Token 必须再转成波形。常见做法有两种:
后接 diffusion 模块,先把 Token 变成梅尔谱或其他时频特征,再用 Vocoder 转成波形; 直接用纯卷积网络一步到位。选哪种取决于建模粒度。如果只有语义 Token,声学细节不足,就需要 diffusion 来补;如果 Token 本身已含足够声学信息,也可以省掉 diffusion。
下面看几个有代表性的端到端语音模型。Moshi 是法国一家公司做的方案,GPT-4o 之后最早发布的可体验模型。当时 GPT-4o 没开源,Moshi 成了唯一可调试的标杆。以今天的眼光来看,它可能存在的问题是结构太“拼盘”:底层是一个自回归大模型,上面又叠了独立的 Temporal Transformer,再迭代生成语义和声学 Token,最后解码。这种异构设计导致很难 scale,模型也偏小,想再往上提效果比较吃力。
最近千问语音也在持续开源,做得确实不错。他们的方案是一个两级架构,设计得挺巧妙,叫 Thinker-Talker。Thinker 负责理解:接收语音输入,产出文本或文本的 hidden state;再把 hidden state 丢给 Talker 去生成音频。虽然不够端到端,却更可控,把理解与生成做了隔离,中间又共享了 condition。他们还用了 DeepSeek-R1 里的 MTP 模块来辅助多码本生成,音质因此更好。
回到我们自己的做法。我一直强调阶跃的模型更端到端,这也是我们坚持的方向:只用一个大语言模型完成“语音进、语音出”。具体设计如下。前面说过,理解侧连续表征效果更好,我们就用连续向量;生成侧离散 Token 更稳定,我们就用离散 Token。这样虽然有一点点异构,但各自发挥了优势。理解侧的 token 率设得低一些,因为信息更抽象、贴近文本,我们定在 12.5 Hz,输入 token 总量更少。输出侧为了保留风格、韵律和合成质量,token 率更高。怎么跟文本融合?前面提过,纯语音 Token 长程建模容易出问题,需要文本引导,我们就用刚才说的交错范式,让音频和文本 token 交替出现,既对齐又稳定,音质也能保住。
训练这块我们做的是基础模型,数据量很大,token 数超过 1 T,分多个阶段训练。预训练阶段会把语义对齐、续写、ASR、TTS 等各种任务都跑一遍。第四阶段用了一种比较新的范式叫 Midtrain,用少量高质量领域数据把模型能力往特定方向迁移,效果挺明显。为了不让语音任务冲掉模型原有的“智商”,我们按语音数据量 1:1 配了纯文本数据。
后训练分 SFT 和 RL 两块。SFT 用真人对话 pattern 把理解、识别、生成任务都包进来。我们搭了一套播客级对话数据管线,能批量产出真人级别的对话语料。
RL 这块我们算是比较早把完整 RL 流程放进端到端语音模型的。先冷启动,借鉴了 DeepSeek-R1 的思路,再做 RLHF 和 RLVR。RLHF 调偏好,RLVR 用预定义 reward 函数继续提智商。RLHF 用 PPO,RLVR 用 GRPO。最终模型情绪、副语言、音频理解都不错,智商也高,语音和文本能力合在一起。举个例子,在心理咨询或情感安抚场景里,它能做比较深的情感推理。
推理时我们主要做两件事。一是交错 Token 处理:文本 Token 只起引导作用,最后合成音频时会被丢掉,只用语音 Token 进 Audio decoder。二是多轮上下文:传统大模型只把文本当上下文,我们把音频也塞进去,信息更完整。
第四块看看端到端语音模型到底能干哪些活。其实跟传统语音技术差不多,核心还是理解与生成两大类。
先说理解。语音识别当然是必测项。我们把 Step-Audio2 跟豆包、GPT-4o、千问等模型做了全面对比,中英文、多语种、方言场景,整体都是最好的。
音频与副语言理解这块比较有趣,很多语音模型不太提,因为确实不好做,但我们专门加强了。举个例子:一个女生带着哭腔说“我很痛苦了……”,背景还有音乐。传统做法得先上 VAD,再跑性别识别、年龄识别、语音识别、情感识别、音乐理解……一堆模块拼完才能出结果。现在用我们的大模型方案,直接一句自然语言描述就能把所有信息一次性拉出来。
再看生成。最直观的就是以前 TTS 的前端模块:文本先转拼音,专有名词得替换成模型能念的字,多音字还得加提示。现在靠模型自己的推理能力就能搞定。实际推理时,模型会先“想”:用户给的拼音是什么、上下文怎么理解、表达时要注意什么,想完再输出音频,省掉所有前置转换模块。
可控生成也很重要。纯文本输入时,我们往往想加点停顿、笑声、叹气之类。只要把 SSML 标签直接写进文本,模型就能按标签念出自然的副语言表现。
最后是音频编辑。大家对图像编辑比较熟,音频编辑做得少,我们算是国内较早落地的。输入一段音频,可以改情绪、改风格、增删改台词,还能降噪。比如原音频文本是撒娇语气,但听起来不够娇,让模型编辑成撒娇风格,风格就转换过去了。
接下来讲工具调用,也就是最近很热的 voice agent 概念。核心是怎么规划、怎么推理任务,并在执行过程中调用更多工具。Step-Audio2 应该是第一个把语音 tool call 融进端到端语音模型的。我们自己测过,在很多场景下跟文本模型比没有明显劣化,有些场景甚至更好。语音 tool call 和文本的最大区别,是它能支持“音频级”工具调用。比如 Audio Search:用户说“我想要某某音色”,模型通过 tool call 把对应的波形 prompt 插进上下文,后续对话就会换成这个音色。因为是大模型范式,回复风格也会跟着变,相当于用一句话完成角色扮演。
语音经常用在实时场景,全双工因此很关键。全双工指的是:我可以打断你,你也可以打断我;我说到一半停顿时,你知道我在思考,不会抢话。这跟文本的回合制不同,真实交互要复杂得多。具体技术范式有好几种,这里不展开。
我想重点说的是我们正在做的“全双工推理”。大模型在全双工场景下需要实时问答,可一旦做推理,思考时间就变长,延迟上去。我们目前走两条路:一是“边听边想”,对方说话时我就开始思考,这叫 conversational thinking,跟人面对面交流一样;二是“边说边想”,我开口的同时继续推理,叫 Mind-Paced Speaking。用这两种方式,模型几乎零延迟就能输出带推理的结果。
最后简单说说“什么叫好模型”以及怎么评估。跟以前一样,得全方位测评:所有单点能力都要测。对话能力则比文本模型多不少维度——全双工、情感与共情、生成音频的韵律、自然度、风格一致性等,文本模型都不用管。多轮对话里,还要保证情感、说话风格、韵律前后一致,这对语音模型特别重要。我们做了个叫 Multi-Bench 的评测,已投 ICASSP,尚未在 arXiv 公开。它填补了之前 benchmark 在多轮一致性上的空白,算是评估方面的新东西。
杨学锐,历任阶跃星辰语音模型负责人,大疆创新音频负责人,云从科技语音算法负责人。在相关领域深耕多年,发表论文、专利、书籍若干。
QCon 全球软件开发大会·2026 北京站 将于 4 月 16 日 -18 日正式举办。本届大会以 “Agentic AI 时代的软件工程重塑” 为主题,聚焦 100+ 重磅议题,汇聚来自阿里、腾讯、字节跳动、小米、百度等一线科技企业与创新团队的技术专家,围绕 AI 工程化、系统架构与研发模式演进展开深入探讨。更多详情可扫码或联系票务经理 18514549229 进行咨询。