【说话人日志】多说话人数据仿真 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 系列论文中发挥了作用。

相关推荐
薛定猫AI1 小时前
【深度解析】终端里的免费 AI 编程助手 Freebuff:多代理架构、模型路由与安全使用实战
人工智能·安全·架构
tedcloud1234 小时前
UI-TARS-desktop部署教程:构建AI桌面自动化系统
服务器·前端·人工智能·ui·自动化·github
曦月逸霜7 小时前
啥是RAG 它能干什么?
人工智能·python·机器学习
AI医影跨模态组学7 小时前
Lancet Digit Health(IF=24.1)广东省人民医院刘再毅&amp;南方医科大学南方医院梁莉等团队:基于可解释深度学习模型预测胶质瘤分子改变
人工智能·深度学习·论文·医学·医学影像·影像组学
应用市场7 小时前
AI 编程助手三强争霸(2026 版):Claude、Gemini、GPT 各自擅长什么?
人工智能·gpt
CSND7407 小时前
YOLO resume断点续训(不能用官方的权重,是自己训练一半生成的last.pt)
深度学习·yolo·机器学习
AC赳赳老秦7 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
脑极体8 小时前
从Token消耗到DAA增长,AI价值标尺正在重构
人工智能·重构
csdn小瓯8 小时前
LangGraph自适应工作流路由机制:从关键词匹配到智能决策的完整实现
人工智能·fastapi·langgraph
QYR-分析8 小时前
高功率飞秒激光器行业发展现状、市场机遇及未来趋势分析
大数据·人工智能