每家语音转文字厂商都会公布词错误率(WER),但对泰语来说,这个数字的意义比看上去小。词错误率统计参考转写稿与模型输出之间被替换、删除和插入的词,再除以参考稿的总词数。要计数,就得先有词边界。英语在每个词边界都留空格。泰语只在短语末尾留空格,短语内部一个词在哪里结束,由分词器决定。
给泰语转写稿打分,目标是让两个模型可以放在一起比较。为此要弄清分词器对数字的影响、应该改用哪个指标、计数前要规范哪些写法,以及如何用您手头已有的音频建立测试集。文中不给出任何模型的数字,包括我们自己的。数字旁边不附测量方法,正是这篇文章要讨论的问题。
分词器对数字的影响#
取一行参考文本,再取一行只差一个音节的识别结果,分别用两种常见的泰语分词器打分。一种把 งบประมาณ 当作一个词,另一种把它拆成 งบ 和 ประมาณ。同一个错误在两种分词下得出不同的词错误率,而两种分词都没有错。
reference วันนี้ประชุมเรื่องงบประมาณปีหน้า hypothesis วันนี้ประชุมเรื่องงบประมานปีหน้า tokenizer A วันนี้ | ประชุม | เรื่อง | งบประมาณ | ปีหน้า 5 words tokenizer B วัน | นี้ | ประชุม | เรื่อง | งบ | ประมาณ | ปี | หน้า 8 words one wrong syllable in งบประมาณ WER under A 1 / 5 = 20% WER under B 1 / 8 = 12.5% CER 1 / 32 = 3.1%
因此,公布出来的泰语词错误率里藏着一个变量。两家厂商用两种分词器打分,结果无法比较;同一家厂商的数字,如果不注明分词器,也无法复现。分词器切得越细,所有人的数字都会越低。
字符错误率#
字符错误率(CER)以字符为单位统计同样的三种操作。泰文字符之间有明确的边界,在任何机器上计数结果都一样,也不需要分词器。大多数泰语语音研究报告的都是这个指标。厂商报出词错误率时,应该向对方要的也是它。
同一份转写稿的字符错误率会比词错误率小,因为一个错误只涉及一个词里若干字符中的一个。两者量级不同,但只要两个模型用同样的方法、在同样的参考稿上打分,比较依然成立。
字符错误率有一个盲点。声调符号或上元音的书写顺序错了,即使显示出来的词看起来正确,也算作字符错误。计数前先把两份文本的 Unicode 顺序规范化,这个盲点就消除了。
计数前先规范化#
转写稿和参考稿之间有些差异只是书写惯例,把它们计入分数,量到的就是惯例本身。打分前逐项定好规则,并对两边采用同一条规则。
- 数字。参考稿用数字书写、识别结果用数词拼写时,整个数的每个字符都对不上。选定一种形式。转写 API 可按请求输出其中任一种,口语形式与边听音频边录入的参考稿一致。
- 空格。两位录入员在泰语短语之间留空格的习惯并不一致。计数前删去所有空格,或者把空格单独统计成一个数字。
- 重复符号。ๆ 与把词写两遍表示的是同一段语音。在两边都把这个符号展开。
- 英文单词的标点和大小写。泰语句子切换到英语时,会把英语的书写惯例一起带进来。两边都转为小写并去掉标点。
- 填充词。逐字参考稿保留 เอ่อ,整理版参考稿会删掉它。逐字输出要对照逐字参考稿打分。整理风格是为了便于阅读,拿它对照逐字参考稿,分数必然更差。
用您自己的音频建立测试集#
厂商的测试集听起来像厂商自己的数据。您的测试集听起来像您的通话、会议或课堂,里面有您的产品名称和您的说话人。准备五十段录音,每段两到五分钟,覆盖您现有的说话人、录音场地和话题,这样的测试集就足以评判一个模型。
参考稿由人边听音频边录入,并按上面清单中每一项的书面规则执行。再请第二个人抽查一部分。参考稿自身若有百分之五的错误率,就分辨不出两个模型之间两个百分点的差距。
把参考稿和音频放在一起保存,用同一个脚本在整个测试集上给每个候选模型打分。报告字符错误率、规范化规则和测试集规模。读者拿到这三项就能复现数字,而能复现的数字才值得信任。
我们公布什么#
Paxa STT Lite 目前不公布自己的准确率数字。评测方法先行,数字只会和得出它的测试集与规则一起发布。在那之前,您可以通过产品页上的录音和转写工具,用自己选的音频来评判这个模型。
下一步#
- 阅读转写指南,了解上述规范化规则所依赖的书写惯例和风格选项。
- 阅读泰语转写稿的数字写法,逐行了解口语和书面两种写法有何不同。
- 打开转写工具,在写下任何一行参考稿之前,先用您自己的几段录音试一试。