泰语没有空格:语音识别怎样处理分词与评测
泰文书写时词与词之间不加空格,空格通常只出现在短语或句子之间。这让“识别结果该在哪里断词”成了一个独立的问题,也让常用的词错率(WER)在泰语上变得不稳定。本文说明我们在泰语识别评测中采用的指标和文本规范化做法。
1. 泰文为什么没有空格
泰文是连写的文字:一句话里的词首尾相接,读者靠词汇知识自己切分。空格在泰文里的作用更接近逗号或句号,用来分隔短语和句子。
对语音识别来说,模型输出的是一串连续的字符。下游如果要做搜索、翻译或字幕断行,还要再分一次词。分词本身有歧义:同一串字符可能有不止一种合法的切法,不同分词器的词典和规则也不一样。
ตากลม同一串字符,两种切法
ตา | กลม眼睛圆ตาก | ลม吹风
2. WER 在泰语上为什么不稳定
词错率按“词”统计替换、删除和插入的次数,再除以参考文本的词数。泰语的参考文本和识别结果都要先分词才能计算,于是分词器成了评测的一部分:换一个分词器,词数和对齐方式都会变,WER 也跟着变。
字错率按字符统计,不需要分词,结果只取决于两段文本本身。所以泰语识别更常用 CER 作为主指标。
CER = (S + D + I) / N
S 替换的字符数
D 删除的字符数
I 插入的字符数
N 参考文本的字符数
CER 也有局限:它把错一个字符和错一个词同等看待,不能直接反映一句话读起来是否通顺。所以我们同时报告固定分词器下的 WER,作为参考。
3. 评测前的文本规范化
泰文的元音和声调符号写在辅音的上方或下方。看起来一样的字,在 Unicode 里可能有不同的编码方式:
- 元音 ำ(U+0E33)也可以写成 ํ(U+0E4D)加 า(U+0E32),显示几乎相同。
- 声调符号与上方元音的录入顺序不同,会得到不同的码点序列。
- 泰文数字 ๑๒๓ 和阿拉伯数字 123 混用,全角和半角符号混用。
如果不先统一,这些差异都会被算作识别错误。我们在计算指标前,对参考文本和识别结果做同样的处理:Unicode 规范化、[符号顺序规则]、数字与标点统一、去掉多余空白。
4. 我们的做法
- 主指标是 CER,在上述规范化之后计算。
- 参考指标是 WER,固定使用 [分词器名称与版本] 分词。
- 每个数字都写明测试集、模型版本、硬件和测试日期。
- 完整评测方法与原始结果 CSV 可在公开评测页查看与下载。