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

相关推荐
火山引擎开发者社区13 分钟前
火山引擎 Milvus 发布官方 CLI + Skill ,终端与对话双通道掌控向量数据库
人工智能
weixin_5498083616 分钟前
从“大海捞针“到“精准定位“:易薪路AI人才罗盘如何用AI重构企业人才选拔与组织发展
大数据·人工智能·重构
步步为营DotNet20 分钟前
Blazor 在边缘计算客户端应用中的创新实践与深度解析
人工智能·microsoft·边缘计算
阿演25 分钟前
DataDjinn 新版本更新:国产数据库支持、连接树体验、AI 查询和表格编辑继续增强
数据库·人工智能·ai·ai编程
城事漫游Molly29 分钟前
质性研究AI工作流(六):质性研究质量检验的5维清单
人工智能·ai for science·定性研究
keykey6.30 分钟前
迁移学习实战:用预训练模型做图像分类
开发语言·人工智能·深度学习·机器学习
码农小旋风32 分钟前
上下文工程
人工智能·chatgpt·claude
火山引擎开发者社区35 分钟前
开启报名 | 首届火山「AI安全攻防」挑战赛邀你参赛
人工智能
DXM052135 分钟前
第8期| 传统机器学习遥感解译:SVM & 随机森林分类全流程实操
人工智能·python·随机森林·机器学习·支持向量机·arcgis·自然语言处理
程序员差不多先生35 分钟前
Copilot 取消年费改按量计费:AI Coding 工具进入了什么新阶段?
人工智能·copilot·github copilot