想象你开了一家小饭馆,客人吃完后你要知道菜到底行不行,最直接的办法是请他们给菜品打星;你还想知道端上桌的菜像不像菜单封面图、换了厨师或换了食材后口味还稳不稳定。这三个问题,恰好对应 TTS 语音合成质量评估的三个核心维度:MOS 主观评分、说话人相似度、鲁棒性测试。再加上“怎么科学组织打分”和“怎么让分数经得起复测”,就构成了一套完整的语音质量评价体系。本文用“美食测评”这条故事线,把这些指标逐一讲透,让你不仅能看懂论文里的 MOS 和 WER,还能在真实项目中搭建自己的评测流程。

岗位关联

对 AI 从业者来说,掌握系统化的 TTS 评估方法,是在模型迭代、技术选型和上线质检中做出可靠决策的基本功,避免“凭感觉做优化”。

目录
  1. 可视化演示
  2. 1. MOS:给语音打星
  3. 2. 客观指标:机器试吃员
  4. 3. 相似度:菜像不像菜单图
  5. 4. 鲁棒性:换厨师还稳吗
  6. 5. 可懂度:听懂每句话
  7. 6. 打分实验设计:盲测的艺术
  8. 7. 评测流程:让分数经得起复测
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示TTS语音合成质量评估指标的核心机制,通过源头/管道/节点/终端四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

TTS语音合成质量评估指标:TTS评 TTS评估体系概览与评估维度 MOS主观评分方法与标准化 核心机制可视化 TTS语音合成质量评估指标整体架构与关键组件

1. MOS:给语音打星

经营小饭馆的老板想知道招牌菜到底行不行,最直接的办法是请客人吃完饭打星:1 星是“难吃到下次再也不来”,5 星是“好吃到想打包带走”。所有这些星星加起来除以人数,就是这家店的“平均星级”。这个看似朴素的做法,正是 TTS 评估中 MOS(Mean Opinion Score,平均意见得分)的雏形——它不分析菜的成分,只看吃的人的直观感受。

TTS 合成的语音也一样。当我们要评价一个模型合成的句子好不好,就让一组听众分别听这段音频,然后按 1 到 5 分给听感打分:1 分是机械感强烈、难以忍受,5 分是自然流畅、接近真人。把所有听众的分数加起来除以人数,得到的就是这段合成语音的 MOS 值。这个分数被广泛用于论文对比、模型迭代和产品验收,是整个评估体系里最核心的“民意调查”。

计算 MOS 只需要一个简单的平均公式,但真正用好它并不简单。评分者的专业背景会影响分数:懂语音的人可能对瑕疵更敏锐,普通用户则更容易被“整体印象”带着走;听音环境不同,耳机和安静程度也会带来偏差;人数太少时,一个极端评分就能把均值拉高或拉低一大截。因此正规评测除了报平均分,还要给出样本量和置信区间,否则就像一家只有三个人评价却显示“5 星满分”的餐厅,很难让人信服。

就像餐厅的平均星级,只报“4.2 星”而不说多少人评价、分数分布如何,参考价值就有限。MOS 同样是一个简单却需要谨慎解读的指标:它是整个评估体系的“骨架”,后续所有客观指标和测试设计,其实都是在围着它打转。

MOS=1N∑i=1Ngi\displaystyle \mathrm{MOS} = \frac{1}{N}\sum_{i=1}^{N} g_i
这个公式把 N 位听众对同一句合成语音的打分做算术平均,得到 1~5 分之间的平均意见得分。人数越多,MOS 越稳定。
  1. 收集 N 个评分N 表示参与评分的总人数。比如请来 30 位听众,每人给一句合成语音打一个分数,N 就是 30。
    {g1,g2,…,gN}\displaystyle \left\{ g_1, g_2, \ldots, g_N \right\}
  2. 把所有评分求和用求和符号把 N 个分数全部加起来,分子越大代表整体评价越好。
    ∑i=1Ngi\displaystyle \sum_{i=1}^{N} g_i
  3. 除以 N 取平均把总和除以人数,消除人数差异,得到可横向比较的平均意见得分。
    1N\displaystyle \frac{1}{N}

2. 客观指标:机器试吃员

请几十位试吃员一顿饭很贵,老板动了脑筋:能不能买一台“电子舌头”,测出菜的盐度、甜度、脆度,用仪表读数推断好不好吃?虽然仪表不能完全替代人嘴,但胜在便宜、快速、可重复。这个思路对应 TTS 评估里的客观替代指标。

在语音领域,PESQ(语音质量感知评估)和 STOI(短时客观可懂度)就是这样的“电子舌头”。它们的做法是:把合成语音和真人参考语音分别做频谱、音调和包络分析,然后逐帧比较,算出一个反映“差别有多大”的数值。PESQ 的典型输出范围是 -0.5 到 4.5,STOI 是 0 到 1,数值越高说明与参考越接近。为了让这些机器分数和人类打分统一口径,研究者通常用线性回归把客观分数映射到 1~5 分的 MOS 区间。

电子舌头的好处是快,但它测的是“成分指标”,不是“人的体验”。PESQ 最初是为电话窄带和噪声场景设计的,对音色、自然度这类 TTS 最看重的维度并不敏感。所以在实际工作中,客观指标用于快速筛选和回归监控可以,做最终决策还是要回到人耳——它是一把好用的尺子,但永远替代不了真正坐下来吃饭的人。

MOS^=a×PESQ+b\displaystyle \widehat{\mathrm{MOS}} = a \times \mathrm{PESQ} + b
这是把 PESQ 客观分数转换成预测 MOS 的线性映射。系数 a 控制斜率,b 是截距,二者由一批同时有 PESQ 和人工 MOS 的数据拟合得到。
  1. 获取机器分数用 PESQ 算法比较合成语音和参考语音,得到客观质量分,范围一般在 -0.5 到 4.5。
    PESQ∈[−0.5, 4.5]\displaystyle \mathrm{PESQ} \in [-0.5,\ 4.5]
  2. 乘以斜率 aa 表示客观分每增加 1 分,预测 MOS 提升多少,由历史数据拟合得出。
    a×PESQ\displaystyle a \times \mathrm{PESQ}
  3. 加上截距 bb 用于校正基准偏移,让预测值落在 1~5 分的合理区间。
    MOS^=a×PESQ+b\displaystyle \widehat{\mathrm{MOS}} = a \times \mathrm{PESQ} + b

3. 相似度:菜像不像菜单图

熟客一进店,看服务员端上来的菜,不用尝就知道“这不像我们家的菜”。一道菜是否正宗,除了好不好吃,还要看它和预期中的标准像不像。语音合成也一样:你说要合成“李老师的声音”,结果出来却像“王老师”,听感再好也是失败。这个维度就是说话人相似度。

技术上的做法是给声音提取“指纹”——说话人嵌入向量。用一个预训练好的说话人识别模型(如 ECAPA-TDNN),把真人录音转换成一组几百维的数字向量,再把合成语音也转成向量。两个向量在多维空间里的夹角越小,说明音色越接近。夹角的大小用余弦相似度衡量,取值在 -1 到 1 之间:1 表示方向完全一致,0 表示毫不相关,-1 表示方向相反。

除了余弦相似度,说话人验证里还常用 EER(等错误率)来衡量“冒认”和“误拒”是否平衡:EER 越低,说明相似度打分越能分清“真声”和“克隆声”。回到比喻里,菜像不像菜单图,不能只靠厨师自己说“很像”,得让熟客盲测,还要用“指纹仪”量化——相似度指标就是这把客观的指纹仪。

sim=es⋅et∥es∥×∥et∥\displaystyle \mathrm{sim} = \frac{\mathbf{e}_s \cdot \mathbf{e}_t}{\|\mathbf{e}_s\| \times \|\mathbf{e}_t\|}
其中 e_s 是合成语音的嵌入向量,e_t 是目标说话人的嵌入向量。两个向量越接近同方向,余弦相似度越接近 1,声音就越像。
  1. 提取嵌入向量把合成语音和目标说话人语音分别输入说话人识别模型,得到两个固定维度的向量 e_s 和 e_t。
    es, et∈Rd\displaystyle \mathbf{e}_s,\ \mathbf{e}_t \in \mathbb{R}^d
  2. 计算点积两个向量对应位置相乘再相加,度量它们在方向上的重合程度。
    es⋅et\displaystyle \mathbf{e}_s \cdot \mathbf{e}_t
  3. 除以模长归一化分别除以两个向量的长度,消除音量、时长等无关因素,得到纯粹的“方向相似度”。
    ∥es∥×∥et∥\displaystyle \|\mathbf{e}_s\| \times \|\mathbf{e}_t\|

4. 鲁棒性:换厨师还稳吗

小饭馆最怕什么?最怕厨师请假换了个新手、外卖高峰期后厨手忙脚乱、为了省钱换了便宜的食材供应商。平时 4.5 星的菜,一到这些时候就变成 3 星,顾客就会觉得“这家店不稳定”。这个“换个环境就翻车”的问题,对应 TTS 评估里的鲁棒性测试。

TTS 模型的鲁棒性测试,就是故意给它制造各种“麻烦条件”,看合成质量还能不能扛住。常见的压力场景包括:给输入文本加入背景噪声(模拟嘈杂环境)、突然改变语速、要求用不同情感朗读、遇到生僻字或多音字、文本里混中英文数字等。模型如果在干净条件下拿高分、一换条件就明显劣化,说明它的鲁棒性不足,上线后很容易在真实场景里露馅。

为了量化“稳定程度”,可以把不同条件下测得的 MOS 或客观分收集起来,计算变异系数 RSD。RSD 相当于“分数的波动率”:它把标准差除以平均值,得到一个不受分数绝对大小影响的相对波动指标。

就像一家餐厅的评测表里要专门写一栏“高峰时段出餐稳定性”,TTS 评估报告也要单列鲁棒性测试:不只是报一个干净条件下的 MOS,还要看噪声、语速、生僻字等“刁难场景”下的分数有没有垮掉。毕竟用户不会只在理想环境下听你的合成语音。

RSD=σμ×100%\displaystyle \mathrm{RSD} = \frac{\sigma}{\mu} \times 100\%
RSD 表示各条件下质量分数的相对波动幅度。比如平均分 4.0、标准差 0.4,RSD 就是 10%,波动越小说明模型越稳定。
  1. 计算平均分 μ把各条件下的 MOS 加起来取平均,代表模型的“一般水平”。
    μ=1M∑j=1Mxj\displaystyle \mu = \frac{1}{M}\sum_{j=1}^{M} x_j
  2. 计算标准差 σ衡量每个条件分数偏离平均分的程度,σ 越大说明分数越散。
    σ=1M∑j=1M(xj−μ)2\displaystyle \sigma = \sqrt{\frac{1}{M}\sum_{j=1}^{M}(x_j - \mu)^2}
  3. 取相对比值用 σ 除以 μ 并换算成百分比,消除平均分高低的影响,得到纯波动指标。
    RSD=σμ×100%\displaystyle \mathrm{RSD} = \frac{\sigma}{\mu} \times 100\%

5. 可懂度:听懂每句话

一家餐厅评分再高,如果服务员每次报菜名都含含糊糊,顾客听不清“红烧肉”还是“红烧秃”,体验也会大打折扣。对于语音合成来说,除了“好不好听”,还有一个更基础的维度——能不能听清。这个维度在 TTS 评估里叫可懂度,常用 WER(字错误率)来度量。

做法是让一个语音识别引擎(ASR)去“听”合成的音频,把转写出来的文字和原始文本逐字对比,数一数错了多少。这里的错误分成三类:替换(把“好”听成“号”)、删除(漏掉一个字)、插入(多出一个字)。把三类错误数加总,除以原文总字数,就得到 WER。中文场景常按字计算,称为 CER;拼音纠错场景也有人用 PER。

需要注意的是,WER 是“机器耳朵”的结论,不等于人类听感。一个自然度极高的合成语音,也可能因为含混发音让 ASR 犯错;反过来,某些机械音反而能被机器轻松识别。所以在评估体系里,WER 更像一个辅助雷达——它专门负责捕捉“听不清、容易误认”的边界问题,和 MOS 配合使用才能全面反映质量。

WER=S+D+IN\displaystyle \mathrm{WER} = \frac{S + D + I}{N}
S 是替换错误数,D 是删除错误数,I 是插入错误数,N 是参考文本总字数。WER 越小,说明系统“听写”得越准,合成语音越容易被理解。
  1. 统计替换错误 S某个字被识别成另外一个字,比如原文是“天气”,识别成“天汽”,记一次替换。
    S=∑1[字被替换]\displaystyle S = \sum \mathbb{1}[\text{字被替换}]
  2. 统计删除和插入错误删除是原文有的字没被识别出来,插入是原文没有的字被凭空多出来。
    D+I\displaystyle D + I
  3. 除以总字数 N把错误总数标准化到每个字上,方便不同长度句子的对比。
    S+D+IN\displaystyle \frac{S + D + I}{N}

6. 打分实验设计:盲测的艺术

如果老板想比较两个厨师谁手艺更好,直接问客人“老张和老李谁做得好”会得到很多偏见:有人说老张长得帅,有人说老李声音好听。科学的做法是,让客人不知道菜是谁做的,甚至打乱顺序,只凭味道判断。这个道理在主观评测里叫“控制变量”和“盲测”。

TTS 主观测试常用的方法有三种。ABX 测试:先给听众一个参考音 X,然后依次播 A、B 两个合成音,问“X 更像 A 还是更像 B”,适合对比相似度;MUSHRA 测试:同时给听众一个真实参考音和多个候选系统,让听众在 0 到 100 的滑条上打分,隐藏掉参考音对应的那个选项,防止“大家都会选最像参考的那个”带来的偏见;AB 偏好测试:不给参考,直接问“A 和 B 哪个更好听”,适合不同自然度风格之间的对比。

任何主观测试的分数都有随机波动,所以光报一个平均分不够,还要给出置信区间。95% 置信区间可以理解为:如果重复做很多次实验,有 95% 的把握真实平均分会落在某个区间里。区间越窄,说明这次打分的可信度越高。

打分实验设计决定了评估结论能不能服众。不盲测,听众就会凭“品牌印象”打分;不算置信区间,A 比 B 高 0.1 分可能只是随机噪音。美食测评要讲究方法论,语音评测也一样——设计得越严谨,数据越能真正指导决策。

CI=xˉ±tα/2, n−1×σn\displaystyle \mathrm{CI} = \bar{x} \pm t_{\alpha/2,\, n-1} \times \frac{\sigma}{\sqrt{n}}
x̄ 是样本平均分,t 是 t 分布临界值,σ 是样本标准差,n 是评分人数。置信区间越窄,均分越可信。
  1. 得到样本均值 x̄把所有人打的分数取平均,这是点估计。
    xˉ=1n∑i=1nxi\displaystyle \bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i
  2. 计算抽样标准误标准差除以根号 n,表示“均值本身波动多大”。
    σn\displaystyle \frac{\sigma}{\sqrt{n}}
  3. 乘以临界值根据置信水平和自由度查 t 分布表,得到放宽倍数,95% 置信下通常接近 1.96 或 2。
    tα/2, n−1\displaystyle t_{\alpha/2,\, n-1}
  4. 构造区间均值加减误差项,得到一个包含真值的区间。
    xˉ±tα/2, n−1×σn\displaystyle \bar{x} \pm t_{\alpha/2,\, n-1} \times \frac{\sigma}{\sqrt{n}}

7. 评测流程:让分数经得起复测

一家美食杂志要评年度最佳餐厅,不会让编辑今天去一家、下周去另一家凭印象写稿,而是有一套固定流程:同一时段、同一菜品、多名评审、统一评分标准。TTS 评测同样需要规范化流程,否则今天测的结果明天换个环境就复现不出来。

一个规范的评测流程至少包括四步。第一步是确定测试集:选多少句话、覆盖哪些场景(新闻、对话、数字、生僻字)、是否包含目标说话人样本,这些要提前固定。第二步是确定评分方式:是测 MOS 还是做 ABX,请多少位评分者、用什么耳机,都要统一。第三步是统计检验:对比两个模型时,不能只看均值谁高,要用配对 t 检验或显著性检验确认差异不是偶然。第四步是写报告:公开测试集、评分人数、置信区间和原始数据处理方法,方便他人复现。

说到样本量,一个常见的困惑是“到底请多少人才够”。这时可以用样本量估算公式。假设我们知道评分的大致标准差 σ,并且希望 MOS 均值的误差不超过 E,那么所需人数 n 可以算出来。

评测流程规范的意义,就像菜谱里的“标准化作业手册”:食材、火候、装盘都有明确规定。有了它,同一个模型在不同团队、不同时间测试,结果才能互相比较。一个经不起复测的评测,比没有评测更容易误导方向。

n=(zα/2×σE)2\displaystyle n = \left( \frac{z_{\alpha/2} \times \sigma}{E} \right)^2
其中 z 是标准正态分布的双侧临界值(95% 置信时约 1.96),σ 是预估的评分标准差,E 是允许的误差半宽。公式的含义是:想更精确(E 更小),就需要更多人。
  1. 确定临界值 z按置信水平查标准正态分布表,95% 置信对应约 1.96。
    z0.05/2≈1.96\displaystyle z_{0.05/2} \approx 1.96
  2. 预估标准差 σ参考既往实验或预实验,估计评分者个体差异有多大。
    σ=1n−1∑i=1n(xi−xˉ)2\displaystyle \sigma = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(x_i - \bar{x})^2}
  3. 除以允许误差 EE 是你愿意接受的均分误差,比如 ±0.2 分,误差要求越严,比值越大。
    zα/2×σE\displaystyle \frac{z_{\alpha/2} \times \sigma}{E}
  4. 取平方因为抽样误差与根号 n 成反比,把比值平方后就得到需要的样本量。
    n=(zα/2×σE)2\displaystyle n = \left( \frac{z_{\alpha/2} \times \sigma}{E} \right)^2

AI 应用场景

场景一:TTS 模型迭代选型

阶段:模型评估与对比

解决的问题:训练完一个新模型,往往只凭几耳朵“听起来还行”就决定是否替换旧模型,容易误判。AI 用系统化评估解决这个问题:在固定测试集上同时测 MOS、置信区间和说话人相似度,用数据说话。

具体案例:某语音团队在优化语音合成模型时,保留了 200 句覆盖新闻、客服、天气查询的测试语料,请 30 名外包人员对旧模型和新模型做 ABX 盲测,同时用预训练说话人模型计算目标音色的余弦相似度。结果新模型 ABX 偏好率 58%,相似度从 0.87 提升到 0.91,团队才放心替换模型。

场景二:语音产品上线前质检

阶段:上线前质量把关

解决的问题:智能客服、有声书合成等产品每天要生成大量音频,人工逐条监听成本太高,漏检率也不稳定。AI 先自动筛选出“可疑劣质”样本,再结合人工复核,兼顾效率和质量。

具体案例:某有声书平台对每章合成音频自动跑一遍 ASR 转写,比对原文计算 CER;同时用 PESQ 映射的预测 MOS 做回归监控。凡是 CER 超过 15% 或预测 MOS 低于 3.5 的章节,自动进入人工复听队列。上线后用户投诉“听不清”的比例下降了 40%。

场景三:语音克隆与声纹安全验证

阶段:安全风控与取证

解决的问题:利用 TTS 克隆的语音冒充真人进行诈骗,正在成为新的安全威胁。AI 通过说话人相似度与 EER 来判断一段音频是“本人”还是“机器合成”,在安全场景中建立防线。

具体案例:某银行风控团队在电话语音核身环节,对可疑通话片段提取说话人嵌入向量,与留存声纹做余弦相似度比对。若相似度落在正常波动区间外,或触发 EER 对应的判定阈值,则转人工核实,成功拦截多起 AI 仿声诈骗。

Python 演示

python53 行
import mathimport random def compute_mos(scores):    """计算平均意见得分 MOS 和 95% 置信区间"""    n = len(scores)    mean = sum(scores) / n    var = sum((s - mean) ** 2 for s in scores) / (n - 1)    std = math.sqrt(var)    ci = 1.96 * std / math.sqrt(n)    return mean, ci def cosine_similarity(vec_a, vec_b):    """计算两个嵌入向量的余弦相似度"""    dot = sum(a * b for a, b in zip(vec_a, vec_b))    norm_a = math.sqrt(sum(a * a for a in vec_a))    norm_b = math.sqrt(sum(b * b for b in vec_b))    return dot / (norm_a * norm_b) def robustness_report(condition_scores):    """统计各条件下质量分数的均值、标准差和变异系数 RSD"""    mean = sum(condition_scores) / len(condition_scores)    var = sum((s - mean) ** 2 for s in condition_scores) / len(condition_scores)    std = math.sqrt(var)    rsd = std / mean * 100 if mean else 0    return mean, std, rsd def simulate_tts_comparison():    random.seed(42)    # 模拟两个模型的 MOS 评分    model_a_scores = [random.randint(3, 5) for _ in range(30)]    model_b_scores = [random.randint(2, 5) for _ in range(30)]    mos_a, ci_a = compute_mos(model_a_scores)    mos_b, ci_b = compute_mos(model_b_scores)     # 说话人相似度: 目标音色嵌入 vs 合成音色嵌入    target_emb = [0.6, 0.3, -0.4, 0.7, 0.1]    synth_emb = [0.55, 0.35, -0.35, 0.65, 0.15]    spk_sim = cosine_similarity(target_emb, synth_emb)     # 鲁棒性: 五种条件下的平均评分    cond_scores = [4.2, 3.8, 3.9, 3.1, 2.8]    avg, std, rsd = robustness_report(cond_scores)     print("=== TTS 质量评估报告 ===")    print(f"模型A MOS: {mos_a:.2f} +/- {ci_a:.2f}")    print(f"模型B MOS: {mos_b:.2f} +/- {ci_b:.2f}")    print(f"说话人相似度: {spk_sim:.4f}")    print(f"鲁棒性: 平均 {avg:.2f}, RSD {rsd:.2f}%")    print("结论: 若模型B的MOS高于模型A且置信区间不重叠, 则差异显著") if __name__ == "__main__":    simulate_tts_comparison()
目的:模拟一次完整的 TTS 质量评估流程,分别计算 MOS 与置信区间、说话人余弦相似度和多条件鲁棒性变异系数,输出一份可读的评估报告。
  1. def compute_mos(scores):把 MOS 计算封装成函数,输入一组打分,输出均值和置信区间。
  2. ci = 1.96 * std / math.sqrt(n)用正态近似估算 95% 置信区间的误差半宽,人数越多区间越窄。
  3. def cosine_similarity(vec_a, vec_b):计算两个声音“指纹”向量的余弦相似度,接近 1 表示音色越像。
  4. dot = sum(a * b for a, b in zip(vec_a, vec_b))两向量逐位相乘再求和,得到方向重合度。
  5. def robustness_report(condition_scores):把各条件下的分数汇总为均值、标准差和 RSD。
  6. rsd = std / mean * 100 if mean else 0变异系数把波动幅度归一化,方便跨实验比较。
  7. mos_a, ci_a = compute_mos(model_a_scores)分别评估两种模型,为后续对比提供依据。
  8. spk_sim = cosine_similarity(target_emb, synth_emb)用目标音色和合成音色的嵌入向量算出相似度。
  9. print(f"模型A MOS: {mos_a:.2f} +/- {ci_a:.2f}")报告置信区间,避免只看单点均值被误导。
  10. if __name__ == "__main__":让脚本既可被导入调用,也能直接运行输出报告。

常见误区

误区我算了一下 30 个人打分的平均分是 4.2,所以这个模型的 MOS 就是 4.2,非常可靠。

正解MOS 虽然由平均分得到,但孤立的均值没有说服力。好比一家餐厅显示 4.2 星,但只有 3 个人打分且一个人打了 1 星,这个 4.2 就毫无意义。正确的做法是同时报告评分人数、分数分布和 95% 置信区间(比如 4.2 ± 0.3),让人判断这个均值是被 30 个稳定评分支撑,还是被少数极端分数拉高的。

为何常见:因为公式看起来就是“求和再除以 N”,容易让人忽略评分过程的随机性和波动性。

误区PESQ 得分 4.0 对应预测 MOS 4.2,那这个 TTS 模型肯定和人声差不多自然了。

正解PESQ 最初是为电话窄带语音和噪声场景设计的,比较的是“失真程度”,而不是“自然度”和“音色”。就像用盐度计测甜度,工具用错了场景。TTS 合成语音的瑕疵往往是音色不自然、韵律生硬,这些 PESQ 很可能测不出来。客观指标适合做批量回归筛选,最终好听与否必须以主观 MOS 为准。

为何常见:客观指标能自动跑、能复现,容易让人产生“数字即真相”的错觉。

误区合成语音和目标说话人的嵌入向量余弦相似度是 0.9,说明克隆得很完美,可以放心使用。

正解0.9 这个数字本身没有绝对意义。相似度阈值取决于用的是哪个说话人嵌入模型、参考语音的时长、语料风格,甚至训练集里有没有这个人的数据。好比用不同品牌的电子秤量体重,数字不能直接横比。更可靠的做法是同时报告 EER 或与一批真实“本人-非本人”对比样本的分布,确定阈值,而不是拍脑袋定一个 0.9。

为何常见:人们天然喜欢用一个简单的数字界限来判断问题,忽略了指标背后的前提条件。

误区模型 A 的 WER 是 5%,模型 B 是 8%,所以模型 A 的听感质量一定更高。

正解WER 是让 ASR 去转写合成音频,反映的是“机器可懂度”,与人对自然度的感知并不完全一致。有些机械腔合成音每个字都清晰,WER 很低,但人一听就觉得假;有些情感丰富的语音带有语气词和呼吸声,反而容易被 ASR 误删字。可懂度是质量的必要条件,但不是充分条件,必须和 MOS 一起看。

为何常见:WER 是自动算出来的,让人觉得客观且省事,于是把它过度拔高为唯一质量指标。

误区我给合成语音加了白噪声再测 MOS,发现分数没怎么降,说明模型鲁棒性很好。

正解加噪声只是鲁棒性的一小部分。TTS 模型的压力测试还包括文本层面的挑战:生僻字、多音字、数字读法、中英混读;也包括语速、情感、停顿等发音变化,甚至换一个从未见过的说话人音色。就像评测餐厅不能只看店里不忙时出菜快不快,还要看高峰期、换食材、换厨师的综合表现。测试条件设计得越全面,鲁棒性结论才越可信。

为何常见:“鲁棒性”听起来像工程问题,容易让人联想到加噪声,而忽略了 TTS 特有的文本与语音多样性。

面试题

Q1. MOS(平均意见得分)的评分范围是?

单选题 · easy

  • A.0~1 分,0 最差 1 最好
  • B.1~5 分,1 最差 5 最好← 正确答案
  • C.0~100 分,100 分最差
  • D.-1~1 分,1 分最差

答案:B。MOS 是主观平均意见得分,采用 1~5 分制,1 分表示极差,5 分表示接近完美。0~1 是 STOI 这类客观指标的范围,100 分制是 MUSHRA 实验的滑动条设计,都不属于标准 MOS 的评分范围。

Q2. 说话人相似度最常用的计算方式是?

单选题 · easy

  • A.直接比较两个波形文件大小
  • B.提取嵌入向量后算余弦相似度← 正确答案
  • C.计算音高均值的绝对差值
  • D.用语音时长之比近似估计

答案:B。主流做法是用说话人识别模型提取嵌入向量,再计算余弦相似度,衡量音色方向是否一致。波形文件大小、音高均值、时长比例都无法刻画多维音色特征,不能作为相似度依据。

Q3. WER 公式 WER = (S + D + I) / N 中 S 代表?

单选题 · mid

  • A.正确识别的字数总和
  • B.被系统漏删掉的字数
  • C.被替换为别字的字数← 正确答案
  • D.参考文本的总字数

答案:C。S 是替换错误,即原文某个字被识别成了另一个字,比如“好”被听成“号”。D 是删除错误,I 是插入错误,N 是总字数。把三者相加再除以总字数,才得到字错误率 WER。

Q4. RSD(变异系数)越大说明什么?

单选题 · mid

  • A.模型在不同条件下表现越稳定
  • B.MOS 分数在所有条件下越高
  • C.模型在不同条件下得分波动越大← 正确答案
  • D.说话人相似度越接近 1

答案:C。RSD 是标准差除以均值,衡量相对波动幅度。RSD 越大说明各测试条件下分数越分散,鲁棒性越差,而不是越稳定。它衡量的是波动性,与绝对分数高低或相似度无关。

Q5. 样本量估算公式 n = (zσ/E)² 中 E 代表?

单选题 · hard

  • A.测试语句的总时长秒数
  • B.允许的均分误差半宽← 正确答案
  • C.评分者的平均年龄
  • D.模型的训练轮数

答案:B。E 是允许误差,即你希望 MOS 均值的估计误差不超过多少,比如 ±0.2 分。E 越小,所需样本量越多。测试时长、年龄、训练轮数都与样本量估算无关。

Q6. MUSHRA 主观评测方法的特点是?

单选题 · mid

  • A.同时听多个系统且隐藏参考音← 正确答案
  • B.只给一个系统打分没有参考
  • C.强制二选一必须给出偏好
  • D.完全不需要真实语音参照

答案:A。MUSHRA 让评分者同时听到多个候选系统和一个真实参考音,但隐藏参考音对应的选项,防止大家盲目选择最像参考的那一个。只给一个系统打分是绝对评分,强制二选一是 AB 偏好测试,都不需要真实语音参照也是错的。

Q7. 用 PESQ 评测 TTS 合成语音的主要局限是?

单选题 · easy

  • A.完全等同人耳听感所以无需主观
  • B.偏向窄带噪声场景不评估音色← 正确答案
  • C.不需要参考音频就能独立运行
  • D.只能输出 0 到 1 的二进制结果

答案:B。PESQ 是为电话窄带和噪声补偿设计的客观指标,对自然度、音色这类 TTS 关键维度不敏感。它需要参考音频,输出范围是 -0.5~4.5,也不能替代主观 MOS。

Q8. 完整评估合成语音质量应包含哪些维度?

多选题 · mid

  • A.自然度与可懂度的主观评分← 正确答案
  • B.与目标说话人的音色相似度← 正确答案
  • C.训练时 GPU 的功耗与显存
  • D.噪声等条件下的鲁棒稳定性← 正确答案

答案:ABD。完整评估要覆盖主观听感(自然度、可懂度)、音色相似度和鲁棒性。GPU 功耗与显存属于训练效率问题,不属于合成语音质量维度,因此不选 C。

Q9. 以下哪些措施能提升主观评测的可信度?

多选题 · hard

  • A.采用盲测,隐藏系统名称← 正确答案
  • B.随机打乱样本播放顺序← 正确答案
  • C.只请一位专家反复打分
  • D.报告 95% 置信区间← 正确答案

答案:ABD。盲测避免品牌偏见,随机顺序避免疲劳效应和位置偏好,置信区间反映统计可信度。只请一位专家打分,样本量不足且个体偏差无法消除,反而降低可信度,因此不选 C。

Q10. 常用的说话人相似度评测手段包括?

多选题 · mid

  • A.说话人嵌入向量的余弦相似度← 正确答案
  • B.等错误率 EER 阈值评估← 正确答案
  • C.语音时长的秒数对比
  • D.听众主观相似度打分← 正确答案

答案:ABD。嵌入余弦相似度是客观核心指标,EER 用于验证“真声 vs 克隆”的区分能力,主观相似度打分则是人耳的直接判断。语音时长只能反映语速和停顿,不能说明音色像不像,因此不选 C。