论文: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,xtRF,

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,,yTx1,,xT)=t=1Ts=1SP(ys,tx1,,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=hg,

其中:

  • 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(n1),,eT(n1)),

最后一层输出记作

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} WclsRD×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=1TH(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=1S(ys,tlogps,t(1ys,t)log(1ps,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

图 1 EEND-EDA 计算流程

从图1 可以看到,相比 SA-EEND,模型在提取 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,ht1enc,ct1enc),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,hs1dec,cs1dec),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=σ(Aet).(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=σ(wexistas+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](s1) 希望模型学到的是

  • 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{sqs+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,ht1enc,ct1enc),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^t1>0,zt=0,

就把这一帧直接改成全零:

y ^ t ← 0. \hat{\mathbf{y}}_t \leftarrow \mathbf{0}. y^t0.

(2) 补回 missed speech

如果某一帧 EEND 没检出任何 speaker,但 SAD 认为有语音,即

∥ y ^ t ∥ 1 = 0 , z t = 1 , \|\hat{\mathbf{y}}_t\|_1 = 0, \quad z_t = 1, y^t1=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:
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))tTfEEND((xt)tT),

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

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{ttT, 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 结构。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐