用python直接调用asr技术_语音识别技术ASR(一)基本概念

注:本文内容主要来源自台大李宏毅老师的Deep Learning for Human Language Processing系列课程

一、语音识别的基本过程

语音识别的输入一般是时域的语音信号,数学上用一系列向量表示(length T, dimension d),输出是文本,用一系列token表示(length N, V different tokens),一般来说,在ASR问题中,输入信号的长度T会大于token的长度N

二、Token的选择

Token可以理解为语音和文字之间的一种桥梁纽带,我们听到的语音可以通过AD转化变为数字信号存储,进而以矩阵的形式存储于计算机中,那日常生活中的文字也需要一种转换被计算机所存储使用,ASR问题中,目前主流的token有以下几种:Phoneme :以声音的基本元素作为Token,不同的单词由不同的音素组成,通过识别输入语音中存在哪些音素进而组合成识别出的文字,这里就存在一个很重要的映射关系表Lexicon,所以这种Token的缺点也很明显,即需要语言学的知识才可以得到Lexicon,而且不同的文献会给出不同的Lexicon

2. Grapheme:以文字书写的最小单位作为token优点:(1)不需要语言学知识,是Lexicon free;(2)即使遇到了训练过程中没有出现的Token,也可以期待一下会有什么样的结果(手动滑稽)

缺点:(1)使用起来比较有挑战性,很多发音相同但对应Token确是不同,需要比较强的上下文信息,对模型的学习提出了更高的要求,此时面对的是一个更加复杂的问题;(2)以英文举例,有比较大的拼错风险

3. Word:用词汇作为Token,对很多语言来说往往都不太适合,因为Token总数量V会非常大,英文因为有明确的空格作为区分词的方式,V的数量还算可以接受,但中文就很难以词作为Token,同时以土耳其语举例,是可以不断加后缀变成新的词汇的,是无法穷举的,所以像这样的语言,都不适合用word作为Token

4. Morpheme:以有富有具体含义的最小单位作为token,是一个介于word和grapheme之间的token,以英文来举例,unbreakable → “un” “break” “able”;rekillable → “re” “kill” “able”

那如何来获取一种语言的Morpheme呢?一般有两种途径:求助语言学家linguistic

统计发现一些模式statistic

5. Bytes:更硬核的Token是直接选择计算机中的byte,很显然吗,这种方式的Token是 language independent[ Li, et al., ICASSP’19] Bo Li, Yu Zhang, Tara Sainath, Yonghui Wu, William Chan, Bytes are All You Need: End-to-End Multilingual Speech Recognition and Synthesis with Bytes, ICASSP 2019

最后,通过对19年语音领域三大会议(INTERSPEECH’19, ICASSP’19, ASRU’19)100+paper的调研统计,得出了目前Token的使用趋势:Grapheme 41%

Phoneme 32%

Morpheme 17%

Word 10%

三、从输出的角度理解ASR问题输入语音,直接输出word embeddings

输入语音,在识别的过程中加入翻译过程,直接输出翻译后的结果

输入语音,在识别的过程中加入意图分类的判断,输出意图

输入语音,在识别的过程中加入关键词检测填充,比如一个订票系统,关注的是时间和地点

四、从输入的角度理解ASR问题(Acoustic Feature)声音处理时有两个基本概念:帧长、帧移

每一帧的声音数据可以有很多种表示方法,举三个例子:直接拿时域采样点

MFCC

Filter bank output

3. 因为传统语音信号处理中有帧移这个操作,所以每一帧的声音信号其实是有部分重叠的,也就是特性是比较接近的,这个点可以用来挖掘做模型压缩提高性能

4. 声学特征可以分为这么几个层级:Waveform->spectrogram->filter bank->MFCC

最后,同样也对19年语音领域三大会议进行ASR任务中语音特征使用的调研,结果如下,MFCC应该会越来越淡出人们的视野

五、ASR任务需要多少数据量?(有文字标注的数据)

目前一般会从Librispeech数据集开始,960 hours;Timit数据集相当于CV领域的mnist,有些小的想法可以在这上面先进行验证,看是否work;imagenet换算成语音大概是4096 hours;google和facebook在文献中公布的使用语音数据量是1.3w hours,但实际上使用的应该是这个数字的10倍-20倍

下期预告:

ASR的具体算法会从seq2seq和HMM两个角度展开,主要介绍以下几种:Listen, Attend, and Spell (LAS)Jan Chorowski, Dzmitry Bahdanau, Dmitriy Serdyuk, Kyunghyun Cho, Yoshua Bengio, Attention-Based Models for Speech Recognition, NIPS, 15

2. Connectionist Temporal Classification (CTC)Alex Graves, Santiago Fernández, Faustino Gomez, Jurgen Schmidhuber, Connectionist temporal classification: Labelling unsegmented sequence data with recurrent neural networks". In Proceedings of the International Conference on Machine Learning, ICML, 2006

3. RNN Transducer (RNN-T)Alex Graves, Sequence Transduction with Recurrent Neural Networks, ICML workshop, 2012

4. Neural TransducerNavdeep Jaitly, Quoc V. Le, Oriol Vinyals, Ilya Sutskever, David Sussillo, Samy Bengio, An Online Sequence-to-Sequence Model Using Partial Conditioning, NIPS, 2016

5. Monotonic Chunkwise Attention (MoChA)Chung-Cheng Chiu, Tara N. Sainath, Yonghui Wu, Rohit Prabhavalkar, Patrick Nguyen, Zhifeng Chen, Anjuli Kannan, Ron J. Weiss, Kanishka Rao, Ekaterina Gonina, Navdeep Jaitly, Bo Li, Jan Chorowski, Michiel Bacchiani, State-of-the-art Speech Recognition With Sequence-to-Sequence Models, ICASSP, 2018

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

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

相关文章

前端学习(544):node的全局模块

//console.log(process.env);let num1parseInt(process.argv[2]) let num2parseInt(process.argv[3])console.log(num1num2);运行

C#笔记(五):文件和流

我们可以知道,在System.IO 命名空间下提供了一系列的类,我们可以通过相应的类进行文件、目录、数据流的操作。System.IO 命名空间 原理:.NET Framework封装了一系列底层的方法,有些直接与Windows API打交道。那么例如创建文件&…

MySql中游标的定义与使用方式_数据库系列:MySql中游标的定义与使用方式

创建游标首先在MySql中创建一张数据表:CREATE TABLE IF NOT EXISTS store (id int(11) NOT NULL AUTO_INCREMENT,name varchar(20) NOT NULL,count int(11) NOT NULL DEFAULT 1,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETlatin1 AUTO_INCREMENT7;INSERT INTO …

前端学习(545):node的系统模块require

let path require(path);console.log(path.dirname(/node/a/b/c/1.jpg)); console.log(path.basename(/node/a/b/c/1.jpg)); console.log(path.extname(/node/a/b/c/1.jpg)); 运行结果

PHPUnit安装、用法、测试(三)

首先我装的是phpunit 3.6.12 上代码吧&#xff1a; <?php class DataTest extends PHPUnit_Framework_TestCase{public static function provider(){return array(array(0,0,0),array(0,1,1),array(1,0,1),array(1,1,2)); }/***dataProvider provider**/public function te…

oracle使用 union all 用自增序列_值得收藏的Oracle数据库性能优化

值得收藏的Oracle数据库性能优化年尾了&#xff0c;新的一波面试军又要开始了&#xff0c;被问到最多的可能就是性能优化&#xff0c;尤其是数据库性能优化&#xff0c;这个面试题不管是初中高级工程师都会被问到。因此我觉得下面31点ORACLE优化还是值得调几个去面试。也方便以…

CGContext转CC

0 CGContextRef context UIGraphicsGetCurrentContext(); 设置上下文1 CGContextMoveToPoint 开始画线2 CGContextAddLineToPoint 画直线4 CGContextAddEllipseInRect 画一椭圆4 CGContextSetLineCap 设置线条终点形状4 CGContextSetLineDash 画虚线4 CGContextAddRect 画一方…

java mysql blob 存储图片_Java操作mysql存储图片

http://bbs.chinaunix.net/archiver/tid-2289421.html1把图片当成一个二进制流就可以了。mysql中有可以存储很大的2进制流文件。用的类型是&#xff1a;我们要做的是将一张图片存入Mysql中,在Mysql中用Blob来存储图片和音频等大的数据项.Blob 按其容量可分为四种,分别为:tinybl…

前端学习(547):node的系统模块fs

let fs require(fs);fs.readFile(./a.txt,(err,data)>{if(err){console.log(err);}else{console.log(data.toString());} })fs.writeFile(b.txt,月薪2元,{flag:"a"},(err)>{if(err){throw err} })运行结果

微软发布Visual Studio 2012 示例代码浏览器

示例代码对于开发人员的重要性是不言而喻的。很多程序员往往通过示例代码着手学习一门技术。当开发人员遇到编码困难时也往往希望得到示例代码来解决疑难杂症。示例代码可谓是开发人员的良师益友&#xff0c;为程序员的学习和工作保驾护航。 微软一站式示例代码库&#xff0c;与…

maya python 创建求_如何使用python在Maya中创建列表

预期输出我想在Maya 2014中创建一个用户界面&#xff0c;其中包含图像中给定的图层和相机。我不知道该使用什么小部件。我尝试创建&#xff0c;代码如下所示。在import maya.cmds as cmdswindow cmds.window( title"Render", iconNameBTD,widthHeight(400,300),titl…

前端学习(548):node的自定义模块

demo4.js exports.a1; exports.b2; let c3; demo5.js const mod1require(./demo4);console.log(mod1.a); console.log(mod1.b); console.log(mod1.c); 运行结果

通用滤波器设计----东南大学的

转载于:https://www.cnblogs.com/tureno/articles/2675060.html

liunx下搭建mysql主从_linux下搭建mysql主从

在master上创建repl账户&#xff0c;用于复制。grant replication slave on *.* to [email protected]%‘ identified by ‘P$$W0rd‘;flush privileges;与windows下搭建mysql主从的区别&#xff1a;二进制日志的路径格式不一样master:my.cnf部分配置(master):thread_handling …

前端学习(549):node的 http模块

let http require(http) let fs require(fs) http.createServer((req,res)>{console.log("我来了");console.log(req.url);res.end(index);fs.readFile(${req.url},(err,data)>{if(err){console.log(err)res.writeHead(404)res.end(404 not found)}else{res.…

javascript立即调用的函数表达式

1. 什么是自执行的匿名函数? 它是指形如这样的函数: (function {// code})(); 2. 疑问 为什么(function {// code})();可以被执行, 而function {// code}();却会报错? 3. 分析 (1). 首先, 要清楚两者的区别: (function {// code})是表达式, function {// code}是函数声明. (2…

java的sha256_【java】SHA256加密工具

SHA256&#xff1a;/*** 备用方案 SHA256加密* author zx*/public class SHA256Util {public static void main(String[] args) {System.out.println(getSHA256StrJava("130"));System.out.println(getSHA256StrJava("130"));}public static String getSHA…

docker mysql详解_Docker 安装 mysql 详解

Docker 安装 mysql 详解制作its-mysql:1.0镜像说明&#xff1a;在使用基于centos&#xff0b;mysql的方式写Dockerfile做镜像&#xff0c;发现体积过于太大&#xff0c;是docker hub上提供的mysql镜像的大小3&#xff5e;4倍&#xff0c;docker hub上的大小为324MB&#xff0c;…

java openssl dgst_(7) openssl dgst(生成和验证数字签名)

该伪命令是单向加密工具&#xff0c;用于生成文件的摘要信息也可以进行数字签名&#xff0c;及验证数字签名。首先要明白的是&#xff0c;数字签名的过程是计算出摘要信息&#xff0c;然后使用私钥对摘要信息进行加密得到数字签名&#xff0c;而摘要是使用md5、sha512等单向散列…