实时语音,切分不够彻底,怎么解决 <img width="1206" height="429" alt="Image" src="https://github.com/user-attachments/assets/d9621268-3279-4dc8-8364-33d7b40624bb" />
Activity
andyuan1000 commentedon Sep 24, 2026
画框的代表,同一个人的说话,被切断了。
LauraGPT commentedon Sep 28, 2026
看了原图和补充说明,圈出的两段是
19.5–24.4s / SPK2与24.4–31.5s / SPK3。这里需要区分“同一人的一句话被分成两段”和“同一人被分配成两个说话人标签”;仅调 VAD 静音阈值不能同时保证解决这两类问题。另外,图里
41.3–45.4s排在19.5–24.4s前面。建议同时核对未经过界面排序/拼接的原始结果,先确认时间顺序来自服务端还是展示层。截图本身不足以判断根因。排查相关实现时,我复现了一个独立的说话人分配错误,并提交了 #3733:旧
distribute_spk会重复累计首个领先片段的重叠时长。例如同一句中 A 占 4 秒、B 占 6 秒,却分配给 A;同一标签的非连续片段也可能漏计。候选修复按说话人累计每段的实际交集,32 项直接回归及相关 HTTP/实时服务等共 202 项测试通过。PR 已通过线上 MOSS adapter 与 NumPy 兼容性检查并合并主分支;这是主分支改动,不表示现有安装已包含修复;这不等于已经复现或解决你这段音频的问题,也不涉及声学模型准确率验证。为了继续定位,请补充下面这组最小信息,不需要上传整段私密录音:
AutoModel、WebSocket 服务还是第三方页面;附模型初始化和调用参数。sentence_info,或服务实际返回的 JSON;如果每个音频块分别调用,请附相邻两次返回以及送入块的时间范围。同一说话人可以有多个句段,句段边界不必等于说话人切换;不同独立推理请求产生的聚类编号也不能直接当作跨请求的身份 ID。先保留原始分段和标签,不建议在界面上强行把
SPK2、SPK3全局合并。这个 issue 保持开放,等原始结果对照后再确定是哪一层需要修复。andyuan1000 commentedon Oct 12, 2026
对应补充如下:
1. 复现环境(最小定位信息)
realtime_ws.py,非官方 client 页面)。协议:连接后发文本START→LANGUAGE:zh→ 二进制 Int16 PCM 16kHz 单声道(4096 帧/块)→STOP;服务端返回{"sentences":[{start,end,text,spk,...}], "partial":..., "is_final":...}AutoModel(..., disable_update=True)):iic/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404(SeACo-Paraformer-Large,非流式;device=cuda,fp16=False,punc=True接ct-punc补标点)iic/speech_fsmn_vad_zh-cn-16k-common-pytorch(device=cpu,ncpu=1)iic/speech_campplus_sv_zh-cn_16k-common(cam++,device=cuda)fsmn-vad 切句 → paraformer 整段解码 → 句子确认 → cam++ 对该句提 spk_embedding → distribute_spk(sentence_list, sd_time_list) → sentence["spk"]。VAD 参数(config 覆盖模型默认):max_single_segment_time=15000ms、max_end_silence_time=800ms、max_start_silence_time=3000ms、speech_noise_thres=0.6、speech_to_sil_time_thres=150、chunk_size_ms=60。说话人跟踪:threshold=0.6、max_history_chunks=128、max_speakers=15、ClusterBackend(merge_thr=0.78)。2. 关于时间顺序(41.3–45.4s 排在 19.5–24.4s 前面)
同意截图不足以判断根因。我们会核对服务端返回的原始 sentence JSON 顺序与时间戳(跳过前端展示层),确认乱序来自服务端下发还是页面拼接/排序,再回来同步。
3. 关于 SPK2/SPK3 不强行合并
同意。我们不会在前端全局合并 SPK2/SPK3,保留原始分段与标签,等原始结果对照后确定是哪一层需要修复。
4. 关于 distribute_spk(PR#3733)
我们已复现同类分配错误(同句 A 占 4s、B 占 6s 却分给 A 的场景),并按 PR#3733 的修复思路在用户侧代码准备了 monkey-patch(不打 funasr 第三方包源码),在正式升级到含修复的 funasr 版本前临时生效;升级后会移除 patch。句段边界 ≠ 说话人切换这点我们理解,也会按"同一说话人可有多个句段"来对照数据。
5. 待补充项(我们这边会补)
大佬,这个问题说话人分不干净一般怎么改尼?