【说话人日志】多说话人数据仿真 Property-Aware Simulation

论文:Property-Aware Multi-Speaker Data Simulation: A Probabilistic Modelling Technique for Synthetic Data Generation

作者:Tae Jin Park, He Huang, Coleman Hooper, Nithin Koluguri, Kunal Dhawan, Ante Jukic, Jagadeesh Balam, Boris Ginsburg

时间:2023

会议:CHiME-7 Workshop 2023

任务:Multi-speaker Data Simulation / Speaker Diarization / VAD

前言

语音方面的任务,数据增强/仿真是常见操作。之前针对多说话人 ASR 场景,大家通常是拿有说话人标签的数据集,将不同说话人交叉一句句拼接起来,还需要强制对齐时间戳打标签,生成 rttm 文件。做的再精细一点,还会在不同句子之间加随机比例的重叠(overlap),模仿会议场景的抢话/打断。

这篇文章提出了一套多说话人语料数据仿真的方法,把多说话人数据模拟,从"混音工程"推进到"属性可控的概率生成过程"。


一、模拟器的输入参数

论文把系统拆成了两层:一层负责规定"总体想生成什么风格的数据",一层负责决定"每个 session 具体长什么样"。

1.1 用户直接设定的全局参数

最核心的输入包括:

  • session 总时长 L S L_S LS
  • session 数量 N S N_S NS
  • 每个 session 的 speaker 数 N s p k N_{\mathrm{spk}} Nspk
  • turn probability p t u r n p_{\mathrm{turn}} pturn
  • overlap ratio 的均值和方差: μ o , σ o 2 \mu_o, \sigma_o^2 μo,σo2
  • silence ratio 的均值和方差: μ s , σ s 2 \mu_s, \sigma_s^2 μs,σs2

这些参数决定的是希望最终数据集整体呈现出什么统计风格。

注意

  • μ s , σ s 2 \mu_s, \sigma_s^2 μs,σs2 说的是 session 级 silence ratio 在整个数据集上的均值和方差
  • μ o , σ o 2 \mu_o, \sigma_o^2 μo,σo2 说的是 session 级 overlap ratio 在整个数据集上的均值和方差

不是"单段静音时长"的均值和方差,也不是"单段重叠时长"的均值和方差。

1.2 每个 session 内部再随机采样的变量

进入具体某个 session 之后,论文还会继续采样一些 session 级变量,例如:

  • sentence length: s l s_l sl
  • silence length: m ~ s \tilde{m}_s m~s
  • overlap length: m ~ o \tilde{m}_o m~o

全局参数决定总体效果,session 级随机变量决定这一段的效果。保证整体统计可控,单个 session 仍然保留随机性和多样性。

仿真代码已开源,YAML 中罗列了主要的控制参数和说明。


二、用 Beta 分布建模 silence / overlap

silence ratio 和 overlap ratio 都是比例量,天然落在 [ 0 , 1 ] [0,1] [0,1],所以用 Beta 分布建模。

给定均值和方差:

  • silence: μ s , σ s 2 \mu_s, \sigma_s^2 μs,σs2
  • overlap: μ o , σ o 2 \mu_o, \sigma_o^2 μo,σo2

通过矩估计转成 Beta 分布参数:

α ( o , s ) = μ ( o , s ) 2 ( 1 − μ ( o , s ) ) σ ( o , s ) 2 − μ ( o , s ) \alpha_{(o,s)} = \frac{\mu_{(o,s)}^2(1-\mu_{(o,s)})}{\sigma_{(o,s)}^2} - \mu_{(o,s)} α(o,s)=σ(o,s)2μ(o,s)2(1−μ(o,s))−μ(o,s)

β ( o , s ) = μ ( o , s ) ( 1 − μ ( o , s ) ) 2 σ ( o , s ) 2 − ( 1 − μ ( o , s ) ) \beta_{(o,s)} = \frac{\mu_{(o,s)}(1-\mu_{(o,s)})^2}{\sigma_{(o,s)}^2} - (1-\mu_{(o,s)}) β(o,s)=σ(o,s)2μ(o,s)(1−μ(o,s))2−(1−μ(o,s))

要满足标准 Beta 分布,需保证

0 < μ ( o , s ) < 1 0 < \mu_{(o,s)} < 1 0<μ(o,s)<1

0 < σ ( o , s ) 2 < μ ( o , s ) ( 1 − μ ( o , s ) ) 0 < \sigma_{(o,s)}^2 < \mu_{(o,s)}(1-\mu_{(o,s)}) 0<σ(o,s)2<μ(o,s)(1−μ(o,s))

使得

α ( o , s ) > 0 , β ( o , s ) > 0 \alpha_{(o,s)} > 0,\quad \beta_{(o,s)} > 0 α(o,s)>0,β(o,s)>0

代码里不满足上述条件,无法构成标准 Beta 分布,会报错。

之后,对每个 session 分别采样:

X μ s ∼ B e t a ( α s , β s ) X_{\mu_s} \sim \mathrm{Beta}(\alpha_s,\beta_s) Xμs∼Beta(αs,βs)

X μ o ∼ B e t a ( α o , β o ) X_{\mu_o} \sim \mathrm{Beta}(\alpha_o,\beta_o) Xμo∼Beta(αo,βo)

这里是让每个 session 围绕全局统计目标去波动。

  • μ s , μ o \mu_s, \mu_o μs,μo 决定总体想要的风格
  • X μ s , X μ o X_{\mu_s}, X_{\mu_o} Xμs,Xμo 决定某个 session 自己的目标风格

注意这里的"均值和方差"是在说 session-level ratio 的分布。后面估计 m ~ s , m ~ o \tilde{m}_s,\tilde{m}_o m~s,m~o 并再用 Gamma 分布采样时,讨论的是"单次静音/重叠持续时长"的随机性,是另一层统计量。


三、用 Negative Binomial 分布建模句子长度

除了静音和重叠,每一轮对话句子长度也是一个关键变量。论文把句子长度 s l s_l sl 看成一个离散随机变量,并假设它服从 Negative Binomial 分布

s l ∼ N B ( k w , p w ) s_l \sim \mathrm{NB}(k_w, p_w) sl∼NB(kw,pw)

其概率质量函数写成

P N B ( X = n ) = ( n + k w − 1 k w − 1 ) p w k w ( 1 − p w ) n , n = 0 , 1 , 2 , ... P_{\mathrm{NB}}(X=n) = \binom{n+k_w-1}{k_w-1} p_w^{k_w}(1-p_w)^n,\quad n=0,1,2,\ldots PNB(X=n)=(kw−1n+kw−1)pwkw(1−pw)n,n=0,1,2,...

句子长度本质上对应离散计数变量"词数"。 而真实语音里的句长通常带有明显波动,甚至有长尾,所以 Negative Binomial 比简单的 Poisson 更灵活。

在实际生成时,论文会:

  1. 先采样句子长度 s l s_l sl
  2. 再从强制对齐的数据里,按当前 speaker 取出相应数量的词
  3. 拼出一段新的句子

四、在线纠偏

因为每个 session 是动态生成的,每句话、静音、重叠都是逐条添加,如何保证最终的结果是往确定的统计量上靠。

论文在生成过程中持续计算当前 session 和目标属性之间的 discrepancy,然后动态决定下一步该补 silence 还是补 overlap。

设当前已经生成的 session 长度为 L ~ S \tilde{L}S L~S,累计静音长度为 L ~ s i l \tilde{L}{sil} L~sil,累计发音长度为 L ~ s p c h \tilde{L}{spch} L~spch,累计重叠语音长度为 O ~ s p c h \tilde{O}{spch} O~spch。

论文定义了两个 discrepancy:
Δ S = L ~ s i l L ~ S − μ s \Delta_S = \frac{\tilde{L}_{sil}}{\tilde{L}_S} - \mu_s ΔS=L~SL~sil−μs

Δ O = O ~ s p c h L ~ s p c h − μ o \Delta_O = \frac{\tilde{O}{spch}}{\tilde{L}{spch}} - \mu_o ΔO=L~spchO~spch−μo

直觉上:

  • Δ S \Delta_S ΔS 描述"当前静音比例"和"目标静音比例"的差距
  • Δ O \Delta_O ΔO 描述"当前重叠比例"和"目标重叠比例"的差距

然后系统根据这两个偏差,哪个更小,越小(考虑正负号)表示越缺少,就补哪个。当然,后续还会判断补多少 silence 或 overlap,如果两个偏差都为正,会补 0。

如果当前 overlap 不够,应该再补多少 overlap。

对应的目标方程是:

X μ o = m ~ o + O ~ s p c h L ~ s p c h − m ~ o X_{\mu_o} = \frac{\tilde{m}o + \tilde{O}{spch}}{\tilde{L}_{spch} - \tilde{m}_o} Xμo=L~spch−m~om~o+O~spch

这里:

  • m ~ o \tilde{m}_o m~o 是"理论上这一步应该补多少 overlap"
  • O ~ s p c h \tilde{O}_{spch} O~spch 是当前已累计的 overlap 语音量

解得
m ~ o = X μ o L ~ s p c h − O ~ s p c h X μ o + 1 \tilde{m}o = \frac{X{\mu_o}\tilde{L}{spch} - \tilde{O}{spch}}{X_{\mu_o} + 1} m~o=Xμo+1XμoL~spch−O~spch

同理,对于 silence
X μ s = m ~ s + L ~ s i l m ~ s + L ~ S X_{\mu_s} = \frac{\tilde{m}s + \tilde{L}{sil}}{\tilde{m}_s + \tilde{L}_S} Xμs=m~s+L~Sm~s+L~sil

其中:

  • m ~ s \tilde{m}_s m~s 是当前应该补的 silence 理论量
  • L ~ s i l \tilde{L}_{sil} L~sil 是当前累计静音时长

解得
m ~ s = L ~ s i l − X μ s L ~ S X μ s − 1 \tilde{m}s = \frac{\tilde{L}{sil} - X_{\mu_s}\tilde{L}S}{X{\mu_s} - 1} m~s=Xμs−1L~sil−XμsL~S


五、用 Gamma 分布建模静音和重叠的补充量

上面算出的 m ~ s \tilde{m}_s m~s 和 m ~ o \tilde{m}_o m~o,直接生成的会话会非常机械,随机性不足。

Gamma 分布天然定义在正实数上,且能通过均值和方差灵活控制形状,比较适合建模连续变量 silence / overlap。

于是论文把理论目标长度当作均值,再从 Gamma 分布里采样实际长度。

k = m ~ 2 σ 2 k = \frac{\tilde{m}^2}{\sigma^2} k=σ2m~2

θ = σ 2 m ~ \theta = \frac{\sigma^2}{\tilde{m}} θ=m~σ2

x Δ t ∼ Γ ( k , θ ) x_{\Delta t} \sim \Gamma(k,\theta) xΔt∼Γ(k,θ)


六、仿真流程

整个仿真流程有以下 6 步:

  1. 用户给定目标会话属性:speaker 数、turn probability、silence / overlap 的均值和方差
  2. 对每个 session,从 Beta 分布采样一个 session 级目标 silence ratio 和 overlap ratio
  3. 按 Negative Binomial 采样一句话该有多少词,再从 forced alignment 数据里拼出一句话
  4. 根据当前 session 的累计 silence / overlap 和目标统计,计算 discrepancy
  5. 若当前更缺 silence,就估计应补的静音时长;若更缺 overlap,就估计应补的重叠时长
  6. 再从对应的 Gamma 分布里采样实际长度,插入到会话里,持续循环直到达到目标 session 时长

七、实验结果

7.1 与真实数据统计的对比

论文拿 CHAES 和 AMI 做对比,观察 simulated dataset 和 real-world dataset 的 silence / overlap 统计。

数据集 指标 模拟数据 真实数据
CHAES silence ratio mean 0.1409 0.1473
CHAES overlap ratio mean 0.0759 0.0754
AMI silence ratio mean 0.1804 0.1814
AMI overlap ratio mean 0.1711 0.1473

结论

  • CHAES 上,模拟值和真实值已经贴得很近。
  • AMI 上,silence ratio 也拟合得不错。
  • AMI 的 overlap ratio 还有偏差,但整体方向并没有跑偏。

这里论文并没有讲是用什么数据来进行仿真的。

7.2 VAD 实验

用模拟数据训模型,在多个数据集上报告 AUROC

训练设置 DH3 dev VoxConv dev AMI dev CH109
D1, μ s = 0.5 \mu_s=0.5 μs=0.5 87.71 96.15 95.70 88.07
D1, μ s = 0.3 \mu_s=0.3 μs=0.3 + gain aug 89.83 96.19 94.69 91.04
+ D2 + noise aug 93.96 97.42 96.04 92.43

结论

  1. 时间戳如果太松,会明显伤害 VAD。 因为 segment 两端混入太多非语音时,模型学到的边界会变脏。
  2. gain perturbation 很重要。 否则模型更容易漏掉低能量语音。
  3. overlap 不能在模拟时随便处理。 因为 overlapping speech 会直接提高 missed detection 风险。

7.3 diarization 实验

作者在这里验证了 overlap 属性对结果的影响。

常规 diarization 数据集

训练数据设置 DH3 eval VoxConverse test AMI eval CH109
LibriVox-3Kh, μ o = 0.07 \mu_o=0.07 μo=0.07 14.49 6.01 15.96 9.94
LibriVox-3Kh, μ o = 0.15 \mu_o=0.15 μo=0.15 14.38 5.72 15.89 10.03

CHiME7 dev 集

训练数据设置 CHiME6 dev Dipco dev Mixer6 dev
LibriVox-3Kh, μ o = 0.07 \mu_o=0.07 μo=0.07 45.01 32.50 17.35
LibriVox-3Kh, μ o = 0.15 \mu_o=0.15 μo=0.15 44.37 31.07 17.13

在 CHiME6 / DipCo / Mixer6 这类更接近会议场景的数据上,较高 overlap 效果更好。

原文中没有仿真数据和真实数据结果的比较,没有仿真数据训练量的消融实验。


八、总结

本文利用统计属性构造更加可控的、精细化的仿真数据。用 Beta 分布建模 session 级的 silence / overlap 比例,用 Negative Binomial 建模句长,用 discrepancy + Gamma sampling 做在线纠偏。这套仿真工具在后续的 sortformer 系列论文中发挥了作用。

相关推荐
MadPrinter2 小时前
Ollama 本地部署 Google Gemma 4 26B MoE 旗舰模型
人工智能
code_pgf2 小时前
MNN Whisper 实时 ASR 工程实现
人工智能·whisper·mnn
AC赳赳老秦2 小时前
OpenClaw实战案例:用Agent实现每日工作日报自动生成+发送
人工智能·python·职场和发展·eclipse·github·deepseek·openclaw
敢敢のwings2 小时前
NVIDIA Thor学习之 |在Jetson AGX Thor上部署OpenClaw并基于Ollama的边缘AI协作实战(二)
人工智能·学习
OFIRM碳基硅基2 小时前
OFIRM-AGI-ASI官方标志图01版,发布
人工智能·agi·ofirm颠覆性
haina20192 小时前
海纳AI正式发布“面试Agent”——实现千岗千面与人机共管的智面新纪元
人工智能·面试·职场和发展
大信说财务2 小时前
2026年数电票管理生态:技术路线、市场格局与选型策略
人工智能·自然语言处理·电子发票·智能化·发票管理·财务工具
Deepoch2 小时前
Deepoc 开发板赋能工业巡检机器人自主感知与决策
人工智能·科技·机器人·巡检机器人·具身模型·deepoc
code 小楊2 小时前
DeepSeek V4 全面解析:测评、对比、案例及实操指南
人工智能·开源