【说话人日志】从固定输出到可变说话人数:EEND-EDA

论文:Encoder-Decoder Based Attractors for End-to-End Neural Diarization

简称:EEND-EDA

作者:Shota Horiguchi, Yusuke Fujita, Shinji Watanabe, Yawen Xue, Paola Garcia

时间:2021 arXiv v1,2022 期刊版整理

任务:Speaker Diarization,回答"谁在什么时候说话"

前言

本文拓展了 EEND,解决可变说话人数问题:推理前不知道录音里有多少个说话人

原始 EENDSA-EEND,有一个共同限制:它们可以很好地处理重叠说话,但它们的输出维度通常是固定的,模型在回答"这段音频里预设好的这几个 speaker 槽位谁在说话",而不是回答"这段音频里到底有几个人,以及每个人何时在说话"。


一、EEND

1.1 EEND 的数学表达

给定一段音频提取出来的声学特征序列

x 1 , x 2 , ... , x T , x t ∈ R F , \mathbf{x}_1, \mathbf{x}_2, \ldots, \mathbf{x}_T, \quad \mathbf{x}_t \in \mathbb{R}^{F}, x1,x2,...,xT,xt∈RF,

EEND 要估计每一帧上每个 speaker 的说话状态。

假设有 S S S 个 speaker,那么第 t t t 帧的标签可以写成

y t = [ y 1 , t , y 2 , t , ... , y S , t ] ⊤ , \mathbf{y}t = [y{1,t}, y_{2,t}, \ldots, y_{S,t}]^{\top}, yt=[y1,t,y2,t,...,yS,t]⊤,

其中

y s , t = { 0 , speaker s 在 t 时刻不说话 , 1 , speaker s 在 t 时刻说话 . y_{s,t} = \begin{cases} 0, & \text{speaker } s \text{ 在 } t \text{ 时刻不说话}, \\ 1, & \text{speaker } s \text{ 在 } t \text{ 时刻说话}. \end{cases} ys,t={0,1,speaker s 在 t 时刻不说话,speaker s 在 t 时刻说话.

于是,speaker diarization 被改写成逐帧多标签分类。

论文采用的条件独立假设是:

P ( y 1 , ... , y T ∣ x 1 , ... , x T ) = ∏ t = 1 T ∏ s = 1 S P ( y s , t ∣ x 1 , ... , x T ) . P(\mathbf{y}_1, \ldots, \mathbf{y}T \mid \mathbf{x}1, \ldots, \mathbf{x}T) = \prod{t=1}^{T} \prod{s=1}^{S} P(y{s,t} \mid \mathbf{x}_1, \ldots, \mathbf{x}_T). P(y1,...,yT∣x1,...,xT)=t=1∏Ts=1∏SP(ys,t∣x1,...,xT).

于是网络输出可以写成

( p 1 , ... , p T ) = f E E N D ( x 1 , ... , x T ) , (\mathbf{p}_1, \ldots, \mathbf{p}T) = f{\mathrm{EEND}}(\mathbf{x}_1, \ldots, \mathbf{x}_T), (p1,...,pT)=fEEND(x1,...,xT),

其中

p t = [ p 1 , t , p 2 , t , ... , p S , t ] ⊤ ∈ ( 0 , 1 ) S . \mathbf{p}t = [p{1,t}, p_{2,t}, \ldots, p_{S,t}]^{\top} \in (0,1)^{S}. pt=[p1,t,p2,t,...,pS,t]⊤∈(0,1)S.

最终用阈值得到预测标签:

y ^ s , t = 1 ( p s , t > 0.5 ) . \hat{y}{s,t} = \mathbf{1}(p{s,t} > 0.5). y^s,t=1(ps,t>0.5).

EEND 不是先算 speaker embedding 再聚类,而是直接输出"每一帧谁在说话"的后验概率。

1.2 EEND 卡在固定说话人数

EEND 可以写成

f E E N D = h ∘ g , f_{\mathrm{EEND}} = h \circ g, fEEND=h∘g,

其中:

  • g g g 是 embedding part,把输入特征编码成 frame-wise embeddings
  • h h h 是 classification part,把 embeddings 映射成每一帧每个 speaker 的 posterior

embedding 部分可写成

e t ( 0 ) = x t , \mathbf{e}_t^{(0)} = \mathbf{x}_t, et(0)=xt,

( e 1 ( n ) , ... , e T ( n ) ) = g ( n ) ( e 1 ( n − 1 ) , ... , e T ( n − 1 ) ) , (\mathbf{e}_1^{(n)}, \ldots, \mathbf{e}_T^{(n)}) = g^{(n)}(\mathbf{e}_1^{(n-1)}, \ldots, \mathbf{e}_T^{(n-1)}), (e1(n),...,eT(n))=g(n)(e1(n−1),...,eT(n−1)),

最后一层输出记作

e t : = e t ( N ) . \mathbf{e}_t := \mathbf{e}_t^{(N)}. et:=et(N).

问题出在分类头:

p 1 , ... , p T \] = σ  ⁣ ( W c l s ⊤ \[ e 1 , ... , e T \] + b c l s 1 T ⊤ ) . (1) \[\\mathbf{p}_1, \\ldots, \\mathbf{p}_T\] = \\sigma\\!\\left( \\mathbf{W}_{\\mathrm{cls}}\^{\\top} \[\\mathbf{e}_1, \\ldots, \\mathbf{e}_T\] + \\mathbf{b}_{\\mathrm{cls}} \\mathbf{1}_T\^{\\top} \\right). \\tag1 \[p1,...,pT\]=σ(Wcls⊤\[e1,...,eT\]+bcls1T⊤).(1) 这里的 W c l s ∈ R D × S W_{\\mathrm{cls}} \\in \\mathbb{R}\^{D \\times S} Wcls∈RD×S 直接把输出 speaker 槽位数定成了 S S S。这意味着模型不是根据音频内容"发现有几个人",而是根据网络结构"被规定输出几个 speaker"。 #### 1.3 PIT 损失 因为输出的 speaker 顺序没有语义,比如第 1 路输出不一定真对应"张三",第 2 路也不一定真对应"李四",所以训练时必须消除 permutation 的影响。 EEND 用的是 permutation-free objective: L d i a r = 1 T S min ⁡ ϕ ∈ Φ ( S ) ∑ t = 1 T H ( y t ϕ , p t ) , L_{\\mathrm{diar}} = \\frac{1}{TS} \\min_{\\phi \\in \\Phi(S)} \\sum_{t=1}\^{T} H(\\mathbf{y}_t\^{\\phi}, \\mathbf{p}_t), Ldiar=TS1ϕ∈Φ(S)mint=1∑TH(ytϕ,pt), 其中: * Φ ( S ) \\Phi(S) Φ(S) 表示 S S S 个 speaker 的所有排列 * y t ϕ \\mathbf{y}_t\^{\\phi} ytϕ 表示在排列 ϕ \\phi ϕ 下重排后的参考标签 * H ( ⋅ , ⋅ ) H(\\cdot,\\cdot) H(⋅,⋅) 是逐帧二元交叉熵 其具体形式为 H ( y t , p t ) = ∑ s = 1 S ( − y s , t log ⁡ p s , t − ( 1 − y s , t ) log ⁡ ( 1 − p s , t ) ) . H(\\mathbf{y}_t, \\mathbf{p}_t) = \\sum_{s=1}\^{S} \\left( - y_{s,t} \\log p_{s,t} - (1-y_{s,t}) \\log (1-p_{s,t}) \\right). H(yt,pt)=s=1∑S(−ys,tlogps,t−(1−ys,t)log(1−ps,t)). PIT 解决的是"输出槽位没有固定身份"的问题,但公式中的槽位数 S S S 是预先确定的。 一种解决思路是将 S S S 设的非常大,以基本包括真实使用场景的人数。但有论文证实,这会使得模型性能下降,且 PIT 的排列数增加导致计算开销增大。 *** ** * ** *** ### 二、EEND-EDA #### 2.1 总览 **原始 EEND 用固定分类权重去定义 speaker 槽位;EEND-EDA 则改成从当前这段录音自己的 embeddings 里,动态生成 speaker attractors。** 然后再用 attractor 和每一帧 embedding 的相似度,得到该帧属于哪个 speaker。 ![EEND-EDA](https://i-blog.csdnimg.cn/direct/178ed19198db40448fc34b443f36d2b5.png) 图 1 EEND-EDA 计算流程 从图1 可以看到,相比 [SA-EEND](https://blog.csdn.net/weixin_45234741/article/details/159652579?spm=1001.2014.3001.5501),模型在提取 embeddings 后,增加了 EDA 模块,即用 LSTM encoder-decoder 生成 attractors,然后用 attractor 与 embedding 点积,sigmoid 计算每帧每 speaker 后验概率。 SA-EEND 还是和之前一样,不加位置编码。 #### 2.2 LSTM encoder-decoder 生成 attractors ##### 2.2.1 编码器 给定前面得到的 frame-wise embeddings e 1 , e 2 , ... , e T , \\mathbf{e}_1, \\mathbf{e}_2, \\ldots, \\mathbf{e}_T, e1,e2,...,eT, LSTM encoder 逐帧读入它们: h t e n c , c t e n c = h e n c ( e t , h t − 1 e n c , c t − 1 e n c ) , t = 1 , ... , T . \\mathbf{h}_t\^{\\mathrm{enc}}, \\mathbf{c}_t\^{\\mathrm{enc}} = h\^{\\mathrm{enc}}( \\mathbf{e}_t, \\mathbf{h}_{t-1}\^{\\mathrm{enc}}, \\mathbf{c}_{t-1}\^{\\mathrm{enc}} ), \\quad t=1,\\ldots,T. htenc,ctenc=henc(et,ht−1enc,ct−1enc),t=1,...,T. 其初始状态为 h 0 e n c = 0 , c 0 e n c = 0. \\mathbf{h}_0\^{\\mathrm{enc}} = \\mathbf{0}, \\quad \\mathbf{c}_0\^{\\mathrm{enc}} = \\mathbf{0}. h0enc=0,c0enc=0. ##### 2.2.2 解码器 decoder 的递推形式是 h s d e c , c s d e c = h d e c ( 0 , h s − 1 d e c , c s − 1 d e c ) , s = 1 , 2 , ... (2) \\mathbf{h}_s\^{\\mathrm{dec}}, \\mathbf{c}_s\^{\\mathrm{dec}} = h\^{\\mathrm{dec}}( \\mathbf{0}, \\mathbf{h}_{s-1}\^{\\mathrm{dec}}, \\mathbf{c}_{s-1}\^{\\mathrm{dec}} ), \\quad s = 1,2,\\ldots \\tag2 hsdec,csdec=hdec(0,hs−1dec,cs−1dec),s=1,2,...(2) 注意这里每一步的输入都是零向量 0 \\mathbf{0} 0。 初始状态由 encoder 的最终状态给出: h 0 d e c = h T e n c , \\mathbf{h}_0\^{\\mathrm{dec}} = \\mathbf{h}_T\^{\\mathrm{enc}}, h0dec=hTenc, c 0 d e c = c T e n c . \\mathbf{c}_0\^{\\mathrm{dec}} = \\mathbf{c}_T\^{\\mathrm{enc}}. c0dec=cTenc. 第 s s s 步 decoder 的隐藏状态就被当作第 s s s 个 attractor: a s : = h s d e c . \\mathbf{a}_s := \\mathbf{h}_s\^{\\mathrm{dec}}. as:=hsdec. 注意 decoder 输入是零向量。 在一般的 sequence-to-sequence 任务里,比如机器翻译/ASR,decoder 往往会用 teacher forcing,因为输出序列的顺序是有意义的。 但在 EEND-EDA 里,输出的是 speaker attractor,而 speaker 本身没有天然顺序: * 第一个 attractor 不一定对应"第一个人" * 第二个 attractor 也不一定对应"第二个人" 所以无法事先规定正确输出顺序,也无法对 decoder 做常规 teacher forcing。论文就每一步都喂零向量,只让 decoder 根据自身状态递推地产生下一个 attractor。 #### 2.3 用 attractor 和 embedding 计算说话后验 把所有 attractor 组成矩阵 A = \[ a 1 , a 2 , ... , a S \] , A = \[\\mathbf{a}_1, \\mathbf{a}_2, \\ldots, \\mathbf{a}_S\], A=\[a1,a2,...,aS\], 那么第 t t t 帧的说话后验就是 p t = σ ( A ⊤ e t ) . (3) \\mathbf{p}_t = \\sigma(A\^{\\top}\\mathbf{e}_t). \\tag3 pt=σ(A⊤et).(3) * 如果某一帧 embedding 和某个 attractor 更接近,那么该 speaker 的 posterior 更高 * 如果某一帧是 overlap,它可能同时和多个 attractor 都比较接近 * 于是多个 speaker 的 posterior 都会高,所以 overlap 能被自然表示出来 式(1)像是式(3)的特殊情况,式(1)是固定了 attractors ( W c l s \\mathbf{W}_{\\mathrm{cls}} Wcls 和 b c l s \\mathbf{b}_{\\mathrm{cls}} bcls)的 EDA 情形。EEND-EDA 是为未知说话人数设计的,但在固定说话人数实验里会更强。 *** ** * ** *** ### 三、模型训练/推理 #### 3.1 训练 existence head 的标签 观察式(2),理论上 decoder 可以一直往下生成 attractor。 那什么时候停止呢? 论文给每个 attractor 接了一个 existence head: q s = σ ( w e x i s t ⊤ a s + b e x i s t ) , (4) q_s = \\sigma(\\mathbf{w}_{\\mathrm{exist}}\^{\\top}\\mathbf{a}_s + b_{\\mathrm{exist}}), \\tag 4 qs=σ(wexist⊤as+bexist),(4) 其中: * a s \\mathbf{a}_s as 是第 s s s 个 attractor * q s q_s qs 表示"这个 attractor 是否真的对应一个 speaker"的概率 如果当前录音里真实有 S S S 个 speaker,那么论文构造的标签就是: l = \[ 1 , ... , 1 , 0 \] ⊤ , \\mathbf{l} = \[1, \\ldots, 1, 0\]\^{\\top}, l=\[1,...,1,0\]⊤, 前 S S S 个位置是 1,第 S + 1 S+1 S+1 个位置是 0。 对应预测向量写成 q = \[ q 1 , q 2 , ... , q S + 1 \] ⊤ . \\mathbf{q} = \[q_1, q_2, \\ldots, q_{S+1}\]\^{\\top}. q=\[q1,q2,...,qS+1\]⊤. 于是 existence loss 为 L e x i s t = 1 S + 1 H ( l , q ) , (5) L_{\\mathrm{exist}} = \\frac{1}{S+1} H(\\mathbf{l}, \\mathbf{q}), \\tag 5 Lexist=S+11H(l,q),(5) 总损失则写成 L = L d i a r + α L e x i s t . L = L_{\\mathrm{diar}} + \\alpha L_{\\mathrm{exist}}. L=Ldiar+αLexist. 论文中使用 α = 1. \\alpha = 1. α=1. 这一部分对应图 1 的右上角。 第一次看论文的读者可能会不自觉将 EDA 模块当做神经网络版的聚类模块,认为 L e x i s t L_{\\mathrm{exist}} Lexist 是与 speaker 特征聚类相关的损失函数。这里要说明的是, L e x i s t L_{\\mathrm{exist}} Lexist 的作用不是学"每个 speaker 是谁",而是学"解码器在第几步该停下来"。 式(4)里的 q s q_s qs 不是第 s s s 个 speaker 的说话概率,而是第 s 个 attractor 是否真的对应一个存在的 speaker 的概率。这样标签设置为 l = \[ 1 , ... , 1 , 0 \] ⊤ ( s 个 1 ) , \\mathbf{l} = \[1, \\ldots, 1, 0\]\^{\\top}(s 个 1), l=\[1,...,1,0\]⊤(s个1), 希望模型学到的是 * 前 s s s 个 attractor 都应该是"有效 attractor" * 第 s + 1 s +1 s+1 个 attractor 应该是"无效 attractor",也就是该停了 这样再看 existence loss 就很自然了。 #### 3.2 推理时估计说话人数 推理时没有真实说话人数,于是用 existence probability 直接决定: S \^ = min ⁡ { s ∣ q s + 1 \< τ } , \\hat{S} = \\min \\{ s \\mid q_{s+1} \< \\tau \\}, S\^=min{s∣qs+1\<τ}, 其中阈值在论文里固定为 τ = 0.5. \\tau = 0.5. τ=0.5. 即若下一个 attractor 的 existence probability 低于阈值,就认为 speaker 已经生成完了。 #### 3.3 实验 tricks ##### 3.3.1 chronological order 和 shuffled order 实验发现 encoder 输入顺序会影响 attractor。因为 EDA 用的是 LSTM encoder-decoder,它本质上是一个 sequence-to-sequence 模型,所以输入顺序会影响最终状态,也就会影响 attractor。 论文测试了两种顺序: 1. **chronological order**:按时间顺序输入 embeddings 2. **shuffled order**:先随机打乱帧顺序,再输入 embeddings 如果使用 shuffled order,encoder 看的是 h t e n c , c t e n c = h e n c ( e ψ t , h t − 1 e n c , c t − 1 e n c ) , t = 1 , ... , T , \\mathbf{h}_t\^{\\mathrm{enc}}, \\mathbf{c}_t\^{\\mathrm{enc}} = h\^{\\mathrm{enc}}( \\mathbf{e}_{\\psi_t}, \\mathbf{h}_{t-1}\^{\\mathrm{enc}}, \\mathbf{c}_{t-1}\^{\\mathrm{enc}} ), \\quad t=1,\\ldots,T, htenc,ctenc=henc(eψt,ht−1enc,ct−1enc),t=1,...,T, 其中 ( ψ 1 , ... , ψ T ) (\\psi_1,\\ldots,\\psi_T) (ψ1,...,ψT) 是对 ( 1 , ... , T ) (1,\\ldots,T) (1,...,T) 的一个随机排列。 论文实验的结论是 **shuffled order 基本 consistently 优于 chronological order。** 这反映了如果按时间顺序输入,LSTM 更容易受到局部时序结构、句子长短、停顿位置等因素影响。 但 attractor 真正应该捕捉的是**整段录音里 embedding 的全局分布结构。** * attractor 要代表"这个录音里有哪些 speaker 原型" * 而不是"这段录音按时间顺序发生了什么" shuffled order 更接近"从一个集合里抽取 speaker 原型"的目标,所以效果好。 ##### 3.3.2 L e x i s t L_{\\mathrm{exist}} Lexist 局部回传 实验发现**当用可变说话人数数据训练时,直接让 L e x i s t L_{\\mathrm{exist}} Lexist 回传到整个网络,会干扰 L d i a r L_{\\mathrm{diar}} Ldiar 的优化。** 更好的策略是: * L d i a r L_{\\mathrm{diar}} Ldiar 仍然更新整个网络 * 但 L e x i s t L_{\\mathrm{exist}} Lexist 只更新 existence head 的参数 也就是只更新: w e x i s t , b e x i s t . \\mathbf{w}_{\\mathrm{exist}}, \\quad b_{\\mathrm{exist}}. wexist,bexist. #### 3.4 推理增强 ##### 3.4.1 SAD post-processing 传统 cascaded diarization 在很多论文里经常会用 oracle SAD 或外部 SAD。 而 EEND 类方法往往是"自己同时做 SAD + diarization"。 这样直接比较就不公平,因为误差来源不一样。 所以论文提出**先让 EEND-EDA 输出 diarization 结果,再用外部 SAD 结果做后处理对齐。** 设外部 SAD 结果是 z 1 , z 2 , ... , z T , z t ∈ { 0 , 1 } , z_1, z_2, \\ldots, z_T, \\quad z_t \\in \\{0,1\\}, z1,z2,...,zT,zt∈{0,1}, (1) 去掉 false alarm 如果某一帧 EEND 认为有人说话,但 SAD 认为没有语音,即 ∥ y \^ t ∥ 1 \> 0 , z t = 0 , \\\|\\hat{\\mathbf{y}}_t\\\|_1 \> 0, \\quad z_t = 0, ∥y\^t∥1\>0,zt=0, 就把这一帧直接改成全零: y \^ t ← 0. \\hat{\\mathbf{y}}_t \\leftarrow \\mathbf{0}. y\^t←0. (2) 补回 missed speech 如果某一帧 EEND 没检出任何 speaker,但 SAD 认为有语音,即 ∥ y \^ t ∥ 1 = 0 , z t = 1 , \\\|\\hat{\\mathbf{y}}_t\\\|_1 = 0, \\quad z_t = 1, ∥y\^t∥1=0,zt=1, 那么就把 posterior 最大的那个 speaker 拉起来: s ∗ = arg ⁡ max ⁡ s p s , t . s\^{\\ast} = \\arg\\max_{s} p_{s,t}. s∗=argsmaxps,t. 然后设置 y \^ s ∗ , t = 1. \\hat{y}_{s\^{\\ast},t} = 1. y\^s∗,t=1. 这个后处理的意义有两个: * 从评测角度,它让 EEND 和 cascaded 方法能在同一 SAD 条件下公平比较 * 从应用角度,如果外部 SAD 很强,也能直接帮 EEND 降低 FA 和 MI ##### 3.4.2 iterative inference 虽然 EEND-EDA 从结构上支持可变人数,但论文发现**它在经验上还是受训练集最大说话人数限制。** 比如: * 如果你训练时只见过最多 5 个人 * 推理时要它直接输出 8 个人 它通常只能稳定输出训练中见过范围内的人数,也就是说**EEND-EDA 的"可变人数"是相对训练分布而言的,不是无限制的**。 假设你训练时最多只见过 4 人说话。 那训练样本里最大的情况就是: l = \[ 1 , 1 , 1 , 1 , 0 \] \\mathbf{l} = \[1,1,1,1,0\] l=\[1,1,1,1,0

这意味着模型被反复教的是:

  • 第 1 个 attractor 有效
  • 第 2 个 attractor 有效
  • 第 3 个 attractor 有效
  • 第 4 个 attractor 有效
  • 第 5 个 attractor 应该停止

如果训练里从来没见过 5 人样本,那么模型从来没有被教过"第 5 个 attractor 也可能是有效的"。

也就是说:

  • 对它来说,q_5 经常应该是 0
  • 它会形成一个很强的偏置:4 个已经够了,第 5 个该停了

所以虽然结构允许继续往后解码,模型本身却没有学会如何稳定地产生第 5 个、第 6 个有效 attractor。也就是结构上灵活,经验上有限

于是论文提出 iterative inference:

图 2 iterative inference

如图 2 所示,每次只解码一批 speaker,解码完之后,把这些 speaker 已经说话的帧去掉,再在剩下的"静音帧集合"里继续找后面的 speaker。

设当前还要处理的帧集合是 T \mathcal{T} T,第 n n n 轮解码为:

( p t ( n ) ) t ∈ T ← f E E N D ( ( x t ) t ∈ T ) , (\mathbf{p}t^{(n)}){t \in \mathcal{T}} \leftarrow f_{\mathrm{EEND}}\big((\mathbf{x}t){t \in \mathcal{T}}\big), (pt(n))t∈T←fEEND((xt)t∈T),

而不在集合里的帧直接补零:

p t ( n ) ← 0 , t ∈ { 1 , ... , T } ∖ T . \mathbf{p}_t^{(n)} \leftarrow \mathbf{0}, \quad t \in \{1,\ldots,T\} \setminus \mathcal{T}. pt(n)←0,t∈{1,...,T}∖T.

得到第 n n n 轮 diarization 结果后,只保留那些当前仍然没有 speaker 激活的帧:

T ← { t ∣ t ∈ T , ∥ y ^ t ( n ) ∥ 1 = 0 } . \mathcal{T} \leftarrow \{ t \mid t \in \mathcal{T}, \ \|\hat{\mathbf{y}}_t^{(n)}\|_1 = 0 \}. T←{t∣t∈T, ∥y^t(n)∥1=0}.

这样一轮一轮往下做,直到:

  • 当前轮输出 speaker 数不足模型上限
  • 或者剩余帧集合为空

iterative inference 有一个缺陷:

不同迭代轮次解出来的 speaker 之间,没法天然产生 overlap。

因为第二轮只看第一轮没人说话的帧,第一轮和第二轮的 speaker 自然不会重叠。

3.4.3 iterative inference+

为了缓解上面的问题,论文在 iterative inference 上又套了一层 DOVER-Lap。

做法是:

  • 不只用一个固定的首轮 speaker 限制
  • 而是令 S l i m i t = 1 , 2 , ... , S max ⁡ S_{\mathrm{limit}} = 1,2,\ldots,S_{\max} Slimit=1,2,...,Smax
  • 跑出多组不同的 diarization 假设
  • 最后用 DOVER-Lap 做 overlap-aware 的融合

四、实验结果

4.1 训练数据

4.1.1 模拟数据

论文用下面这些单说话人语料合成多说话人混合:

  • Switchboard-2
  • Switchboard Cellular
  • NIST SRE 2004/2005/2006/2008

然后按如下流程做模拟:

  1. 先随机选 N N N 个 speaker
  2. 每个 speaker 拼接自己的语音段和静音段
  3. 随机加房间脉冲响应
  4. 多路混合再加噪声

论文构造了 Sim1spkSim5spk 的训练/测试集。

其中 overlap ratio 通过静音间隔参数 β \beta β 控制。

4.1.2 真实数据

真实评测集包括:

  • CALLHOME
  • CSJ
  • AMI headset mix
  • DIHARD II
  • DIHARD III

这几个数据集覆盖了:

  • 电话对话
  • 日语对话
  • 会议录音
  • 多域困难场景

4.2 模型配置

论文中 EEND-EDA 的主要配置是:

  • 4 层 Transformer encoder
  • 每层 4 个 attention heads
  • embedding 维度 256
  • 输入特征是 23 维 log Mel filterbank
  • 再拼接前后 7 帧
  • 最终每 100 ms 得到一个 345 维特征

在训练策略上:

  • 先在模拟数据上预训练
  • 再在目标真实数据集上做 adaptation

评测指标是 DER 和 JER。

4.3 固定两人、三人场景下,EEND-EDA 也更强

场景 SA-EEND EEND-EDA(Chronol.) EEND-EDA(Shuffled) 结论
Sim2spk (β=2) 4.56 3.07 2.69 两人模拟场景,EDA 明显优于 SA-EEND
CALLHOME-2spk 9.54 8.24 8.07 真实电话双人对话,EDA 依然更强
CSJ 20.48 18.89 16.27 跨语言、长录音条件下仍有优势
Sim3spk (β=5) 6.92 10.41 6.21 三人模拟场景下,Shuffled EDA 最好
CALLHOME-3spk 14.00 15.86 13.92 三人真实电话场景也略优于 SA-EEND

4.4 shuffled order 比 chronological order 更好

论文专门分析了 EDA 对输入顺序的敏感性:

训练顺序 整段-按时序测试 整段-打乱测试 子采样 1/32 仅保留最后 1/32
Chronological 训练 3.07 30.04 27.18 7.68
Shuffled 训练 2.69 2.69 5.08 10.65

这里的数据来自 Sim2spk (β=2)

  • 如果模型按时间顺序训练,它在"按时间顺序输入"时还行,但一旦换成 shuffled 输入,DER 直接飙到 30.04
  • 而 shuffled 训练的模型,对 chronological 和 shuffled 测试都基本稳定在 2.69
  • 在强子采样时,shuffled 训练也明显更稳

4.5 在未知说话人数训练里, L e x i s t L_{\mathrm{exist}} Lexist 不能全量回传

论文在 Sim1spkSim5spk 上做了逐步改进:

训练设置 训练 speaker 数 Epoch L_exist 更新范围 Sim4spk DER Sim5spk DER
原始 EEND-EDA 设定 k∈{1,2,3,4} 25 更新整个网络 13.76 N/A
改进 1 k∈{1,2,3,4} 25 只更新 existence head 10.12 23.08
改进 2 k∈{1,2,3,4,5} 25 只更新 existence head 10.75 13.70
改进 3 k∈{1,2,3,4,5} 50 只更新 existence head 9.97 11.95
SA-EEND(可变人数训练) k∈{1,2,3,4,5} 50 不适用 12.24 17.42

两个结论:

  • 第一, L e x i s t L_{\mathrm{exist}} Lexist 如果直接回传到整个网络,会干扰 diarization 主任务;只更新 existence head 更好
  • 第二,EEND-EDA 虽然结构上支持可变人数,但经验上仍然受训练数据最大 speaker 数限制

4.6 在 CALLHOME 上,EEND-EDA 明显优于此前 EEND 变体

CALLHOME 交叉验证 最强 x-vector 系 SA-EEND EEND-EDA 结论
不用外部 SAD - 19.82 14.81 纯端到端条件下,EDA 明显优于 SA-EEND
TDNN-SAD 17.80 17.41 13.36 同一外部 SAD 下,EDA 明显更强
Oracle SAD 14.21 15.90 11.72 即使用 oracle SAD,EDA 仍然最好

论文最常被引用的 CALLHOME Part 2 对比。

CALLHOME Part 2 DER
SC-EEND 15.75
SAD-OD-fiert SC-EEND 15.32
EEND-EDA(旧版设定) 15.29
EEND-EDA(本文) 12.88

speaker counting:

方法 CALLHOME Part 2 说话人数计数准确率
x-vector + AHC 56.4%
x-vector + AHC + VBx 72.0%
SC-EEND 76.4%
EEND-EDA 84.4%

4.7 在 AMI 上,EEND-EDA 能泛化到长会议

AMI 是长会议录音,域差异明显。

AMI headset mix(Eval) 无外部 SAD DER Oracle SAD DER 结论
SA-EEND 27.70 20.88 固定人数 EEND 基线
最强 x-vector 系(VBx) - 18.99 强传统基线
EEND-EDA 21.56 15.80 无外部 SAD、Oracle SAD 下更强
  • EEND-EDA 对 30 分钟量级的长会议录音也能较好泛化

4.8 在 DIHARD 上,iterative inference+ 有帮助,但大人数仍然难

DIHARD 是更难的多域场景,表中指标是DER / JER

数据集 设置 Plain EEND-EDA EEND-EDA + Iterative+ 最强 x-vector 系 结论
DIHARD II Oracle SAD 20.54 / 46.92 20.24 / 45.62 18.21 / N/A Iterative+ 有帮助,但传统系统仍更强
DIHARD III Core Oracle SAD 18.38 / 43.69 17.86 / 41.69 16.56 / 38.72 Core 条件下仍落后于最强 x-vector
DIHARD III Full Oracle SAD 14.91 / 36.93 14.42 / 35.30 15.65 / 33.71 Full 条件下 EEND-EDA 在 DER 上反超
DIHARD III Full 无外部 SAD 21.55 / 41.15 20.69 / 39.07 21.48 / 37.83 Iterative+ 稳定提升,且 DER 已有竞争力
  • iterative inference+ 确实有效,尤其对 JER 更稳定
  • EEND-EDA 在 DIHARD III Full 这类更复杂、更长尾的场景里有竞争力
  • 但在大人数、多域、超难场景上,它还没有完全超越强 x-vector/VBx 系统

五、局限与后续

  • 大人数场景仍然困难,即使有 iterative inference,模型表现仍然会受到训练分布限制。
  • 训练大人数模拟数据成本很高,想让 EEND-EDA 更好处理 6 人、8 人、10 人场景,就得构造更多人数模拟混合。
  • 现在的 EDA 用的是 vanilla LSTM encoder-decoder,未来可以探索更强的 attention-based 结构。
相关推荐
sali-tec2 小时前
C# 基于OpenCv的视觉工作流-章49-人脸检测
图像处理·人工智能·opencv·算法·计算机视觉
人工智能AI技术2 小时前
“小飞贼”Little Snitch杀入Linux,内核级流量拦截
人工智能
永霖光电_UVLED2 小时前
CEA-Leti 和 CEA-List 已宣布与 Powerchip 半导体制造公司 (PSMC) 合作
人工智能·生成对抗网络·汽车·制造·激光
ai产品老杨2 小时前
异构计算时代的安防底座:基于 x86/ARM 双架构与多芯片适配的 AI 视频云平台架构解析
arm开发·人工智能·架构
JustNow_Man2 小时前
【opencode】使用方法
linux·服务器·网络·人工智能·python
lvyuanj2 小时前
Java AI开发实战:Spring AI完全指南
java·人工智能·spring
l1t2 小时前
DeepSeek总结的如何构建 AI 仪表盘
人工智能·信息可视化
AI医影跨模态组学2 小时前
Radiother Oncol 山东第一医科大学:基于多组学模型预测非小细胞肺癌患者放化疗后预后的多中心研究
人工智能·机器学习·论文·医学·医学影像
whhzhai2 小时前
AI Agent - 智能旅行助手和深度研究助手实践
人工智能·agent