跳到主内容

一个引擎为什么不够:多引擎要「错得不一样」才有用

· Zeyu Si

本页目录

我们拿一通 42 分钟的真实业务访谈做过一次对比。一份是直接把录音丢给 ElevenLabs 得到的稿子,另一份走完了我们整条流程。两份稿子全文 91% 相同。

剩下那 9%,恰好是做研究的人最在乎的部分。

单个引擎「大体都对」,恰恰最危险

我们从访谈里挑出 19 个关键名词:品牌、型号、地名、行业术语。直接出的稿子里,10 个全错,4 个部分错,只有 5 个是对的。有一个品牌名在访谈里出现了 6 次,一次都没写对,每次都被听成一个读音相近、意思完全不相干的普通词。

这里要说句公道话:那一次 ElevenLabs 的表现并不差。没有崩,没有漏段,说话人也分得很准,大约 98%。只看整体,你很难挑出毛病。

问题恰恰在这里。读稿的人看到一句通顺的话,不会停下来怀疑里面那个名词。而我们手上的另外三个引擎,在这几个词上也全都听错了。所以这篇要说的不是"某个引擎不好",是任何一个引擎单独用,都听不准它没见过的行业专名

我们自己的「优化」,一度只是在洗牌

在把录音交给引擎之前,我们会先切成几段、统一格式。我们原以为这一步能提高准确率。

结果是:改好了 22 处,改坏了 25 处。几乎五五开,等于没优化。

原因后来查清楚了:这个引擎对"从哪一秒开始听"非常敏感。同一个型号,从 0 秒切进去,它写成 X6;从 1 分 30 秒切进去,它写成"X六"。连直接出的那份稿子自己都不统一,前 32 分钟写"X六",之后写"X6"。

为了查到这一步,我们做了三个控制实验,先后排除了三种想当然的解释:不是整段太长,不是音频格式,也不是语言设置。如果停在第一个看起来合理的解释上,我们就会把一个错误的原因写进产品说明里。

真正把质量拉上来的,是几个引擎互相比对

同一段录音,另外三个参考引擎也各自转一遍,再加上术语库,一起比对。结果,我们切段时弄坏的 25 处,救回了 14 处,也就是 56%。

型号那个问题也是这么解决的:另一个引擎每次都稳定地写成 X6。所以主引擎哪一次犯了病,终稿照样拿得到正确写法。

比对不出结论的地方,我们不替用户做决定,而是在稿子里标成"存疑",让读稿的人去听那一秒。这一通访谈标了 7 处。

引擎多不等于好:要错得不一样

说到这里,容易得出一个结论:引擎越多越好。我们试过,不是这样。

我们在本地试过 8 个开源中文引擎,让它们简单投票。结果比其中最好的那一个单独用还差。原因是这 8 个引擎大多出自同一家,训练数据高度重合,同一句话它们往往错在同一个地方。投票不但纠正不了,还会把错误投出来。

换成四条不同技术路线的引擎之后,情况就变了:两两之间出错位置的重合度只有 32.6% 到 45.8%,组合起来明显比单个好。

所以我们给每门语言挑参考引擎时,看的不只是它单独准不准,还要看它和主引擎是不是错在不同的地方。韩语就是一个例子:一个引擎单独看不差,但它最要命的那几处错和另外两家几乎一模一样,三家逐字共错。我们把它换成了错误更"不一样"的 Soniox。

还有一件事让我们更谨慎。AssemblyAI 发布新版时,官方公布的多语混说场景错误率,从上一代的 9.07% 降到了 7.69%。我们在自己的六门语言上逐字核对,结果不是净负面就是打平:新版会往稿子里插入原话没有的内容。比如一句英语里凭空多出 "Bruh",一句意大利语把"5 万里拉"听成了"5000 万"。按错误率算,这几门几乎都显示新版更好,因为插一个词对这个指标影响很小。查官方文档才知道,新版换上了大模型式的解码器。我们最后回滚到了更老的那一版。

厂商公布的成绩单,测的是厂商选的场景。它不等于你的访谈。

我们也会输

说完多引擎的好处,也要把我们输掉的部分摆出来。

走完整条流程的终稿里,仍然漏了 10 处错,全是普通的日常词。比如受访者提到自己的"媳妇",终稿写成了"姐姐"。

同一份输入,我们的比对环节跑三次,能修回的数量分别是 0、3、3。这一步本身也有随机性。

我们试着改了比对规则,做了一次 A/B 测试。没有用,就回滚了。继续往下查才发现,问题不在比对规则,在更前面的"对齐"那一步:正确的写法在某几个参考引擎里明明有,但因为切分边界没对上,根本没被送到比对环节。输入里就没有正确答案,规则再好也选不出来。

这个问题还没完全解决。我们把它写在这里,是因为它和前面那条结论其实是同一件事:多引擎的价值,取决于每一路的证据能不能真的被用上。

作者Zeyu Si