• 语音分离---学习笔记(1)


    1. 语音分离任务可分为3类:
      1. 当干扰为噪声信号时,可以称为“语音增强
      2. 干扰为其他说话人时,可以称为“多说话人分离
      3. 干扰为目标说话人自己声音的反射波时,可以称为“解混响
    2. 应用:在语音识别的前端加上语音分离技术,把目标说话人的声音和其它干扰分开就可以提高语音识别系统的鲁棒性,这从而也成为现代语音识别系统中不可或缺的一环。
    3. 传统方法:
      1. 独立成分分析ICA:
        1. 将信号之间的独立性作为分离变量判据的方法。
        2. ICA方法可以通过某个对比函数(Contrast Function)的目标函数达到极大值来消除观察信号中的高阶统计关联,实现盲源分离。盲源分离被描述成在不知道传输通道特性的情况下,从传感器或传感器阵列中分离或估计原始源波形的问题。然而,对于某些模型,不能保证估计或提取的信号与源信号具有完全相同的波形,因此有时要求放宽到提取的波形是源信号的失真或滤波版本。
      2.  稀疏主成分分析(Spars PCA):
        1. 把主成分系数(构成主成分时每个变量前面的系数)变的稀疏,也即是把大多数系数都变成零。
        2. 实现主成分分析稀疏化,最终会转化为优化问题, 也即对本来的主成分分析(PCA)中的问题增加一个惩罚函数。 这个惩罚函数包含有稀疏度的信息。当然,最终得到的问题是NP-困难问题,为了解决它,我们就需要采用一些方法逼近这个问题的解。这也是不同稀疏主成分分析算法不同的由来。
      3.  非负矩阵分解NMF
    4. 深度学习方法:
      1. 预处理:将语音信号转换到频域或者其他变换域,此时语音信号在时域表现不明显的信号特征在该变换域上表现得很明显,再对表现出的信号特征进行分析。
      2. 前置:排列问题和说话人数目未知问题是两个困难,现在的时域和频域上的语音分离方法大多都是基于mask掩模的思想
      3. 深度聚类Deep Clustering:
        1. Deep Clustering方法是最早应用于说话人无关的的模型,该模型训练的数据是这几个人的语音,测试数据可以是另外几个人的语音。
        2. 深度聚类方法使用IBM掩模,即每个时频单元只属于一个人,因此可把掩模mask估计看成时频单元聚类(分类)的问题。
        3. Deep Clustering算法训练神经网络为输入特征中的每个元素生成一个具有区分性的嵌入向量(embedding),之后利用聚类算法,如K-means,对生产的embedding进行聚类,得出不同类别即是不同说话人的信号分离结果图。Deep Clustering性能和泛化性能(训练在英文,测试在中文等情况)都比较好,但缺点是它不是一个end to end的方法,因为聚类方法不能训练。
        4. 具体操作:
          1. 把语音信号表示成一个矩阵,mask方法输入的是一个混合语音(几个说话人的声音混合在一起合成)的矩阵,输出两个同样大小的mask矩阵。将每个mask矩阵与混合信号矩阵做点乘,即可分离出每个说话人的声音信号。    
          2. 一般使用理想二值掩蔽方法来生产mask,对于时频表示的语音信号,输出有几个信号就会生成几个mask矩阵,以两个说话人为例,在每个时频点比较两个说话人语音能量的大小,将能量大的一方的mask矩阵对应位置的值设为1,另一个mask矩阵的对应位置设为0。深度学习方法可以通过训练得到输出信号对应的mask矩阵。
          3. 模型训练完成后,在测试阶段,输入混合语音的频谱特征,网络会对每个时频点生成embedding向量。然后把每个时频点的embedding向量看作一个样本,利用聚类方法,如K-means,对样本集合按照设定的类别 C进行聚类,每一个类别对应一个说话人。测试阶段的聚类类别 C可以与训练阶段不同,例如训练时有两个说话人,测试时可以使用3个说话人,网络同样是work的。有了分类之后,利用IBM时频掩蔽的方式从混合信号中提取每个说话人对应的语音信号。
      4. 置换不变训练:PIT模型的设计思想是当模型给定,就可以给出一个确定的排列(选择可以使得损失函数最小的那一种排列方式),反之当排列给定可以训练模型,因此最初随机初始化一个分离模型,得到一个排列,接着更新模型,反复迭代至收敛。
      5. 时域语音分离网络TasNet:
        1. 是时域的方法(直接输入混合语音,不经过STFT等变化得到声音特征),由编码器、分离网络、解码组成,与频域方法相比,编码过程不是固定的而是网络学到的(论文中认为对于语音而言STFT并不一定是最佳编码方式,有两点证实了此观点,论文中对编码器输出增加非负的约束会使模型变差,对编解码器增加互逆的关联约束使模型变差,即同一信号经过编码器再经过解码器得到同一信号),通过分离网络得到两个mask,学到的mask与编码器输出相乘再经过解码器得分离的声音,训练过程使用前文提到的PIT方法,编解码器都是一维卷积(相当于全连接层线性变换),实验结果展示幅度和相位信息都被编码器学习到了特征之中。
        2. TasNet的分离网络与WaveNet相似,采用多层的CNN网络,每一层都是卷积操作,涉及到的卷积主要包括因果卷积和空洞卷积(可以增大感受野,由于语音往往较长,空洞卷积和残差连接是标配)。最后一层最后一个输出经过sigmoid函数得到mask(0-1)矩阵,论文中认为对于输出的mask不需要softmax来归一化使得输出和为1,模型可以自己学到,另外sigmoid也不是必须的,生成的mask可以为负值,不用加特殊限制。    
      6.  深度学习在单通道语音分离领域已经超越了传统信号处理算法
  • 相关阅读:
    Flutter教程之 01配置环境并运行demo程序 (教程含源码)
    AI:64-基于深度学习的口罩佩戴检测
    「区块链+数字身份」:DID 身份认证的新战场
    PostgreSQL修炼之道笔记之基础篇(十)
    openstack 业务组件安装
    维格云身份认证入门教程
    【广度优先搜索-中等】130. 被围绕的区域
    X-Model传播模型3D仿真 在5G室内外协同规划中应用与研究
    高维数据降维(机器学习)
    代码随想录 | Day 57 - LeetCode 647. 回文子串、516. 最长回文子序列
  • 原文地址:https://blog.csdn.net/weixin_45647721/article/details/127037775