说话人日志
多人对话录音中"谁在何时说话"这一看似简单的问题,催生了跨越三十年的说话人日志(Speaker Diarization)研究,其核心挑战在于:说话人数量未知、说话人身份无先验、且存在重叠语音。
"Speaker diarization"一词在1990年代末由NIST Rich Transcription评测正式确立。早期方法以贝叶斯信息准则(BIC)为核心:在音频流上滑动窗口,对窗口两侧的声学特征(MFCC)分别拟合高斯分布,用BIC检验判断是否存在说话人切换点。Chen与Gopalakrishnan(1998, IBM)提出的BIC分段算法成为第一代标准方案。该方法的局限在于:它只能检测切换点,无法处理重叠语音,且对短语音段的判别力不足。但它确立了"分段→聚类"的经典流水线范式,影响了此后十五年的系统设计。
Najim Dehak等人(2010, CRIM/MIT)提出i-vector,将说话人特征压缩为低维向量表示。其思路源自联合因子分析(JFA):用通用背景模型(UBM)建模全体语音的分布,再通过总变异空间(Total Variability Space)将每段语音投影为一个固定维度的i-vector。配合概率线性判别分析(PLDA)进行说话人相似度打分,i-vector+PLDA成为说话人验证和日志的统治性范式。典型流水线为:VAD→均匀分段→i-vector提取→PLDA打分→层次聚类(AHC)。这一时期的关键贡献是将说话人表示从手工特征提升为统计学习的嵌入空间,但i-vector的生成式建模在短语音段和噪声环境下仍显不足。
David Snyder等人(2018, JHU/NIST)提出x-vector,用时延神经网络(TDNN)替代i-vector的生成式框架。网络在大规模说话人分类任务上训练,取倒数第二层的隐藏表示作为说话人嵌入。x-vector在VoxCeleb等基准上大幅超越i-vector,尤其在短语音段(1-3秒)上优势明显。随后Desplanques等人(2020, IDLab)提出ECAPA-TDNN,引入SE-Block通道注意力和多尺度特征聚合,进一步提升嵌入质量,成为至今仍广泛使用的说话人嵌入骨干。
Fujita等人(2019, Hitachi)提出End-to-End Neural Diarization(EEND),将日志重新定义为帧级多标签分类问题:对每一帧,直接预测哪些说话人处于活跃状态。这一范式的革命性在于:它天然支持重叠语音检测,无需独立的重叠检测模块。EEND使用自注意力(SA-EEND)建模帧间说话人交互,并通过排列不变训练(PIT)解决标签排列不确定性。后续EEND-VC(Kinoshita et al., 2021)将端到端方法与聚类结合,用EEND处理局部窗口、用聚类保证全局说话人一致性,解决了EEND固定说话人上限的问题。
最新趋势是将说话人日志与ASR统一在大语言模型框架中。如今日论文[18]提出的Target Speaker Tagging和[21]探索的端到端LLM多说话人识别,代表了从流水线系统向统一模型的范式迁移。这一方向的核心洞见是:说话人身份和语义内容本质上是耦合的,联合建模优于独立处理。
说话人日志的数学基础涉及嵌入空间度量、图聚类和排列不变优化三个层面。嵌入相似度度量:给定说话人嵌入 $\mathbf{e}_i, \mathbf{e}_j \in \mathbb{R}^d$,使用余弦相似度构建亲和矩阵:$s_{ij} = \mathbf{e}_i^T \mathbf{e}_j / (\|\mathbf{e}_i\| \|\mathbf{e}_j\|)$。在PLDA框架下,相似度替换为对数似然比:$s_{ij} = \log p(\mathbf{e}_i, \mathbf{e}_j | H_{\text{same}}) - \log p(\mathbf{e}_i, \mathbf{e}_j | H_{\text{diff}})$,其中 $H_{\text{same}}$ 和 $H_{\text{diff}}$ 分别表示同一说话人和不同说话人假设。PLDA假设嵌入由说话人因子 $\mathbf{y}$ 和残差噪声 $\boldsymbol{\epsilon}$ 线性生成:$\mathbf{e} = \mathbf{V}\mathbf{y} + \boldsymbol{\epsilon}$,其中 $\mathbf{V}$ 是说话人子空间投影矩阵。谱聚类与说话人数估计:构建归一化拉普拉斯矩阵 $\mathbf{L} = \mathbf{I} - \mathbf{D}^{-1/2}\mathbf{S}\mathbf{D}^{-1/2}$,其中 $\mathbf{D}$ 为度矩阵 $D_{ii} = \sum_j S_{ij}$。对 $\mathbf{L}$ 做特征分解,得到特征值 $0 = \lambda_1 \leq \lambda_2 \leq \cdots$。说话人数量 $K$ 由最大特征值间隙确定:$K = \arg\max_k (\lambda_{k+1} - \lambda_k)$。这利用了谱图理论的核心结论:连通分量数等于零特征值的个数,近似分离的说话人群体对应接近零的小特征值。取前 $K$ 个特征向量 $\mathbf{U} \in \mathbb{R}^{N \times K}$ 的行向量作为低维表示,执行K-means完成聚类。EEND的排列不变训练:EEND输出 $\mathbf{Y} \in [0,1]^{T \times S}$,帧级二元交叉熵损失为 $\mathcal{L}_\phi = -\frac{1}{TS}\sum_{t,s}[\hat{y}_{t,\phi(s)}\log y_{t,s} + (1-\hat{y}_{t,\phi(s)})\log(1-y_{t,s})]$。由于说话人标签的排列是任意的,需要在所有排列中选择最优:$\phi^* = \arg\min_{\phi \in \text{Perm}(S)} \mathcal{L}_\phi$。当 $S$ 较小时($\leq 4$)可穷举 $S!$ 种排列;$S$ 较大时使用匈牙利算法在 $O(S^3)$ 内求解最优匹配。
说话人日志的整体逻辑是:将音频流切分为短时均质片段,提取说话人特征嵌入,通过聚类或端到端模型将片段归属到不同说话人,最后经后处理输出时间标注的说话人标签。
检测音频中哪些区间包含语音活动,过滤静音、背景噪声和非语音事件。这一步至关重要,因为非语音段会产生无意义的说话人嵌入,严重干扰后续聚类。现代VAD通常使用轻量级神经网络(如Silero VAD基于LSTM,或pyannote.audio的分段模型)。关键参数包括:最小语音段长度(通常250ms,过短的段嵌入质量差)、最大静音容忍(通常300ms,允许短暂停顿不切断)。为什么不跳过VAD直接处理全部音频?因为在典型会议录音中,30-50%的时间是静音或噪声,不过滤会导致聚类空间被无关向量污染,显著降低分离准确率。
对每个语音段提取固定维度的说话人嵌入向量。当前主流骨干是ECAPA-TDNN(Emphasized Channel Attention, Propagation and Aggregation in TDNN),输出192维或256维嵌入。提取通常在1.5-3秒的滑动窗口上进行,步长0.75-1.5秒。窗口长度的选择是精度与粒度的权衡:过长的窗口可能跨越说话人边界导致嵌入混杂,过短的窗口信息不足导致嵌入不可靠。ECAPA-TDNN的三个关键设计:(a) SE-Block对通道维度加权,让网络关注说话人判别性最强的