这类问题我又碰上了一次。用 funasr 1.1 的 AutoModel 加载 paraformer-zh 做会议转写,generate 之后只拿到 text,想按句回放却找不到 timestamp 字段,model 目录里也没有额外的 punc 模型。
第一反应是「结果对象是 list of dict,键名是 timestamp 不是 timestamps」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。paraformer 默认只输出文本,时间戳要开 return_raw_text;没有配套的 vad 与 punc 模型,句子没有被切分;用了 onnx 导出的模型,导出时丢了时间戳头。
先打印返回对象的全部键
python -c "from funasr import AutoModel;m=AutoModel(model='paraformer-zh');r=m.generate(input='a.wav');print(r[0].keys())"
同时加载 vad 与 punc 模型再推理
python -c "from funasr import AutoModel;m=AutoModel(model='paraformer-zh',vad_model='fsmn-vad',punc_model='ct-punc');print('loaded')"
然后确认句子级时间戳的毫秒单位
python -c "print({'start':0,'end':3200})"
等前面都确认过,再用官方示例音频复现一次对照
python -c "from funasr import AutoModel;m=AutoModel(model='paraformer-zh');print(m.generate(input='asr_example.wav')[0])"
改完先别撤,确认这几项。返回结果里每句都带 start 与 end,单位是毫秒且单调递增,最后一句的 end 与音频总长相差不超过一秒。
提醒一点。时间戳依赖 punc 模型切句,只加载主模型时拿不到句边界,这一点在文档里写得很靠后。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
