首页博客 → 语音识别到底把哪些语言处理得好

语音识别到底把哪些语言处理得好

发布于 2026-08-05 · 5 分钟阅读

「支持 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="发言人:李文静、马克·杜阿尔特。产品:红隼、鹰巢。",
)

提示词用音频的语言来写。它把识别向这些写法偏移,顺带也影响输出的标点风格——提示本身怎么标点,输出就倾向于怎么标点。

上线之前要测什么

  1. 二十条真实录音,目标语种、贴近生产环境——不是干净的录音棚样本。
  2. 按你在意的指标测错误率:业务需要订单号,就把数字错误单独统计。
  3. 带与不带 language 各测一遍——短片段上这个差异常常大过其他任何改动。
  4. 加上术语表再测一遍。专有名词是你的问题的话,解决就在这一步。

一个下午的这种测试,比任何公开基准告诉你的都多,因为它测的是你实际要发送的音频。

用你自己的录音试一试。 注册只需一分钟,免费额度足够判断识别质量。

免费获取 API 密钥

常见问题

99 种语言的准确率都一样吗?

不一样。十几种大语种在清晰语音上接近人工水平,越往列表后面质量越低。永远在自己的录音上测试,不要只看数量。

中文识别效果怎么样?

中文(普通话)属于识别质量最好的一批语种。粤语也受支持,但准确率低一档。带口音的普通话通常没有问题,专有名词还是建议通过 prompt 传入。

应该指定语种还是让它自动检测?

音频是单一语种就指定,短片段尤其如此——检测可用的信息太少。录音确实来自不同语种时保留自动检测。

怎么知道检测出了哪种语言?

请求 verbose_json——响应包含检测出的语种和一个概率值。概率低是复查那条录音的可靠信号。

prompt 参数对每种语言都有效吗?

有效,而且要用音频的语言来写。它是修复人名和专业术语的最有效手段,而这正是所有语言的主要错误来源。

相关阅读