说话人识别神经网络推理方式

news2025/1/16 1:10:31

概述

  • 说话人识别是一个序列总结(Sequence Summarization)任务,输入是音频(或者说,声学特征的序列),输出是说话人的嵌入码,有的神经网络可以输入一对音频,直接输出这对音频的相似度分数。
  • 与之相对的,语音识别任务是一个序列转导(Sequence Transduction)任务。
  • 上述两个任务都有一个共同的挑战:序列的长度是不定的。

说话人识别推理方式

对于说话人识别,前向传播的方式可以总结为四种:

  • 各帧独立的逐帧推理
  • 固定窗推理
  • 全序列推理
  • 滑动窗推理
    其中,
    • “帧”特指短时傅里叶变换(STFT)中,分帧得到的帧,关于STFT可参考深入理解傅里叶变换(四),通常一帧覆盖20ms~50ms
    • “窗”特指一系列帧所组成的序列,不要与STFT中的窗函数混淆

各帧独立的逐帧推理

  • 将一系列帧独立地输入到说话人编码器中,得到一系列独立的向量
  • 对一系列独立的向量,做一个池化操作,通常是取平均,这样就得到了一个固定维度的向量,这个向量就作为这一系列帧的说话人嵌入码
    在这里插入图片描述
  • 这是一种比较简单的推理方式,主要用于早期说话人识别神经网络,那时的神经网络还需要与其他机器学习方法合并才能超越i-vector
  • 优点:
    • 简单、直接、容易实现
    • 每一帧数据维度较小,网络参数也可以较少
    • 不需要神经网络具有记忆能力,使用MLP即可推理
    • 训练时:可以把很多帧打包成一个batch,训练效率高
  • 缺点
    • 每次推理只用到了一帧,覆盖的时间段很短暂,信息较少
    • 采用平均池化的方法生成嵌入码,使每一帧对嵌入码有同等的贡献,这并不合理,因为有的帧噪声大、有的帧噪声小

固定窗推理

  • 在文本相关的说话人识别任务中,所需识别的帧序列长度是可以确定的,比如:在唤醒词检测中,“OK Google”、“Hey Siri”这样的唤醒词,覆盖时间段不会超过1s

  • 因此可以采用一个固定长度的窗,从长序列中截取出固定长度的帧序列,至于这个帧序列的起始点和结束点,由唤醒词检测算法决定,如下图所示(图源:语音之家)
    在这里插入图片描述

  • 得到固定长度的帧序列后,将帧序列中的每一帧进行堆叠,称为“堆叠帧”,例如:帧序列长为50(即50个帧),对每一帧提取出40维的filterbank特征,那么堆叠帧的维度就是 50 × 40 = 2000 50 \times 40=2000 50×40=2000。可见,堆叠帧的维度是固定的,如下图所示(图源:语音之家)
    在这里插入图片描述

  • 优点:

    • 简单
    • 不需要神经网络具有记忆能力,使用MLP即可推理
    • 训练时:可以把很多堆叠帧打包成一个batch,训练效率高
  • 缺点

    • 只能用于文本相关的说话人识别任务
    • 堆叠帧的维度容易过大,导致网络参数也较大,可以尝试降低参数:使用dropout/maxout;使用CNN/RNN共享权重

全序列推理

  • 全序列推理旨在达到以下目标
    • 可处理任意长度的序列
    • 充分利用上下文信息
  • 有两种神经网络,非常适合全序列推理,RNN和Attention(包含Self-attention)
  • 基于RNN的全序列推理,RNN有如下特点:
    • 输入和输出都是一个序列
    • 对序列中的每个元素,都有一个输出
    • 输出序列与输入序列长度相等
    • 可处理任意长度的序列
    • 具有记忆能力,每一个输出,都包含了当前和之前的输入的信息
    • 输入序列中的每个元素并不是独立的,元素的顺序变化会影响整个输出序列
  • 对于说话人识别而言,只需要一个输出,即该序列的嵌入码,因此可以有两种做法:
    1. 对输出序列进行池化(通常为平均池化),得到一个向量作为嵌入码;
    2. 只取输出序列的最后一个元素,作为嵌入码,因为RNN具有“记忆能力”,所以只有取最后一个元素,才能包含整个序列的信息。但对于双向RNN而言,输出序列的每一个元素都包含整个序列的信息,因此不限制使用最后一个元素
      在这里插入图片描述
  • 基于Attention的全序列推理:Attention在此主要发挥两个作用
    • 序列标注(Sequence Labeling),也就是将帧序列转换成一个长度一样的序列,关于用Attention进行序列标注,可以参考深入理解Self-attention
    • 序列总结,在完成序列标注,得到与输入序列长度相等的输出序列后,不同于RNN(对输出序列进行池化),而是使用Attention将序列总结为一个嵌入码,公式如下:
      z = ∑ i = 1 T α i v i ∑ i = 1 T α i z=\frac{\sum_{i=1}^{T}\alpha_i v_i}{\sum_{i=1}^{T}\alpha_i} z=i=1Tαii=1Tαivi
      其中,
      • T T T是序列长度
      • α i \alpha_i αi是对序列的每一个元素计算的Attention分数
      • v i v_i vi是对序列的每一个元素提取的信息value
  • RNN和Attention在全序列推理中可以搭配使用,比如第一层是RNN,第二层是Attention,如此交替堆叠,最后一层输出嵌入码
  • 优点
    • 能处理可变序列,能捕获全序列上下文信息,是比较理想的推理方式
    • 对每段完整的话语,提取出声学特征后,能够直接输入到网络中
  • 缺点
    • 训练时:由于序列可变,所以无法将输入序列打包成batch用于训练,换言之,batch_size只能等于1,训练效率极低
  • 训练优化
    • 从完整的话语中,截取出片段(Segment),片段长度可自定义
    • 将相同长度的片段,打包成同一个batch,不同的batch,片段长度可以不同
    • 此时batch_size不再限制为1,训练变得高效

滑动窗推理

  • 将完整的帧序列,用类似分帧的方法,进行分窗,每个窗之间可以重叠
  • 各窗独立的逐窗推理
  • 对每个窗的推理,可以采用全序列推理方式
  • 训练时,各窗独立更新参数
  • 运行时,对每个窗的推理结果,进行池化(通常为平均池化)得到嵌入码,进行说话人识别
    在这里插入图片描述
  • 优点
    • 训练时:不需要池化,各窗独立推理,同一大小的窗可以打包在同一个batch中,不同的batch,其窗大小可以不同
    • 与全序列推理中基于片段的训练方式非常相似
  • 缺点
    • 运行时:需要逐窗推理,耗时较多
    • 若相邻窗的重叠程度为 N % N\% N%,则帧序列中的每一帧,被同时包含在了 100 % 100 % − N \frac{100\%}{100\%-N} 100%N100%个窗中,当N增大,耗时会显著增加

总结

推理方式各帧独立的逐帧推理固定窗推理全序列推理滑动窗推理
基本思想逐帧独立推理将窗中的所有帧堆叠在一起进行推理利用RNN、Attention处理可变序列每个床可视为全序列推理,逐窗独立推理
网络类型MLPMLP、CNNRNN、AttentionRNN、CNN、Attention
优点简易简易能利用全序列的上下文信息能利用全序列的上下文信息
缺点每个帧所包含的信息不足仅限于文本相关的说话人识别训练时,需要分片段打包成batch训练时,需要分片段打包成batch,窗口重叠导致额外计算复杂度

上述四种推理方式在实际中,可以合并,例如:

  • 平均池化都可以用Attention替代
  • 全序列推理可以堆叠帧,使用CNN推理
  • 池化或者聚合之后,可以再添加一个MLP

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

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

相关文章

java微信支付v3系列——9.微信支付之商家转账API

这个功能就比较复杂了,首先是得有90天的资金流水才能开通,其次开通后还需要在官网进行配置,不能直接调用,并且限制了IP地址。 如下图所示,首先需要进行产品设置,将里面都设置好后才能进行开发,…

feign 调用常见问题避坑指南!

摘要:主要是总结了一下这段时间在使用 feign 的过程中的遇到的一些坑点。一、Get请求自动转化成POST的问题1、client 请求参数没有加上 RequestParam 注解问题代码:GetMapping("/showName") String showName(String name);错误提示&#xff1a…

让 APISpace 告诉你什么场景使用什么API

Q1:某商家打算搞年底促销活动,需要将活动信息通过短信的形式通知给用户,这个场景可以用什么接口? 发送通知类的短信,可以使用 通知短信 API~ 通知短信,支持三大运营商,虚拟运营商短信发送&…

第14章 并发控制与恢复

第14章 并发控制与恢复 考试范围: 14.1-14.3, 14.8-14.11 考试题型: 事务操作 考试内容: 1、锁/共享锁/排它锁的概念 2、多粒度锁 Multiple Granularity 3、两阶段封锁协议 The Two-Phase Locking Protocol 两段锁协议是指同一事务对任何…

2.前端笔记-JS-JS3种书写位置、注释、输入输出

书写位置 行内式嵌入式外部文件引入 1、行内式JS 可以将单行或少量的JS代码写在HTML标签的事件属性中&#xff08;以on开头的属性&#xff09;&#xff0c;如onclick单双引号使用&#xff1a;HTML中推荐双引号&#xff0c;JS中推荐单引号&#xff0c;如 <input type&quo…

vue实现将自己网站(h5链接)分享到微信中形成小卡片(超详细)

大家好&#xff0c;我是雄雄。 前言 我们在分享公众号信息到微信或者群中的时候&#xff0c;会出现一个小卡片&#xff0c;如下所示&#xff1a; 但是呢&#xff0c;这种小卡片只能走微信的接口来实现&#xff0c;比如我们从公众号、小程序中分享的内容可以是这样的。如果我们…

0基础转行,四个月,改变了我的人生!

转行对于很多人而言都是一个新的开始&#xff0c;但有的人是决定了立马去做&#xff0c;而有的人则是犹犹豫豫&#xff0c;我考虑考虑吧、还没有决定好、过段时间再说吧…… 就这样&#xff0c;相似情况的两个人&#xff0c;最后有了不同的结果。 很多人总是以我很忙、学历不高…

自学100天,零基础转行软件测试,我要以更好的姿态奔赴下一场山海!

三年大专一场空 专业是电子商务&#xff0c;18年毕业&#xff0c;当时在报考时时觉得电子商务挺高大上的&#xff0c;觉得电商肯定会有前途&#xff0c;以后毕业肯定好找工作&#xff0c;跟大多数人一样&#xff0c;我开始幻想我以后毕业以后的纸醉金迷的生活&#xff0c;我以…

模数转换器ADC

模数转换器ADC F28335内部的ADC模块是一个12位分辨率的、具有流水线结构的模数转换器,其结构框图如图11-1所示。从图11-1可以看到,F28335的ADC模块一共具有16个采样通道,分成了两组,一组为ADCINAO~ ADCINA7,另一组为ADCINBO~ADCINB7。A组的通道使用采样保持器A,也就是图…

【SCI论文解读复现NO.1】基于Transformer-YOLOv5的侧扫声纳图像水下海洋目标实时检测

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

【小学信息技术教资面试】《制作通讯录》教案

1.题目&#xff1a;制作通讯录 2.内容&#xff1a; 3.基本要求&#xff1a; &#xff08;1&#xff09;使用任务驱动法进行教学。 &#xff08;2&#xff09;掌握表格的插入和信息的填写。 &#xff08;3&#xff09;试讲时间是10分钟。 《制作通讯录》教案 一、教学目标&am…

我国核桃种植深加工行业供给较为充足 未来大健康消费时代将带来广阔市场

根据观研报告网发布的《2022年中国核桃种植深加工行业分析报告-行业竞争策略与发展动向研究》显示&#xff0c;核桃加工分为初加工与深加工。其中核桃深加工包括核桃油的压榨、核桃蛋白粉的制备、以核桃仁为原料生产休闲食品、以核桃青皮、壳等为原料生产加工日化产品等&#x…

Java agent 使用

一、前言 于一个即将上线的应用来说&#xff0c;系统监控是必不可少的&#xff0c;为什么需要监控呢&#xff1f;应用是跑在服务器上的&#xff0c;应用在运行过程中会发生各自意想不到的问题&#xff0c;像大家熟知的OOM&#xff0c;mysql故障&#xff0c;服务器宕机&#xff…

SpringBoot+Vue实现前后端分离的教务评教系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

将spark的数据保存到MySQL

文章目录前言环境的准备是必要的下载解压放置文件代码书写注意事项结束语前言 我们用spark对数据进行分析和提取数据后要对得到的数据进行保存接下来的内容是将数据保存到MySQL数据库中 环境的准备是必要的 下载 &#xff08;本小博主已经为看官大人准备好了下载地址点击下载…

【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康

前提介绍 相信如果经历了我的上一篇Arthas的文章[【JVM实战系列】「监控调优体系」针对于Alibaba-Arthas的安装入门及基础使用开发实战指南]之后&#xff0c;相信你对Arthas的功能和使用应该有了一定的理解了。那么我们就要进行下一步的探索功能。 Arthas对于SpringBoot2的支…

无效回表谁的锅?存储引擎:这事儿不赖我

明确场景 要回答这个问题&#xff0c;我们一般分几步来走&#xff1a; 1.确认问题&#xff0c;对齐Sql语句&#xff1b; 2.解答问题本身&#xff0c;也就是时间复杂度分析&#xff1b; 3.针对本身提出这个场景&#xff0c;可能出现的性能瓶颈进行分析&#xff1b; 4.针对瓶…

vue+element模仿腾讯视频电影网站

一.布局设计 官方图例&#xff1a; demo效果&#xff1a; 顶部1&#xff1b;左侧菜单栏2&#xff1b;右侧内容展示区3&#xff1b; 关键点&#xff1a; 顶部固定&#xff0c;不随页面滚动而滚动&#xff1b;左侧可局部滚动显示更多菜单&#xff1b;右侧局部滚动&#xff…

拓扑梅尔智慧办公平台(Topomel Box) 3.0发布

今天&#xff0c;2022年12月21日&#xff0c;我很高兴地宣布&#xff1a;拓扑梅尔智慧办公平台(Topomel Box)的3.0版本正式发布。 下面&#xff0c;请允许我简单地介绍下新版本的一些基本情况。 新特性 1) 统一的文件管理 将所有你关心的文件都统一存放在同一个地方&#xff…

Linux 4.7内核syncookie的性能

虽然现在的内核都已经是4.11版本了&#xff0c;但本文依旧基于较老的内核版本旧事重提&#xff0c;就4.7版本的一个针对syncookie的一个优化书写一段吹捧与嘲讽。 自从4.4版本的Lockless TCP listener以来&#xff0c;针对TCP在大并发连接处理这块一直都没有更大的突破&#x…