检查Qwen-Audio-3.0-TTS这类文本合成语音的准确性,应围绕“能否无歧义还原文意”展开。建议把准确性拆成文本一致、发音正确、韵律自然、音频可懂四类问题,用自动化回读、人工听测和结构化对比来交叉验证。
合成音频的准确性检查建议采用“ASR回读过滤 + 人工核查重点项 + 批量对照清单”的组合。先用语音识别把合成音频转成文本,与原文逐字比对,剔除识别错误的干扰;再针对多音字、数字、英文、标点停顿、语速和音量做人工抽测。单条音频要从字音、语义和韵律三个层次判断,不能只靠一次听感。测试集先选20-50条覆盖边界情况的文本。
先明确“准确”的判定维度
TTS的“准确”不是单一指标:文本一致指是否漏读、多读、错读;字音正确指多音字、生僻字、数字、单位是否读对;韵律自然指停顿、重音和语调是否符合语义;音频可懂度指声音是否连续、有无破音或吞字。建议先写判定表,例如“文本一致性要求逐字匹配,韵律由两名以上听测人员打分合并”。这样可以避免把语音识别回读差异直接当成合成错误。
用语音识别回读做第一道自动过滤
把合成音频送入语音识别服务(Whisper、阿里云、讯飞等),让ASR转成文本,与原始文本做归一化比对。归一化包括统一大小写、数字写法和英文缩写。差异位置可用 diff 标出。通用伪代码如下:
# 伪代码:合成音频与ASR回读比对
origin_text = normalize("他买了5台iPhone 15 Pro")
asr_text = normalize(asr_recognize(audio_file)) # 送入任意ASR服务
import difflib
for line in difflib.ndiff(origin_text, asr_text):
print(line)
ASR也可能有识别误差,差异需人工复核。如果ASR回读连续在同一位置出错,很可能是合成音读错;如果只是个别词被替换,也可能是ASR听错。更稳妥的做法是:用两个不同ASR服务各识别一次,取“两边都错”的位置作为高概率问题点。
人工听测:用结构化清单代替随感觉
自动过滤会漏掉韵律和语气问题,需人工听测。建议每个测试样本听两遍:第一遍对照原文,重点听关键信息是否清楚;第二遍闭眼听,判断声音是否自然、语调转折是否突然。可按以下清单逐项检查:
- 文本一致:有没有缺字、多字、字序错乱。
- 多音字:如“行”“长”“数”“重”是否根据上下文读对。
- 数字与单位:年份、电话、日期、金额读成单字还是整体;单位“%”“℃”是否念成“百分之”“摄氏度”。
- 英文与缩写:是逐字母念还是按单词念,中英混排是否切换自然。
- 标点与停顿:逗号、句号、冒号是否带来合理停顿,问句是否有升调。
- 语速与音量:是否过快过慢,关键字有没有被吞掉。
批量检查:用小测试集和对照标记表跑一轮
不建议一次性合成几百条再集中检查,可先用20-50条样本精测。下面是一个可复制的对照表结构:
| 测试文本 | 检查重点 | 结果 |
|---|---|---|
| 我在北京长大,今天走了三公里。 | “长”和“走”的多音字 | 待验证 |
| 他买了5台iPhone 15 Pro。 | 数字、英文和中文混排 | 待验证 |
| 你可以这样做:先打开设置,再选择声音。 | 冒号和顿号是否形成停顿 | 待验证 |
每条音频记录“通过/不通过/存疑”并写出具体问题点。若同一类问题在多条样本出现,优先回看对应文本格式,如多音字前后缺少语境、英文缩写前后缺少空格等。修改原文后重新合成,再跑一遍同一组测试确认问题消失。
常见风险点与处理方式
合成失败的典型位置包括生僻字、特殊符号(℃、‰、¥)、长句中多音字上下文丢失、数字格式不统一、语速过快导致吞音、句尾音高异常。建议在测试集里专门加入这些样本。发现问题时,可先尝试改写原文:给多音字补充更明确上下文、把数字改成中文读法、增加标点让停顿更自然。若TTS提供字级时间戳,还可以核对每字的时间区间,检查是否漏字或重复。