词错误率对一个错误的人名、一个错误的数字和一个漏掉的“not”与一个漏掉的“the”一视同仁。评判一套转录系统,应看它能捕获哪些错误、能否看到它的修正,而不是只看那个宣传用的总数字。
词错误率是语音识别领域的标准衡量指标。取一份经人工核对的参考转录文本,将机器的输出与之逐词对齐,并统计三类错误:替换(用错了词)、插入(多出了一个没有说过的词)和删除(漏掉了一个词)。三者相加,再除以参考文本的词数。
WER =(替换数 + 插入数 + 删除数)/ 参考文本的词数
对齐并非靠肉眼完成。两份文本通过最小编辑距离对齐(即莱文斯坦距离,但以词而非字母为单位):在所有将输出与参考配对的方式中,评分程序会选出编辑次数最少的一种,并统计这些编辑。由于插入也计入错误,而分母是参考文本的长度,词错误率可能超过 100%:一个在安静的一分钟里硬写满文字的模型,得分会比什么都不写的模型更差。
假设参考文本是 "we will meet Dr Okafor at nine on Thursday",共九个词,而机器写的是 "we will meet the doctor at nine on Tuesday"。这里有三处替换(Dr、Okafor、Thursday),除以九个词,词错误率为 33%。三分之二的词是对的,但你仍然去错了会议,还错了日子。如果只有 "Thursday" 错了,得分会是 11%。而一个每个词都正确、只是多出了一个没人说过的 "um" 的版本,同样得 11%,因为插入与替换的计分方式相同。
计数之前,两段文本通常会先经过规范化,而其中的选择对得分的影响不亚于模型本身。"Dr" 和 "Doctor" 算同一个词吗?"nine" 和 "9" 算同一个吗?大小写和标点要不要计入?严格的评分会把 "Dr" 与 "Doctor" 判为一次替换。大多数公开的分数会先把所有字母转为小写、去掉标点,并把数字统一成一种写法(全部写成文字或全部写成阿拉伯数字),然后再比较。因此,供应商公布的数字会悄悄依赖于一个你看不见的规范化工具。中文、日文和泰文等不用空格分词的语言,没有清晰的词界可供计数,因此改用字错误率(CER)来评分:公式相同,只是以字符为单位。
由此得出两点。第一,5% 的词错误率意味着每二十个词里就有一个错误,一小时的演讲大约会有好几百个错误的词。作为参照,人工转录员在日常对话语音上的错误率常被引用为大约 4% 到 5%;而一个经常被引用的 2017 年结果显示,在 Switchboard 电话语料库上,机器的错误率约为 5.1%。不过这两个数字都取决于音频与评分规则。第二,这个数字完全取决于测试音频:干净的朗读语音,与带有口音和相互打断的嘈杂小组讨论,会得出截然不同的结果。一个宣传用的词错误率,描述的与其说是供应商的系统,不如说是供应商的测试集。
以上是计数的方法。它没有反映的,是每个错误对读者造成的代价。
词错误率对每个词一视同仁。读者却不这样看:
这些情况中的每一种,在词错误率一栏里都只是一两个错误。而在读者那一栏里,它们的代价从无关紧要,到“在错误的日子去了另一场会议”不等。因此,问题不仅是“错误率是多少”,还要问“是哪些类型的错误,以及由什么来捕获它们”。
多个层次共同捕获识别过程中出错的地方,而且每一处改动都会被记录,以便检查和撤销。在实时转录中,这一切在文字仍在输出时就已完成:每一行先以可能仍会变动的草稿形式显示,然后才成为定稿(实时翻译延迟解析解释了原因)。
有些错误听起来对,但放在句子里不对:本应是 "there" 的地方写成了 "their"。这类错误可以借助上下文找出,纠正结果会以可见的更新呈现给读者(在 API 中为 transcript.amended),而不是被悄悄改写。上下文擅长预测句子中可以预料到的词,而对无法预测的词则无能为力。
人名和专业术语是上下文无法修正的错误,因为人名往往只出现一次,周围没有可以用来推断它的线索。参考脚本可以解决这个问题:在开始之前,把演讲内容、幻灯片或人名与术语列表交给系统,其中的词语会优先于引擎误听的结果。录制过程中,脚本会像提词器一样跟随转录文本,主持人可以看到引擎进行到了哪里。脚本能覆盖可以预测的词,而嘈杂的音频和口音则会产生那些无法预测的词。
有些错误只有在现场的人才能看出来。手动更正允许主持人在转录仍在进行时改写任何一个词或任何一行,直播中的每位听众都会看到这一改动。系统会提示主持人可能出错的地方:引擎不确定的词可以被标上颜色并加下划线,主持人可以逐段查看这些不确定的片段,而不必重读整份转录文本。通过 API,GET /v1/recordings/{id}/corrections 可以列出某段录音的全部更正,POST /v1/corrections/{id}/revert 可以撤销其中的一项;详见 API 参考文档。不过,即便是在现场的人,也无法更正一句谁都没能听清的话。
最后一层承认,有些音频是无法还原的。当某一行的置信度低于转录的置信度阈值(默认为 confidence.hideBelow,即 0.60)时,听众看到的是“音频不清晰”,而不是一个猜测的结果,而且这一行永远不会被朗读出来。读者会失去这一行,但不会得到一段凭空捏造的内容。
设计这些层次时所针对的同一类问题,也适用于任何供应商的准确率声明,包括我们自己的。
阅读任何准确率声明时,可以参考以下简短清单:
VocalStack 不公布内部的词错误率数字,原因正是上面的第一点:它描述的是我们的测试集,而不是你的音频。我们持续地衡量准确率。在对比其他系统时,我们使用已发布的独立基准测试和供应商公布的数据,绝不使用私下的测试。其余的,请用你自己的音频来判断。