语音识别系统(ASR)的标准评估指标是词错误率(Word Error Rate, WER)。 WER 衡量的是识别器输出的词序列(称为假设(hypothesized)词串)与人工标注的参考转录(reference transcription)之间的差异程度。 计算词错误率的第一步是计算假设词串与参考词串之间的最小编辑距离(minimum edit distance),即把一个词串转换为另一个所需的最少词替换(substitutions)、词插入(insertions)和词删除(deletions)操作总数。 词错误率(WER)的定义如下(注意:由于公式中包含插入操作,WER 可能超过 100%):
$$ \text{Word Error Rate} = 100 \times \frac{\text{Insertions} + \text{Substitutions} + \text{Deletions}}{\text{Total Words in Correct Transcript}} $$以下是一个来自 CallHome 语料库的参考转录与系统假设之间的对齐示例,展示了用于计算错误率的各项计数:
REF: i *** ** UM the PHONE IS i LEFT THE portable **** PHONE UPSTAIRS last night
HYP: i GOT IT TO the ***** FULLEST i LOVE TO portable FORM OF STORES last night
Eval: I I S D S S S I S S
该句子包含 6 次替换、3 次插入 和 1 次删除:
$$ \text{Word Error Rate} = 100 \times \frac{6 + 3 + 1}{13} = 76.9\% $$计算词错误率的标准工具是一个名为 sclite 的免费脚本,由美国国家标准与技术研究院(NIST)提供(NIST, 2005)。 Sclite 接收一组参考句子(人工转录的黄金标准)和对应的一组假设句子。 除了进行对齐和计算 WER 外,sclite 还能执行多种有用的分析任务。 例如,在错误分析(error analysis)方面,它可生成混淆矩阵(confusion matrices),显示哪些词常被误识别为其他词,并汇总频繁被插入或删除的词的统计信息。 此外,如果句子带有说话人标识(speaker ID),sclite 还能按说话人分别报告错误率,并提供其他有用指标,如句子错误率(sentence error rate),即至少包含一个词错误的句子所占的百分比。
评估前的文本归一化
在计算词错误率之前,通常需要对文本进行归一化(text normalization)。 目前已有多种软件包可用于实现归一化规则。 例如,英语中一些常见的归一化规则包括:
- 移除元语言内容:删除位于方括号
[ ]内的非语言性注释(如转录说明、语气标记等); - 处理填充词或犹豫词:移除或标准化 “uh”、“um”、“err” 等填充停顿;
- 统一缩写形式:将缩写与完整形式标准化(如 “I’m” ↔ “I am”);
- 规范化非常规词(NSW, non-standard words):将数字、数量、日期、时间等转换为标准读法(例如 “$100” → “one hundred dollars”);
- 统一英美拼写:例如将 “colour”(英式)与 “color”(美式)统一为一种形式,以避免因拼写差异导致不必要的错误计数。
ASR 的统计显著性检验:MAPSSWE 或 McNemar 检验
与其他语言处理算法一样,我们需要判断词错误率(WER)的某次改进是否具有统计显著性。
判断两个系统 WER 是否存在显著差异的标准统计检验方法是 MAPSSWE(Matched-Pair Sentence Segment Word Error)检验,由 Gillick 和 Cox(1989)提出。
MAPSSWE 是一种参数检验方法,它考察两个系统在多个语段(segments)上产生的词错误数量之差的平均值。 这些语段可以很短,也可以是一整句话;通常,我们希望使用尽可能多的(较短的)语段,以满足正态性假设并提高检验功效(statistical power)。 该检验要求一个语段中的错误与其他语段中的错误在统计上相互独立。 由于 ASR 系统通常使用三元语法语言模型(trigram LM),我们可以近似满足这一独立性要求:将语段定义为两侧均由两个系统都正确识别的词所界定的区域(或由话轮/话语边界界定)。 以下是 NIST(2007)给出的一个包含四个区域的示例:
I II III IV
REF: |it was|the best|of|times it|was the worst|of times| |it was
| | | | | | | |
SYS A:|ITS |the best|of|times it|IS the worst |of times|OR|it was
| | | | | | | |
SYS B:|it was|the best| |times it|WON the TEST |of times| |it was
在区域 I 中,系统 A 有 2 个错误(1 次删除 + 1 次插入),系统 B 有 0 个错误;在区域 III 中,系统 A 有 1 个错误(替换),系统 B 有 2 个错误。 我们定义一个变量序列 $Z$ 来表示两个系统在各语段上的错误数之差:
- $N^i_A$:系统 A 在第 $i$ 个语段上的错误数
- $N^i_B$:系统 B 在第 $i$ 个语段上的错误数
- $Z$:$N^i_A - N^i_B$,其中 $i = 1, 2, \dots, n$,$n$ 为语段总数
在上述例子中,$Z$ 序列为 $\{2, 0, -1, 1\}$(注:区域 II 两系统均无错,故 $Z_2 = 0$;原文误写为 {-1},此处已修正)。 直观上,如果两个系统性能相同,我们预期 $Z$ 值的平均值应接近零。 设真实平均差值为 $\mu_z$,我们希望检验是否 $\mu_z = 0$。 根据 Gillick 和 Cox(1989)的原始提议和记号,可用样本估计该均值:
$$ \hat{\mu}_z = \frac{1}{n} \sum_{i=1}^n Z_i $$$Z_i$ 的方差估计为:
$$ \alpha^2_z = \frac{1}{n-1} \sum_{i=1}^n (Z_i - \hat{\mu}_z)^2 \tag{15.24} $$再定义统计量:
$$ W = \frac{\hat{\mu}_z}{\alpha_z / \sqrt{n}} \tag{15.25} $$当语段数量 $n$ 足够大(通常 $n > 50$)时,$W$ 近似服从标准正态分布(均值为 0,方差为 1)。 原假设为 $H_0: \mu_z = 0$。若满足以下条件,则可在 5% 显著性水平下拒绝原假设:双尾检验:$2 \cdot P(Z \geq |w|) \leq 0.05$;单尾检验:$P(Z \geq |w|) \leq 0.05$。其中 $Z$ 为标准正态变量,$w$ 是实际计算出的 $W$ 值;相关概率可通过标准正态分布表查得。
早期研究有时使用 McNemar 检验(McNemar’s test)进行显著性分析,但 McNemar 检验仅适用于系统错误相互独立的情形。而在连续语音识别中,一个词上的错误往往与相邻词的错误高度相关,因此 McNemar 检验并不适用。
能否改进词错误率这一指标? 理想情况下,我们或许希望有一个不平等对待所有词的评估指标。例如,对“Tuesday”这样的实义词(content words)赋予更高权重,而对“a”或“of”这类功能词(function words)赋予较低权重。 尽管研究者普遍认为这是个好主意,但要设计一个适用于所有 ASR 应用场景的统一加权指标仍十分困难,至今尚未达成共识。