首页 >> 大全

语音基石模型Speech Foundation Models

2023-08-16 大全 26 作者:考证青年

语音基石模型( )

主要包含三部分:

1.语音表示学习( )

2.语音大型语言模型( large )

3.其他语音基石模型

下面一一讲述。

语音表示学习( )

学习内容:

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

为什么要做语音表示学习?

以前我们做的都是完全监督学习,比如之前做一个情感识别任务,需要对每条语音人工标注其对应的标签label,喂给一个的模型去训练,比如再做个说话人识别任务,又需要标注label。

所以完全监督学习的主要缺点就是:

解释一下就是:

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

SSL模型

目前有哪些SSL模型呢?

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

对比学习

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

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

(CPC)

用来做音素分类和说话人识别任务。

比如有一段语音信号,采样率。通过5层卷积CNN,每层的步长为5,4,2,2,2,通过这五层,相当于信号被采样了5×4×2×2×2=160。所以最后输出的信号为每秒16000/160=100点。

把这100点的输出再喂给循环神经网络GRU。

的pair就是未来的一些输出向量,就是同一个句子里面,用当前的向量去预测未来。

的pair有不同的设计方式,最简单的设计就是用另外一段语音或另一个人的语音的,就是说不同的的语音的向量越远越好。这就是说话人分类。

CPC这篇论文做了两个任务:音素分类和说话人分类。

可以看到结果所示,CPC和自监督学习都比传统的MFCC特征好。还有个好玩的地方是,同一个CPC模型,通过一个线性模型就可以完成不同的任务,甚至是两个目的完全不相干的任务。

2.0

将语音输入几层的CNN后,得到向量(蓝色)先做量化后,得到图中绿色向量。

再做掩蔽。比如掩蔽掉其一部分(黑色)

然后输入,得到 (红色)。

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

XLS-R

框架基本和 2.0一样。只是XLS-R是在超大的数据上训练的。包含小时,107种语言。

下面的结果是把这两个模型预训练后,在的数据上进行微调,只要10分钟的数据,就可以做语音识别。

当参数量都是0.时,XLS-R微落后于,可能是因为XLS-R训练数据种类太多,让它有点混乱了。

但当XLS-R参数量增加到,性能直接起飞,得到非常好的结果。

上面的是只针对英文ASR,下面是多语种上的结果,只要10小时的数据,就可以比之前上万小时的结果差不多好。

预测模型

有一张狗图,喂给一个,得到一个向量,希望做一些预测任务。如果是监督学习,那目标标签 lable就是“狗”,现在我们是SSL模型,没有标签,要怎么办呢?

那就做伪标签 。先让狗图片经过一个聚类器,假设的到的是class 2(不一定是狗),假设聚类器性能很强,那大概率输出的就是狗的分类。这个架构就像-模型,互相进化,互相变得更好。

我们介绍第一个模型,名字里有个BERT,肯定和它相关,还记得什么是BERT吗?

BERT:

如图,输入“台湾大学”,BERT会把某个字,如把“湾”字mask掉,输入 ,输出一排向量,让被mask掉的那个的输出再输入一个线性模型,再经过,得到一个分布,这个分布就是在预先定义好的词表上的机率分布,预测最可能出现的字的概率(比如中国方块字,这个词表大概有一万多个字)

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

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

所以,需要自己造一个词表。怎么造呢?

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

有了词表,接下来就可以做BERT做的事情。

把输入的这段语音,提取MFCC特征,经过K-means,看和码本里的哪段最接近,比如:第一帧输出的特征和c2比较接近,第二帧和c1接近,第三帧和c6接近…然后把mask掉的那个的输出,和目标的码本,去最小化它们之间的距离。

对训完次后,接下来要怎么继续更新聚类模型呢?

很简单,把反过来当成 model,用来继续训练这边的聚类模型就好了。比如,把第一次训好的叫作-1。

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

WavLM

做说话人分类任务。

这个模型和差不多。唯一的区别就是,它的输入是混合的语音作为噪音Noisy (比如是两个人讲话的语音),但做伪标签的语音还是用的干净语音。

论文结果:

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

BEST-RQ

这个模型比较神奇,它的聚类模型更简单,只进行随机初始化,在预训练过程中,它的层和码本都不做更新,一开始是什么就是什么,然后这样也可以做的起来。

还有值得注意一点,它的输入是梅尔谱图。

论文结果:

和其他模型的性能相当,这就是BEST-RQ神奇的地方,也不知道为什么会这样。

上面介绍了很多SSL模型,那我们怎么知道它的表示特征好不好呢?

接下来介绍 这个。

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

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

后面人们又发现,SSL的不同层里包含有不同的信息,比如有12层,第1层可能包含有更多的说话人信息,第12层可能包含更多的语音内容信息。所以下游任务抽哪些层的特征更好呢?

做的事情就是,把每次的表示特征都抽出来,给他们权重并相加,权重也是可以学习的,通过权重的分配,我们就知道什么任务最需要哪几层的信息。

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

SUPRB的官网上有很多模型及他们的比较:

也有一些规律的发现:

1.同样的模型,越大越强。(雷达的每个角代表不同的任务,大模型面积包含了小模型)

2.越强的模型,基本上在所有任务上都表现很好。很少看到在一个任务上表现很好,另一个任务上表现变差的现象。

下面是在WavLM模型声的实验结果:

横轴是不同的层,纵轴是不同的任务,说话人相关的任务信息第4和5层多谢(颜色深),内容相关的任务信息在8,9,10层更多一些。

然后还有其他SSL模型,权重分布好像都类似。

语音表示学习总结:

SSL模型及其特点

衡量SSL模型

语音大型语言模型( large )

学习内容:

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

NLP

Meta在2021年发布的一个项目。它的目的就是想把语音任务都转成NLP的任务的模型。

比如今天我们想做一个语音翻译的任务。

之前的做法就需要ASR、TTS、MT三个系统的级联,这种系统存在的问题:

MT 的输入和输出都为伪文本,也就是机器自己学习出来的类似文本的东西。

MT 也就是一个语言模型 model(LM),用不同的LM,就可以实现不同的任务,比如LM为如下及对应的功能:

那怎么生成伪文本呢?

就是用之前讲到的SSL模型,比如先用对一段语音抽一排特征,然后进行K-means,再进行量化,得到伪文本。

:可以是,也可以是其他模型。

这样就得到了非监督的语音到语音的模型。

LM上画了一只独角兽(GPT标志),代表它是很像GPT的模型。

两种方式,一种是过语言模型LM,一种是不过,直接再合成。

(GSLM)

这篇论文就是语音版的GPT

首先还是这些套路,一段语音信号,先用生成伪文本表示(包括K-means 、)

然后用这些为文本表示再训一个 only 的unit语言模型,就可以让它像GPT 一样,一直去生成后面的 unit,然后再只需经过一个unit to ,就可以继续合成之后的语音信号。

当然,这个unit to 的模型也是需要训练的,怎么训练呢?可以拿一堆语音数据,把它抽成unit,这样就有和unit的pair data,模型可以用之前的(比如,等等)。

这个unit to 和-only uLM没有联合训练,只要单独训好就行。整个模型没有任何文字信息。

这个GSLM模型和GPT一样,可以做条件生成,或非条件生成任务。区别就是条件的需要先输入一段预测好的语音,让模型接着这个话讲;而非条件的不需要输入语音,只给一个begin of (BOS)的token,它输出就是随机的语音。生成模型本来就具有一定的随机性。

这篇文章还探讨了一个东西,叫作。就是GSLM输入 < BOS >,输出不是3,而是一个机率分布(就是3的机率最高)。GSLM是一个自回归的模型,把预测出的3会再喂给自己,产生下一个unit,这样循环。

就是去调整预测出来的机率。。的值设很低的话,比如把3的机率调大,其他调小(大的越来越大,小的越来越小),生成的语音会(结巴),比如重复说一句话。的值设很高的话,比如把3的机率调小,其他调大(大的调小,小的调大,均匀一点),生成的语音就会(胡言乱语)。

一般=1。

这个模型有个缺点就是局部关联“” ,就是局部分几个字之间看着蛮合理的,但整个一句话就不太合理。比如生成如下的话,也不太懂什么意思,让翻译一下,还是很混乱。该缺点可能是模型大小,或训练资料的局限导致的。

这篇文章的输入除了SSL模型输出的表示特征(变成伪文本)以外,还输入了韵律和说话人特征。

目的是输入和输出要一样(内容,韵律,说话人都不变)。

但发现伪文本特征中说话人信息很少,基本只有内容信息。这是另一篇文章,可以看到做说话人识别任务,只要做量化,准确率就会立马下降,所以现在的共识就是,SSL表示特征经过k-means的量化后,会把说话人信息给去掉。

所以需要额外把韵律和说话人信息补上,这也是为什么上面模型分成三个流。这个模型可以做Voice 任务。

就是通过特征解耦后,只要替换信息(把 抽换掉),就可以做语音转换。可以看到还是的模型性能好。

除了做语音转换, 模型还可以做 codec任务。就相当于是语音压缩表示。比如把语音从A端传输到B端,先对语音做量化,得到更细致的表示,通过很少的数据就可以传输,最后可用返回语音。

下面结果,横轴是传输语音资料的大小,纵轴是合回声音的品质。可以看到在保证语音质量的前提下,可以把它压缩的很小。

LM换成不同的模型,就可以实现不同的人物,比如换成BART,就可以实现语音翻译人物。

比如,把英文,西班牙文的语音,输入一个多语言模型,得到一排特征表示,再经过量化,得到伪文本,然后就可以用来做BART的预训练(+的架构),BART任务就是把mask掉的再重建回来。训练好后,BART就是一个看得懂英文&西班牙文unit的模型。

S2UT

那具体怎么做语音翻译任务呢?

这篇文章把训好的BART的拿出来,接上一个 2.0的,有英文和对应的西班牙文的语音成对数据。把英文语音喂给 2.0,得到一排表示,再喂给。

那为什么不用刚才的多语言呢?然后用BART

其实这样做也行,但是这篇论文就额外接了一个 2.0的。我猜在做的时候,因为额外接了一个 2.0的就可以和联合训练,而做BART的时候,因为要做,就不能联合训练。

论文结果,就是这种做法和之前用的AST+LM+TTS的模型性能相当,且不需要任何文本输入。

但Mos值确实有所下降。

UnitY

假设你有文本信息,就可以用这个模型。作为辅助。

可以输入各种类型的数据,来辅助模型训的更好。

有了文字资料,确实性能也比S2UT好。

为什么讲这个UnitY 模型呢,因为去年这两位先生对话的翻译系统就是用的这个。

但存在一个问题,就是翻译过来的话,不是原来人的声音(No )

那有解决办法吗?有的,看下面模型。

谷歌2022年9月提出的。论文链接:

有以下功能:

除了伪文本( ,不同文章给起的名字还不一样),还有另外一个模型生成声学特征 ,包含说话人信息,甚至录音环境信息。

刚才讲的 NLP模型是生成 ,现在LM的另一个输入是 ,是由一个说话人转换的模型做Codec ,保证生成语音是同一个说话人和同样的环境下的。

这块具体是怎么做的呢?

现在大部分都用Codec Model,但它们的原理都是一样的。整体流程如下图,一段语音输入(可能是CNN组成),经过一串的残差矢量量化( ),得到一堆code,喂给。

具体的细节可分解为:

一段语音信号,输入,得到一排向量,首先与第一个码书1号中寻找最相似的向量,比如输出为3个向量(蓝色),在码书中找到A3、A2、A6(红色)与它最相近,然后蓝减去红(残差,越减信息量越少,画图中颜色越来越淡),得到另一串向量(淡蓝),接着同样的操作,从码本2号中寻找与之相似的向量…假设共有8个码数,最后把这些 都放在一起,就是量化后单元 units,这个就叫作 ,然后输入一个,就能合回语音。

如果模型很好的话,输入和合回的语音应该完全一模一样的。

输出的code信息量越来越少,所以第一个code的信息量最大,如果我们只能选择传输有限量的code,就选择第一或几层code。

现在有了 和 ,一起输入给unit LM,怎么训练呢?

训练了三个类似GPT的模型,第一个输入过去的 ,让模型预测未来的 ;第二个模型输入生成的 ,以及刚才讲的最重要的一些声学特征,这里叫作 ,让模型预测未来的 ;第三个模型输入生成的 ,去预测不太重音的声学特征,叫作fine 。最后,把重音的和不重要的放一起,输入,就能合回原来的声音信号(说话人和录音环境等不变)

这个模型可以做 (比如让一段语音继续编下去,说一些有意义的话)和Music (比如一段钢琴声,它就可以继续把音乐编下去)。

VALL-E

Valle是一个TTS(Text-to-)模型,是今年微软推出的一个模型。

输入一个3秒的语音信号,当作 ,就可以生成同样的声音。

具体做法:

首先是一个自回归模型AR(产生高品质的code),输入文本,产生最重要的 。还要输入3秒的语音,让模型生成和它声音听起来一样的声音。

后面不重要的,就用非自回归模型NAR,比如还是按上面例子有8层,第一层token重音,就用AR,后面7层一般重音就用NAR。

论文实验结果,都比之前的模型好。甚至比如你那3秒的语音是在厕所录的,生成的声音也会有厕所的一些声音。

其他语音基石模型

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

2022年9月提出来的模型。前面提到很多自监督学习模型SSL,不玩这套,谁让他财大气粗,他们收集了68万小时的语音带标签数据,包括比如中&英文句子对,还有其他语言(估计上百种),倒给一个模型。

训练模型:

就是一个模型,左边,右边,输入log梅尔谱。

输出的时候它有一连串的帮它做多任务学习。那这些是什么呢?

比如一句语音“这是一本书”,把它的log梅尔谱输给模型。第一个任务,模型首先判断这是不是一句语音(Voice ),不是的话就直接END了;是语音的话,第二个任务,模型再判断是什么语言( ),是中文英文还是其他?比如我们现在输入的是中文“这是一本书”,模型就会预测中文的 ;第三个任务,可以做语音识别()或语音翻译()任务。

下面是它用的训练数据的统计。左边绿色是多语言识别任务,有中文德文西班牙文等等,共12万小时的pair data。右边紫色是做不同语言到英文的翻译,共12万小时pair data。44万小时都是做英文的语音识别。一共68万小时。

现在这个模型是开源的哦,去上下载下来,只需要几行代码调用。比如你现在想要做一个语音识别模型,都可以从 起。

USM: Model

谷歌公司也财大气粗啊,又用一千两百万12M小时的语音,包含300种语言。

它希望把能用到的资料都应用尽用。第一个就是输入语音, 就是多模态融合;第二个就是语音和文本;第三个就是输入文本。把几种类型的数据都用上了。

和的对比:

比性能好,时用的数据比还要少。

总结

1.这些大型的SSL模型,可以作为特征提取器,抽出好的特征表示,帮助下游任务。

2.基于这些SSL模型,又可以把它做,做大型的语言模型,通过这些大型模型,又可以做成 的模型。

3.有了这些语音基础模型,把NLP中的技术拿过来,做成语音版本的和,来使得模型更高效。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了