位置: IT常识 - 正文

【语音算法】wav2vec系列原理和使用(语音处理算法)

编辑:rootadmin
【语音算法】wav2vec系列原理和使用 文章目录前言1. wav2vec2. vq-wav2vec3. wav2vec2.03.1 encoder3.2 context3.3 wav2vec2.0的使用(transformers库)参考文献前言

推荐整理分享【语音算法】wav2vec系列原理和使用(语音处理算法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:语音识别算法c源码,语音处理算法,语音 算法,语音 算法,phonetics语音算法,语音算法方向及前景,语音算法方向及前景,语音算法方向及前景,内容如对您有帮助,希望把文章链接给更多的朋友!

wav2vec系列工作由facebook AI Research团队提出,包括wav2vec、vq-wav2vec、wav2vec2.0,效仿nlp上的word2vec,是语音的一种通用特征提取器。本文重点讲解wav2vec2.0模型及其使用方法。

1. wav2vec

论文:wav2vec: Unsupervised Pre-training for Speech Recognition

本文提出一种无监督的语音预训练模型 wav2vec,可迁移到语音下游任务。模型结构如下图,分为将原始音频x编码为潜在空间z的 encoder network(5层卷积),和将z转换为contextualized representation的 context network(9层卷积),最终特征维度为512x帧数。目标是在特征层面使用当前帧预测未来帧。

2. vq-wav2vec

论文:vq-wav2vec: Self-Supervised Learning of Discrete Speech Representations

【语音算法】wav2vec系列原理和使用(语音处理算法)

本文基于wav2vec,将连续特征z通过提出的量化模块,变成离散特征z‘,实现特征空间从无限的连续到有限的离散的转换过程。文中提出了两种量化方法,Gumbel softmax和K-Means,如下图。 其中,左右两个部分中的 e1 … ev,就是码本(记录特征集,可以理解为 BERT 中的词表),Gumbel通过逻辑值最大化(回传时使用Gumbel softmax来保证可导)找对应码本条,K-Means通过计算与码本距离来找最小距离的码本条。

3. wav2vec2.0

论文:wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations

本文基于wav2vec,结合了vq-wav2vec的量化模块和Transformer,提出了wav2vec2.0,如下图。其中,encoder network基于CNN,而context network基于Transformer,任务是在特征层面恢复被mask的量化的帧。 模型的整体结构如下图,以下具体讲解结构。

3.1 encoder

feature extractor 使用了7层的一维CNN,步长为(5,2,2,2,2,2,2),卷积核宽度为(10,3,3,3,3,2,2)。 对于x=16000的输入语音,各卷积层输出的时间维度为: cnn0 (16000-10)/5+1 = 3199 cnn1 (3199-3)/2+1 = 1599 cnn2 (1599-3)/2+1 = 799 cnn3 (799-3)/2+1 = 399 cnn4 (399-3)/2+1 = 199 cnn5 (199-2)/2+1 = 99 (除法有小数,向下取整) cnn6 (99-2)/2+1 = 49 (除法有小数,向下取整) 因此,对于16k采样率的1s的语音对应矩阵(1,16000),channels大小为512,对应的输出为 (512,49),时间维度上约相当于每20ms产生一个512维的特征向量,但实际上每一帧都经过多层卷积,可见到的时间不止20ms。 另外,在cnn0使用了GroupNorm,在cnn1-6的输出使用了GELU。

(feature_extractor): Wav2Vec2FeatureEncoder( (conv_layers): ModuleList( (0): Wav2Vec2GroupNormConvLayer( (conv): Conv1d(1, 512, kernel_size=(10,), stride=(5,), bias=False) (activation): GELUActivation() (layer_norm): GroupNorm(512, 512, eps=1e-05, affine=True) ) (1): Wav2Vec2NoLayerNormConvLayer( (conv): Conv1d(512, 512, kernel_size=(3,), stride=(2,), bias=False) (activation): GELUActivation() ) (2): Wav2Vec2NoLayerNormConvLayer( (conv): Conv1d(512, 512, kernel_size=(3,), stride=(2,), bias=False) (activation): GELUActivation() ) (3): Wav2Vec2NoLayerNormConvLayer( (conv): Conv1d(512, 512, kernel_size=(3,), stride=(2,), bias=False) (activation): GELUActivation() ) (4): Wav2Vec2NoLayerNormConvLayer( (conv): Conv1d(512, 512, kernel_size=(3,), stride=(2,), bias=False) (activation): GELUActivation() ) (5): Wav2Vec2NoLayerNormConvLayer( (conv): Conv1d(512, 512, kernel_size=(2,), stride=(2,), bias=False) (activation): GELUActivation() ) (6): Wav2Vec2NoLayerNormConvLayer( (conv): Conv1d(512, 512, kernel_size=(2,), stride=(2,), bias=False) (activation): GELUActivation() ) ) )3.2 context

整体结构图中的context包括左右两部分,左边负责将z转换成c(对应wav2vec2特征),右边负责将z离散化以计算损失。

左边部分中,对于输入512x50的z,有: post_extract_proj: 768x50 apply_mask->pos_conv->LN: 768x50 Transformer*12: 768x50 choose_masking: 768xM,M为mask的帧数 final_proj: 256xM

右边部分中,对于输入512x50的z,有: choose_masking: 512xM quantizer: 256xM project_q: 256xM

其中,量化的参数有:码本个数G=2,每个码本的条目个数V=320,条目的维度d/G=256/2=128。参数含义:G=latent_groups,V=latent_vars,d=vq_dim。 具体的quantizer流程如下图所示,前向的时候直接找出来最大值对应的码本中的条目,相当于是一个离散的操作,但是这个步骤不可导,无法进行反向传播,为了解决这个问题,采用了gumbel softmax操作。

3.3 wav2vec2.0的使用(transformers库)import soundfile as sfimport torchfrom transformers import Wav2Vec2ForCTC, Wav2Vec2Processorprocessor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-base-960h")model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h") # 用于ASR等,32维audio_input, sample_rate = sf.read(path_audio) # (31129,)input_values = processor(audio_input, sampling_rate=sample_rate, return_tensors="pt").input_values # torch.Size([1, 31129])logits = model(input_values).logits # torch.Size([1, 97, 32])predicted_ids = torch.argmax(logits, dim=-1) # torch.Size([1, 97])transcription = processor.decode(predicted_ids[0]) # ASR的解码结果from transformers import Wav2Vec2Modelmodel = Wav2Vec2Model.from_pretrained("facebook/wav2vec2-base-960h") # 用于提取通用特征,768维wav2vec2 = model(input_values)['last_hidden_state'] # torch.Size([1, 97, 768]),模型出来是一个BaseModelOutput的结构体。参考文献

https://blog.csdn.net/xmdxcsj/article/details/115787729

本文链接地址:https://www.jiuchutong.com/zhishi/288923.html 转载请保留说明!

上一篇:支付宝小程序跳转第三方H5页面(支付宝小程序跳回app)

下一篇:得了遗尿症应该怎么办?(得了遗尿症应该怎么办)

  • 5大微信营销成功的案例分析(2021微信营销)

    5大微信营销成功的案例分析(2021微信营销)

  • 拼多多运费险怎么买呢(拼多多运费险怎么购买)

    拼多多运费险怎么买呢(拼多多运费险怎么购买)

  • 小米10青春版是指纹解锁方式是什么(小米10青春版是曲面屏吗)

    小米10青春版是指纹解锁方式是什么(小米10青春版是曲面屏吗)

  • 剪辑音乐的手机软件(剪辑音乐的手机推荐)

    剪辑音乐的手机软件(剪辑音乐的手机推荐)

  • 苹果x防抖功能怎么开(苹果x 防抖)

    苹果x防抖功能怎么开(苹果x 防抖)

  • 智能充电模式是应该开启还是关闭(智能充电模式是应该开启了能充到100么)

    智能充电模式是应该开启还是关闭(智能充电模式是应该开启了能充到100么)

  • 小米wifi绑定微信未获得权限(小米wifi 绑定微信号怎么办)

    小米wifi绑定微信未获得权限(小米wifi 绑定微信号怎么办)

  • 抖音退货上传凭证是什么意思(抖音退货上传凭证,照片怎么传不上去?)

    抖音退货上传凭证是什么意思(抖音退货上传凭证,照片怎么传不上去?)

  • 笔记本没有电池插电能用吗(笔记本没有电池会影响性能吗)

    笔记本没有电池插电能用吗(笔记本没有电池会影响性能吗)

  • 华为mate30pro超级微距怎么打开(华为mate30pro超级微距)

    华为mate30pro超级微距怎么打开(华为mate30pro超级微距)

  • 钉钉连麦可以开美颜吗(钉钉连麦可以开视频吗)

    钉钉连麦可以开美颜吗(钉钉连麦可以开视频吗)

  • 500兆宽带有必要wifi6吗(500兆宽带有必要用千兆路由器吗)

    500兆宽带有必要wifi6吗(500兆宽带有必要用千兆路由器吗)

  • 手机下载什么软件可以开空调(手机下载什么软件可以赚钱)

    手机下载什么软件可以开空调(手机下载什么软件可以赚钱)

  • 苹果备份微信聊天记录还在吗(苹果备份微信聊天记录软件)

    苹果备份微信聊天记录还在吗(苹果备份微信聊天记录软件)

  • 快捷指令是什么意思(设置双重曝光的快捷指令是什么)

    快捷指令是什么意思(设置双重曝光的快捷指令是什么)

  • 华为mate30pro可以折叠吗(华为mate30pro可以插内存卡吗)

    华为mate30pro可以折叠吗(华为mate30pro可以插内存卡吗)

  • 华为恢复删除通话记录(如何恢复被删除的通话记录华为)

    华为恢复删除通话记录(如何恢复被删除的通话记录华为)

  • 虾米音乐怎么分享到陌陌(虾米音乐怎么播放本地音乐)

    虾米音乐怎么分享到陌陌(虾米音乐怎么播放本地音乐)

  • oppofindx支持快充吗(oppofindx是什么快充协议)

    oppofindx支持快充吗(oppofindx是什么快充协议)

  • 抖音聊天撤回对方知道吗(抖音聊天撤回对方还有记录吗?)

    抖音聊天撤回对方知道吗(抖音聊天撤回对方还有记录吗?)

  • is贡献值怎么看(贡献值怎么算的)

    is贡献值怎么看(贡献值怎么算的)

  • ais防抖是什么意思(aisois防抖)

    ais防抖是什么意思(aisois防抖)

  • 苹果自拍镜像怎么设置(苹果自拍镜像怎么设置6s)

    苹果自拍镜像怎么设置(苹果自拍镜像怎么设置6s)

  • 小米8怎么关闭用户体验计划(小米8怎么关闭安全守护模式)

    小米8怎么关闭用户体验计划(小米8怎么关闭安全守护模式)

  • 携程如何开票(携程上如何开票)

    携程如何开票(携程上如何开票)

  • 手机密保怎么设置(手机怎样设置密保问题)

    手机密保怎么设置(手机怎样设置密保问题)

  • 安卓手机怎么发朋友圈不折叠(安卓手机怎么发朋友圈)

    安卓手机怎么发朋友圈不折叠(安卓手机怎么发朋友圈)

  • 开发听书app包括哪些功能(听书开源app)

    开发听书app包括哪些功能(听书开源app)

  • 缴纳个人所得税还算应届毕业生吗
  • 增值税发票认证在哪里
  • 增值税减免税申报明细表举例
  • 从企业分红所得税怎么算
  • 什么叫欠账
  • 印花税计税基数不包括哪些
  • 工业企业会计报告
  • 多交的增值税怎么退
  • 房产原值怎么计算房产面积
  • 基本医疗支付范围
  • 公司收个人不开票的货款是否可以收取现金?
  • 固定资产报废账务怎么处理
  • 公司股东可以自己买保险吗
  • 出口商品一定要有条形码吗
  • 小规模和一般纳税人的区别
  • 房地产未确认收入情况说明
  • 报价表含税点是什么意思?
  • 年底结账税金
  • 科技研发政策
  • 财务报表季度申报资产负债表怎么填
  • 分期收款如何确认成本
  • 开模具公司要什么设备
  • 个体工商户未给员工缴纳社保
  • 如何冲减其他应付款又不影响银行存款
  • 待清算专户
  • 水利基金返还分录怎么写
  • 开票的附加税是多少
  • php中substr()
  • 苹果14
  • 圣克鲁斯岛战役
  • 厂房的设计审查要求
  • 公司车辆缴纳车船税需要什么资料
  • php图文教程
  • 取得农产品免税发票如何账务处理
  • 其他权益工具投资公允价值变动怎么计算
  • 基础土建工程是干什么的
  • 话费补贴算工资还是福利
  • dedecms使用教程
  • php注册系统
  • 椅子能放进后备箱吗
  • 利润表调整了资产负债表怎么调整
  • 劳务报酬所得项目
  • PostgreSQL中的OID和XID 说明
  • db2 21000怎么解决
  • 非限定性净资产和限定性净资产的区别
  • 已认证的红字发票怎么开
  • 将外购商品作为非货币
  • 货物已经入库发货怎么办
  • 营业账簿印花税怎么申报
  • 本年利润的会计分录
  • macos装mysql
  • ubuntu mysql 5.6版本的删除/安装/编码配置文件配置
  • 注册表被锁定后的处理方法
  • 如何禁用windows defender service
  • rundll32.exe是什么程序
  • iis搭建php环境
  • Win7计算机管理里面没有本地用户和组
  • linux引导程序有哪些
  • windows7磁盘清理命令
  • /usr/bin/install: 无法创建一般文件‘/usr/local/man/man1/cjpeg.1’: 没有那个文件
  • windows7中彻底删除文件的操作
  • cocos2dx 3.5 ”hello world“解析
  • android images
  • UNIX sh(Bourne Shell)脚本里面使用数组的两种方法
  • python 先序遍历
  • perl列表去重
  • 菜单下一章
  • css图片样式网站
  • linux安全加固的内容是什么
  • jquery lazyload
  • 浅析python中SQLAlchemy排序的一个坑
  • Android Studio:adb not responding
  • TextWatcher实现一键清空EditText
  • 电子税务局更改密码怎么改
  • 江西国税局电子税务局
  • 退伍军人买车需要摇号吗
  • 加油站怎么收税
  • 电子税务局财务报表利润表本期金额
  • 税务稽查证据问题
  • 陕西省国家税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设