爷爷七十大寿的宴席上,一家人围坐,觥筹交错间有人碰杯、有人劝菜、有人讲起年轻时的故事。你悄悄按下录音键,想把这份热闹完整留住。可事后一听,问题来了:你需要的不是“生日快乐”“多吃点”这类文字——那是语音识别(ASR)的活儿;你需要的是一份“发言时间表”:3 点 02 分爷爷感慨了一句,3 点 05 分二姨和表妹同时开了口,3 点 10 分表哥的笑声盖过了电视新闻……把“谁在什么时候说了话”理清楚,这个任务在 AI 领域就叫说话人分离(Speaker Diarization)。 它就像给声音做“对号入座”:先剪掉没人说话的间隙,再为每一段语音采集“声音指纹”,最后把相同指纹的片段归到同一个人名下。本文以这场寿宴录音为线索,带你从头到尾走一遍说话人分离的完整流程——任务定义、处理流程、声纹嵌入、聚类算法、评估指标、工具实践,以及最前沿的进展方向。
对 AI 从业者而言,说话人分离是会议纪要、客服质检、播客后期等音频产品的“地基中的地基”。掌握它,你就等于拿到了从一条音轨到“谁说了什么”结构化数据的钥匙——这是把音频 AI 真正落地的核心技能之一。
目录
可视化演示
动态演示说话人分离Diarizati的核心机制,通过总览/传输/转换/输出四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
说话人分离Diarizati:说话人分 说话人分离问题定义 说话人嵌入提取方法 核心机制可视化 说话人分离Diarizati整体架构与关键组件
任务定义:给寿宴录音“对号入座”
拿到寿宴录音的那一刻,你要先想清楚:这份“发言时间表”到底该长什么样。它不需要你认出“爷爷”这个名字——现实中你当然认识自家人,但 AI 拿到的只是一段孤零零的音轨,没有任何人脸、名牌可以参照。它要做的,是把语音按“人”分成几组,并标出每一组出现的时间段,至于每组叫什么名字,可以用“人 1”“人 2”这类代号代替。
在技术术语里,这个任务叫说话人分离(Diarization)。最关键的区分在于它与语音识别(ASR)的关系:ASR 回答“说了什么”(what),Diarization 回答“谁在什么时候说”(who + when)。寿宴上你既需要记下那句“你们都有出息了”,也需要知道它是爷爷说的——两者拼在一起,才是一份完整的纪要。
Diarization 的输入是一段未知说话人数量的音频,输出则是一个结构化结果:把整条音轨切分成若干“说话人片段”,每个片段带一个说话人标签和起止时间。这个过程不需要预先注册任何人的声纹,完全靠“摸着石头过河”地分组,因此本质上是一个无监督的聚类问题。
想清楚“要产出什么”,后面的路就好走了。这份“人物+时间”的结构化表格,就是整场寿宴录音的骨架,也是后面所有环节服务的终点。
- 输出集合 D说话人分离系统的全部输出,由若干条“片段记录”组成,就像寿宴纪要里的每一行笔记。
- 标签 s_k第 k 个片段被分配到的说话人代号,例如“人 1”“人 2”,对应寿宴上的“爷爷那堆”“二姨那堆”。
- 起止时间该片段在录音时间轴上的开始与结束时刻,精确到秒甚至更细。
- 下标 k 与总数 K从 1 一直数到 K,表示整段录音被切成了 K 个说话人片段。
处理流程:四步流水线,从声波到人声
一旦想清楚目标,整理寿宴录音的第一步,是先把没有说话的段落剔除。宴会里有碰杯声、筷子敲碗声、电视背景音,还有两段完全安静的间隙——这些都不是“人声发言”,必须先用语音活动检测(VAD)把它们剪掉。就像整理笔记前先划掉空白页,只留下写字的纸。
接下来是分段与分窗:把每个语音区间再切成 1 秒上下的小片段,相当于把一长段发言拆成一条条的“碎纸条”。然后,每张碎纸条都被送到一个神经网络里,压成一个固定长度的声纹向量,这就是“给每张纸条采指纹”。最后一步是聚类归并:把指纹相似的碎片堆在一起,每一堆对应一位说话人,输出前面定义的那种带标签的时间段。
寿宴整理的流水线就此打通:剪空白(VAD)→ 撕纸条(分窗)→ 采指纹(嵌入)→ 分堆(聚类)。其中“采指纹”这一环最考验技术含量,我们专门花一节讲它。
- 录音到语音段VAD 把静音、噪声剪掉,只留下有人说话的区间,相当于划掉笔记本的空白页。
- 分窗 x_i把每个语音段切成长度相近的小窗,作为后续处理的独立单元。
- 嵌入 e_i每个小窗被编码成一个固定维数的向量,也就是这段声音的“指纹”。
- 聚类打标签把相近的向量聚成一类,每类对应一位说话人,得到最终标签序列。
声纹嵌入:独一无二的“声音指纹”
为什么你能在嘈杂寿宴里听出爷爷的声音?因为每个人的声道长度、口腔形状、说话习惯各不相同,组合起来就像指纹一样独特。AI 无法直接“听声辨人”,它需要把一段语音压缩成一个固定长度的数字向量,这就是声纹嵌入(Speaker Embedding)——相当于给声音拍了一张“指纹卡”。
早期方法 i-vector 用高斯混合模型统计每段语音的“音色分布”,像用尺子粗略量一量指纹的纹路;后来深度学习的 x-vector 直接把语音送进神经网络,让网络自己学会提取最能区分说话人的特征,精度大幅提升。如今主流的 ECAPA 等模型,本质都是 x-vector 路线的加强版。
有了指纹卡,判断“两段声音是不是同一个人”就变成了比较两个向量的方向是否一致。最常用的度量是余弦相似度:向量方向越接近,相似度越接近 1,说明越可能是同一个人。
指纹卡采得准不准,直接决定后面分堆的质量。如果爷爷和二姨的指纹正好长得像——比如音色接近、语速相同——这部分误差就会在聚类环节被放大。
- 分子点积两个声纹向量逐位相乘再求和,衡量它们在各维度上“方向一致”的程度。
- 分母模长分别计算两个向量的长度,用于把结果归一化,消除音量大小的影响。
- 比值即相似度相除后得到 [-1,1] 之间的余弦值,1 表示完全同向,0 表示垂直无关。
聚类算法:把指纹卡分堆归位
现在你手里有一叠声纹指纹卡,每张对应 1 秒的语音碎片。接下来要做的,就像在寿宴结束后把散落的家族合影按人归堆:先看哪两张卡最像,把它们放一起,再逐步把相似的小堆合成大堆,直到堆与堆之间差异足够大才停手。这个思路就是层次聚类(AHC)——自底向上、两两合并。
层次聚类简单直观,但它是“近视眼”,只看局部最近的两堆。谱聚类则先把所有样本看成一张图上的节点,用图划分的方式寻找“全局最自然的分割”,对噪声更稳健。而贝叶斯 HMM 更进一步:它把“说话人切换”建模成一条时间链,利用“一个人不会每 0.5 秒就换一次”的时序先验来约束聚类结果,特别适合长录音。
无论哪种算法,核心都是一个“停止条件”:什么时候该停止合并,就意味着找到了说话人数量。层次聚类常用的做法是设定一个距离阈值,当两堆之间的最小距离超过阈值时,就认为它们不是同一个人。
寿宴上的“分堆”到此完成:爷爷的指纹卡堆、二姨的指纹卡堆、表哥表妹的指纹卡堆,各自归位。可这堆分得到底对不对?光靠感觉不行,得有一套客观的批改标准。
- 两组样本A 和 B 是两个候选堆,各自装着若干张声纹指纹卡。
- 双重取最小遍历 A 中每个向量与 B 中每个向量的距离,取最小值,相当于“两个堆之间最短的桥”。
- 欧氏距离用二范数衡量两张指纹卡在向量空间中的直线距离。
评估指标:给整理成果打分补漏
设想你把寿宴纪要交给家人验收,对方会怎么挑毛病?一是“这段没人讲话你怎么写上了”,二是“这段话明明说了你怎么漏了”,三是“这句话是表哥说的,你记成了表妹”。这三类问题,恰好对应说话人分离评估里最核心的指标——DER(Diarization Error Rate,分离错误率)。
DER 把错误分成三笔账:误警(FA)是把非语音当成语音的时间,漏检(Miss)是漏掉真实语音的时间,说话人混淆(Speaker Error)是语音被归到错误人名下的时间。三者相加,除以真实语音总时长,就得到一个百分比。DER 越低,说明这份“对号入座”做得越准。
除了 DER,JER(Jaccard Error Rate)按“正确对”计算错误,对重叠语音更友好,在近年会议评测中越来越流行。有了这些标尺,我们才能说清一套系统是“能用了”还是“还差得远”——寿宴笔记的质量,终于有了客观分数。
- 误警时间把碰杯声、电视声误当成说话的时长,属于“凭空多记”的惩罚项。
- 漏检时间把真实发言漏掉的时长,属于“漏记”的惩罚项。
- 说话人混淆语音被标到错误说话人名下的时长,属于“张冠李戴”的惩罚项。
- 归一化与百分比除以真实语音总时长并乘以 100%,得到可在不同系统间对比的比率。
工具实践:请一位“老练帮手”出马
从零实现 VAD、声纹嵌入、聚类,就像自己磨面粉、发面团、砌烤炉,费时费力。好消息是,业界已有成熟的开源工具,其中 pyannote.audio 是说话人分离社区最常用的“老练帮手”:它把 VAD、分段、嵌入、聚类封装成一条开箱即用的 Pipeline,十几行代码就能跑出带说话人标签的时间段。对于动手实践的你,这是性价比最高的起点。
有了“谁在何时说话”,再让语音识别(ASR)主厨登场:Whisper 这类模型负责把每个说话人片段转成文字,两者级联,就得到了带发言人署名的完整纪转写。这就是经典的“先分离、再转写”方案。而 NeMo 等企业级工具链则在训练、推理、部署上提供更完整的工业支持,适合规模化的音频 AI 产品。
级联方案的输出可以用一条公式概括:最终文档等于对每一段说话人语音分别做 ASR 转写,再把文字与说话人标签绑定在一起。
有了 pyannote 这类帮手,你不需要从零造轮子;但理解流水线的每一环,才能在工具失灵时知道问题出在“采指纹”还是“分堆”上——好厨师不光会开火,还得懂火候。
- ASR 转写把第 k 个语音片段的波形交给语音识别模型,得到对应文字。
- 二元组绑定把转写文字与说话人标签放进同一个括号里,形成“说者+内容”的一条记录。
- 集合汇总对 K 个片段逐一处理并汇总,最终得到整份“带署名的纪要”。
前沿进展:从“事后整理”到“实时记账”
寿宴录音的整理一直是“事后诸葛亮”——先录完,再花几倍时间慢慢分离。前沿研究正在改变这个局面:端到端方案把 VAD、嵌入、聚类全部塞进一个神经网络,直接优化 DER 指标,避免了多阶段误差的层层累积;目标说话人提取(TSE)则更进一步,给定一句“爷爷的声音”作为参考,模型直接从混合录音里把爷爷的声音“抠”出来,连聚类的过程都省了。
端到端模型面临一个棘手的“排列问题”:如果模型同时输出三条语音流,到底哪条对应“人 1”、哪条对应“人 2”?训练时无法预先约定顺序。业界用排列不变训练(PIT)解决:穷举所有可能的对应关系,取误差最小的那个来更新参数。
从“事后整理”走向“实时记账”,说话人分离正在改变音频 AI 的体验:未来开完会立刻得到带署名的速记稿,直播弹幕也能自动标出谁在发言。这场寿宴的整理,AI 终于能跟你同步进行了。
---
- 排列集合π 是 K 个输出与 K 个真实说话人之间的一种对应方案,S_K 是所有排列的集合。
- 交叉熵比较第 k 个真实标签与第 π(k) 个预测输出之间的差异,衡量预测准不准。
- 取平均再取最小先对 K 个位置求平均误差,再从所有排列里挑误差最小的一个作为最终损失。
AI 应用场景
智能会议纪要:谁说了什么,一清二楚
阶段:音频后处理与生产管线
解决的问题:传统会议记录靠专人听写,费力且经常分不清发言人。先用 pyannote 对会议录音做说话人分离,再用 Whisper 逐段转写,即可自动生成“Alice 提议下周上线,Bob 回应资源不足”这种带署名的结构化纪要。
具体案例:某跨国企业每周例会录音 1 小时,原本行政助理要花 3 小时整理。接入“分离+转写”流水线后,10 分钟产出带发言人标签的纪要,复盘时直接按人检索发言,效率提升一个数量级。
客服电话质检:自动分清客服与客户
阶段:语音数据挖掘与分析
解决的问题:银行、保险的客服录音往往是双人对话,质检系统必须把客服和客户的语音分开,才能准确统计话术命中率、投诉责任归属。传统手动听抽样质检覆盖率低,AI 分离后可实现 100% 全量质检。
具体案例:某银行信用卡中心每天产生 5 万通通话录音,通过说话人分离将客服与客户分流后,系统自动检测“客户情绪激动时段客服是否使用安抚话术”,违规通话检出率提升 3 倍。
播客与影视后期:字幕自动配说话人
阶段:内容生产与后期制作
解决的问题:播客剪辑中为每句话标注说话人极其繁琐;影视剧字幕也需要区分角色。利用 diarization 自动生成“说话人轴”,剪辑师只需微调,大幅缩短后期工时。
具体案例:一档访谈类播客每期 40 分钟、4 位嘉宾,以往人工标注说话人需 2 小时;使用开源 diarization 管线后,自动生成的说话人时间轴准确率约 90%,后期只需轻量修正即可发布。
Python 演示
import numpy as np def gen_banquet_audio(sr=16000): """合成寿宴录音: 两位说话人轮流发言, 夹杂静音段落""" plan = [ ("A", 1.2), ("B", 0.8), (None, 0.5), ("A", 0.9), ("B", 1.4), (None, 0.6), ("A", 1.0), ("B", 0.7), ] parts = [] for spk, dur in plan: n = int(sr * dur) if spk is None: parts.append(np.zeros(n)) else: freq = 190.0 if spk == "A" else 280.0 t = np.linspace(0, dur, n, endpoint=False) parts.append(0.5 * np.sin(2 * np.pi * freq * t)) return np.concatenate(parts), sr def vad(audio, sr, win=0.03, hop=0.02, th=0.02): """能量阈值语音活动检测, 返回[(起点秒, 终点秒)]""" step, w = int(hop * sr), int(win * sr) times = [start / sr for start in range(0, len(audio) - w + 1, step)] frames = [(t, float(np.mean(audio[int(t * sr):int(t * sr) + w] ** 2))) for t in times] speech = [t for t, e in frames if e > th] segments = [] for t in speech: if segments and t - segments[-1][1] < hop * 1.5: segments[-1][1] = t else: segments.append([t, t]) return [(s, e + win) for s, e in segments] def embed(audio, sr, segments): """把每个语音段压缩为二维声纹: 频谱质心 + 幅度能量""" feats = [] for s, e in segments: x = audio[int(s * sr):int(e * sr)] n = len(x) spec = np.abs(np.fft.rfft(x * np.hanning(n))) freqs = np.fft.rfftfreq(n, 1.0 / sr) centroid = float(np.sum(freqs * spec) / (np.sum(spec) + 1e-9)) feats.append([centroid, 10.0 * float(np.sqrt(np.mean(x ** 2)))]) return np.asarray(feats) def cluster_segments(feats, th=40.0): """贪心层次聚类: 每次合并最近的两组, 距离超阈值则停止""" groups = [[i] for i in range(len(feats))] while len(groups) > 1: best_d, best_pair = None, None for i in range(len(groups)): for j in range(i + 1, len(groups)): d = min(np.linalg.norm(feats[a] - feats[b]) for a in groups[i] for b in groups[j]) if best_d is None or d < best_d: best_d, best_pair = d, (i, j) if best_d > th: break i, j = best_pair groups[i] = groups[i] + groups[j] groups.pop(j) return groups if __name__ == "__main__": audio, sr = gen_banquet_audio() segs = vad(audio, sr) print("VAD 检出的语音段:", [(round(s, 2), round(e, 2)) for s, e in segs]) feats = embed(audio, sr, segs) groups = cluster_segments(feats) for gi, g in enumerate(groups): print("说话人", gi, "包含段索引", g)
plan = [("A", 1.2), ("B", 0.8), (None, 0.5), ...]用两个不同基频的正弦波模拟两位说话人,None 表示静音间隙。frames = [(t, float(np.mean(audio[int(t * sr):int(t * sr) + w] ** 2))) for t in times]按 30ms 窗口计算短时能量,作为 VAD 的判据。if segments and t - segments[-1][1] < hop * 1.5:把时间上邻近的语音帧合并成同一个语音段。centroid = float(np.sum(freqs * spec) / (np.sum(spec) + 1e-9))用频谱质心近似“音色”,配合能量构成二维声纹。groups = [[i] for i in range(len(feats))]初始化时让每个语音段各自成堆,对应层次聚类的起点。d = min(np.linalg.norm(feats[a] - feats[b]) for a in groups[i] for b in groups[j])计算两组之间最近距离(单链距离)。if best_d > th: break最近距离超过阈值就停止合并,阈值决定了最终说话人的数量。
常见误区
误区我一直以为 diarization 就是训练一个模型,能直接说出“这句话是张三说的”,像人脸识别一样认人。
正解两者的关键区别在于“是否知道身份库”。说话人识别(ASV)是在已知注册名单里做辨认或确认;而 diarization 面对的是完全未知的录音,任务是把语音按人分成几堆并打上“人 1、人 2”标签。用寿宴比喻:识别是“这是爷爷的声音!”,分离则是“这段话和那段话从音色看是同一个人的”。两者的流程有重叠,但目标完全不同。
为何常见:两者都围绕“声纹”展开,名词相近、工具链重叠,初学者很容易把“按人分组”误当成“认出具体的人”。
误区我一直以为语音识别的结果里已经包含说话人信息,毕竟转写文字都出来了。
正解标准 ASR 只回答“说了什么”,不负责“谁说的”。即使一段会议录音的文字全部转写正确,系统依然不知道每句话归属于谁;反之,diarization 的输出只有“人 + 时间轴”,没有文字。两者是互补关系,这就是为什么主流方案采用“先分离、再逐人转写”的级联结构——就像寿宴纪要既要“记下说的话”,也要“算清谁说的”。
为何常见:商用转写产品把两步封装成一个按钮,用户看不到内部的分工,自然以为转写自带说话人标注。
误区句子切成小片段应该更精细,比如每段 200ms,快速换人就永远不会漏掉。
正解声纹特征需要足够长的语音窗才能稳定估计(通常需要 1 秒以上)。切得太短,特征噪声大、聚类结果不稳定;切得太长,又可能把两个人混进同一段。真实系统必须在“细到能捕捉换人”和“长到能支撑声纹”之间取平衡。就像采集指纹:只采一小截指头对不准,把两个人的手印按在一起又分不清。
为何常见:直觉上“分辨率越高越好”,忽略了声纹估计本身需要足够时长这一物理约束。
误区评价模型当然看错误率越低越好,DER 不到 0% 就不能上线。
正解DER 对时间对齐极其敏感,而且标注本身存在歧义(重叠区里谁对谁错很难评判)。实用系统在干净播客上能做到个位数,在嘈杂的多人会议里 10%~20% 已是优秀水平。业界还会用“oracle 边界”(给定真实切分边界、只评估聚类)来排除对齐误差。寿宴笔记如果要求逐字逐秒毫厘不差,反而会耗费大量精力而收益甚微。
为何常见:大家都习惯了“指标越低越好”的思维定式,DER 的名称又自带“错误率”三个字,容易让人忽略任务本身的标注不确定性与场景差异。
面试题
Q1. 说话人分离(Diarization)最核心的输出是什么?
- A.把音频转成文字
- B.标注谁在何时说话← 正确答案
- C.识别出具体人名
- D.分析说话人情绪
答案:B。Diarization 回答“谁在什么时候说话”,输出的是说话人标签加时间段;把音频转成文字是 ASR 的任务,识别具体人名属于说话人识别(ASV),情绪分析则属于语音情感计算。就像寿宴纪要关注“哪句话是爷爷说的”,而不是仅仅记下说了什么。
Q2. 在 Diarization 流水线中,VAD 的主要作用是什么?
- A.定位语音出现区间← 正确答案
- B.提取说话人声纹
- C.对说话人进行聚类
- D.合成自然语音波形
答案:A。VAD(语音活动检测)负责找出音频中“有人说话”的时间区间,剪掉静音和噪声;声纹提取是嵌入模型的工作,聚类是分组算法的工作,语音波形合成则属于 TTS。类比寿宴整理,VAD 就是先划掉笔记本的空白页。
Q3. 下列哪一项属于深度学习的声纹嵌入?
- A.x-vector 特征← 正确答案
- B.倒谱统计特征
- C.语言模型概率
- D.视频光流向量
答案:A。x-vector 是经典的深度声纹嵌入,由神经网络从可变长语音中提取定长向量;倒谱统计特征更接近传统手工特征,语言模型概率属于 NLP,光流向量属于视频领域。就像指纹卡必须由专业设备采集,x-vector 正是那台“专业设备”。
Q4. DER(分离错误率)不包括以下哪类误差?
- A.语音误警错误时长
- B.语音漏检错误时长
- C.说话人归属混淆时长
- D.文字转写错误比例← 正确答案
答案:D。DER 由三部分组成:误警(非语音被判为语音)、漏检(语音被漏掉)、说话人混淆(语音归错人);DER 不涉及文字内容,文字错误由 WER 衡量。就像批改寿宴纪要只查“多记、漏记、张冠李戴”,不查错别字。
Q5. 相比层次聚类,谱聚类的突出优势是什么?
- A.完全不需要提取特征
- B.利用全局图结构更稳← 正确答案
- C.不需要任何训练数据
- D.时空复杂度必然更低
答案:B。谱聚类把样本看成图上的节点,通过图划分寻找全局最优分割,对局部噪声更稳健;它同样需要特征输入,复杂度通常并不更低。层次聚类像“近视眼”只盯着最近的两堆,谱聚类则像站在高处俯视整张关系图。
Q6. 端到端说话人分离常用的训练策略是什么?
- A.排列不变训练策略← 正确答案
- B.随机梯度上升策略
- C.蒙特卡洛采样推断
- D.生成对抗网络博弈
答案:A。端到端模型同时输出多条语音流,训练时不知道哪条对应哪个说话人,因此用 PIT(排列不变训练)穷举所有对应关系、取误差最小的排列来更新参数。“随机梯度上升”本身是错误说法(应为下降),蒙特卡洛与 GAN 都不是解决排列问题的标准方法。这就像老师批改多选题,只要答案整体对,顺序无所谓。
Q7. pyannote.audio 在说话人分离领域主要扮演什么角色?
- A.开源说话人分离框架← 正确答案
- B.云端语音合成引擎
- C.视频编码压缩算法
- D.分布式数据库系统
答案:A。pyannote.audio 是说话人分离最流行的开源工具,把 VAD、声纹嵌入、聚类封装成一条 Pipeline,几行代码即可调用;它不做语音合成、视频编码或数据库管理。就像寿宴请来的“老练帮手”,把剪空白、采指纹、分堆全部包办。
Q8. 以下哪些属于说话人分离的评估指标?
- A.DER 分离错误率← 正确答案
- B.JER 正确对错误率← 正确答案
- C.WER 文字错误率
- D.BLEU 翻译评测分
答案:AB。DER 和 JER 都是说话人分离的常用指标,前者按时间误差计算,后者按“正确对”计算;WER 用于语音识别转写评估,BLEU 用于机器翻译。它们衡量的是“文字对不对”,与“谁在说话”无关,就像寿宴纪要里错别字和分错人本来就是两笔账。
Q9. 以下哪些方法可以用于生成声纹嵌入?
- A.i-vector 统计嵌入← 正确答案
- B.x-vector 深度嵌入← 正确答案
- C.ECAPA 增强嵌入← 正确答案
- D.Mel 滤波器组系数
答案:ABC。i-vector 是传统统计声纹,x-vector 是深度声纹,ECAPA 是 x-vector 系列的增强网络;Mel 滤波器组系数只是声学特征(类似频谱图),虽然常作为嵌入模型的输入,但本身不是说话人身份向量。就像指纹卡是“成品”,而油墨只是采集指纹的原料。
Q10. 处理重叠语音的常见思路包括哪些?
- A.双通道盲源分离← 正确答案
- B.重叠语音检测模块← 正确答案
- C.整体丢弃重叠段落
- D.目标说话人提取技术← 正确答案
答案:ABD。处理重叠语音的常见方案有:用多通道盲源分离把叠在一起的语音分开、训练专用重叠检测模块、用目标说话人提取(TSE)根据参考音色“抠出”指定人声;直接丢弃重叠段落会损失信息,不是业界认可的方案。真实寿宴里二姨和表妹同时开口时,好系统应该想办法区分而不是听之任之。