语音识别到底把哪些语言处理得好
「支持 99 种语言」听起来像是问题已经解决。实际上这份列表是一条梯度曲线:十几种语言接近人工水平,中间一大段可用但需要校对,尾部一些语言产出的文本需要的修改比它省下的时间还多。
支持列表是梯度,不是勾选框
支持程度取决于训练数据里该语言的占比,而这极不均衡。一个实用的粗略分级:
| 层级 | 语言 | 可以期待什么 |
|---|---|---|
| 强 | 英语、中文、西班牙语、德语、法语、日语、俄语、葡萄牙语 | 语音清晰时错误率个位数;轻度校对即可使用 |
| 良好 | 韩语、波兰语、荷兰语、土耳其语、阿拉伯语、粤语等 | 内容可靠,人名和术语出错更多 |
| 可用 | 其余多数欧洲语言和较大的亚洲语言 | 大意正确;需要实打实的编辑 |
| 弱尾部 | 列表末端的低资源语言 | 在自己的音频上先测,再决定要不要用 |
唯一有意义的数字是在你自己的录音上测出来的那个——口音、音质和话题对结果的影响,比层级本身更大。
自动检测的原理,以及何时失灵
默认情况下,语种根据录音开头自动判定。超过几句话的录音上这很可靠。它在两种情况下失灵:
- 极短的片段。三秒钟的语音证据太薄,一句短语在另一种语言里也说得通。
- 嘈杂的开头。录音以音乐、等待音或抢话开场,检测就以那段为准。
两种情况的解法相同——直接说明语种:
r = client.audio.transcriptions.create(
model="whisper-1", file=f, language="zh",
)
用两位字母代码。显式指定还会跳过检测这一步,处理略微加快。
检查检测出的语种
消息流确实是多语种时,让检测运行并读取结果——它连同置信度一起返回:
r = client.audio.transcriptions.create(
model="whisper-1", file=f, response_format="verbose_json",
)
print(r.language, r.language_probability)
if r.language_probability < 0.6:
queue_for_review(r) # 置信度低——转人工检查
这也是路由入站消息最便宜的办法:检测语种,把会话分给说这种语言的客服,可疑的那几个百分点标给人工。
中途切换语言的录音
这是真正的限制,值得准确理解:语种在录音开头判定一次,其余部分都按那个模式转录。开头说中文、中途切到英文的发言人,英文部分会被当成中文来转——常常变成看起来通顺的乱码。
两种处理方式:
- 在切换点切开,各段用各自的语种转录——适合切换少而可预测的场景(双语访谈、两位讲者的会议)。
- 接受主导语种,如果第二种语言只以偶尔的外来词和术语出现——这种情况通常没问题,那些词按发音转出来。
行不通的是指望一次请求跟着语言切换走。任何参数都改变不了这一点。
专有名词是所有语言共同的弱点
纵观整个列表,错误集中在同一个地方:专有名词。产品名、人名、地名、缩写——模型没什么理由预期的词。解法在所有语言里都一样:
r = client.audio.transcriptions.create(
model="whisper-1", file=f, language="zh",
prompt="发言人:李文静、马克·杜阿尔特。产品:红隼、鹰巢。",
)
提示词用音频的语言来写。它把识别向这些写法偏移,顺带也影响输出的标点风格——提示本身怎么标点,输出就倾向于怎么标点。
上线之前要测什么
- 二十条真实录音,目标语种、贴近生产环境——不是干净的录音棚样本。
- 按你在意的指标测错误率:业务需要订单号,就把数字错误单独统计。
- 带与不带
language各测一遍——短片段上这个差异常常大过其他任何改动。 - 加上术语表再测一遍。专有名词是你的问题的话,解决就在这一步。
一个下午的这种测试,比任何公开基准告诉你的都多,因为它测的是你实际要发送的音频。
用你自己的录音试一试。 注册只需一分钟,免费额度足够判断识别质量。
免费获取 API 密钥常见问题
99 种语言的准确率都一样吗?
不一样。十几种大语种在清晰语音上接近人工水平,越往列表后面质量越低。永远在自己的录音上测试,不要只看数量。
中文识别效果怎么样?
中文(普通话)属于识别质量最好的一批语种。粤语也受支持,但准确率低一档。带口音的普通话通常没有问题,专有名词还是建议通过 prompt 传入。
应该指定语种还是让它自动检测?
音频是单一语种就指定,短片段尤其如此——检测可用的信息太少。录音确实来自不同语种时保留自动检测。
怎么知道检测出了哪种语言?
请求 verbose_json——响应包含检测出的语种和一个概率值。概率低是复查那条录音的可靠信号。
prompt 参数对每种语言都有效吗?
有效,而且要用音频的语言来写。它是修复人名和专业术语的最有效手段,而这正是所有语言的主要错误来源。
相关阅读
- 语音消息转文字:Telegram、WhatsApp 及其他即时通讯工具 — 如何自动把语音消息转成文字:处理 ogg/opus 格式、提升短录音准确率、应对静音,以及可直接使用的聊天机器人代码。
- 如何提高语音识别准确率:八个实用方法 — 真正能改善转录质量的八件事:音频预处理、指定语种、prompt 词表、切分策略、响应格式,以及如何测量字错率。
- 如何把通话录音转成文字 — 分步教程:几分钟内通过 API 把电话录音转成文字,包含 Python 和 C# 代码示例、响应格式说明,以及常见错误的处理办法。