speech separation

Speech separation

0 概述

   人类很神奇,在嘈杂的环境中,人类可以只专注于听其中一种声音,这就是鸡尾酒会效应。 Speech separation 要做的事情就是,机器跟人一样,把它想要得到的声音从嘈杂的环境抽取出来。

  主要分为两种,如下所示。

  • Speech Enhancement (speech-nonspeech separation),此种情况旨在将想要的人类声音部分与非人类声音部分分离。
  • Speaker Separation (multi-peaker talking),此种情况将两个(甚至更多)人说话的声音进行分离,从而得到每个人各自的声音。

在这里插入图片描述

  本文讲着重讲述两个人的 Speaker Separation ,同时专注于单麦克风,训练和测试的说话人是完全不同的。

  由于输入的声音讯号与输出的两段声音讯号的长度一样,所以没有必要用 seq2seq 。但之前Google研发团队在做 Speech separation 的时候用了 seq2seq ,但他们知道这是杀鸡用了牛刀,他们想说明 seq2seq 很神奇, Speech separation 这种问题也能用其来解决。

1 数据说明

在这里插入图片描述

  本课题不用刻意的去收集混合的声音讯号,就算收集了混合的声音讯号,在训练的过程中无法确定分离出的声音是否为正确答案。我们只需要收集不同语者的声音讯号,两两结合成混合声音讯号,之后再对其分离,这样得到的声音讯号就可以与原始声音讯号进行对照。有了这样的处理方法,数据的获取就变得十分简单。

2 客观估算方法
2.1 SNR(Signal-to-noise ratio)

  可以将声音讯号想象成一段非常长的向量,如果是16KHZ声音,那么每秒的声音讯号就有16k维的长度。在做 Speaker separate 的时候,我们是有正确答案进行客观的评估。

在这里插入图片描述

  上图中 X ^ \hat X X^ 表示原始声音讯号, X* 表示model的输出,X* X ^ \hat X X^ 越接近,则表示这个model的效果越好, SNR 表示二者接近的程度。其中用 E 来表示 X* ​ 与 X ^ \hat X X^ 的差距,E = X ^ \hat X X^ - X* SNR 如下式所示。

在这里插入图片描述

  从公式中可以看出, X* X ^ \hat X X^ 的差距越小, E 越小, SNR 的值会越大。但使用 SNR 会造成一个问题,适当增大X* 的音量,那么 E 就会变小,从而 SNR 会变大(如下图所示)。即音量的大小会影响 SNR 的大小,所以使用 SNR 来估量结果不是一个好的方法。

在这里插入图片描述

2.2 SI-SDR(Scale invariant signal-to-distortion ratio)

   SI-SDR (又叫 SI-SNR )对 SNR 进行了改进,其将 X* 分解成两个相互垂直的向量 XE 和 XT ,其中 XT X ^ \hat X X^ 同向。如下图所示。

在这里插入图片描述

  则有 XT + XE = X* 。关于计算 SISDR 的公式如下。

在这里插入图片描述

  由上述公式可知,如果 X* X ^ \hat X X^ 越平行, XE 会越小, XT 会越大,从而计算出的 SISDR 的值会越大。关于 XT 的计算,可以根据线性代数的向量投影公式,如下所示进行计算;关于 XE 就可以直接根据向量加减法进行计算, XE = X* - XT

在这里插入图片描述

  回到 SNR 遇到的问题,此处将 X* 放大,XT 与 XE 也随之放大,但其计算出来的 SISDR 与原来相同,所以 SISDR 解决了之前的问题。

  在整个训练过程中,需计算 SISDR improvement (用 SISDRi 表示),这里定义通过modle生成的声音与正确答案计算结果为 SISDR2 ,混合的声音和正确答案计算结果为 SISDR1SISDRi 就是 SISDR2SISDR1 的差值,其中由于 SISDR2 是经过modle生成的,所以其 SISDR 的值应该更大。下图即为参考。

在这里插入图片描述

2.3 其他估量
  • PESQ (Perceptual evaluation of speech quality):was designed to evaluate the quality,and the score ranges from -0.5 to 4.5.
  • STOI (Short-time objective intelligibility): was designed to compute intelligibility,and the score ranges from 0 to 1.

  这两种方法过于复杂,此文将不做介绍。

3 训练过程与问题
3.1 训练过程

  训练的过程如下图所示,其中 X1 与 X2 表示经过 Speaker Separation 分理出的两个声音讯号。

在这里插入图片描述

3.2 训练遇到的问题

  经过这样的过程,问题似乎得到了解决,但有一个问题却被忽略了——对于生成的两个声音讯号,为什么非得是红色的在上面蓝色的在下面呢?可以相反吗?

在这里插入图片描述

  由于为了实现speaker的独立训练,我们训练的数据集包含了各种不同speaker的声音。有的人可能说,我们每次默认红色的声音讯号在上面不就行了吗?但下图中的例子,说明此法不通。

在这里插入图片描述

  从上图中可以发现一个问题, X1 与 X2 并不能单纯的表示指定性别的声音,这种情况在training的过程中,没有办法被解决。这个问题叫做 Permutation Issue ,意思是你不知道你的输出结果应该如何摆放。

3.3 Deep Clustering(稳的一批)

  2016年美国的一个研究所提出了 Deep Clustering 来解决 Independent 的问题。声音讯号用的是矩阵来进行存储表示, Speaker Separation 要做的就是将输入矩阵 Matrix X 分成两个矩阵 Matrix X1Matrix X2,但是 Matrix X1Matrix X2 相较于 Matrix X 很相似,所以这里用 Speaker Separation 有些大材小用。

在这里插入图片描述

  此处我们不需要产生新的声音讯号,只需要产生 Mask 矩阵 Matrix X1Matrix X2 ,其大小与 Matrix X 一样,之后再将 Matrix X1Matrix X2Matrix X 分别做点乘从而得到 Matrix X1Matrix X2 。如下图所示,蓝色部分即可看做 Speaker Separation

在这里插入图片描述

3.4 Idea Binary Mask(IBM)

  Idea Binary Mask (IBM),即 Mask 矩阵用二进制表示。如下图所示,将 Mask 矩阵分别与混合过的声音矩阵相乘,就能得到单独的声音矩阵,图中演示的是蓝色声音矩阵。

在这里插入图片描述

  关于 Mask 矩阵的计算,比较两个声音矩阵相同的位置,哪个声音大就给其对应的 Mask 矩阵对应元素赋值1,小的则赋值0。这个方法看似行不通,但其确实是可行的,而且实现起来效果很好。虽然用 Idea Binary Mask 处理得到的声音矩阵跟原声音的矩阵在赋值上有些不同,但人听起来经过处理后与原始的声音讯号差不多。

在这里插入图片描述

  在训练的时候,我们需要训练一个modle,用来生成 Idea Binary Mask 矩阵。在此之前我们需要知道 Embedding Generation 的由来。

在这里插入图片描述

  首先我们有一个声音讯号,其是长度为 T ,高度为 D 的矩阵。该矩阵经过 Embedding Generation 之后变成一个立方体,立方体的长跟宽与原矩阵一样,但它多了一个高 A 。原来的每一个格子,现在被扩张成一个向量,这个向量由原矩阵相邻格子的值所决定。之后再将立方体内的向量利用 K-means Clustering (一般认知为不能train的部分)分成 K 种群,本文主要是处理分离两个人说话,所以取 K = 2。接着根据分群的结果即可产生 Binary Mask 矩阵,对于产生的 Binary Mask 矩阵中的0和1分别对应两种不同的声音。在训练的过程中,要尽量使不同颜色对应的向量相差越远越好,同种颜色则越接近越好。

  在 Deep Clustering 真正train的是 Embedding Generation 的modle,保证两点。

  • The grids for different Speakers are far way.
  • The grids belonging to the same speakers are close to each other.

  神奇的是,在训练的时候只用两种不同的声音,但是其能在测试的时候将三种声音分开 [Hershey,et al.,ICASSP’16]Deep Clustering 的缺点是没有做到真正的 end to end

3.5 Permutation Invariant Training(PIT) [Kolbæk,et al.,TASLP’17]

  为了解决 Permutation Issue 问题,提出了 PIT 。其主要处理方法是,假设已经有了训练好的 Speaker Separation ,既然不知道输出应该如何排列,就把两种情况的 loss 值都算一遍,再看谁的 loss 比较小,小的那个就是比较理想的排法。

在这里插入图片描述

  在论文 [Kolbæk,et al.,TASLP’17] 中,其先将输出的顺序随意排列,再train一下,update参数,得到一个 Network ,再用这个 Network 来决定正确答案如何安排,从而使 loss 值算出来最小,之后再进行train重复后两个过程,直至收敛为止……

在这里插入图片描述

  下图是李宏毅实验室做出的结果。 [Yang,et al., ICASSP’20]

在这里插入图片描述

  蓝色线是代表 SDR 的值,随着训练的进行其逐渐收敛。黑色的线代表输出结果与上一次结果不同的比例,由于training 的初始期间,由于Assignment会剧烈的变化,这是因为modle不知道如何确定结果的摆放顺序比较好,但其到最后也会逐渐收敛。

  利用不同的方法与 PIT 相比较的实验结果。

在这里插入图片描述

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值