语音基石模型Speech Foundation Models( 五 )


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。最后 , 把重音的和不重要的放一起 , 输入 , 就能合回原来的声音信号(说话人和录音环境等不变)