语音基石模型Speech Foundation Models

news2024/12/23 22:20:22

语音基石模型(Speech Foundation Models)

主要包含三部分:
1.语音表示学习(Speech representation learning)

  • 自监督学习模型(Self-suprevised learning, SSL model)
  • Representation benchmarking

2.语音大型语言模型(Speech large language models)

  • Textless NLP
  • AudioLM
  • VALL-E

3.其他语音基石模型

  • OpenAI Whisper
  • Google USM

语音表示学习(Speech representation learning)

学习内容:

在这里插入图片描述

就是将一段语音喂给自监督学习模型(SSL model),去抽一些好用的特征表示representation,这些特征再喂给Downstream models,就可以做语音识别或说话人识别任务。

在这里插入图片描述

为什么要做语音表示学习?
以前我们做的都是完全监督学习,比如之前做一个情感识别任务,需要对每条语音人工标注其对应的标签label,喂给一个end2end的模型去训练,比如再做个说话人识别任务,又需要标注label。
在这里插入图片描述
所以完全监督学习的主要缺点就是:

在这里插入图片描述
解释一下就是:

  • 标记数据费时费力(请人标注还费钱)
  • 对不同的任务得训不同的模型,效率低下

所以人们就想到了自监督学习SSL。用一堆未带标签的数据训一个SSL模型,得到好的表示特征,开发不同的任务时只需要在输入表示特征训一个小的模型(下游任务)。
在这里插入图片描述

SSL模型

目前有哪些SSL模型呢?
在这里插入图片描述
这是2022年一篇文章Self-supervised speech representation learning: A reiew.的综述里的图,可以看到SSL模型有很多,我们可以学习6个典型的模型如下。可以分为两类,对比学习模型和预测模型。它们的差别就是训练过程和目标函数不同。

在这里插入图片描述

Contrastive Models

对比学习
一张图直观理解,就是你现在有一张猫图,再找一张猫(Positive pair)和一张狗(Negative pair)的图片,把它们分别输入三个encoder,对于输出的向量,我们希望两张猫图的向量越接近越好,而我的猫图和狗图的向量值差距越大越好。
在这里插入图片描述

这样我就训练得到一个好的表示特征representation,然后做一些下游任务的时候,比如猫狗分类任务,就只需要训一个线性模型就可以很容易把它们分开。

Contrastive predition Codeing(CPC)

用来做音素分类和说话人识别任务。
比如有一段语音信号,采样率16000Hz。通过5层卷积CNN,每层的步长为5,4,2,2,2,通过这五层,相当于信号被采样了5×4×2×2×2=160。所以最后输出的信号为每秒16000/160=100点。

在这里插入图片描述
把这100点的输出再喂给循环神经网络GRU。
Positive的pair就是未来的一些输出向量vector,就是同一个句子里面,用当前的向量去预测未来。
Negative的pair有不同的设计方式,最简单的设计就是用另外一段语音或另一个人的语音的vector,就是说不同的Speaker的语音的向量越远越好。这就是说话人分类。

在这里插入图片描述

CPC这篇论文做了两个任务:音素分类和说话人分类。
可以看到结果所示,CPC和自监督学习都比传统的MFCC特征好。还有个好玩的地方是,同一个CPC模型,通过一个线性模型就可以完成不同的任务,甚至是两个目的完全不相干的任务。
在这里插入图片描述

Wav2vec 2.0

将语音输入几层的CNN后,得到向量(蓝色)先做量化quantize后,得到图中绿色向量。
在这里插入图片描述

再做掩蔽Masking。比如掩蔽掉其一部分(黑色)
在这里插入图片描述
然后输入Transformer,得到context vector(红色)。

  • Positive的pair是这个时间点的量化向量(蓝色线),有点像做mask prediction的概念。
  • Negative的pair是这句话其他的量化向量(红色线)。

意思就是如果讲不同的内容,希望向量相似度越远愈好,讲同一句话就越近越好。

在这里插入图片描述

XLS-R

框架基本和Wav2vec 2.0一样。只是XLS-R是在超大的数据上训练的。包含400000小时,107种语言。
在这里插入图片描述

下面的结果是把这两个模型预训练pretrain后,在LibriSpeech的数据上进行微调finetune,只要10分钟的数据,就可以做语音识别。
当参数量都是0.3Billion时,XLS-R微落后于wav2vec,可能是因为XLS-R训练数据种类太多,让它有点混乱了。
在这里插入图片描述

但当XLS-R参数量增加到1Billion,性能直接起飞,得到非常好的结果。
在这里插入图片描述

上面的是只针对英文ASR,下面是多语种上的结果,只要10小时的数据,就可以比之前上万小时的结果差不多好。
在这里插入图片描述

Predictive models

预测模型
有一张狗图,喂给一个encoder,得到一个向量,希望做一些预测任务。如果是监督学习,那目标标签target lable就是“狗”,现在我们是SSL模型,没有标签,要怎么办呢?
那就做伪标签Pseudo labeling。先让狗图片经过一个聚类器clustering,假设的到的是class 2(不一定是狗),假设聚类器性能很强,那大概率输出的就是狗的分类。这个架构就像studeng-teacher模型,互相进化,互相变得更好。
在这里插入图片描述

HuBERT

我们介绍第一个模型HuBERT,名字里有个BERT,肯定和它相关,还记得什么是BERT吗?
BERT:
如图,输入“台湾大学”,BERT会把某个字,如把“湾”字mask掉,输入Transformer encoder,输出一排向量,让被mask掉的那个的输出再输入一个线性模型,再经过softmax,得到一个分布,这个分布就是在预先定义好的词表上的机率分布,预测最可能出现的字的概率(比如中国方块字,这个词表大概有一万多个字)

在这里插入图片描述

在监督学习种,就把“湾”这个字当作比如one-hot的向量,去最小化输出和它之间的距离,让预测出来的输出“湾”的机率越大越好。

在这里插入图片描述

HuBERT:
和上面类似,输入的语音信号,先经过几层CNN,得到的向量mask掉其中的一部分,输入Transformer encoder(和上面的BERT一样),不一样的地方是,Hubert没有预先定义和的词表。怎么办呢?

在这里插入图片描述

所以,需要自己造一个词表。怎么造呢?
对这一堆语音数据提取MFCC特征,然后进行K-means聚类,就可以得到一堆码本codebook,作为伪标签,也就是刚才所说的词表。

在这里插入图片描述

有了词表,接下来就可以做BERT做的事情。
把输入的这段语音,提取MFCC特征,经过K-means,看和码本里的哪段最接近,比如:第一帧输出的特征vector和c2比较接近,第二帧和c1接近,第三帧和c6接近…然后把mask掉的那个的输出,和目标的码本,去最小化它们之间的距离。
在这里插入图片描述
.

对HuBERT训完400000次后,接下来要怎么继续更新聚类模型呢?
很简单,把Hubert反过来当成teacher model,用来继续训练这边的聚类模型就好了。比如,把第一次训好的HuBERT叫作Hubert-1。

在这里插入图片描述
.

这样就会得到新的码本。然后又可以作为伪标签,训练第二轮的HuBERT-2。重复以上过程,就可以得到一个好的HuBERT模型。

在这里插入图片描述

WavLM

做说话人分类任务。
这个模型和HuBERT差不多。唯一的区别就是,它的输入是混合的语音作为噪音Noisy speech(比如是两个人讲话的语音),但做伪标签的语音还是用的干净语音。
在这里插入图片描述

论文结果:
WavLM和HuBERT明明架构一样,数据一样,loss函数一样,但只引入了denosing,它的效果就比HuBERT要好。

在这里插入图片描述

BEST-RQ

这个模型比较神奇,它的teacher聚类模型更简单,只进行随机初始化,在预训练过程中,它的Projection层和码本都不做更新,一开始是什么就是什么,然后这样也可以做的起来。
还有值得注意一点,它的输入是梅尔谱图。

在这里插入图片描述

论文结果:
和其他模型的性能相当,这就是BEST-RQ神奇的地方,也不知道为什么会这样。
在这里插入图片描述

Representation benchmarking

上面介绍了很多SSL模型,那我们怎么知道它的表示特征好不好呢?
接下来介绍SUPERB 这个benchmark。

假设现在有个预训练好的SSL模型,就先固定住,输入语音信号,输出一排向量。现在就可以把这些向量拿去做各式各样的下游任务,比如语音识别ASR(比如它的下游模型为两层LSTM),说话人识别SID(这个给相对简单因为只是个分类任务,下游模型只需要一个Linear层)等任务。

在这里插入图片描述

然后可以换不同的SSL模型,看看这不同的任务上能做到多好。

SUPERB
后面人们又发现,SSL的不同层里包含有不同的信息,比如HuBERT有12层Transformer,第1层可能包含有更多的说话人Speaker信息,第12层可能包含更多的语音内容content信息。所以下游任务抽哪些层的特征representation更好呢?
SUPERB做的事情就是,把每次的表示特征都抽出来,给他们权重并相加,权重也是可以学习的,通过权重的分配,我们就知道什么任务最需要哪几层的信息。
在这里插入图片描述

SUPERB做了很多各式各样不同的任务,比如针对说话人的任务,针对内容的任务(keyword spotting就是对语音进行关键字检测),针对语义的任务(直接从语音抽出这段话表达的意义,需要模型理解想要表达大的意思),针对副语言信息的任务,如下图。
在这里插入图片描述

SUPRB的官网上有很多模型及他们的比较:SUPERB
https://superbbenchmark.org/leaderboard

也有一些规律的发现:
1.同样的模型,越大越强。(雷达的每个角代表不同的任务,大模型面积包含了小模型)
在这里插入图片描述

2.越强的模型,基本上在所有任务上都表现很好。很少看到在一个任务上表现很好,另一个任务上表现变差的现象。
在这里插入图片描述
.

下面是在WavLM模型声的实验结果:
横轴是不同的层,纵轴是不同的任务,说话人相关的任务信息第4和5层多谢(颜色深),内容相关的任务信息在8,9,10层更多一些。
在这里插入图片描述

然后还有其他SSL模型,权重分布好像都类似。
在这里插入图片描述

语音表示学习总结:

SSL模型及其特点
在这里插入图片描述

衡量SSL模型
在这里插入图片描述

语音大型语言模型(Speech large language models)

学习内容:

在这里插入图片描述

有了SSL model抽出的特征后,我们是否能用这些特征表示上做一些大型的语言模型,比如像GPT,然后做一些如语音翻译的任务。

在这里插入图片描述

Textless NLP

Meta在2021年发布的一个项目。它的目的就是想把语音任务都转成NLP的任务。
在这里插入图片描述

比如今天我们想做一个语音翻译的任务。
之前的做法就需要ASR、TTS、MT三个系统的级联,这种系统存在的问题:

  • 需要成对的训练资料(对于的文字、语音)
  • 错误传播(如果ASR输出错误,导致最后的输出也错误)
    在这里插入图片描述
    Textless做的事情就是:
  • 不再需要对应的文字数据,只需要语音。
  • 可以应用NLP的模型。
    在这里插入图片描述

其他语音基石模型

如果有大量有标签的数据,我们该怎么应用。

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

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

相关文章

CMU 15-445 -- Embedded Database Logic - 12

CMU 15-445 -- Embedded Database Logic - 12 引言User-Defined Functions (UDF)SQL FunctionsExternal Programming Language Stored ProceduresStored Procedures 与 UDF 的区别 Database TriggersChange NotificationsUser-Defined Types (UDT)Viewsviews vs select...intov…

区别出过孔的内径、外径、单边孔环、电镀铜厚

自记: 这个参数是啥?下图区别出过孔的内径、外径、单边孔环、电镀铜厚 嘉立创单双面最小过孔内径0.3mm/外径0.6mm(极限0.56mm),四、六层最小过孔内径0.2mm/外径0.45mm(极限0.40mm),外…

学习day50

自定义指令总结: 一:定义语法: (1)局部指令: new Vue({ directives{指令名,配置对象} }) 或 new Vue({ directives{指令名,回调函数} }) (2)全局对象 Vue.dir…

基于Gym Anytrading 的强化学习简单实例

近年来强化学习(RL)在算法交易领域受到了极大的关注。强化学习算法从经验中学习并基于奖励优化行动使其非常适合交易机器人。在这篇文章,我们将简单介绍如何使用Gym Anytrading环境和GME (GameStop Corp.)交易数据集构建一个基于强化学习的交易机器人。 强化学习是…

【Java从0到1学习】05 Java 数组

1. 数组概述 需求:现在需要统计某公司员工的工资情况,例如计算平均工资、找到最高工资等。假设该公司有80名员工,用前面所学的知识,程序首先需要声明80个变量来分别记住每位员工的工资,然后在进行操作,这样…

MySQL一些知识

六、MySQL命令参数 七、远程登录 use mysql 八、SQL语句和常见的SQL操作 九、数据库和表的创建及插入 指定字段名称,按照表的字段名称顺序写: 指定字段名称: 字段名称可以不全部指定:

SpringBoot(三)

文章目录 前言一.日志的作用二.日志的使用2.1 自定义日志打印三.日志的级别3.1 日志级别的作用3.2 日志级别的分类和使用 四.⽇志持久化 前言 日志在应用程序中扮演着至关重要的角色,它是软件开发、运维和故障排查中不可或缺的工具。无论是大型企业级应用还是小型个…

node插件的安装、HTTP协议

接口测试与UI测试(功能测试,UI的自动化测试)有什么区别? 1、接口测试更多测试的是客户端与后端之间的交互 2、接口测试也是可以完全的测试产品功能测试场景 UI测试: 1、页面的交互 2、页面的各种提示信息的验证 …

C#栈、List结构的简单搭建

1、栈是一种先进后出的结构&#xff0c;如图&#xff1a; 我们用代码&#xff0c;简单实现一下&#xff1a; public class StackTest<T>{private T[] stack { get; set; }public int length { get; set; }public StackTest(){length 0;stack new T[length];}public vo…

[JVM]String str1 = new String(“yhz“)和 String str2 = “yhz“ 的区别

文章目录 0、前情1、相同之处2、不同之处3、解释前情 0、前情 为什么str1 str2 就返回true&#xff0c;而str1str3 就返回false&#xff1f;先看内存图解释 1、相同之处 String str1new String(“yhz”)和String str2“yhz”&#xff0c;都会先去字符串常量池中查看是否已经存…

Helm KinD kubectl krew Istio急速安装

本篇更新网上许多安装失效的工具&#xff0c;如krew和KinD。 本篇测试使用时间为2023/7/20&#xff0c;基本都为最新版本或最新稳定版本。 前置 Helm 是 Kubernetes 的一个包管理工具&#xff0c;用于简化 Kubernetes 应用的部署和管理。Helm 使用名为 "chart" 的打…

QDialog的两种显示方式

QDialog的两种显示方式 模态显示非模态显示 QDialog不能嵌入到其他窗口中显示&#xff08;无论继承与否&#xff09; 模态显示 d->exec(); 阻塞程序的执行 非模态显示 d->show(); 不阻塞程序

A--玉米大炮--2022河南萌新联赛第(三)场:河南大学

输入 3 3 1 1 2 2 3 3 输出 0 说明 开始时,小蓝控制所有大炮立即发射炮弹,僵王博士受到 666 点伤害,直接被击溃。 示例2 输入 2 20 5 1 5 3 输出 2 说明 开始时,小蓝控制所有大炮立即发射炮弹,僵王博士受到 101010 点伤害, 一秒后一号大炮装填完毕,小蓝控制其攻击僵王…

力扣 -- 152. 乘积最大子数组

一、题目&#xff1a; 题目链接&#xff1a;152. 乘积最大子数组 - 力扣&#xff08;LeetCode&#xff09; 二、解题步骤 下面是用动态规划的思想解决这道题的过程&#xff0c;相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码&#xff1a; class Solut…

分布式数据库 Join 查询设计与实现浅析

目录 前言&#xff1a; ①Mysql 分库分表 Join 查询场景 sharding-jdbc Code Insight SQL 路由策略 ②Elasticsearch Join 查询场景 elasticsearch-sql Code Insight ③More Than Join Join 算法 Elasticsearch Nested 类型 前言&#xff1a; 分布式数据库 Join 查…

Unity 2D 针对单个物体的空气墙(能指定物体的碰撞器)

笔者也是废了九牛二虎之力才发现这个API并选择一种相对效率高还简单的实现方法 克服了同层级空气墙的问题 这样可以实现只跟列表里的物体能发生碰撞 在使用之前请确保&#xff1a;空气墙 原本 可以与列表指定的物体发生碰撞 然后本脚本会自动取消列表外的全部碰撞&#xff…

使用spark进行hbase的bulkload

使用spark进行hbase的bulkload 一、 背景 HBase 是一个面向列&#xff0c;schemaless&#xff0c;高吞吐&#xff0c;高可靠可水平扩展的 NoSQL 数据库&#xff0c;用户可以通过 HBase client 提供的 put get 等 api 实现在数据的实时读写。在过去的几年里&#xff0c;HBase …

C++面向对象程序设计-基础入门(超详细)

目录 一、c概述 二、初识c 1、第一个c程序 2、c面向对象的三大特性&#xff08;重要&#xff09; 三、作用域运算符&#xff1a;&#xff1a; 1、使用关键字namespace创建一个命名空间 2、命名空间只能定义在全局 3、 命名空间嵌套 4、随时将新的成员加入命名空间 5、命…

uni-app : 监听路由变化

在App.vue中 在 onLaunch中,利用拦截器监听 navigateTo等, 切记要在 invoke回调函数中查看, 要是再 success回调函数中,都路由完成了,还看啥? onLaunch(){ uni.addInterceptor(navigateTo, { //监听跳转invoke(e) {console.log(******** invoke-navigateTo ********, e.url)}…

AI工具集:【stablefoundation】satblediffusion官方免费实验机器人

stablefoundation是satble diffusion官方免费实验机器人,与midjourney一样在discord上操作 视频教程 https://v.douyin.com/ibgQTU7/ 图文教程 1、打开网址: https://stabledigest.substack.com/ 2、点击discord 3、加入stable foundation 4、点击找到机器人频道&#xf…