你有没有想过,给AI配音下指令和给真人演员说戏,到底差在哪?
真人演员听到"再悲伤一点,但别哭出来",他能立刻调整。你让他重来一遍,他记得上一条的毛病在哪儿,不会重复犯。可现在市面上大多数AI配音系统呢?你给它一条指令,它生成一条语音,结束。你想让它改,只能把整个要求重新写一遍,它压根不知道上一次说得哪里不对,因为它根本不记得"上一次"。
这就是Fish Audio团队在做Drama 3之前面对的真实困境。他们的上一代模型S2已经能做到"看文字读指令"了,但这远远不够。本文要讲的,就是他们怎么把一个"读文字的机器",改造成一个能听懂导演反馈、能演多角色对话、能精细修改台词的"配音演员"。
问题到底卡在哪儿
先说清楚S2卡在哪四个地方,这决定了Drama 3要解决什么。
第一是记忆跨度的问题。配音这件事往往牵涉很长的上下文,比如几个角色的声音样本、之前几轮对话的录音,这些加起来动辄几千个音频token。S2用的是全注意力架构,简单说就是每生成一帧新的声音,都要把前面所有内容重新"看"一遍。这就像让一个记账员每记一笔账,都要把账本从头翻一遍核对,账本越厚,翻的时间越长。更麻烦的是,S2内部还有个叫"快速自回归模块"的东西,专门负责生成声音的精细纹理,但它只能通过主干网络传来的"一句话总结"去了解参考音频,细节基本丢光了。
第二是指令只能用一次。你给个指令,模型生成一条,完事。你说"不满意,重做",模型压根不知道"重做"是什么意思,因为它没有"上一次"的概念。
第三是修改必须推倒重来。假如一段很长的配音里只有一个词说错了,你没法只修那一个词,只能把整段重新生成,结果是整段的语气、节奏全变了,等于白做。
第四,也是最反直觉的一点:**用来优化AI配音质量的评分方法,恰恰会惩罚那些真正有表现力的配音**。
这一点值得多说两句。业内常用的强化学习奖励机制通常靠两个指标:语音识别的转写准确率(字对不对)和说话人相似度(声音像不像参考样本)。听起来挺合理对吧?但问题来了,如果角色需要笑出声、长时间停顿、或者压低声音耳语,这些恰恰是语音识别最容易听错的地方,也是和"中性参考音"差异最大的地方。换句话说,你越努力让AI演得有感情,它在这套打分体系里扣分越多。这不是AI能力不够,是评分标准本身在和表演的本质打架。
这四个问题,Fish Audio团队决定一次性解决,而不是打补丁。
换掉大脑:混合线性注意力加专家网络
Drama 3的主干网络不再用S2那种全注意力架构,改成了一种"混合"设计:每四层里有三层是Gated DeltaNet(门控线性注意力的一种),只有一层是全注意力。
> **Gated DeltaNet**:一种线性注意力机制,用固定大小的"状态"记录历史信息,而不是把所有历史内容都存下来反复查阅。
>
> **全注意力层**:传统transformer里那种"每个位置都能直接看到所有其他位置"的层,擅长精确检索远处的信息。
这个设计的逻辑是什么?线性注意力层用一个大小不变的"状态"概括历史,计算量不随上下文长度暴涨,适合处理长对话、长录音;但它记得的是"概括",容易丢细节。所以留一层全注意力,专门负责那种"我需要精确记住参考音频里某个具体音色"的任务。
这就像公司里配了两种员工。大多数日常事务交给一个效率型助理处理,他脑子里不会存下每一份文件的原文,只记要点摘要,办事快但细节容易模糊;碰到需要逐字核对合同条款的场合,就交给一个档案管理员,他会原封不动地把文件翻出来逐字比对。如果整个公司只用效率型助理,办事快是快,但一旦有人问起某个客户三个月前的具体承诺内容,没人答得上来。如果全部换成档案管理员,翻查速度就会被文件堆的厚度拖垮。Drama 3选择的是大部分任务交给"概括型"的线性注意力,少数需要精确记忆的交给"全量检索型"的全注意力,两头兼顾。
主干网络还加了一个**混合专家网络**(每个token只激活一小部分参数,其余"专家"休息)。Drama 3总共35B参数,但每个token只激活大约3B,相当于用十分之一的实际计算量,跑出接近全量模型的效果。
换掉嘴巴:codebook多token预测解码器
光换脑子还不够,嘴巴(负责把语义转成具体声音细节的部分)也得换。
先说清楚这里的"声音细节"是怎么编码的。Drama 3沿用了S2的音频分词器,把44.1kHz的音频拆成每秒约21.5帧,每一帧用10个"codebook"(可以理解成10层不同精细度的编码)表示,第一层是语义信息(说的是什么字),后面9层是逐级递进的音色细节(怎么说的)。
> **Codebook**:把连续音频离散化成一组编号,类似把一段连续颜色压缩成有限色号,第一层决定大致色调(语义),后面几层逐步补充渐变细节(音色、情绪的微妙差异)。
S2的做法是用一个叫"快速自回归"的四层小transformer,对一帧音频的10个codebook循环跑十次,每次都要重新读一遍这四层的权重。这就好比一个翻译员每翻译一个词,都要把整本词典翻一遍再落笔,十个词就翻十遍词典。Drama 3换成了"codebook多token预测解码器"(简称codebook-MTP),一共13层,四层共享加九层各管一个codebook,每一层只跑一次,而且每一层都能直接回头看整条序列的历史,包括参考音频最细微的声音纹理。
这个改动带来的直接好处是读取的权重量大幅减少。论文给出的实际数字是,S2每生成一帧要读大约15.6GB的权重,相当于78亿参数的量,而S2真实参数量只有46亿左右(等于把同一份权重重复读了好几遍);Drama 3因为每层只跑一次,加上专家网络用了更紧凑的FP8低精度存储,每帧只需读约6.0GB权重,不到S2的五分之二,但Drama 3的总参数量是S2的七倍还多。
这就是为什么**Drama 3在单张H200显卡上能跑到每秒271帧的解码速度,而参数量只有它七分之一的S2只能跑177帧**。
参数更大、速度更快听起来矛盾,但这正是架构设计的价值所在:参数多不等于每次都要用满,关键是怎么把"用得上的部分"读取效率做上去。
一个模型学会五件事:靠的是"把任务都写成对话"
Drama 3新增的能力包括:根据下一轮反馈重做配音、多角色对话配音、局部编辑已有录音、流式输入文本并同步输出语音。这些能力听起来各自需要专门的模型来做,但Fish Audio团队用了一个巧妙的统一方案:**把每一种任务都写成一段对话,系统角色给设定,用户角色给文本和指令,助手角色给音频,损失函数只在"助手说的话"上计算**。
> **对话格式(ChatML式)**:一种把任务拆成"系统指令-用户输入-助手输出"三段式结构的写法,原本常见于文字聊天机器人,这里被挪用来组织语音生成任务。
这个设计的妙处在于,不管是普通配音、带情绪指令的配音、多轮修改、多角色对话,还是局部编辑,统统可以写成同一种对话结构,只是内容不同。模型不需要为每种任务单独设计一套输入输出格式,它学的是"怎么在对话里完成助手的部分",这个能力一旦学会,可以迁移到各种任务形态上。
多轮修改是怎么实现的?比如你先让它读一句台词,觉得不够悲伤,下一轮你说"比上一条更悲伤一点",模型会把上一条生成的音频当作上下文的一部分继续理解,然后产出新的一条,同时上一条音频依然保留在对话历史里。这就像给演员反复说戏,"刚才那条感觉太冷了,再来一条,带点委屈",演员记得刚才自己是怎么演的,不需要你重新把整段剧情讲一遍。
多角色对话配音则是给每个角色准备一份文字描述和若干参考声音片段,文本里用说话人编号区分台词归属,模型一次性输出整段多角色对话。这意味着同一个声音可以在剧本里说中文,也可以在下一句切换成英文,音色保持一致,这对配音外语片、多语言有声书是直接的生产力提升。
至于局部编辑,靠的是一种叫"infilling"(填空)的技巧。
> **Infilling(填空式编辑)**:给模型提供编辑点前后的原始音频,以及包含替换词的完整新文本,模型只生成中间缺失的那一小段,首尾衔接处自然融入原有录音。
想象你在修一张老照片,只有中间一小块破损了,修复师不会把整张照片重画,而是参照周围完好的部分,只补上那一小块,边缘衔接得天衣无缝。如果不用这种局部填补的方式,而是把整段台词重新生成一遍,哪怕只改一个词,整句话的语气、停顿、音色全都会变一遍,听感上就像是换了个人在念,这对任何需要精确修订的场合(比如播音稿改一个数字)都是灾难性的。
奖励模型只有一个,而且不认转写对不对
这是整篇论文里我觉得最有意思的一个决策。
前面提过,传统的转写准确率和说话人相似度奖励,会系统性地惩罚有表现力的配音。Fish Audio团队用一个真实实验验证了这个判断的严重程度:他们找了Expresso这个标准数据集,里面每个说话人用默认语气和多种风格(耳语、大笑、悲伤等)读同样的句子。结果显示,只要用了耳语风格,相似度奖励会在99.7%的情况下更偏爱那个毫无感情的默认语气版本;大笑的时候,转写错误率会上升0.79个百分点,也就是说转写奖励会直接惩罚笑声。
这组数字说明一个很朴素的事实:**用来衡量"像不像"和"准不准"的指标,根本看不懂"演得好不好"**。
Drama 3的解法很干脆:**抛弃所有基于规则的奖励,只用一个专门训练出来的"人类偏好打分模型"**。
> **强化学习中的奖励模型(RM)**:一个专门训练用来模拟"人类更喜欢哪一条"的小型模型,这里是一个和Drama 3结构类似、但更小的语音语言模型,直接给一段配音打分,不经过文字转写,也不单独计算声音相似度。
这个奖励模型学的是人类标注员对成对配音的偏好判断,训练用的是Bradley-Terry损失函数(一种常见的"哪个更好"的排序学习方法)。关键是,它直接读取提示词和生成的音频token打分,不经过任何中间转换,这意味着它看得到参考音频和脚本,能判断声音是否保持一致、内容是否对得上,但不会被"笑声打乱了转写"或"耳语降低了相似度"这类表面特征误导。
还是用那个Expresso的数据验证一下效果:当把风格要求明确写进指令里之后,这个奖励模型给耳语版本打高分的比例从10.6%跳到62.2%,给大笑版本打高分的比例从27.1%跳到64.4%。也就是说,**只要你告诉它"这里应该耳语",它就能认同耳语确实该比正常音量得分更高,而不是机械地扣相似度的分**。
这就像请一个真正懂戏的评委,而不是一个只会拿着尺子量声波振幅的仪器。拿着尺子的评委会说"你这段声音比标准模板低了30%,不合格",但真正懂戏的评委会说"导演要求这里压低声音营造紧张感,你做到了,这是加分项"。如果继续用那把尺子,整个训练过程会不断把模型往"安全、平淡、贴近参考音"的方向拉,结果就是配音越训练越没有感情起伏,这恰恰和"做出有表现力的配音"这个目标背道而驰。
有意思的是,去掉转写奖励居然还顺带把生成失败的概率降低了。论文给出的数据是,在Seed-TTS-Eval测试集上,强化学习之后,首次生成就"失败"(静音、过短、噪声等)的比例从2.82%降到1.24%(中文)、从3.40%降到1.84%(英文),字错误率也同步下降。这说明一个纯粹的偏好信号,反而比拼凑的规则奖励更能把模型往"又准又有感情"的方向带,而不是在两者之间做取舍。
推理引擎:怎么让更大的模型跑得更快
模型架构厉害,光跑得慢也白搭。Drama 3团队在推理引擎上做了大量工程优化,这部分同样值得细说,因为它解释了"参数翻七倍、速度反而更快"这个看似不可能的结果是怎么实现的。
第一招是前面提过的,codebook-MTP解码器每帧只跑13层而不是S2的40层序列传递,加上专家网络用FP8低精度存储,直接把每帧要读的权重砍到不到五分之二。
第二招是消灭"内核发射"的隐性开销。
> **内核(kernel)**:GPU执行的一个小程序单元,每次调用都有固定的启动和收尾开销,哪怕这次调用几乎不搬动任何数据。
团队做了个很细致的统计:在一次典型的推理步骤里,共跑了1171个内核,但真正需要搬运数据的部分只占五分之一的时间,剩下四分之三的时间全花在启动和收尾这800多个"几乎不干活"的内核上。这就像一个仓库管理员,每搬一件货物都要先去办公室打印一张出库单,货物本身只要1秒钟搬完,但打印单据要花4秒钟,大部分时间耗在了行政流程上而不是真正的搬运工作。团队的解法就是精简这些"行政流程",把能合并的内核调用合并,把能省略的检查省略,最终把内核数量压下来,直接带来几个百分点到十几个百分点的速度提升。
第三招是让内核针对真实的服务场景量身定制形状,而不是用通用库里"放之四海而皆准"但哪个场景都不是最优的默认设置。团队专门做了一套"形状驱动的内核优化循环",先从真实线上流量里抓取实际的矩阵尺寸分布,再针对这些具体尺寸写专门优化的内核,反复验证,确保改动在真实场景里真的管用,而不是在实验室里测得快,上线却没提升(论文里提到有9次这种"实验室测得快、线上却更慢"的反例,说明这种验证确实是必要的,不是走流程)。
第四招是把"预填充"(处理新请求的输入阶段)和"解码"(持续生成每一帧音频的阶段)分到两块不同的显卡上跑。
> **Prefill-Decode分离**:把处理新来请求(读参考音频、读文本)的阶段和持续生成音频帧的阶段放在不同的GPU上执行,避免新请求打断正在播放的音频流。
如果不这样分离会发生什么?论文里给出的场景很直观:一块显卡既要处理新进来的请求,又要给正在播放的音频流继续生成下一帧,那每来一个新请求,正在播的所有音频流都要停顿一下等它处理完。这就像一个客服窗口既要接新客户登记资料又要同时给老客户答疑,一旦有新客户资料需要花较长时间核实,后面所有正在通话的老客户都会被晾在那儿。把这两件事分给两个窗口处理之后,团队测出来的结果是,单GPU大约能撑住10条并发流,分离之后一个"预填充+解码"单元能撑住24条,几乎翻了一倍半。
实测效果:这些数字说明了什么
说了这么多设计思路,最后还是要看跑分。
在MiniMax多语言测试集上,Drama 3在中文、荷兰语、英语、德语、土耳其语五种语言上的错误率是所有被比较系统里最低的。这个结果不算惊天动地,但说明一个基本盘:功能堆得多,基础的"读得准不准"没有退步。
在Ming-Freeform-Audio-Edit编辑基准上,把Drama 3和Cartesia Sonic-3的填空式编辑接口对比,中文场景下Drama 3的字错误率是3.69%,Cartesia是8.64%,几乎是对手的一半。这说明Drama 3的infilling方案不只是"能用",而是"好用"。
最能体现"多轮修改"价值的,是Step-Audio-Edit基准测试的结果。每多给一轮反馈,Drama 3的情绪识别准确率从55.5%一路涨到58.2%,风格识别准确率从76.5%涨到81.8%。这组数字背后的意义是:**模型确实"听懂"了反馈,而不是每次重新随机生成然后凑巧对了**。
| 指标 | 第0轮 | 第1轮 | 第2轮 | 第3轮 |
|---|---|---|---|---|
| 情绪准确率(%) | 55.5 | 57.2 | 57.5 | **58.2** |
| 风格准确率(%) | 76.5 | 79.4 | 80.5 | **81.8** |
| 拟声词评分 | 1.32 | **2.32** | – | – |
写在后面
读完这篇论文,最触动我的其实不是任何一个具体的架构改动,而是那个关于"奖励模型"的实验设计。团队没有满足于说"我们用了一个更好的奖励函数",而是先用真实数据证明旧奖励函数的具体伤害有多大,比如耳语会让相似度打分骂你99.7%的情况下不及格。这种"先证明问题真实存在,再给出解法"的论证方式,比直接堆砌新方法的论文要诚实得多。
另一个让我意外的细节是,去掉转写准确率这个奖励之后,模型的实际转写准确率反而没有变差,甚至还略微提升了。这打破了我原本以为"奖励函数越贴近目标指标,效果越好"的直觉。真实情况可能是,当你强行用一个片面的代理指标去优化模型时,模型会学会一些讨好这个指标的"歪门邪道",反而偏离了真正想要的效果;而当你换成一个更贴近"人到底喜欢什么"的综合判断时,那些细枝末节的指标反而会自然跟上。这或许是个值得在更多场景里验证的猜想:有时候,放弃直接优化你最在意的那个数字,反而更容易把那个数字做好。
论文里没有回答的问题是,这个偏好奖励模型本身的判断标准是怎么来的,训练它的人类标注者的审美偏好会不会带有自己的局限?如果某种小众但真实存在的表演风格恰好不在标注者的审美范围内,这个模型会不会系统性地打压它?这个问题论文没有展开,但我觉得值得继续追问。
Q&A
Q1:Fish Audio Drama 3是什么?
A:Fish Audio Drama 3是一个开源的语音生成模型,能把文字转换成带表演感的配音,支持多参考声音克隆、自然语言导演指令、多轮修改、多角色对话配音、局部编辑和流式输出,基于350亿参数的混合专家架构,每次推理只激活约30亿参数。
Q2:Drama 3为什么能比参数更小的S2跑得更快?
A:因为它用新设计的codebook多token预测解码器替代了S2的快速自回归模块,每帧只需跑13层而非40层序列传递,加上专家网络采用FP8低精度存储,每帧读取的权重量不到S2的五分之二,所以在H200显卡上能跑到每秒271帧,而参数量七分之一的S2只有177帧。
Q3:Drama 3的强化学习训练和其他语音模型有什么不同?
A:它只用一个学习人类偏好的奖励模型打分,完全不用转写准确率和说话人相似度这类规则奖励,因为实验证明这些规则奖励会惩罚耳语、大笑等真正有表现力的配音方式,而偏好奖励模型能理解导演指令要求的风格,不会因为声音"不像参考音"就扣分。






