Wav2Vec 2.0:语音表示自监督学习框架

Wav2Vec 2.0是目前自动语音识别的模型之一。

Wav2Vec 2.0 代表了无监督预训练技术在语音识别领域的重大进步。这些方法通过直接从原始音频中学习,无需人工标记,因此可以有效利用大量未标记的语音数据集。相比于传统的监督学习数据集通常只有大约几百小时的标记数据,这些新方法已经能够扩展到使用多达 1,000,000 小时的未标记语音进行训练。在标准基准测试上进行微调后,这种方法在低数据环境中特别显著地提升了现有技术的表现。

Wav2Vec 2.0

  • 主要思想
    • WER
  • 计算实例
  • Wav2Vec 2.0模型架构
  • 对比学习
  • 量化
  • Masking
  • 训练损失函数
  • 微调
  • 结论

主要思想

如下图所示,模型分为两个阶段进行训练。

第一阶段是自我监督模式,使用未标记的数据完成,旨在实现最佳的语音表示。

可以用类似于单词嵌入的方式来理解这个问题。词嵌入也旨在实现自然语言的最佳表示。主要区别是Wav2Vec 2.0处理音频而不是文本。

训练的第二阶段是监督微调,在此期间,标记数据用于教模型预测特定的单词或音素。如果你不熟悉“音素”这个词,你可以把它看作是特定语言中最小的声音单位,通常由一两个字母表示。

在这里插入图片描述

图1. Wav2Vec 2.0的训练阶段


第一阶段的训练是这种模式的主要优势:学习非常好的语音表示可以在少量标记数据上实现最先进的结果。例如,该论文的作者已经在一个巨大的LibriVox数据集上对模型进行了预训练。然后,他们使用了整个Libri Speech数据集进行微调,结果是测试干净子集的单词错误率(WER)为1.8%,测试其他子集的WER为3.3%。使用近10倍的数据,允许在测试清洁和测试其他上获得2.0%的WER。仅使用10分钟的标记训练数据(几乎没有数据),在Libri Speech的测试-干净/测试-其他子集上产生4.8% / 8.2%的WER。

在这里插入图片描述

图2. Wav2Vec 2.0的结果


WER

词错误率 (WER) :是语音识别或机器翻译系统性能的常用指标。

WER计算公式:
W E R = S + D + I N = S + D + I S + D + C WER = \frac{S+D+I}{N}=\frac{S+D+I}{S+D+C} WER=NS+D+I=S+D+CS+D+I

这里:

  • S:替换错误的数量(Substitutions)。这是指识别结果中将一个正确的词错误地替换为另一个词的数量。
  • D:删除错误的数量(Deletions)。这是指识别结果中遗漏了应该识别的正确词的数量。
  • I:插入错误的数量(Insertions)。这是指识别结果中多识别了不应该存在的词的数量。
  • N:参考文本中的总词数(Total number of words in the reference)。它等于替换错误、删除错误和正确词的总和,即 N = S + D + C N=S+D+C N=S+D+C
  • C:正确识别的词的数量(Correct words)。

简而言之,WER 是通过将所有错误(替换、删除和插入)相加,然后除以参考文本中的总词数来计算的。

在语音识别系统性能时,有时候会使用单词准确性(WAcc):
W A c c = 1 − W E R = N − S − D − I N = c − I N WAcc = 1 - WER =\frac{N - S -D - I}{N}=\frac{c - I}{N} WAcc=1WER=NNSDI=NcI

请注意,由于N是参考文献中的单词数,因此单词错误率可能大于1.0,因此单词准确率可能小于0.0。

计算实例

假设参考文本是:“this is a test”

假设识别结果是:“this is test”

那么计算 WER 的步骤如下:

  1. 计算替换错误(S):0 (没有词被替换)
  2. 计算删除错误(D):1 (遗漏了一个词 “a”)
  3. 计算插入错误(I):0 (没有多余的词)
  4. 计算正确词数(C):3 (正确识别了 “this”, “is”, 和 “test”)
    参考文本的总词数N是4。

于是:
W E R = S + D + I N = 0 + 1 + 0 4 = 1 4 = 0.25 WER = \frac{S+D+I}{N}=\frac{0+1+0}{4}=\frac{1}{4}=0.25 WER=NS+D+I=40+1+0=41=0.25

WER为0.25或25%

Wav2Vec 2.0模型架构

用于预测的最终模型的架构由三个主要部分组成:

  • 处理原始波形输入以获得潜在表示的卷积层 - z,
  • Transformer层,创建上下文化表示 - c,
  • 线性投影到输出 - Y.
    在这里插入图片描述

图3. 微调的Wav2Vec 2.0模型架构


这就是模型经过最终微调后的样子,准备在生产环境中进行开发。整个奇迹发生在训练的第一阶段,在自我监督模式下,当模型看起来有点不同时。该模型在没有线性投影的情况下进行训练,生成输出预测。

基本上,本文主要思想部分提到的语音表示对应于图4中的“上下文表示C”。预训练的主要思想与 BERT 类似:对 Transformer 的部分输入进行屏蔽,目标是是猜测屏蔽的潜在特征向量表示 z t z_t zt 。然而,作者通过对比学习改进了这个简单的想法.

对比学习

对比学习是一个以两种不同方式转换输入的概念。然后,训练模型来识别输入的两个变换是否仍然是同一个对象。在 Wav2Vec 2.0 中,变压器层是第一种变换方式,第二种是通过量化实现的,这将在本文的后续部分中进行解释。更正式地说,对于掩码潜在表示 z t z_t zt,我们希望获得这样的上下文表示 c t 以便能够猜测正确的量化表示 c_t以便能够猜测正确的量化表示 ct以便能够猜测正确的量化表示q_t除其他量化表示之外。很好地理解前一句很重要,所以如果您需要的话,自监督训练的Wav2Vec 2.0 版本如图 4 所示。

在这里插入图片描述

图4. 用于自监督训练的Wav2Vec 2.0模型架构

Wav2Vec 2.0自监督和监督学习的比较

在这里插入图片描述

量化

量化是将连续空间中的值转换为离散空间中的有限值集的过程。

如何在自动语音识别中实现这一点?假设一个潜在语音表示向量 z t z_t zt涵盖两个音素。语言中的音素数量是有限的。此外,所有可能的音素对的数量也是有限的。这意味着它们可以由相同的潜在语音表示完美地表示。由于它们的数量是有限的,可以创建一个包含所有可能的音素对的码本。量化归结为从码本中选择正确的码字。然而,可以想象所有可能的声音的数量是巨大的。为了更容易训练和使用,Wav2Vec 2.0 的作者创建了 G G G码本,每个码本由 V V V码字组成。要创建量化表示,应从每个码本中选择最佳单词。然后,将所选向量连接起来并通过线性变换进行处理以获得量化表示。该流程如图5所示。

在这里插入图片描述

图5. 量化

如何从每个密码本中选择最好的码字?

答案是用Gumbelsoftmax:

Gumbel-Softmax 是一种用于生成离散样本的连续近似方法。传统的 Softmax 输出是连续的概率分布,而 Gumbel-Softmax 通过引入噪声,使得在反向传播过程中可以对离散分类变量进行微分,从而能够端到端地训练模型。这对于需要离散化输出的任务非常有用。

可以对比softmax和Gumbel-Softmax图一看便知

在这里插入图片描述
在这里插入图片描述

p g , v = e x p ( s i m ( l g , v + n v ) / τ ) ∑ k = 1 V e x p ( ( l g , k + n k ) / τ ) p_{g,v}=\frac{exp(sim(l_{g,v}+n_v)/\tau)}{\sum_{k=1}^Vexp((l_{g,k}+n_k)/\tau)} pg,v=k=1Vexp((lg,k+nk)/τ)exp(sim(lg,v+nv)/τ)

这里:

  • sim – 余弦相似度
  • l ϵ R G × V l \epsilon R^{G \times V} lϵRG×V - 根据z计算的对数
  • n k = − l o g ( − l o g ( u k ) ) n_k = -log(-log(u_k)) nk=log(log(uk))
  • u k u_k uk 从均匀分布 U(0, 1) 中采样
  • 𝜏 – 温度

由于这是一个分类任务,softmax 函数似乎是在每个码本中选择最佳码字的自然选择。在这个例子中,为什么 Gumbel softmax 比普通的 softmax 更好?它有两项改进:随机化和温度𝜏。由于随机化,模型更愿意在训练期间选择不同的码字,然后更新它们的权重。重要的是,特别是在训练开始时,防止仅使用码本的子集。随着时间的推移,温度从 2 降低到 0.5,因此随机化的影响随着时间的推移越来越小。

Masking

Masing它由两个超参数定义:p = 0.065 和 M = 10,并通过以下步骤进行:

  1. 从潜在语音表示 Z Z Z的空间中获取所有时间步长.
  2. 上一步中向量的无替换比例 p p p的样本。
  3. 选择的时间步长是起始索引。
  4. 对于每个索引 i i i,连续 M M M个时间步被屏蔽。

如下图所示,采样了两个标有橙色的向量作为起始索引。

在这里插入图片描述

图6. 选择masking的起始索引

然后,从每个选定的向量开始,masking M = 10 个连续的时间步长。跨度可能会重叠,并且由于它们之间的间隙等于 3 个时间步长,因此masking 14 个连续的时间步长。

在这里插入图片描述

图7. masking M 个连续时间步骤

最后,仅针对masking的中心时间步长计算对比损失。

训练损失函数

L = L m + α L d L = L_m +\alpha L_d L=Lm+αLd

训练损失函数是两个损失函数的总和:对比损失和多样性损失。

目前,仅提到了对比损失。它负责训练模型在 K + 1 K + 1 K+1个量化候选表示 q ’ ∈ Q t q’ ∈Q_t qQt 中预测正确的量化表示 q t q_t qt 。集合 Q t Q_t Qt由目标 q t q_t qt和从其他掩模时间步骤均匀采样的 K K K个干扰项组成。

L m = − l o g e x p ( s i m ( c t , q t ) / κ ) ∑ q ~ ϵ Q t e x p ( s i m ( c t , q ~ ) / κ ) L_m = -log\frac{exp(sim(c_t,q_t)/\kappa)}{\sum_{\tilde q \epsilon Q_t} exp(sim(c_t,\tilde q)/\kappa)} Lm=logq~ϵQtexp(sim(ct,q~)/κ)exp(sim(ct,qt)/κ)

字母 κ κ κ训练期间恒定的温度。 S i m Sim Sim代表余弦相似度。函数 L m L_m Lm的主要部分与 s o f t m a x softmax softmax类似,但采用上下文表示 c t c_t ct和量化表示 q q q之间的余弦相似度来代替分数。为了更容易优化,还在该分数上添加了 − l o g -log log

多样性损失是一种正则化技术。设定了 G = 2 G=2 G=2个码本,每个码本中有 V = 320 V=320 V=320个码字。理论上,这给出了 320 × 320 = 102400 320 \times 320 = 102400 320×320=102400个可能的量化表示。然而,并不确定模型是否真的会使用所有这些可能性。否则,它可能只会使用每个码本中的例如 100 100 100个码字,从而浪费码本的全部潜力。这就是多样性损失的作用所在。多样性损失基于熵,可以用以下公式计算:

H ( X ) = − ∑ P ( x ) l o g ( P ( x ) ) H(X) = -\sum_{}P(x)log(P(x)) H(X)=P(x)log(P(x))

这里:

  • x x x – 离散随机变量 𝒳 的可能结果,
  • P ( x ) P(x) P(x) – 事件 x x x的概率.

当数据分布均匀时,熵呈现最大值。这意味着所有代码字都以相同的频率使用。这样,就可以计算整批训练样本中每个码本的熵,以检查码字的使用频率是否相同。该熵的最大化将鼓励模型利用所有代码字。最大化等于负熵的最小化,即多样性损失。

L d = 1 G V ∗ ( − H ( p ˉ g ) ) = 1 G V ∑ g = 1 G ∑ v = 1 V p ˉ g , v l o g ( p ˉ g , v ) L_d = \frac{1}{GV}*(-H(\bar p_g)) = \frac{1}{GV}\sum_{g=1}^G \sum_{v=1}^V \bar p_{g,v}log(\bar p_g,v) Ld=GV1(H(pˉg))=GV1g=1Gv=1Vpˉg,vlog(pˉg,v)

微调

由于 Wav2Vec 2.0 的微调阶段不包含任何突破性的发现,因此作者并没有过多关注论文的这一部分。在这个训练阶段,不使用量化。取而代之的是,在上下文表示 C 的顶部添加一个随机初始化的线性投影层。然后使用标准连接主义时间分类 (CTC) 损失和 SpecAugment 的修改版本(超出了本讨论的范围)对模型进行微调。

结论

Wav2Vec 2.0 采用基于对比学习思想的自监督训练方法进行自动语音识别。在巨大的原始(未标记)数据集上学习语音表示可以减少获得令人满意的结果所需的标记数据量。

本文的要点:

  • Wav2Vec 2.0 利用自我监督训练,
  • 它使用卷积层来预处理原始波形,然后应用变压器来增强上下文的语音表示,
  • 其目标是两个损失函数的加权和:
    • 对比损失,
    • 多样性损失
  • 量化用于在自监督学习中创建目标

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

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

相关文章

文章解读与仿真程序复现思路——电力系统保护与控制EI\CSCD\北大核心《基于改进Q学习算法和组合模型的超短期电力负荷预测》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Cookie 和 Session概念及相关API

目录 1.Cookie概念 2.理解会话机制 (Session) 3.相关API 3.1HttpServletRequest 3.2HttpServletResponse 3.3HttpSession 3.4Cookie 4.代码示例: 实现用户登陆 1.Cookie概念 Cookie 是存储在用户本地终端(如计算机、手机等)上的数据片段。 它…

反射获取或修改对象属性的值

利用反射既可以获取也可以写入,首先咱们先写几个获取的例子。 一:利用反射修改各数据(利用resultField.set修改) 首先定义实体类 public class Dog {private String dogUser;private int age;把DogUser的"hahaha"改为"geggegegege&quo…

LiveGBS流媒体平台GB/T28181用户手册-版本信息:查看机器码、切换查看流媒体服务

LiveGBS流媒体平台GB/T28181用户手册--版本信息:查看机器码、切换查看流媒体服务 1、版本信息1.1、查看机器码1.2、多个流媒体服务1.3、提交激活 2、搭建GB28181视频直播平台 1、版本信息 版本信息页面,可以查看到信令服务 流媒体服务相关信息,包含硬件…

免费分享一套微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端Vue管理端) Java毕业设计…

小程序丨数据功能如何使用

查询发布完成后,如发现信息有误或想要修改信息,老师可以使用数据功能在线修改已发布的查询内容。 数据功能包含导出、添加、编辑、更多操作,下面来教大家如何使用吧。 📌使用教程 数据功能主要用于在线修改已发布的查询内容&#…

C语言 | Leetcode C语言题解之第108题将有序数组转换为二叉搜索树

题目: 题解: struct TreeNode* helper(int* nums, int left, int right) {if (left > right) {return NULL;}// 选择任意一个中间位置数字作为根节点int mid (left right rand() % 2) / 2;struct TreeNode* root (struct TreeNode*)malloc(sizeo…

ElasticSearch IK分词器的安装、词典扩展与停用

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:云原生与服务部署-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 ​编辑 1. 前言 2. IK分词器安装 3. IK分词器词典扩展与停用 4. 总…

汽车整车检测的原由(北重试验平台制造厂家)

汽车整车检测是指对整车系统和构造各部分的性能、可靠性、安全性等方面进行全面检查和评估的过程。它是在汽车生产制造和销售使用环节中,为了保障驾驶安全和质量而必不可少的一项检测和评估工作。 1. 提升行车安全 汽车整车检测能够全面评估车辆的性能和安全性&…

音视频-常用的分析工具介绍-连续补充

目录 1:Audacity 2:MediaInfo 3:MP4Box 4:hexinator 5:Adobe Audition 6:VideoEye 7:YUVplayer (YUV/RGB播放器) 在做音视频分析时,经常用到各种分析工…

【有手就行】使用你自己的声音做语音合成,CPU都能跑,亲测有效

此文介绍在百度飞桨上一个公开的案例,亲测有效。 厌倦了前篇一律的TTS音色了吗?打开短视频听来听去就是那几个声音,快来试试使用你自己的声音来做语音合成吧!本教程非常简单,只需要你能够上传自己的音频数据就可以(建议…

OpenLayers中实现对ImageStatic图层的扩展以支持平铺WrapX功能

地图平铺技术概述 地图平铺(Tiling)是一种将大尺寸地图数据分割成小块(瓦片)的技术,这在地图服务中非常常见。它使得地图数据能高效加载和展示,尤其适合网络环境。通过仅加载当前视图窗口所需的地图瓦片&a…

SERVER ——查询(二)

目录 5. top 6. null 7. order by 8. 模糊查询: 9. 聚合函数 5. top top查询:查询表的前几行;下面是代码演示: --top(前面的几个记录) select top 2 * from emp; --查询表的前两列 select top 20 percent *…

MoonDream2微调指南【最小VLM】

在本指南中,我们将探讨如何使用计算机视觉数据集对完全开源的小型视觉语言模型 Moondream2 进行微调,以计数项目(这是 GPT-4V 一直表现不一致的任务),并以一种可以依赖输出用于生产应用程序的方式进行微调。 视觉语言…

FFmpeg操作命令 - 精简版

PS:(因为我只需要简单的操作,所以我整理出了这份笔记) 原网址:30分钟带你入门,20个 FFmpeg操作命令,包你学会 - 知乎 大佬零声Github整理库整理的笔记非常的全面,想看完整版去上面…

求二叉树的最大深度(oJ题)

一、题目链接:. - 力扣(LeetCode) 二、题目思路 如果结点为空,则返回0。否则该树的深度为 :左子树 和右子树 中深度大的那个再加上1,依次类推,递归下去 三、题目代码 //树的深度计算方法是: 左子树 和…

MySql:多表设计-关联查询

目录 多表设计 代码 运行 数据库设计范式 设计三范式 1、第一范式: 2、第二范式: 3、第三范式: 多表设计_关联查询 外键 外键约束 代码 运行 注意: 应用 代码 运行 代码 运行 关联查询 含义: …

Unity修改Project下的Assets的子文件的图标

Unity修改文件夹的图标 示例: 在右键可以创建指定文件夹。 github链接 https://github.com/SeaeeesSan/SimpleFolderIconCSDN资源的链接 https://download.csdn.net/download/GoodCooking/89347361 去GitHub下载支持原作者哦。重要的事情 截图来自GitHub 。 U…

【高阶数据结构】跳表

文章目录 跳表1. 什么是跳表-skiplist2. skiplist的效率如何保证?3.skiplist的实现4.skiplist跟平衡搜索树和哈希表的对比 跳表 1. 什么是跳表-skiplist skiplist本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价…

Docker安装MongoDB(Linux版)

文章目录 前言一、Docker环境的准备1.安装依赖2.安装Docker 二、使用Docker安装MongoDB1.mongo版本选取2.拉取合适的镜像3.宿主机创建MongoDB需要挂载的文件夹4.第一次无认证创建mongo用户5.启动需要认证的mongo容器 问题汇总总结 前言 本文章主要介绍在Centos系统&#xff0c…