用途与实际影响
这项功能怎样使用
为什么需要它
不同声音的分组不能告诉人名;同一个人换麦克风或环境,声音特征也会变。要把匿名发言、声音线索和现实归属分开。
举个实际例子
“把会议按不同发言人分段,先叫说话人1、2,不要猜你不知道的名字。”系统给匿名声音分组和相应文字,后续明确修正只影响已指定的归属。
最后我会得到什么
得到分段时间线、匿名声音组和有来源的归属记录;不是自动识别人名或证明身份。
正常时
能确定声音片段和可靠上下文时,交回带理由、允许纠正的暂定归属;匿名分组仍保留。
发现问题时
声音线索和聊天语境不一致时说明各自依据,不能只靠一个相似分数猜姓名。
入口不可用或证据不足时
时间段或来源证据不能对应原音时只保留匿名组,无法确定的人保持未知。
从哪里开始
多人录音要求区分发言段;标本人时再明确提出。
需要准备什么
- 要区分发言人的录音
- 是否还要判断其中有无本人(如需要)
从开始到拿到结果
- 1
系统核对并处理
先把不同声音按时间组成匿名组,真实身份另取证;相似声音不等于本人已确认。
- 2
交付与接续
交回分组与不确定性;证据不足保持匿名,后来纠正可撤回归属。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
说话人投影与 2–3 来源本人档案单测通过;它仍是推断线索,不是身份认证关键规则与设计选择
Speaker 编号永远不是人物姓名。
同原件 enrollment 不参与对外自证。
本人 profile 只允许一个当前版本,替换后旧证据失效。
单声道混音使用更宽风险带。
有具体理由且彼此一致的上下文可暂时压过相反声学线索,必须同时保留反对依据并说明原因,结论仍为 inferred。
无法消解的冲突、零长度时间或缺少时间戳时保持 unknown(未验证);不能把所有声学冲突一律写成不可归属。
本模块用到的名词
- diarization
- 把声音聚成匿名说话人;它回答“声音是否像不同人”,不回答姓名。
- person:self
- 本机唯一、可替换的本人声纹线索档案。
- held-out
- 来自另一原件的留出样本,用于避免同源自证。
- ambiguity band(歧义带)
- 阈值附近不稳定的分数范围,落入时不做确定归属。
专业定义
先把不同声音匿名分开,再结合声道、声纹、联系人和上下文做有理由、可撤销的本人推断;证据打架时就保留未知。
解决什么
解决匿名聚类被误当身份、拿同一录音建立和验证声纹、profile 撤销后旧结论继续有效、单声道边界分数强行归属,以及不同证据冲突却没有解释的问题。
当前怎样实现
- Paraformer 可输出逐句时间和 CAM++ 匿名聚类。
- Paraformer 固定 `iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch@v2.0.4`;按需 person:self speaker verification 固定 CAM++ model revision v1.0.0、文件 campplus_cn_common.bin、阈值 0.31。
- speaker_evidence.py 建立唯一、私有、可替换的 person:self profile,并区分 enrollment 与 held-out。
- 多参考模式只接受 2–3 个不同来源,生成有界质心而不是无限画像库。
- speaker_attribution.py 组合声学、声道、联系人、角色和句义依据;方向一致可给 inferred,方向冲突时仅在 contextual roles 唯一且有具体理由时采用上下文,否则 unknown(未验证)。
- profile 指纹进入证据;删除或替换后旧声学证据不再参与归属。
执行流程
- 1
取得带时间位置的匿名说话人片段。
- 2
按需加载当前 person:self profile,不扫描媒体库。
- 3
判断当前片段是否与 enrollment 同源。
- 4
计算声学分数和歧义带。
- 5
合并调用方提供的声道、联系人、对话角色和句义依据。
- 6
记录支持、反对与未知。
- 7
输出可解释的 inferred 或 unknown(未验证);使用声纹证据时另绑定当前 profile 指纹。
边界
- 只处理具名录音任务,不扫描整个个人媒体库。
- 声纹向量和私人上下文永不进入公开仓库或网页。
- 归属是可撤销推断,不是生物识别认证。
- 不能识别其他未知人物,也不建设中央人脸/声纹服务。
失败与恢复
- 只有 Speaker 编号
- 保持匿名,不映射真实姓名。
- profile 已撤销或指纹变化
- 旧声学证据失效,其他独立上下文证据单独保留。
- 单声道混音分数接近阈值
- 该分数进入更宽歧义带,不单独支持归属;仍可使用其他具体、有效的上下文,全部依据不足时才 unknown(未验证)。
- 声学与具体上下文冲突
- 同时记录两侧证据;只有上下文本身具体且一致时才说明为何暂时压过声学,并标为可撤销 inferred,否则 unknown(未验证)。
真实入口
E:\Projects\Tools\ChineseASR\src\zh_asr\speaker_evidence.pyperson:self profile、留出证据和撤销
E:\Projects\Tools\ChineseASR\src\zh_asr\speaker_attribution.py上下文与声学证据组合投影
E:\Projects\Tools\ChineseASR\tests\test_speaker_evidence.pyprofile、同源、留出和撤销回归
E:\Projects\Tools\ChineseASR\tests\test_speaker_attribution.py双声道、单声道、时间线和冲突回归
如何验证
- speaker evidence 与 attribution 回归包含在2026-08-31 的 345 项全量通过结果中。
- configs/models.yaml 静态回读确认 CAM++ speaker verification revision=v1.0.0、threshold=0.31;本轮未加载真实私人 profile,也未把阈值冒充身份认证。
- fixtures 覆盖双声道、单声道 unknown(未验证)、无时间戳、零长度时间和冲突证据;另有具体对话理由覆盖弱声纹反证、单声道歧义分数仍可由上下文判断,以及上下文本身冲突必须 unknown(未验证) 的用例。
- 本次没有读取任何私人声纹档案或录音,也没有执行人物身份判断。
与其他模块的关系
本模块消费模型或 Paraformer 的时间线和审计结果;它只增加可解释人物线索,不能提高原转写文本本身的准确性。
