语音基石模型(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的模型。
其他语音基石模型
如果有大量有标签的数据,我们该怎么应用。