声纹识别与声源定位(一)

news2024/11/19 20:40:40

        针对目前智能计算机及大规模数据的发展,依据大脑处理语音、图像数据方法的deep learning技术应运而生。deep learning技术是应用于音频信号识别,模仿大脑的语音信号学习、识别的模式。在音频信号处理的过程中,运用deep learning进行音频数据的特征提取和训练,将大幅度提高音频信号识别的准确性。

        首先看下Speaker recognition声纹识别,声纹是由人类的“发音机理”所产生的,比如“肺”,“喉头”,“口腔”。大部分人在这些尺寸和形态上是千差万别的,这是先天的一些差异。再加上后天形成,比如“年龄性格”,“不同地域”,产生些后天的影响,使得我们每个人所产生的语音信号中,蕴含的个性信息是不同的,这种个性信息我们称它为叫“声纹”。通过这种信号为载体,传入到人耳中,通过“外耳”“中耳”“内耳”逐层滤波,然后将描述语音信号中描述说话人个性的信息,传入到大脑皮层中,进而实现“听音辨人”。

机器看到这些语音信号,那它如何去实现并且完成声纹识别呢?

        对于机器而言,困难是存在的,比如语音信号在产生过程中,会交织着各种各样的混杂信息,在众多的信息中,把说话人信息单独的剥离或者分离出来,这是一个很困难的事情,

        第二点是语音信号的不确定性,我们每个人的声纹会受我们所处的环境,我们的生理状况等影响从而产生一些不确定性的漂移,随着年龄的增长,我们的语音,我们的声纹也会发生一些变化,除此以外,我们的一些硬件设备,比如“麦克风”,“遥控器”,“声音设备”等,在信号传输过程中也会产生各种各样的畸变,都会使得语音信号带来各种各样的不确定性,对我们的声纹识别的性能产生很大的影响。

声纹识别发展的历程

                主要分为三个阶段,第一个阶段是“特征设计或特征工程”。第二个阶段是“贝叶斯的模型”。第三个阶段是“Deep Embedding”。

        首先了解“特征设计或特征工程”。“特征设计或特征工程”的目标非常简单,当我们拿到信号之后,从模式识别的角度上看,怎么样去提取对说话人特性描述性很强,或者很敏感的一种特点,如果找到这样一种有效简单的特点,后端匹配或者打分模型,就可以把复杂度降到很低。

        “特征设计或特征工程”的目标就是发觉说话人敏感的特点。从语音信号中挖掘,借助人类的先验的知识,去设计各种各样的特征。有了特征之后,下一步就是“建模”,这样就进入第二阶段。

        所谓“贝叶斯的模型”阶段,不得不提到“高斯混合模型”,这是特别经典的说话识别模型,是利用多个高斯概率分布的线性组合,拟合一个说话人的分布,具体是怎么做的,主要分为两个过程。

        第一个过程是“构建UBM空间”,第二个过程是用改编的方法,去推断对应的说话者的高斯混合。“UBM”是用大量的,来自不同人的语音,然后去训练得到一个描述与说话人无关的发音空间。发音空间代表了不同人说话的共性,通过一些无监督聚类的方法,能够把整个声学发音空间聚成各种各样的小圈,利用说话人少量的语音信号或者对应的特征,在UBM的基础上进行改编,从而得到说话人的高斯混合模型。

        这样一个模型,它有两个特点,第一个特点是“精细组织”,对于“UBM”到“GM”的过程中,通常会将每个组成部分的矩阵固定不动。第二个是把每个组件优先的位置固定住,只对平均矢量进行改编,所以只需少量的样本数据,就可以完成相应的改编。

        2010年之后,随着深度学习的发展,其在图像自然语言处理,语音识别领域都取得了一系列非常显著的突破 ,从而引发研究思考,可否将这种深度学习的方法用到声纹识别的任务中,而后提出“deep embedding”的概念。(The ’embedding’ denotes the problem of learning a vector space where speakers are “embedded”)不同的embedding模型用于学习不同向量空间分布。

为什么大部分人会选用神经网络模型去做speech embedding?

        首先是它的网络模型结构非常灵活,可以做各种各样的组合。神经网络模型“layer by layer”的结构,这种结构有非常强大表征能力。其次,hierarchical representation(层次化结构的表示),对于语音信号来说,之前是一些比较浅层信息,到达高层的话,可能就是一些更加抽象,更加重要的语言学信息。所以它是一种分层的表征形式,很利于从神经网络中去学习,或者分析语音信号中所蕴含的说话人的一些表征。第三点,研究者们提出了各种有效的学习方法,例如“SGD”等等,使得网络训练更加易于收敛,更具有概括的能力。对于语音信号而言,应该选择一个什么样的“network structure”,能够让我们比较愉快的学习语音信号中所蕴含的说话人的“vector”,或者说话人的“embedding”,这时还是需要重新回到对于信号的一些理解。

如何实现deep embedding?

        语音信号有两个“property”,第一部分是“局部属性”,在时域和频率上具有一些非常稳定的局部的属性,第二部分是由于人类发音器官很难完成短时的畸变,所以人类在发音过程中是一个渐变的过程,是由人类发音机理所决定的。将这两个属性对应到说话人的特性,可以了解到,即便不同的说话人,它的一些局部属性具有很大的相似性,但是不同的人这种局部属性分布还是有很大的差别。

        17年业内相关人士开展了关于的“deep embedding”的研究,提出从原始的“spectrum”,如何给比较符合人类感知机理的一个“structure”,最后能够去学习或解析出来“speaker”的“embedding”。

        如图所示,上下两个“spectrum”来自两个不同的人,对于上面“spectrum”来讲,可以找到频带,对于下面的人,同样找到了与它对应的“logo pattern”,从平移的角度来看,不同说话人的“logo pattern”虽然具有相似性,但是它的“distribution”还是有差别的,这种现象在时域上也有同样的一些表现,所以既然语音信号中局部跟动态的属性能够体现出来说话人的特点,我们对于神经网络在设计的过程中,我们需要考虑到这些属性,能否将这些属性先验地加入到网络中,使得网络能够更好的提取说话人的特征表征。

        专业人士提出了一个基于两层“convolution neural network”,加上四层“temporal neural network”一个“CT-DNN”的结构,然后利用“P-norm”加“batch normalization”的方法,实现对“vector”的规整。最后取得了非常不错的效果。

         截止到18年出现了两个比较“the state of the art”的方法,第一个是基于一阶二阶“statistic”统计量的“pooling x-vector”,另一个是基于“flame level”的“d-vector”模型。

        “x-vector”的模型通过在“pooling”层引入一阶二阶的统计信息,使得网络“training”不但是针对某一个“flame”去“training”,而是针对一个“distribution”去“training”。它学的是一个“distribution”一个“μ”一个“σ”,高斯的一个“distribution”。

        对于“d-vector”模型来说,它是通过增加它们“delay”或者是“input context”,去尽可能的让网络学习上下文,“context”足够大“context”充足的一个“vector”,然后“vector training”完之后,可以从比较靠后的“hidden layer”里,去把“flame-level”的“embedding”获取出来。

Deep embedding的四个关键部分

        在开创性工作d-vector和x-vector的推动下,许多deep embedding技术涌现出来,其中大部分由四个关键部分组成——网络输入、网络结构、时域池化和目标函数。这些部分包括但不限于以下内容:

网络输入和网络结构:网络输入可以分为两类——时域中的原始波信号和时频域中的声学特征,包括频谱图、梅尔滤波器组(F-bank)和MFCC。网络结构更加多样,但本质上都源自于DNN、RNN/LSTM、CNN。

时域池化:时域池化表示神经网络的转换层,将帧级embedding特征转换为段级embedding特征。时域池化策略由两类组成——统计池化和基于学习的池化。

目标函数(损失函数):目标函数对说话人识别的效果影响很大。d-vector和x-vector都采用softmax作为输出层,以最小化交叉熵为目标函数,但它可能不是最优的。最近,许多工作设计了多种目标函数以进一步提高性能。

        可以看到,基于CNN的神经网络和f-bank/MFCC声学特征的研究相对较多,而一些二维卷积结构,例如ResNet,使用谱图作为输入特征。

声纹识别的研究方向

        声纹识别主要有四个研究分支:声纹验证(speaker verification),声纹识别(speaker identification),语音分离( diarization)以及声纹识别加强算法(robust speaker recognition)。

声纹验证

该任务是已知注册人时,给定一条测试音频,来判断当前音频是否由目标说话人发出,关注点是能否准确的给出是或否的判断,是最简单的一个任务。

声纹识别

该任务是再已经注册N个人的时候,给定一个音频,判断当前音频是由哪个人发出的,这个任务还可以根据说话人的识别范围划分为闭集和开集下的辨认,当确定说话人在注册声纹库里时,是一个N选一的有限范围选一个的闭集任务,当不确定当前音频是否在注册声纹库里时,是一个开集任务。

语音分离/声源分离

主要是在一段连续的语音中准确的切分出不同说话人对应的音频,解决谁在什么时候说话的问题(who spoke when)。例如客服系统或电话会议中的音频,能很明显的区分多个人的时间段,这个时候主要应用的是声纹识别技术,将每一个声音片段归类到对应的说话人上去。另一个主要的问题是鸡尾酒会的问题,就是我们的某一段音频中,不同人的说话会有重叠覆盖。

声纹识别加强算法

声纹识别中主要用到的领域自适应(Domin adaptation)、语音增强(Speech enhancement)技术以及数据增强技术(Data Augmentation),主要解决上面提到的不同信道和来源的识别问题,以及噪声等复杂场景下的准确率问题。

整体技术框架如下图所示:

 参考文献:Deep Embedding for Speaker Recognition,Deep Embedding for Speaker Recognition - 知乎主讲嘉宾:李蓝天(贪心学院特邀讲座嘉宾) 清华大学语音和语言技术中心 博士后助理研究员,主要从事语音信号处理领域的相关研究,研究方向包括声纹识别、语音识别、语种识别、情感识别等。现已发表学术论文34篇,…https://zhuanlan.zhihu.com/p/77728449

Speaker Recognition Based on Deep Learning: An Overview

基于深度学习的声纹识别概述(Speaker Recognition Based on Deep Learning: An Overview) - 知乎前言:做技术不能只见树木,不见森林,读综述类的论文,能很好的帮我们把握业界的前进方向。本文是2021年4月4日更新,由西工大张晓雷教授所作,全面的分析了说话人识别方向的几个关注点,本文及接下来的几篇文章会…https://zhuanlan.zhihu.com/p/381526743

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

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

相关文章

极海APM32F072RB开发环境测试

极海APM32F072RB开发环境测试通过自制的开发板进行测试。 🎬基于STM32cubemx工程配置 Keil MDK编译 ST-LINK/V2烧录 🌻基于APM32F0xx_SDK Keil MDK编译 ST-LINK/V2烧录 🌿官方的SDK包下载地址:https://www.geehy.com/support/…

DMDW主备集群搭建备库先open引发的问题

一、问题描述及配置主备集群搭建成功后,主备库启动脚本中START_MODEmount,备库的lsn号大于等于备库,N_OPN打开次数主库大于备库。假如搭建主备集群后,备库首先OPEN一下后引发的问题如下图:启动脚本中START_MODEopen3、…

tcp紧急指针,mss,rto,零窗口探测等

三次握手、四次挥手、重传机制、滑动窗口、流量控制、拥塞控制、TCP/UDP全解析-蒲公英云 (dandelioncloud.cn)(511条消息) TCP零窗口探测_redwingz的博客-CSDN博客_tcp0窗口TCP系列32—窗口管理&流控—6、TCP zero windows和persist timer - 走看看 (zoukankan.com)TCP协议…

VUE-Axios-解决跨域问题.

vue-axios跨域问题发现: https://github.com/Aealen/TopicSelection-VUE 使用vue-axios向后端发送请求的时候遇到如下报错: vue-axios跨域问题原因: 什么是跨域 **跨域:**指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器…

从零开始编写一个上位机(串口助手)QT Creator + Python

提示:本博客作为学习笔记,有错误的地方希望指正,此文可能会比较长,作为学习笔记的积累,希望对来着有帮助。   绪论:笔者这里使用的是QTCreator和Python来实现一个简单的串口上位机的开发的简单过程&#…

软件测试复习02:静态测试

作者:非妃是公主 专栏:《软件测试》 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录评审评审过程角色和职责评审类型静态分析控制流分析数据流分析编码标准一致性检查桌面检查代码走查…

Unity 之 资源加载 -- 可寻址系统面板介绍 -- 入门(二)

可寻址系统面板介绍 -- 入门(二)一,可寻址系统目录介绍1.2 创建分组1.2 目录介绍二,可寻址系统设置介绍2.1 Profile - 配置文件2.2 Catalog - 目录2.3 Content Update - 内容更新2.4 Downloads - 下载2.5 Build - 构建2.6 Build a…

69. 单发多框检测(SSD)代码实现以及QA

之前,我们分别介绍了边界框、锚框、多尺度目标检测和用于目标检测的数据集。 现在我们已经准备好使用这样的背景知识来设计一个目标检测模型:单发多框检测(SSD) 。该模型简单、快速且被广泛使用。尽管这只是其中一种目标检测模型&…

Filebeat从入门到实战

文章目录Filebeat的概念简介Filebeat特点Filebeat与Logstash对比Filebeat安装安装地址Logstash部署安装Filebeat实战对接LogstashFilebeat模块使用(配置Kafka)对接ES案例展示对接Kafka案例展示总结Filebeat的概念 简介 Filebeat是一种轻量型日志采集器…

【GP学习笔记三】锁与死锁

锁 一、概述 在GP中,定义了三种锁 自旋锁(Spinlocks)轻量级锁(LWLocks)普通锁(Regular locks,也叫重量级锁) 自旋锁 与互斥锁有点类似。针对某一项资源,在任何时刻&…

《Dubbo源码剖析与实战》学习笔记 Day6

问题引出,从dubbo2升级到了dubbo3版本,出现了一些消费方调用超时的现象,通过日志发现异常信息中的timeout竟然是1000ms,明明在暴漏接口的时候指定了超时时间,为什么没有生效。 经过debug分析调试后,找到了…

基础2-用卷积神经网络进行颅内和头皮脑电图数据分析的广义癫痫预测

A Generalised Seizure Prediction with Convolutional Neural Networks for Intracranial and Scalp Electroencephalogram Data Analysis 为了改善耐药癫痫和强直性癫痫患者的生活,癫痫预测作为最具挑战性的预测数据分析工作之一已引起越来越多的关注。许多杰出的…

excel图表整形:如何提升条形图的颜值

提交给老板的报告总少不了要用到图表,比如下面这个业务员销售增长率的报表,老板要求用条形图来呈现出每个人的增长率:直接用Excel自带的图表模板做出来是这样的效果:这个图看起来总有点别扭,如果能做成下面这个样子就好…

《HTML简单入门》

目录 前言 HTML基本知识 简单示例 HTML标签 单标签 HTML元素 HTML属性 HTML入门知识 HTML头部 title style meta link script noscript base HTML标题 h HTML段落 p HTML文本格式化 加粗 加重 倾斜 强调 下划线 删除线 小号字体 下标 上标 水…

Android组件——Service

一、多任务实现的基本原理 默认情况下,同一个应用程序的所有组件都运行在同一个进程中,大部分应用程序是按这种方式运行的在具体应用中需要通过设置mainifest文件中组件的android:process属性,是该组件运行在不同的进程中元素也支持android:…

strapi系列-如何创建一个定时任务-Cron Jobs

Cron 是什么? Cron 有多种用途。 Cron Jobs 用于安排服务器上的任务运行。它们最常用于自动化系统管理或维护。然而,它们也与 Web 应用程序的构建相关。 Web 应用程序可能需要在各种情况下定期执行特定操作。 为什么使用 Cron ? 定期进行的计划活动,C…

【SpringMVC】异常处理

目录 一、基本介绍 二、局部异常 三、全局异常 四、自定义异常 五、统一处理异常 六、异常处理流程 相关文章(可以关注我的SpringMVC专栏) SpingMVC专栏SpingMVC专栏一、基本介绍如果我们对异常不做任何处理的话,那么他就会返回500错误&…

list底层实现

目录 引言 结构形式 整体框架 插入删除接口实现 析构函数、拷贝构造、赋值重载 const迭代器实现 取得链表长度的方式 迭代器前置\后置operator -- 以及operator-> 引言 list是非常常用的一个容器,数据结构是链表,数据空间是以链式结构存储的…

QT中控件不满足要求那么为你的控件做“提升”吧

我们在VisualStudio中例如VC或者C#中写一些个性化比较强的项目都会对控件有更高的要求,那么当我们的要求得不到满足时就需要考虑用到自定义控件了,其中自定义控件有两种方式,一种是完全重写,另一种简单的方法是继承自现有的控件。…

指针深度解剖,从内存详细了解指针

目录 🚕第一组:一维数组 🚌第二组:字符数组 🚐字符数组1.0 🚎字符数组1.1 🚑字符数组2 🚚字符数组3 🚜第三组:二维数组 🚗在上次的博客之中我们…