防止幻觉的代码只在幻觉中失败了

2026年9月3日2 次浏览来源:Dev.to阅读原文

最初发表(日文)于former.workstyle.tech.

为TTS语音模型创建培训公司自动管道 我运行了一个管道 自动生成语音合成模型培训公司 这一过程涉及让TTS读取文本,用Whisper来转录,将抄录文本与脚本进行比较,并仅将通过质量检查的片段保存为培训材料.

这是一个直接的设置。

在运行一批来产生12个声音时,两位介绍者未能正常生成.

分别有20和18个被拒绝的剪辑,而其他声音只有0-10个被拒绝.

事情显然不对劲。

经过更深入的挖掘,我发现,我所写的防止尾部幻觉的修剪过程在幻觉实际发生时并没有起到什么作用.

我几个月没注意到这个问题了 被拒的短刑期 当我列出驳回的判决时,出现了一种模式。

基数由65个句子组成,分数从13个(最低)到33个(最高)不等,中间数为21个。

所有被拒绝的判决都是在较短的一端。

我在当地用主持人的字幕("清晰而有表现力的演讲,强调重要要点,同时向观众讲话")转载了这个问题,并通过Whisper处理.

剧本结束后,毫无意义的演说继续.

这是一个典型的尾巴幻觉案例.

当我两次尝试时,输出是相同的.

由于传播TTS,我使用回回定音 当标题和种子是相同的, 这不是一个故障。

同样的输入总是会产生同样的幻觉。

反制措施已经在法典中了 棘手的部分是我已经针对这种现象实施了反制措施 剪辑生成重试系统有三个倒回级: 生成 → Whisper → 相较于脚本.

如果通过, 请保存剪辑 如果失败, 更改和重试( 保留标题和种子固定, 声音不会改变, 只有扩散轨迹被重置) 如果它仍然失败,在Whisper的片段末端修剪并重新评价 第三步是专门用来处理尾部幻觉的.

其意图是明确的,执行是有效的,单位测试将获得通过。

然而幻觉并没有被移除.

当我看到Whisper真正回归的是什么时 我理解为什么 华声作为单独的一段还原了幻觉.

剧本以3.50秒结束,而幻觉则持续到.5.10秒.

我的代码是用5.10秒, 也就是音频的结尾。

修剪没有切出任何东西。

更确切地说,它只是在去除末段后留下了40毫分的后遗症。

由于没有任何音频被删除,片段将再次失效并被排除在外.

另一个例子是:剧本以2.50秒结束,随后在幻觉开始前近1.5秒的沉默.

尽管有这种明显的分离,选择错误的裁剪立场使得整个反措施无效.

令人沮丧的是,在没有出现幻觉时,这种执行是正确的。

如果只有一段,修剪后遗症是一种无害的操作.

只有在出现幻觉时,也就是在需要采取反措施时,才会出现幻觉。

查找脚本内容结束之处 正确的方法不是使用"最后一段的结尾",而是找到"脚本内容的终点".

通过从起取出分块并选择与脚本匹配率最大化的边界,我们可以解决这个问题.

对于 ,加成结果与剧本完美匹配(ratio 1.00),同时将混入幻觉中,将比分降至0.73.

最大值以3.50秒选择.

Full Retry Ladder 这是正确的生成逻辑 关键点是 有三个倒背级 每个都处理不同类型的故障

分享