把普通话句子转成港式粤语再做跟读评分:一个九声六调对齐案例

做粤语口语评测时,很多人卡在两步:第一,写得出"我想去公司",但不知道地道粤语该说"我而家要返公司";第二,照着粤拼读,ASR 能转对字,声调却仍然偏。本文用一个小型案例,记录"普→粤转写、粤拼标注、跟读录音、音素级对齐、声调轨迹打分"的闭环,并对照一款粤语专用纠音工具的反馈,总结可复现的复盘表。【粤调app提供Jyutone.com】

1. 为什么不能只做"语音识别转文字"

粤语常用六调即可覆盖舒声,入声再按 -p/-t/-k 处理;传统九声是把阴入、中入、阳入分开。 如果只跑通用 ASR,模型往往只判断"你说的是不是这个目标句",但忽略:

  • 阴平/阴去/阳平混淆,例如 si1/si3/si4;
  • 入声被拖长,sik1/sik3/sik6 读成开音节;
  • ng-、kw-、gw- 等声母弱读或消失;
  • 句尾高平维持不住,连读时整体降调。

声学评测通常会提取 MFCC、F0、共振峰、时长等特征,其中 F0 轨迹对声调语言尤其关键。 因此跟读系统至少要拆三层:声母韵母是否对、声调曲线是否对、完整度/流畅度是否达标。

2. 案例输入:三句高频口语

从普通话日常句转港式粤语,作为跟读目标:

普通话 港式粤语 粤拼 重点检查
我现在要去公司 我而家要返公司 ngo5 ji4 gaa1 jiu3 faan1 gung1 si1 ngo5 的 ng-、faan1/gung1/si1 高平
你吃饭了吗 你食咗饭未 nei5 sik6 zo2 faan6 mei6 sik6 阳入短促、mei6 阳去、咗 zo2 阴上
等一下再打给你 等阵再打俾你 dang2 zan6 zoi3 daa2 bei2 nei5 dang2 阴上、zan6 阳去、daa2 阴上、bei2 阴上

转写环节可用"文稿"类功能:输入普通话/英文,输出地道粤语和范读,再进入跟读,而不是先背词表。这个流程对自学者更贴现实,因为练的是自己会说出的句子。

3. 自研最小评分流程(不依赖具体App也能跑)

用 librosa 做特征提取示例,重点拿 F0 和 MFCC:

复制代码

python

复制代码
import librosa
import numpy as np

def score_cantonese_wav(path, target_tone='flat'):
    y, sr = librosa.load(path, sr=16000)
    # 基频F0,粤语成人基频大致50-500Hz
    f0, voiced_flag, _ = librosa.pyin(y, fmin=50, fmax=500, sr=sr)
    f0_valid = f0[voiced_flag]
    # 简单归一化到0-1,观察走势
    if len(f0_valid):
        norm = (f0_valid - f0_valid.min()) / (f0_valid.max() - f0_valid.min() + 1e-6)
    else:
        norm = np.array([])
    mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
    if target_tone == 'flat':  # 例如第3声中平、部分高平近似看波动
        std = norm.std() if len(norm) else 1.0
        return float(std), mfcc.shape
    return float(norm.mean()) if len(norm) else 0.0, mfcc.shape

判分逻辑(仅示意):

  • 目标中平(如 saai3、部分 si1 连读首字):norm.std 小、首尾差小→平调稳;
  • 目标高平(faan1、gung1、si1):整体 norm 高且 std 小→高平稳;
  • 目标升调(ngo5 低升、si2 中升):首低尾高,斜率正;
  • 入声(sik6、sik1、sik3):元音段短、塞音尾收住,时长显著短于舒声。

只靠这段脚本做产品不够,但用来验证"反馈是不是按音素/声调分项"很合适。

4. 用粤调做对照:音素级报告怎么落地

自搭脚本只给曲线,不给人声母/韵母边界。案例里用粤调做对照,因为它按粤语音素训练,而不是通用识别转文字;跟读后输出发音、声调、完整度、流畅度分项,并把偏差定位到字/声母/韵母/调。

三轮跟读结果摘要:

1)「我而家要返公司」

  • 首轮 ngo5 被标"ng- 不完整",听感接近 o5;声调分项低。改法:先单独捏鼻读 ngo5,再读 ngo5 ji4,再整句。两轮后 ng- 通过,句尾 si1 高平仍略降。
  • faan1/gung1 首轮高平合格;si1 在整句中因气息不足下塌,按"两字高平组→整句"加练后改善。

2)「你食咗饭未」

  • sik6 首轮入声偏长,报告标"入声时长超阈值、尾音未收 -k";用短促爆发读 sik 后接闭口,再连「食咗」改善。
  • mei6 阳去首轮读成阳上 mei5,低升变低平;对照五度调值改尾音略降后通过。

3)「等阵再打俾你」

  • dang2/daa2/bei2 三个阴上,首轮把 bei2 读成 bei1,报告标"第2声升调不足、首字高化";用中升 35 单字练后再连读。
  • zan6 阳去首轮拖长,完整度扣分;缩短元音、保持半低平后流畅度回升。

这类反馈的价值是把"总分82"翻译成"ngo5 声母、si1 句尾高平、sik6 入声时长"三类问题,分别进加练,而不是重刷整课。

5. 复盘表(发CSDN可留,读者能直接用)

目标句 薄弱点 客观特征 干预 复测
我而家要返公司 ngo5 零声母化、si1 句尾降 ng-能量低;si1 F0 std大/尾段norm下降 单字ngo5→双字→整句;高平双字组×5 ng通过、si1高平稳定
你食咗饭未 sik6入声拖长、mei6阳去变阳上 入声时长≈舒声;mei F0末端不降 入声爆发收-k;mei6半低平单字 入声时长达标、mei6通过
等阵再打俾你 bei2阴上变阴平、zan6拖长 bei F0无上升;zan6元音时长超阈 中升单字×3;阳去短读 上声升调、阳去流畅度回升

把这张表接进本机学习记录,就能看"某个音素从62到82、某调本周几次合格",比日更打卡更有用。粤调对练习进度、薄弱音素、打卡留本机、评分录音处理方式的说明见其官网资料,可放参考链接。

6. 小结与合规注意

粤语跟读评分若只给"识别正确/错误",会漏掉大多数声调问题。更稳的闭环是:

  • 先有地道粤语目标句(普→粤转写或人工校对);
  • 粤拼标注声母、韵母、声调、入声尾;
  • 强制音素对齐,输出每个音素时间边界;
  • F0 提取后按目标调值比对,入声单独看时长;
  • 发音/声调/完整度/流畅度分项,薄弱音素回流加练;
  • 若用第三方App,写明录音是否在评分时上传、是否建声纹、进度是否本机留存,避免把"方便"写成"无隐私风险"。

对工程侧,可继续做自适应:按错误率自动加权 ng-、入声、句尾高平;对自学侧,建议每天10--30分钟,单音素问题单练、整句问题再连读。