Chapter1-7_Speech_Recognition(Language Modeling)

文章目录

    • 1 为什么需要Language Model
    • 2 N-gram
    • 3 Continuous LM
    • 3 NN-based LM
    • 4 RNN-based LM
    • 5 合并LAS和LM
      • 5.1 shallow fusion
      • 5.2 deep fusion
      • 5.3 cold fusion

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

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

文章索引:

上篇 - 1-6 RNN-T Training

下篇 - 2-1 Feature Disentangle

总目录

1 为什么需要Language Model

LM是用来估计一串token出现的概率的,简单点说,就是给模型一个单词,模型帮你看看这个单词拼写正确的概率是多大,这样子。也就是,我们平时所说的P(Y)P(Y)P(Y)

在HMM当中,使用P(Y)P(Y)P(Y)是非常自然的,因为HMM求解的是

HMM:Y∗=argmax⏟YP(X∣Y)P(Y)HMM:\ Y^* = \underbrace{argmax}_Y P(X|Y)P(Y) HMM: Y=YargmaxP(XY)P(Y)

但是在类似LAS这样的深度学习模型当中,我们是直接求解P(Y∣X)P(Y|X)P(YX)的。这个时候,还要乘上一个P(Y)P(Y)P(Y)其实有点奇怪,甚至难以解释。但事实是,这样的做法,可以提升模型的performance。

LAS:Y∗=argmax⏟YP(Y∣X)P(Y)LAS:\ Y^* = \underbrace{argmax}_YP(Y|X)P(Y) LAS: Y=YargmaxP(YX)P(Y)

如果非要解释一波的话,因为P(Y∣X)P(Y|X)P(YX)的训练是需要大量的成对数据的(语音 - 文字),我们并没有那么多的数据。而P(Y)P(Y)P(Y)这个模型是单独拿出来train好的,它的训练只需要文字就可以了,比如我们可以用超神的BERT。

2 N-gram

一种比较传统的语言模型叫做N-gram。N-gram会去统计一大堆语料当中某一组词出现的概率。但是,我们人类所使用的词汇实在是太复杂多样了,我们说的一串话,可能都从来没有出现在用来训练的语料库当中。那怎么办呢?

我们会在假设词和词之间相互独立的基础上,把P(y1,y2,y3,...,yn)P(y_1,y_2,y_3,...,y_n)P(y1,y2,y3,...,yn)这个概率拆解开来,比如2-gram的时候,就变成了

P(y1,y2,y3,...,yn)=P(y1∣BOS)P(y2∣y1)⋯P(yn∣yn−1)P(y_1,y_2,y_3,...,y_n) = P(y_1|BOS)P(y_2|y_1) \cdots P(y_n|y_{n-1}) P(y1,y2,y3,...,yn)=P(y1BOS)P(y2y1)P(ynyn1)

用一个实际一点的例子来说就是

P("wreckanicebeach")=P(wreck∣BOS)P(a∣wreck)P(nice∣a)P(beach∣nice)P("wreck\ a\ nice\ beach") = P(wreck|BOS)P(a|wreck)P(nice|a)P(beach|nice) P("wreck a nice beach")=P(wreckBOS)P(awreck)P(nicea)P(beachnice)

那么,我们在训练的时候,就只需要去统计相邻词出现的概率即可,比如

P(beach∣nice)=C(nicebeach)C(nice)P(beach|nice) = \frac{C(nice\ beach)}{C(nice)} P(beachnice)=C(nice)C(nice beach)

CCC表示训练数据中的频数。

类似的3-gram就是P(yn∣yn−1,yn−2)P(y_n|y_{n-1},y_{n-2})P(ynyn1,yn2),4-gram就是P(yn∣yn−1,yn−2,yn−3)P(y_n|y_{n-1},y_{n-2},y_{n-3})P(ynyn1,yn2,yn3)

但即使是这样,我们的训练数据仍旧是远远不够的,有许多的组合从来没有出现在训练数据当中过。但这些没有出现过的,并不代表它们的实际概率为0,只是在训练数据中的概率为0而已。为了解决这个问题,我们会用一个很小的概率去代替0,比如0.0001。这个操作叫做language model smooting。这个smooting的方法也有非常多的变形,这里不展开去讲了。
ch1-7-1

3 Continuous LM

在进入深度学习之前,有人还想出了另一种方法来解决这个训练集不够的问题,那就是借用推荐算法MF(Matrix Factorization)。

什么是MF呢?比如我们现在有A、B、C、D、E五个用户,分别在某个动漫网站上对四个动漫人物打了分。B对第2个人物还没有打分,但他对第一个人物打分了。那么,其实我们可以根据其他用户的打分行为来推断B会对第2个人物打几分。我们发现喜欢第1个人物的用户,通常也会喜欢第2个人物,故我们觉得B可能对第2个人物会打5分。

当然,这个只是拍拍脑袋想象的,MF就可以用数学的方法,帮我们把下面这张表格的空格给填满。
ch1-7-2
在把MF应用到LM的的时候,我们的横轴和纵轴都会变成vocabulary中的所有单词,而中间的表格就表示横轴的单词后面接纵轴的单词在训练集中的频数。比如下图中的n11=2n_{11}=2n11=2就表示"dog"后面接"ran"出现了2次。

然后每一个横轴的单词都用一个特征向量hih^ihi来表示,每一个纵轴的单词都用一个不同的特征向量vjv^jvj来表示。我们会试图用vj⋅hiv^j \cdot h^ivjhi来逼近njin_{ji}njivjv^jvjhih^ihi都是可以学习的。
ch1-7-3
逼近的方法,就是通过最小化下面这个loss来计算出所有的vjv^jvjhih^ihi

Minimize:L=∑i,j(vj⋅hi−nj,i)2Minimize:\ L = \sum_{i,j}(v^j \cdot h^i - n_{j,i})^2 Minimize: L=i,j(vjhinj,i)2

通过这样学习得到的vjv^jvjhih^ihi就表示了每个单词的一些特征,当我们要去计算在训练集里没有出现过的nj,in_{j,i}nj,i时,就可以直接用vj⋅hiv^j \cdot h^ivjhi的方法。这种通过学习的方法,比直接统计要靠谱很多。

3 NN-based LM

这种矩阵相乘的形式,当然时可以转换成神经网络的形式的,稍稍变形就可以变成几个全连接搞定的神经网络,如下图所示。输入是一个one-hot encoding过的向量,其中的全连接权重就是hih^ihivjv^jvj,目标就是我们的nj,in_{j,i}nj,i
ch1-7-4
那这样的模型如何训练呢?训练方法其实和n-gram 差不多,就是输入几个单词,让模型去预测下一个单词是什么。
ch1-7-5
有了这样的模型,就可以去计算P(Y)了。下图是一个示意图。
ch1-7-6

4 RNN-based LM

NN-based LM用的都是全连接,所以当我们想要看非常长的句子时,也就是n-gram中的n非常大时,网络就会变得异常大,没有钱或者硬件是跑不起来的。为了减少资源的消耗,我们可以引入RNN,用RNN的最后一个hidden state去和vjv^jvj相乘。
ch1-7-7
这里用到的RNN可以非常复杂,但是一般只需要用LSTM就可以了。

5 合并LAS和LM

我们知道怎么train这个LM了之后,怎么把它结合到LAS里呢?方法也有很多种,下面来一一介绍。

5.1 shallow fusion

shallow fusion就是说,我们已经有了train好的LM和train好的LAS,然后在做decoding的时候,每个time step它们都会输出一个维度和词表大小一样的概率向量,把这两个向量加权求和作为最终的概率向量。然后不断这样循环下去就可以了。
ch1-7-8

5.2 deep fusion

deep fusion和shallow fusion的不同之处在于,它会把LM和LAS的hidden state塞进一个神经网络里去进行融合。这个额外的神经网络是需要train出来的,也就是说我们有一个train好的LM和train好的LAS之后,还要把这两者接进一个network中,再去train一发。

这样做带来的弊端就是,我们没法随意更换LM模型,一旦更换了就需要重新train一发。如果我们要对每个用户做一个针对性的LM,那这个方法就行不通了。
ch1-7-9
不过也有办法可以换了LM而不重新train这个network,那就是用LM的输出概率作为network的输入。
ch1-7-10

5.3 cold fusion

最后再来将一个cold fusion,cold fusion其实结构上和deep fushion长的一模一样,只不过,cold fusion当中,我们的LAS是没有train好的,需要接上之后去end-to-end的训练的。这样的做法,可以让LAS收敛得更快。
ch1-7-11

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

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

相关文章

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

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

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

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

php 系列

1.给 跑在windows 环境下的php, 安装redis 拓展。(installing Redis & Redis extension in PHP on XAMPP on windows.) step 1: 安装redis server(windows) http://fellowtuts.com/php/install-redis-redis-extens…

搞懂RNN

文章目录1 什么是RNN2 LSTM3 Training3.1 Learning Target3.2 为什么难train4 应用举例4.1 Many To One4.2 Many To Many4.3 其他本文为李弘毅老师【Recurrent Neural Network(Part I)】和【Recurrent Neural Network(Part II)】的课程笔记,课程视频来源于youtube(需…

bp神经网络预测_股指期货价格变动趋势往往反映的是股票价格的走势,因此BP神经网络对股指期货价格的准确预测就是对股票价格的准确预测。...

一只猫の生活态度对于投资者而言,利用BP神经网络模型对股指期货价格进行准确预测,可以帮助投资者构建较佳的投资组合,从而获取较好的投资收益,规避系统风险;对于国家而言,准确预测股指期货价格走势&#xf…

Mongoose aggregate 多表关联查询

1. 查询每个order订单中的所有orderItem(多表关联查询) order.js: var mongoose require(./db.js)var OrderSchema mongoose.Schema({order_id: String,uid: Number,trade_no: String,all_price: Number,all_num: Number })var OrderModel mongoose…

搞懂Transformer

文章目录1 内容简述2 seq2seq的常用模块3 Self-attention4 Multi-head Self-attention5 Positional Encoding6 Transformer参考资料文为李弘毅老师【Transformer】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自…

excel计算二元线性回归_怎么看懂Excel线性回归参数

虽然之前用python做线性回归的时候看上去好像很简单,但是直到我在excel上实践了线性回归,发现有很多指标值得去参考,对于在python上实现有指导作用。打开excel2016,先找个数据我们这里直接选择做线性回归,在菜单栏选择…

冲刺阶段 day 6

项目进展:学生管理这部分已经进展的差不多了,调试了几遍,改了几个小Bug之后就没有什么问题了,基本完成,如若后续还有一些新的功能到时候再自行加入。明天开始教师部分。 存在问题:我觉得我们的项目还是比较课堂,比较中…

Chapter2-1_Voice Conversion(Feature Disentangle)

文章目录1 什么是Voice Conversion2 实际实现中的细节3 根据数据集分类4 Feature disentangle5 训练技巧本文为李弘毅老师【Voice Conversion - Feature Disentangle】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均…

1 0.99999的悖论_无限小数与芝诺悖论

问题昨天晚上,小学6年级的外甥女从数学课外辅导班补习回来,兴冲冲的对家里人说,哎,我发现了一个数学的大bug啊。你说1/3不是一个无限循环小数0.33333...,那么三个1/3加起来,不就是0.99999...吗?…

Mongoose 中使用 populate 实现关联查询

一、Mongoose populate 官方文档 https://mongoosejs.com/docs/populate.html 二、Mongoose populate 关联查询 1、定义 ref var ArticleSchema new Schema({ title:{type: String, unique: true},cid : {type: Schema.Types.ObjectId, ref:ArticleCate //model 的名称 }, …

FPGA开发全攻略——概念篇

原文链接: FPGA开发全攻略连载之一:FPGA为什么这么热? FPGA开发全攻略连载之二:为什么工程师要掌握FPGA开发知识? FPGA开发全攻略连载之三:FPGA基本知识与发展趋势(part1) FPGA开发全…

vue @input带参数_Vue 全家桶开发的一些小技巧和注意事项

前言用 vue 全家桶开发一年多了,踩过不少坑,也解决了很多的问题,把其中的一些点记录下来,希望能帮到大家。以下内容基于最新版的 vue vuex vue-router axios less elementUI,vue 脚手架是 vue-cli3。css 的 scope…

Chapter2-2_Voice Conversion(CycleGAN and StarGAN)

文章目录1 内容简述2 CycleGAN3 StarGAN本文为李弘毅老师【Voice Conversion - CycleGAN and StarGAN】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删…

cookie与session原理详解

一、 Cookie cookie:浏览器在电脑硬盘中开辟的一块空间,主要供服务器端存储数据。 cookie中的数据是以域名的形式进行区分的。cookie中的数据是有过期时间的,超过时间数据会被浏览器自动删除。cookie中的数据会随着请求被自动发送到服务器端。…

eclipse的servlet默认不执行index_MySQL之索引及执行计划分析

mysql官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构。索引的本质:索引是数据结构。索引就是排好序的快速查找数据结构一般来说索引本身也很大不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上平时所说的…

Chapter3-1_Speech Separation(Deep Clustering, PIT)

文章目录1 内容简述2 评价指标2.1 Signal-to-noise ratio (SNR)2.2 Scale invariant signal-to-distortion ratio (SI-SDR)2.3 其他的评价指标3 Permutation Issue4 Deep Clustering5 PIT本文为李弘毅老师【Speech Separation - Deep Clustering, PIT】的课程笔记,课…

Joi验证模块的使用

1. 安装 官网中文文档:https://joi.dev/api/?v12.1.0#validatevalue-schema-options-callback //下载14.3.1 npm install 14.3.1注意:下载14.3.1,在npm install joi的时候默认下载的是最新版本 joi17.1.1,对于一些API高版本会舍弃从而出现…

Chapter3-2_Speech Separation(TasNet)

文章目录1 TasNet总体架构2 Encoder和Decoder3 Separator4 TasNet回顾5 More5.1 Unknown number of speakers5.2 Multiple microphones5.3 Visual information本文为李弘毅老师【Speech Separation - TasNet】的课程笔记,课程视频youtube地址,点这里&…