粤语语音识别:SenseVoice 原生输出地道粤语口语(Whisper 会转成普通话)

全球约有 8500 万粤语使用者,但开源语音识别对粤语的支持一直很弱。Whisper 名义上有粤语,实际上它把粤语当成中文(zh)处理、转写成普通话书面语——,地道的粤语口语就这么没了。

SenseVoice(FunAudioLLM 团队开源的多语种语音理解模型)原生支持粤语(yue):自动识别语种、保留真正的粤语口语用字,一次非自回归前向就给出结果。下面是同一段粤语音频的真实对比。

真实对比:同一段粤语音频

用 SenseVoice 自带的粤语示例 yue.mp3 实测,两个模型的真实输出:

模型识别语种输出
SenseVoiceyue(粤语)呢几个字都表达到,我想讲意思。
Whisper-smallzh(中文)這幾個字都表達到我想講意思

差别一目了然:SenseVoice 保留了粤语标志性的 / / ;Whisper 没有独立的粤语,把它识别成中文并转成了普通话书面语(呢→這唔→不嘅→的)——意思大致对,但已经不是粤语了。

3 行代码跑通粤语识别

pip install funasr

from funasr import AutoModel
from funasr.utils.postprocess_utils import rich_transcription_postprocess

model = AutoModel(model="iic/SenseVoiceSmall", disable_update=True)
res = model.generate(input="cantonese.wav", cache={}, language="yue", use_itn=True)

print(rich_transcription_postprocess(res[0]["text"]))
# 呢几个字都表达唔到,我想讲嘅意思。

language 可以直接写 "yue",也可以写 "auto" 让模型自动判语种——实测这段音频在 auto 下同样被正确判为 yue 并给出一致结果。

原始输出里还带了什么

SenseVoice 的原始输出每段开头有一串标签:

<|yue|><|NEUTRAL|><|Speech|><|withitn|>呢几个字都表达唔到,我想讲嘅意思。

含义:<|yue|> = 语种是粤语;<|NEUTRAL|> = 情感;<|Speech|> = 音频事件(纯人声);<|withitn|> = 已做逆文本归一化。也就是说,识别粤语的同时,语种 / 情感 / 音频事件全都免费拿到了。用 rich_transcription_postprocess() 一行就能清洗成纯文本。

为什么粤语识别选 SenseVoice

SenseVoiceWhisper
粤语口语用字(呢/唔/嘅)✅ 原生保留❌ 转成普通话
自动语种识别✅ 直接判出 yue归为 zh
情感 / 音频事件✅ 一次出
逆文本归一化(ITN)✅ 内置部分
速度非自回归,比 Whisper-Large 约快 15×自回归基准
许可证开源,可商用开源

如果你的场景是普通话 + 粤语混合(港澳、客服、媒体字幕),SenseVoice 一个模型就能两种都覆盖;要更高精度的离线转写,可以看同属 FunASR 家族的 Fun-ASR-Nano。更完整的中文准确率对比见 FunASR vs Whisper benchmark

FunASR 全家桶都是开源的——工业级 ASR / VAD / 标点 / 说话人 / 情感事件 / LLM-ASR,粤语开箱即用。觉得有用就点个 Star 支持一下 👇

⭐ Star SenseVoice

也欢迎 Star:FunASR · Fun-ASR · FunClip

相关文章