Chapter1-2_Speech_Recognition(LAS)

文章目录

    • 1 内容简述
    • 2 模型详述
      • 2.1 Listen
        • RNN Encoder
        • 1D-CNN Encoder
        • Self-attentinon Encoder
        • Down Sampling
      • 2.2 Attend
      • 2.3 Spell
      • 2.4 Beam Search
      • 2.5 Training
      • 2.6 Back to Attention

本文为李弘毅老师【Speech Recognition - Listen, Attend, Spell】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。

下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。

文章索引:

上篇 - 1-1 overview

下篇 - 1-3 CTC, RNN-T and more

总目录

1 内容简述

本文要讲的模型是2015年出自William Chan的Listen, Attend and Spell,论文地址点这里👈。

这是一个标准的seq2seq with attention的模型,listen就是一个encoder,spell就是一个decoder,Attend自然就是attention啦。下面来逐一说明各个模块。

2 模型详述

2.1 Listen

Listen即是模型的Encoder部分,这个部分的输入是一个长度TTT的声音信号特征向量,输出也是一个长度TTT的特征向量。我们希望经过这个Encoder之后,输出的特征可以保留和内容有关的信息,去除不相关的噪声和不同人说话带来的variance。
input:{x1,x2,...,xT}output:{h1,h2,...,h3}input: \{x^1, x^2, ...,x^T\}\\ output: \{h^1, h^2, ...,h^3\} input:{x1,x2,...,xT}output:{h1,h2,...,h3}
既然这是一个Encoder,那目前用来做序列特征提取的方法就都可以用上,比如单向或者双向的RNN,1-D的CNN,self-attention,论文原文中所使用的是双向的LSTM。

RNN Encoder

RNN大家应该比较熟悉,就不多讲,不明白的可以参看李老师的RNN教学视频,或者参考我的这篇课程笔记。

1D-CNN Encoder

用1-D的CNN去抽取sequence的特征的方式如下图所示。比如我们有一个kernel_size是3的filter,先把[0,x1,x2][0, x^1, x^2][0,x1,x2]塞进kernel得到b1b^1b1中的一点,再把[x1,x2,x3][x^1, x^2, x^3][x1,x2,x3]塞进同一个kernel得到b2b^2b2中的一点,依次类推可以得到和输入长度相等的TTT的点,再换一个kernel_size是3的filter再来一遍,就又得到了一组长度为TTT的点,这些点concat起来就得到了输出的特征。当然这里b1b^1b1只考虑到了[x1,x2][x^1, x^2][x1,x2]的信息,b2b^2b2只考虑到了[x1,x2,x3][x^1, x^2, x^3][x1,x2,x3]的信息,为了让最终输出的特征可以参考到更多的信息,可以再叠加一层1-D的CNN。怎么样,get到我说的意思了吧?没错,CNN也可以用来提取sequence的特征。
ch1-2-1
那这两者,哪一种更好呢?文献中通常会把CNN和RNN相结合,前几层CNN一下,后几层RNN一下。

Self-attentinon Encoder

还有一种近期常用的方法,叫做self-attention,它也是输入一个sequence,输出一个sequence,具体的细节可参见李老师的Transformer教学视频,也可以参考我的这篇课程笔记。

Down Sampling

而在语音辨识中,由于输入的特征非常长(TTT很大),直接硬train的话,很难train。所以通常也会加一些down sampling的操作,常见的有Pyramid RNN(原文的方案),Pooling over time,Time-delay DNN,Truncated Self-attention。其中,Time-delay DNN其实就是1-D dilated CNN,我觉得stride搞大点,也可以有down sampling的效果。

其目的在于让输入Encoder的sequence变得短一点。
ch1-2-2

2.2 Attend

在Listen完之后呢,我们就得到了一个sequence,叫做hhh,我们需要对这个hhh做attention来得到decoder中每一个time step的context vector。说简单粗暴点,就是我们要不断对hhh的每个time step做加权平均,得到decoder中每个time step的输入(context vector)。

我们来看看下面这张图,图中的h1h^1h1h2h^2h2h3h^3h3h4h^4h4就是Listen之后得到的结果的每个time step的vector。然后我们会有一个decoder的hidden state叫做ziz^izi(原文中其实叫做sis_isi,这里是为了和李老师的PPT保持一致),这个最初的z0z^0z0可以是一个随机初始化的向量。这个z0z^0z0会去和每个hih^ihi做一个attentioin的计算,得到一个表示他们相关性的数值α0i\alpha^i_0α0i。然后这些α0i\alpha^i_0α0i会经过一层softmax,归一化一下,也就得到了每个hih^ihiz0z^0z0下的权重,最后加权求和一下得到了c0c^0c0。之后的每一个cic^ici都是如是得到的。
ci=AttentionContext(zi,h)c^i = AttentionContext(z^i, h) ci=AttentionContext(zi,h)

其中,用来做attention的方法很多,最常用的就是Dot-product Attention和Additive Attention。原文中使用了前者,也就是用个矩阵去乘一下,也就是加了层全连接。
αti=<ϕ(zt),ψ(hi)>\alpha^i_t=<\phi(z^t), \psi(h^i)> αti=<ϕ(zt),ψ(hi)>

其中,ϕ\phiϕψ\psiψ是不同的全连接层。
ch1-2-3

2.3 Spell

Spell的部分,其实就是用RNN来做了decoder,利用cic^iciziz^izi作为输入,和正常的seq2seq没有什么区别,直到遇到终止符后结束。不过它的输出是一个概率分布,也就是它的每个time step的输出为一个size和vocabulary size大小一致的vector。整个输出就是一个V×TV \times TV×T的概率矩阵,VVV表示字典的大小,TTT表示time step的长度。
ch1-2-4
我们要从这个概率矩阵中找到一条概率乘积最大的路径来作为最终的结果。一般情况下,直接取每个time step中概率最大的那个值作为该time step的输出就可以了,这种方法叫做greedy search。不过,为了让结果更精确,可以采用牺牲时间的方法,比如beam search。

2.4 Beam Search

所谓Beam Search就是每个time step保留概率组合最大的前nnn个组合,这个nnn就被称为beam_size。当n=1n=1n=1时,就退化为了greedy search。比如下图就是一个V=2V=2V=2T=3T=3T=3n=2n=2n=2的例子。
ch1-2-5
time step 1:只有A和B,故A和B都保留;

time step 2:AA=0.24,AB=0.36,BA=0.04,BB=0.36,故保留AB和BB;

time step 3:ABA=0.144,ABB=0.216,BBA=0.036,BBB=0.324,故保留ABB和BBB。

由于time step 3是最后一个time step,故取保留下来中的概率最大组合BBB作为最终结果。

如果采用greedy search,每次取最大的话,结果就是ABB。可见不同的beam_size,结果是会有区别的。beam_size越大,结果也就越准,但消耗的时间也就越久。

2.5 Training

训练的时候使用了cross entropy作为loss,这也是常规的做法,希望每个time step输出的的概率向量中和label对应的输出的概率越大越好。不过这里有一点要注意的是,和inference的时候不同,在training的时候,前一个time step的输出是不会作为下一个time step的输入的。我们是直接使用前一个time step的label作为下一个time step的输入,这个方法也叫做teacher forcing。因为刚开始训练的时候,往往输出都是比较乱七八糟的,用训练的输出作为输入的话,很难train起来。
ch1-2-6

2.6 Back to Attention

在做attention的时候,实际上会有两种处理方式,一种是把由ztz^tzt产生的ctc^tct作为下一个time step的输入,另一种把由ztz^tzt产生的ctc^tct作为当前time step的输入。
ch1-2-7
当然,也有我全都要的做法,就是产生的ctc^tct既会影响当前的time step,也会影响下一个time step。

ch1-2-8

不过,attention用在语音这里有一点杀鸡用牛刀的意思。因为用了attention之后,每个time step输出的feature可以考虑整个输入序列的。但是语音这个领域,在生成第一个字的时候,我们完全没有必要去参考以下最后一个字,我们希望这个attention时可以只关心对应的局部的,然后随着time step的增大,关心的位置也在不断地往后平移。于是,就有了location-aware attention。

所谓的location-aware attention就是我们在产生当前这个attention的时候,我们会额外考虑前一个time step生成的attention在这个time step的附近的权重是怎么样的。通过这个方式,模型就可以学到说,产生的attention是一个考虑局部特征的attention。
ch1-2-9

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

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

相关文章

智能车的转弯部分_江西智能搬运平板车铁路轨道运输车-厂家直销

本公司致力发展搬运设备&#xff0c;从公司成立至今一直在做电动平车的研发&#xff0c;从几十千克自动化物流车到成百上千吨都能自行研发制造&#xff0c;取得了优异的业内好评和广大消费者的肯定&#xff01; BWP型无轨平板车是一种使用特殊的行走机构&#xff0c;能够在较小…

Express Session 的基本使用

一、 Session 简单介绍 session 是另一种记录客户状态的机制&#xff0c;不同的是 Cookie 保存在客户端浏览器中&#xff0c;而 session 保存在服务器上。 Cookie 数据存放在客户的浏览器上&#xff0c;Session 数据放在服务器上。Session 相比 Cookie 要 更安全一些。由于 Ses…

Chapter1-3_Speech_Recognition(CTC, RNN-T and more)

文章目录1 CTC2 RNN-T3 Neural Transducer4 Monotonic Chunkwise Attention5 小结本文为李弘毅老师【Speech Recognition - CTC, RNN-T and more】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自于李宏毅老师的…

java商城_基于Java,jfinal web框架开发出微信商城,微信分销商城源码分享

项目简介&#xff1a;专门针对微信服务号开发的一套微信商城&#xff0c;微信分销商城&#xff0c;支持商品多规格&#xff0c;支持按地区设置邮费&#xff0c;支持限时打折&#xff0c;订单返现&#xff0c;满减送&#xff0c;满包邮&#xff0c;支持订单打印&#xff0c;订单…

Express 路由模块化以及 Express 应用程序生成器

一、 Express 路由模块化 https://expressjs.com/en/guide/routing.html Express 中允许我们通过 express.Router 创建模块化的、可挂载的路由处理程序。 1、新建一个 user.js 配置如下代码 var express require(express) var router express.Router() router.get(/, fun…

qscrollarea 设置滚动位置_爱剪辑:影视剧滚动字幕片尾,效果竟然如此高端精美...

大家好今天教大家制作滚动字幕片尾这种效果经常在影视剧和自媒体中看到不仅好看精美&#xff0c;而且还高大上快来学习吧&#xff5e;视频教程&#xff1a;爱剪辑&#xff1a;影视剧滚动字幕片尾教程https://www.zhihu.com/video/1174030334688632832移动视频的位置导入视频后&…

iOS 测试三方 KIF 的那些事

一&#xff1a; KIF 三方库的配置 今天的广州天气还不错&#xff0c;原本想试试UI测试的&#xff0c;前几天也了解到很多公司都在用 KIF 这这三方框架&#xff01;&#xff01;今天也就试着做做&#xff0c;可就跪在了这个安装上&#xff0c;我用cocopods 导入了 KIF&#xf…

Chapter1-4_Speech_Recognition(HMM)

文章目录1 HMM用在哪里2 HMM的state3 改造成DNN3.1 Tandem3.2 DNN-HMM Hybrid本文为李弘毅老师【Speech Recognition - HMM (optional)】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。其中也涉及到了部分李琳山老师关于HMM的详解&#…

Express 结合 multer 上传图片

一、 Multer 模块介绍 Multer 是一个 node.js 中间件&#xff0c;用于处理 multipart/form-data 类型的表单数据&#xff0c;它主要用 于上传文件。 它是写在 busboy 之上非常高效。 注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据。 https://www.npmjs.com…

ad19pcb设置恢复默认_条码打印机-斑马产品常用恢复出厂设置

当我们手上拿到条码打印机&#xff0c;遇到一下无法挽回的时候&#xff0c;我们可以选择恢复下出厂设置&#xff0c;这样使打印机还原到出厂&#xff0c;或许是很好的选择&#xff0c;接下来我们看下斑马条码打印机操作方法如下&#xff1a;Zebra 条码打印机恢复出厂1、有面板的…

Chapter1-5_Speech_Recognition(Alignment of HMM, CTC and RNN-T)

文章目录1 为什么需要Alignment2 穷举所有的alignment2.1 HMM的对齐2.2 CTC的对齐2.3 RNN-T的对齐3 小结本文为李弘毅老师【Speech Recognition - Alignment of HMM, CTC and RNN-T (optional)】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻…

mongoose 入门以及 mongoose 实现数据 的增、删、改、查

一、mongoose 介绍 Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。Mongoose 是 NodeJS 的驱动&#xff0c;不能作为其他语言的驱动。 Mongoose 有两个特点 &#xff1a; 1、通过关系型数据库的思想来设计非关系型数据库 2、基于 mongodb 驱动&…

64位处理器_电脑操作系统的32位和64位有什么区别

想买个新电脑&#xff0c;不知道买 64 位还是 32 位&#xff1f;买了一套视频剪辑软件&#xff0c;发现电脑根本安装不了&#xff1f;这些到底是为什么&#xff1f;对于 Windows7 及以上版本&#xff0c;我们能够很明显知道自己电脑操作系统是 64 位还是 32 位。如果你还不知道…

Chapter1-6_Speech_Recognition(RNN-T Training)

文章目录1 一个alignment概率的计算2 所有alignments概率的计算3 Training4 Inference5 小结本文为李弘毅老师【Speech Recognition - RNN-T Training (optional)】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来…

Mongoose 预定义模式修饰符 Getters 与 Setters 自定义修饰符

一、mongoose 预定义模式修饰符 lowercase、uppercase 、trim mongoose 提供的预定义模式修饰符&#xff0c;可以对我们增加的数据进行一些格式化。 var UserSchemamongoose.Schema({ name:{ type:String, trim:true }, age:Number, status:{ type:Number, default:1 } })二…

微信可以远程控制电脑吗_用微信就能远程控制电脑,这款神器有些厉害

「本期内容标签」安卓 iOS 电脑 小程序 网站 游戏 教程微信确实一步步改变生活&#xff0c;尤其是微信小程序面世以来&#xff0c;可谓是神器一个接一个的出现&#xff0c;很多功能已经和手机app旗鼓相当了。那么&#xff0c;今天说的这款刚推出的微信小程序&#xff0c;实现远…

开源的excel读取库libxls在windows下的编译,且支持中文,全网首发

转载请注明出处&#xff1a;http://www.cnblogs.com/superbi/p/5482516.html 到目前为止&#xff0c;网络和官网上并没有关于libxls在windows下支持中文的教程&#xff0c;也没有现成的二进制文件。 想直接得到结果的请直接拉到最后获取成果&#xff0c;想自己以后遇到类似问题…

Chapter1-7_Speech_Recognition(Language Modeling)

文章目录1 为什么需要Language Model2 N-gram3 Continuous LM3 NN-based LM4 RNN-based LM5 合并LAS和LM5.1 shallow fusion5.2 deep fusion5.3 cold fusion本文为李弘毅老师【Speech Recognition - Language Modeling】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;…

Mongoose 索引、Mongoose 内置 CURD 方 法、扩展 Mongoose Model 的静态方法和 实例方法

一、Mongoose 索引 索引是对数据库表中一列或多列的值进行排序的一种结构&#xff0c;可以让我们查询数据库变得更 快。MongoDB 的索引几乎与传统的关系型数据库一模一样&#xff0c;这其中也包括一些基本的查询 优化技巧。 mongoose 中除了以前创建索引的方式&#xff0c;我们…

winre drv分区干嘛用的_都2020年了,还在给硬盘分区?看完你就知道有没有必要了...

电脑硬盘&#xff0c;到底该不该分区&#xff1f;很多人买了新电脑或者在电脑中安装了SSD硬盘之后&#xff0c;第一个步骤就是&#xff1a;开机-给硬盘分区。但是&#xff0c;大家有没有考虑过&#xff0c;硬盘是否真的需要分区呢&#xff1f;这不最近有人就在程序员社区V2EX上…