说话人识别中的数据预处理和数据增强

news2024/11/18 21:44:09

数据预处理

  • 假设已经采集到一些数据,在进行训练之前,需要先对数据做以下预处理:
    • 数据清洗
    • 语音检测(Voice Activity Detection,VAD,也叫Speech Detection,或Silence Suppression,静音抑制)
    • 特征提取与标准化(Normalization,注意要和归一化、正则化等说法区分)
    • 数据分组

数据清洗

  • 目的是提高数据的正确性,关于数据的正确性,可参考说话人识别的数据需求
  • 出现数据错误,有以下原因
    • 录音设备故障,得到破损的音频文件
    • 人工操作失误,导致录制了纯噪声
    • 标签反转
  • 可以进行人工清洗,或自动化清洗。人工清洗对于标签反转是不可行的,而且效率低
  • 对于前两种错误,可以采用以下自动化清洗办法
    • 使用信噪比(Signal-to-noise Ratio,SNR)估计算法,例如:WADA-SNR,去除信噪比很低的音频
    • 使用VAD算法,去除无法触发VAD的音频
    • 使用语音识别(ASR)算法,去除文字结果为空,或者置信度很低的音频
  • 对于第三种错误,可采用自监督清洗,步骤如下:
    1. 先使用,已经去除前两种错误的数据,训练一个初始的说话人识别模型
    2. 利用初始的说话人识别模型,为数据中的每一个说话人,计算一个说话人的中心点,关于说话人的中心点,可参考说话人识别中的损失函数
    3. 如果某个说话人的音频,距离该说话人的中心点非常遥远,那么这个音频可能是标签反转噪声,需要去除
  • 自监督清洗有利有弊,优点在于效率高,缺点在于可能去除了困难样本

语音检测(VAD)

  • 在一段音频中,可能包含语音、静默和噪声,如下图所示:
    在这里插入图片描述
  • 使用一个预训练好的VAD模型,去除静默和噪声的部分。VAD模型是对每一帧的二分类,去除那些分类为0的帧即可
    在这里插入图片描述

特征提取与标准化

  • 特征提取是指从音频中提取出MFCC、LFBE或PLP这样的特征
  • 问题在于,应该在什么阶段进行特征提取,有两种做法:
    1. 离线特征提取
      • 在训练之前,把数据集中,所有音频的特征提取出来,储存到硬盘上
      • 训练时,直接读取这些特征,而不需要读取音频文件
      • 优点:
        • 提取出的特征可重复使用
        • 容易debug
      • 缺点:需要大量的额外硬盘空间
    2. 在线特征提取
      • 训练时,直接读取音频文件,再提取特征
      • 特征提取变为训练的一部分
      • 优点:不需要额外的硬盘空间
      • 缺点:
        • 每次训练,特征提取都需要重复计算
        • 训练过程变慢,消耗变大
        • 不容易debug
  • 标准化是指对提取出的特征减均值,除标准差,使其均值为0,方差为1。还可以进一步操作,限制数值范围为 [ 0 , 1 ] [0,1] [0,1],或 [ − 1 , 1 ] [-1,1] [1,1]
    • 限制为 [ 0 , 1 ] [0,1] [0,1]
      • 找出特征的最大值 x m a x x_{max} xmax和最小值 x m i n x_{min} xmin
      • 对特征 x ∈ [ x m i n , x m a x ] x \in [x_{min},x_{max}] x[xmin,xmax]进行变换
        x = x − x m i n x m a x − x m i n x=\frac{x-x_{min}}{x_{max}-x_{min}} x=xmaxxminxxmin
      • 从而 x ∈ [ 0 , 1 ] x \in [0,1] x[0,1]
    • 限制为 [ − 1 , 1 ] [-1,1] [1,1]
      • 找出特征的最大值 x m a x x_{max} xmax,假定 x ≥ 0 x \ge 0 x0
      • 对特征 x ∈ [ 0 , x m a x ] x \in [0,x_{max}] x[0,xmax]进行变换
        x = x − x m a x / 2 x m a x / 2 x=\frac{x-x_{max}/2}{x_{max}/2} x=xmax/2xxmax/2
      • 从而 x ∈ [ − 1 , 1 ] x \in [-1,1] x[1,1]
  • 问题在于,为什么要这么做?深度学习开始蓬勃的第一篇文章AlexNet也对数据集里的每一张图片减均值,除标准差,经典的 m e a n = [ 0.485 , 0.456 , 0.406 ] , s t d = [ 0.229 , 0.224 , 0.225 ] mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225]就是从ImageNet中统计出来的
  • 原因在于:
    • 提取出的特征,其数值范围是不受控制的
    • 神经网络的参数初始化,常常会采用高斯分布
    • 如果不进行标准化,特征的数值范围与参数的数值范围差距太大,会导致收敛速度极慢

数据分组

  • 这是使用广义端到端损失函数,训练说话人识别模型的独有步骤,关于广义端到端损失函数,可参考说话人识别中的损失函数
  • 训练神经网络时,需要把数据打包成一个一个batch,而说话人识别的batch,应该包含:
    • 多个说话人,数量记为 N N N
    • 每个说话人应具有相同的话语个数,记为 M M M
    • batch的维度为 N × M N \times M N×M
  • 为了提高在训练过程中,从硬盘读取文件,构造batch的速度,需要对数据进行分组
  • 高效的分组如下图所示,也就是按照batch中每个说话人应具有的话语个数进行分组,此时 M = 4 M=4 M=4
    在这里插入图片描述
  • 即使在数据集中,每个说话人具有超过4个话语,也要按照上图的方式进行数据分组。每个说话人具有的多于4个的那部分话语,用于构造另一个batch

数据增强

  • 数据的来源一般为数据采集和数据增强,数据增强是自动化、高效、低廉的数据产生方法,而且能提高数据的多样性
  • 数据增强技术,一开始在计算机视觉领域得到非常普遍的应用,如下图所示:
    在这里插入图片描述
  • 数据增强是基于原始数据的,上图中对原始的小狗图像进行了图像旋转、图像裁剪、颜色空间变换、添加噪声等操作,数据增强后,图像的标签不会变化,仍然是小狗,但是数据量变为原来的6倍,并且数据多样性提高了
  • 说话人识别领域中,数据增强包括
    • 时域增强(WavAugment)
    • 检测扰动(Detection Perturbation)
    • 时频谱增强(SpecAugment)
    • 语音合成增强(Synth2Aug)

时域增强

  • 常见的时域增强,包括:
    • 音量:直接将整个信号乘以某个常数
    • 采样率:对信号进行重采样,比如:将16000Hz信号重采样至8000Hz,以模拟有线电话的语音信号
    • 语速:将音频的速度乘以某个在1附近的常数,比如:0.9、1.1
    • 音高:随机偏移音频的基频
    • 编码格式:将线性脉冲编码的音频,重新编码为MP3、Opus等格式
  • 说话人识别中有一个比较重大的挑战——鲁棒说话人识别,也就是说希望说话人识别模型,对不同的声学环境也具备较高的性能
  • 不同的声学环境包括:
    • 安静的环境
    • 有多种背景噪声的环境
    • 带有房间混响的环境
  • 为了让训练数据覆盖更多的声学环境,需要多风格训练(Multistyle Training,MTR)技术
  • 假设我们需要下面的数据:
    • 100个说话人
    • 每个说话人具有10个话语
    • 每个说话人在1000种不同的背景噪声下的话语
    • 每个说话人在10种不同的房间混响下的话语
  • 只通过数据采集产生上面要求的数据,需要的采集次数是 100 × 10 × 1000 × 100 = 1 , 0000 , 0000 100 \times 10 \times 1000 \times 100=1,0000,0000 100×10×1000×100=1,0000,0000,需要一亿采集,这是不可接受的
  • 采用数据增强的方式产生数据:
    1. 使用一组参数描述一个房间,由于房间大多为立方体,所以可以用长度、宽度和高度来描述
    2. 确定信号源的位置,和录音设备的位置,可以用它们在房间中的立体坐标来描述
    3. 使用房间冲击响应(Room Impulse Response,RIR)的公式来描述该房间内,录音设备接受信号源的情况,包括:
      • 信号源直线传播,到达录音设备
      • 信号源沿其他方向传播,反射到录音设备
        在这里插入图片描述
        在这里插入图片描述
  • 背景噪声和房间混响的数学形式:
    • 信号源记为 x ( t ) x(t) x(t),对应的RIR记为 h s ( t ) h_s(t) hs(t)
    • M M M个噪声源记为 n i ( t ) n_i(t) ni(t),对应的RIR记为 h i ( t ) h_i(t) hi(t)
    • 假设还有一个加性的(Additive)的噪声源,记为 d ( t ) d(t) d(t)
    • 增强后的信号记为 x r ( t ) x_r(t) xr(t)
      x r ( t ) = x ( t ) ∗ h s ( t ) + ∑ i = 1 M n i ( t ) ∗ h i ( t ) + d ( t ) x_r(t)=x(t)*h_s(t)+\sum_{i=1}^{M}n_i(t)*h_i(t)+d(t) xr(t)=x(t)hs(t)+i=1Mni(t)hi(t)+d(t)
      其中, ∗ * 号表示卷积运算
  • 根据公式,我们可以:
    • 分别采集语音信号、噪声信号和RIR
    • 代入公式中,得到多种组合
    • 通过加权,调整信噪比
  • 相比起直接采集一亿个信号,我们只需要采集 100 × 10 + 1000 + 100 = 2100 100 \times 10 + 1000 + 100=2100 100×10+1000+100=2100个信号,然后采用多风格训练即可

检测扰动

  • 在训练时,我们到底是把数据中的哪一部分喂给模型呢?
    • 对于文本相关的说话人识别,数据需要先通过关键词检出(Keyword spotting,KWS)模型,得到关键词片段
    • 对于文本无关的说话人识别,数据需要先通过VAD模型,得到语音片段
      在这里插入图片描述
  • 如果在训练时采用的KWS/VAD模型,与运行时采用的KWS/VAD模型不一致,就会导致说话人识别模型的性能下降
  • 为了减少说话人识别模型,对特定KWS/VAD模型的依赖,我们可以采用检测扰动的数据增强方法,包括:
    • 随机偏移KWS/VAD模型的输出
    • 随机扰动KWS/VAD模型的阈值
      在这里插入图片描述

时频谱增强

  • 上面介绍的两种方法都是基于时域的,也就是说,是应用于波形图的,而时频谱增强则是应用于特征提取之后的时频谱图的
  • 时频谱增强的做法有三种,如下图所示,左上角是原始数据
    • 时域规整(Time Warping):在原始时频谱图上选定一个时间点,将时间点左边的部分进行挤压,右边的部分进行拉伸。如左下角所示
    • 频域遮掩(Frequency Masking):将原始时频谱图,特定频率范围内所有的值,替换成原始时频谱图的均值。如右上角所示
    • 时域遮掩(Time Masking):将原始时频谱图,特定时间范围内所有的值,替换成原始时频谱图的均值。如右下角所示
      在这里插入图片描述
  • 优点
    • 实现简单,计算代价小
    • 实现效率高,可用于在线特征提取,不需要用额外的硬盘空间存储
    • 实验表明,时频谱增强对语音类任务,性能提升明显
  • 注意,对标准化后的时频谱图,遮掩时只需要全部替换成0即可。实际上,标准化后的时频谱图,其均值为0

语音合成增强

  • 根据说话人识别的数据需求,我们要求数据:

    • 说话人的多样性
    • 文本的多样性
    • 录音设备和声学环境的多样性
  • 上述的时频域增强和时域增强,提高了录音设备和声学环境的多样性。那么对于说话人和文本的多样性,就需要用到语音合成增强方法

  • 语音合成增强的核心在于,利用多说话人语音合成模型,输入说话人嵌入码和文本内容,就能合成对应的语音
    在这里插入图片描述

  • 关于多说话人语音合成模型,可参考Sample Efficient Adaptive Text-to-Speech

  • 语音合成增强本质上是一个领域自适应问题:

    • 有足够的源领域语音数据
    • 不足的目标领域语音数据
    • 有足够的目标领域文本数据
  • 解决方案是:利用源领域的语音和文本数据,合成目标领域的语音数据。合成的数据并不是真正的目标领域数据,而是一种近似(Proxy)数据
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/112757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ICMP V6(计算机网络-网络层)

IPv6 使用的 ICMP IETF 制定的与IPv6配套使用的ICMP新版本,即ICMPv6 ICMPv6报文作为IPv6分组有效载荷进行传输,对应的IPv6“下一个首部字段”的值为58 ICMPv6 的报文格式和 IPv4 使用的 ICMP 的相似,即前 4 个字节的字段名称都是一样的&…

Linux下进程及其相关概念理解

目录 何为进程? task_struct 中存储了什么进程信息? 如何查看进程? 如何获取进程pid? 如何创建子进程? 为什么返回值如此呢? 为什么有两个返回值? 进程状态 进程的一般状态 运行态 终…

18-JavaSE基础巩固练习:正则表达式练习

正则表达式基本练习 一、练习1 1、需求 请编写正则表达式验证用户输入的手机号码是否满足要求。请编写正则表达式验证用户输入的邮箱号是否满足要求。请编写正则表达式验证用户输入的电话号码是否满足要求。 2、思路: 心得: 拿着一个正确的数据&…

SAP UI5 Smart Chart 功能介绍

笔者已经写过一篇详细的文章介绍 SAP UI5 Smart Chart 的使用方法: SAP UI5 应用开发教程之一百五十三 - 使用 SAP UI5 Smart Chart 控件轻松绘制十数种不同类型的专业图表 本文泛泛地介绍 Smart Chart 提供的一些其他功能。 工具栏右侧的按钮可用于选择图表类型…

Zookeeper 1 初识 Zookeeper 1.1 Zookeeper 概念

Zookeeper 【黑马程序员Zookeeper视频教程,快速入门zookeeper技术】 文章目录Zookeeper1 初识 Zookeeper1.1 Zookeeper 概念1.1.1 Zookeeper 概念1 初识 Zookeeper 1.1 Zookeeper 概念 1.1.1 Zookeeper 概念 Zookeeper 是 Apache Hadoop 项目下的一个子项目&…

3、前端笔记-JS-变量

1、什么是变量 变量是用于存放数据的容器,可以通过变量名获取数据 本质:变量是程序在内存中申请的一块用来存放数据的空间 2、变量的使用 2.1 声明变量和赋值 1、声明变量 2、给变量赋值 var:JS关键字,用来声明变量。使用这个关键字后&a…

(二)计算机组成原理——计算机的基本组成

目录 冯诺依曼计算机的特点 计算机硬件框图 系统复杂性管理的方法(3’Y) 计算机的工作步骤 上机前的准备 计算机的工作过程 存储器的基本组成 运算器的基本组成及操作过程 控制器 计算机组成原理课程笔记。 冯诺依曼计算机的特点 冯诺依曼计算…

sandbox启动未加载repeater的问题

背景 通过官方提供的 repeater 的下载链接,并不能够在sandbox启动时,加载进行,我们可以看下sandbox的日志截图 但是如果通过源码的repeater进行安装后,就能够成功加载到repeater。 分析 这是个很奇怪的问题,想要分析…

Sentinel的规则

四.Sentinel的规则 1.流控规则 1.1流控规则有哪些? 流量控制有以下几个角度: 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;运行指标,例如 QPS(每秒查询率)、线程池、系统负载等&#xff…

深度学习时数据量过大的一个解决思路:将零散的数据集中化

问题描述 最近笔者在做一个kaggle上的树叶分类的题目(https://www.kaggle.com/competitions/classify-leaves),这个题目要求根据一张树叶的图片给出这片树叶的类别,这个题目也是沐神的《动手深度学习》课程里的一个课程竞赛题目。…

编译原理笔记03

第四章 语义分析 语义分析也称为类型检查,上下文相关分析,主要负责检查程序的上下文相关的属性,例如变量使用前要声明,函数调用要与声明一致等。 1.语义规则 通常来说,程序设计语言都采用自然语言来表达程序语言的语义…

JMeter分布式压测

一、Jmeter4.0分布式压测准备工作 压测注意事项 the firewalls on the systems are turned off or correct ports are opened. 系统上的防火墙被关闭或正确的端口被打开。 all the clients are on the same subnet. 所有的客户端都在同一…

数据科学与工程理论基础复习提纲

一、Sketch 1.1 简单抽样算法 1.1.1 核心思想 对于到达的元素aia_iai​,以概率pM/mpM/mpM/m对该元素的频数加1。 MMM:抽样后的数据流大小mmm:原始数据流大小 1.1.2 操作 更新:当元素aia_iai​到达时,以ppp的概率更…

分库分表:垂直分库、垂直分表、水平分库、水平分表四个概念

文章目录一、分库分表的意义二、垂直分表的思路三、垂直分库的思路四、水平分库的思路五、水平分表的思路一、分库分表的意义 随着公司业务快速发展,数据库中的数据量猛增,访问性能也变慢了,优化迫在眉睫。分析一下问题出现在哪儿呢&#xf…

太强了,阿里内部JDK源码剖析知识手册,由浅入深堪称完美

前言 作为Java程序员,在这里想问问大家在空余时间有没有去读过 JDK 源码,虽然读源码有点自不量力的感觉,(大佬可以忽略这句)但是如若能够经常在空余时间看一下 jdk 源码不仅可以让自己对日常的开发环境了解得更加深刻…

【nowcoder】笔试强训Day3

目录 一、选择题 二、编程题 2.1在字符串中找出连续最长的数字串 2.2 数组中出现次数超过一半的数字 一、选择题 1.以下代码运行输出的是 public class Person{private String name "Person";int age0;} public class Child extends Person{public String gra…

Python json常见用法

目录 导包 api介绍 常见用法 json转python内置对象 字典对象 数组对象 文件读取 python内置对象转json 字典转json 字典转json(压缩存储) 字典转json(美化输出) 文件读取 自定义对象 普通对象 嵌套对象 补充支持 …

设计一个亿级高并发系统架构 - 12306火车票核心场景DDD领域建模

“ 架设一个亿级高并发系统,是多数程序员、架构师的工作目标。 许多的技术从业人员甚至有时会降薪去寻找这样的机会。但并不是所有人都有机会主导,甚至参与这样一个系统。今天我们用12306火车票购票这样一个业务场景来做DDD领域建模。” 开篇 要实现软件…

数据库系统概论第七章(数据库设计)知识点总结(1)—— 概述

本专栏收录了数据库的知识点,而从本文起,将讲述有关于数据库设计有关知识点,提供给有需要的小伙伴进行学习,本专栏地址可以戳下面链接查看 🎈 数据库知识点总结(持续更新中):【数据库…

了解学习node中著名的co模块原理,生成器+promise实现async+await

***内容预警*** 新手内容,菜鸟必看,大佬请绕道 首先 co 是一个npm第三方模块,我们需要npm install 之后才能使用它。 作为一个菜鸟我相信你肯定没有用过这个模块,但是据说这个模块很有名,那么我们就有必要来了解一下它…