34MB 的土耳其 TTS 干翻了 Gemini 和 ElevenLabs:8.6M 参数、离线、还开源

这两天在 Hugging Face 上刷到一个挺邪门的模型卡。EMA Lightning,一个土耳其语 TTS,5.6M 参数的 DiT 声学模型加 3M 参数的 vocoder,一共 8.6M 参数,模型文件也就 34MB 上下。就这点体积,在 Freya-TR-Eval 上跑出 0.92% 的 WER,作者给的对比表里是全场最低——压过了 ElevenLabs v4(1.43%)、Gemini 3.8 Flash(1.35%),甚至连 2.38B 参数的 Trendyol-TTS(0.98%)都没跑赢它。一个几十兆的开源模型,在土耳其语的识别准确率上把云端大厂全家桶全按下去,这个反差本身就值得停下来多看两眼。

快,而且便宜到离谱

作者把数字列得很直白:RTX 4090 上用 .lightning() 编译之后,算上文本规整在内,首个音频出来只要 3.86 ms;速度是实时的 440×,批处理开到 64 能到 1,316×。一块 6 小时 7 分钟的 Audiobook,批量合成大概 17 秒就完事。跑在租来的 4090 上,按 $0.74/小时算,每百万字符的成本大约 $0.0085。对做土耳其语内容、客服、电话播报的团队来说,这意味着原来按 API 调用计费的钱,现在可能就变成一次性的算力租用,而且数据完全不出机器——离线、不用 API key,GPU 或 CPU 都能跑。

它还主打流式。文字还在生成的时候,音频就能先播出来,第一段 1 秒的音频在 GPU 上约 4ms 就绪,之后每 4 秒一段,播放永远不等生成。电话语音、直播这类场景,它就是冲这个设计的。

一个模型喂多个调用方

比较有意思的工程点是那个叫 Playhead 的调度器。单个句子一句句过 GPU 其实很浪费,GPU 大半时间在等。Playhead 的做法是:每个 say() 和 stream() 的调用都走同一个调度,它维护两个先到先得的队列——一句一句的文本等着喂模型,一段一段的音频窗口等着解码。每一轮它从前端各取一批,在 GPU 上一次过完,再按顺序把每个窗口交还给发起调用的那个请求。没人被插队,挂断的调用会离开队列,一批失败只影响它自己的调用方。作者给的数据是,单块 RTX PRO 6000 上,64 个流同时启动,0.74 秒内合成出 887 秒音频,而且每一段都和单独调用时说的完全一致。

这其实是在回答一个很实际的问题:一个本地 TTS 模型怎么同时服务一堆并发调用而不互相拖死。多线程随便调,模型只加载一份,调度归统一管。

快是怎么来的

架构其实不复杂:文本按字母编码,放到一个词-字母时间线上,由时长预测器定每帧的位置,一个窗口化的对齐器给每帧生成一个条件,DiT 在四个采样步里生成 64 维的 latent,最后解码器上采样到 48kHz 音频。四步采样用的是 DMD2 蒸馏——先训练一个正常的 flow-matching 教师模型(16 个 midpoint 步,每句 32 次网络前向),再用 DMD2 把它蒸馏成 4 步的学生模型。参数能压到 5.6M,还有一招是六个 DiT block 共享同一个时步调制投影,把调制参数从 1.81M 砍到 0.31M。

训练数据是大约 1000 小时的内部单说话人土耳其语语料。文本前端的「正常化」用的是 Erdem Tuna 的 normalizer-tr,所有数字、日期、金额、符号的读法都靠它解决。打包就一个 pip install ema-lightning,EMA() 一行起来,say() 拿整段,stream() 边生成边播。Apache 2.0,权重和代码都能商用。

先别急着上头,看限制

它不是一个什么都能干的模型。单说话人,没有声音克隆,没有情感控制,而且只支持土耳其语,外语词也按土耳其语拼读规则来。自然度上 UTMOS 大约 3.30,跟 ElevenLabs v4 持平,但低于 Gemini 3.8 的 3.52–3.61 和 Trendyol-TTS 的 3.83——它赢的是「读得准」,不是「读得最具表现力」。另外那个 0.92% 的 WER 是拿 Whisper 测出来的,识别器自己认错的部分也算进了误差里,所以这分数不能当绝对真理,横向比一比还是有参考价值的。

模型卡里也把负责任使用写得很直白:合成的语音必须让人知道是 AI 生成的,欧盟的 AI Act 等法规也要求这种披露,不能用它冒充真人、做诈骗或冒充身份,也别让模型说出某个人没说过的话。数字、日期、缩写走的是自动文本规整,遇到不常见的输入可能读错,所以银行、医疗、法律、紧急类的播报,发布前得有人工把文本和音频都过一遍。

我个人的判断是,这个模型最值钱的不是那个 WER 数字本身(benchmark 总有水分),而是它证明了这么一件事:在一个特定语言、特定任务上,几十兆的专用开源模型能打成百上千倍的云端巨无霸,而且离线、可控、便宜。这对小语种 TTS 是个挺真实的信号——很多时候你不缺模型能力,缺的是把成本和门槛压下来,让本地部署真的跑得起来。EMA Lightning 至少把这条路给趟出来了。

相关链接