序列模式

Atitit 语音识别的技术原理

醉酒当歌 提交于 2020-02-15 22:57:23
Atitit 语音识别的技术原理 1.1. 语音识别技术,也被称为 自动语音识别 Automatic Speech Recognition , (ASR) , 2 1.2. 模型 目前,主流的大词汇量语音识别系统多采用统计 模式识别技术 2 1.3. 基本方法 般来说 , 语音识别的方法有三种:基于声道模型和语音知识的方法、模板匹配的方法以及利用人工神经网络的方法。 2 1.3.1. 模板匹配的方法 2 1.4. 一般来说 , 语音识别的方法有三种:基于声道模型和语音知识的方法、模板匹配的方法以及利用人工神经网络的方法。 2 1.5. 提及 语音识别 ,就不能不说 Nuance, Nuance的语音技术是以统计推断方法为基础,着眼于音素(音节的声音)和语境来识别话语 2 1.6. , 神经网络 。 这种技术可使得精确度提升 25%以上,这是一个巨大的飞跃,因为这个行业只需要提升5%就具备革命意义 3 1.7. 语音信号预处理与特征提取 3 1.7.1. 基于语音学和声学的方法 3 1.8. PCM 文件,也就是俗称的 wav 文件。 4 1.9. VAD 静音切除 4 1.10. 要对声音进行分析,需要对声音分帧,也就是把声音切开成一小段一小段,每小段称为一帧。 4 1.11. 一个完整的基于统计的语音识别系统可大致分为三部分: 5 1.12. MFCC 特征 特征主要用

论文阅读 Tacotron2

蓝咒 提交于 2020-02-13 00:52:54
Tacotron2 摘要 引言 2 模型架构 2.1 内部特征表示 2.2 频谱图预测网络 2.3 WaveNet 声码器 3 实验结果 3.1 训练步骤 3.2 评估 摘要 这篇论文描述了Tacotron2,一个从文字直接转化为语音的神经网络。这个体系是由字符嵌入到梅尔频谱图的循环序列到序列神经网络组成的,然后是经过一个修改过后的WaveNet,该模型的作用是将频谱图合成波形图。这个模型取得了不错的效果MOS4.53。为了验证我们的设计选择,我们介绍了系统关键组件的简化测试以及评估了使用梅尔频谱图作为WaveNet的条件输入的影响(不是语言,持续时间和功能)。我们进一步展示了,使用这种紧凑的声学中间表示形式可以大幅度减小WaveNet体系结构的大小。 引言 TTS尽管进行了数十年的调查,但还是有一个大问题。随着时间的推移,不同的技术在这片领域中施展拳脚。单端选择的级联合成,将预先记录的波形拼在一起在之前好长时间都是比较先进的技术。统计参数语音合成,它直接生成语音特征的平滑轨迹是由声码器合成,随后解决了级联合成在声音边界不真实的问题。然而,与人类声音比起来,还是稍显不自然。 WaveNet,是一个时域生成模型,产生的声音可以跟人类媲美,现在好多TTS系统已经在用了。但是WaveNet的输入(语言特征,预测对数基本频率和音素持续时间),需要大量的专业领域知识才能产生

python编码与解码

别等时光非礼了梦想. 提交于 2020-02-12 04:10:13
基本概念 字符 :表示数据和信息的字母、数字或其他符号。在电子计算机中,每一个字符与一个二进制编码相对应。 字符的标识( 码位 ):是0-1114111的数字,在Unicode标准中以 4-6个十六进制数字 表示,而且加前缀“U+”。例如,字母A的码位是U+0041,欧元符号的码位是U+20AC. 字符的具体表述 取决于所用的编码。编码是在码位和字节序列之间转换时使用的算法。在UTF-8编码中,A(U+0041)的码位编码成单个字节\x41,而在UTF-16LE编码中编码成两个字节\x41\x00。欧元符号(U+20AC)在UFT-8编码中是三个字节\xe2\x82\xac,而在UTF-16LE编码中编码成两个字节\xac\x20。 编码 :把码位转换成字节序列(通俗来说:把字符串转换成用于存储或传输的字节序列,python中是.encode()) 解码 :把字节序列转换成码位(通俗来说:把字节序列转换成人类可读的文本字符串,python中是.decode()) >>> s = 'café' >>> len(s) # Unicode字符数量 4 >>> b = s.encode('utf8') # 编码为bytes >>> b b'caf\xc3\xa9' >>> len(b) # 字节数 5 >>> b.decode('utf8') # 解码 'café 字节概要

Python3 函数式编程

这一生的挚爱 提交于 2020-02-09 05:20:36
  函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。   函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! 变量可以指向函数 以Python内置的求绝对值的函数 abs() 为例,调用该函数可以获取一个煺的绝对值;但是,如果只写 abs 呢? >>> abs <built-in function abs> 可见, abs(-10) 是函数调用,而 abs 是函数本身 要获得函数调用结果,我们可以把结果赋值给变量,但是,如果把函数本身赋值给变量呢? >>> f = abs >>> f <built-in function abs> 结论:函数本身也可以赋值给变量,即:变量可以指向函数。 函数名也是变量 那么函数名是什么呢?函数名其实就是指向函数的变量!对于 abs() 这个函数,完全可以把函数名 abs 看成变量,它指向一个可以计算绝对值的函数! 如果把 abs 指向其他对象,会有什么情况发生? >>> abs = 10 >>> abs(-10) Traceback (most recent call last)

【深度学习基础】从零开始的炼丹生活09——循环神经网络

我只是一个虾纸丫 提交于 2020-02-08 01:24:03
往期回顾: 06——深度学习中的正则化 07——深度模型中的优化 08——卷积网络 为了处理一维序列数据,我们转向神经网络框架中另一强大的特化,循环神经网络。(主要参考《深度学习》和cousera上吴恩达的课程) 循环神经网络 (recurrent neural network)或 RNN ,是一类用于处理序列数据的神经网络。大多数循环网络都能处理可变长度的序列。循环网络强调参数共享,这使得模型能够扩展到不同形式的样本并进行泛化。例如 “我八点吃的早饭” 和 “我早饭在八点吃” ,要提取时间信息。如果我们训练一个前馈网络,需要分别学习句子每个位置的所有语言规则,而循环网络在几个时间步内共享相同的权重,不需要在每个位置都分别学习。 循环网络的计算图有两种表现方式,如图。左边循环图展开后就是右边展开图。 一、循环神经网络 RNN 的设计模式主要有以下几种: 每个时间步都有输出,并且隐藏单元之间有循环连接的循环网络。如图: 每个时间步产生一个输出,只有当前时刻的输出到下个时刻的隐藏单元之间有循环连接的循环网络。如图: 隐藏单元之间存在循环连接,读取整个序列后产生单个输出的循环网络,如图: 现在我们研究第一种情形的 RNN 前向传播公式。这种循环网络可以计算任何图灵可计算的函数。我们使用 tanh 作为激活函数,RNN 从特定的初始状态 h ( 0 ) \boldsymbol h^{(0)

对Python新手编程过程中如何规避一些常见问题的建议

心不动则不痛 提交于 2020-02-07 17:42:17
这篇文章收集了我在Python新手开发者写的代码中所见到的不规范但偶尔又很微妙的问题。本文的目的是为了帮助那些新手开发者渡过写出丑陋的Python代码的阶段。为了照顾目标读者,本文做了一些简化(例如:在讨论迭代器的时候忽略了生成器和强大的迭代工具itertools)。 对于那些新手开发者,总有一些使用反模式的理由,我已经尝试在可能的地方给出了这些理由。但通常这些反模式会造成代码缺乏可读性、更容易出bug且不符合Python的代码风格。如果你想要寻找更多的相关介绍资料,我极力推荐The Python Tutorial或Dive into Python。 迭代 range的使用 Python编程新手喜欢使用range来实现简单的迭代,在迭代器的长度范围内来获取迭代器中的每一个元素: for i in range(len(alist)): print alist[i] 应该牢记:range并不是为了实现序列简单的迭代。相比那些用数字定义的for循环,虽然用range实现的for循环显得很自然,但是用在序列的迭代上却容易出bug,而且不如直接构造迭代器看上去清晰: for item in alist: print item range的滥用容易造成意外的大小差一(off-by-one)错误,这通常是由于编程新手忘记了range生成的对象包括range的第一个参数而不包括第二个

rxjs简单入门

半世苍凉 提交于 2020-02-07 10:03:50
摘要: # rxjs简单入门 > rxjs全名Reactive Extensions for JavaScript,Javascript的响应式扩展, 响应式的思路是把随时间不断变化的数据、状态、事件等等转成可被观察的序列(Observable Sequence),然后订阅序列中那些Observable对象的变化,一旦变化,就会执行事先安排好的各种转换和操作 **rxjs适用于异步场景,即前端 rxjs简单入门 rxjs全名Reactive Extensions for JavaScript,Javascript的响应式扩展, 响应式的思路是把随时间不断变化的数据、状态、事件等等转成可被观察的序列(Observable Sequence),然后订阅序列中那些Observable对象的变化,一旦变化,就会执行事先安排好的各种转换和操作 rxjs适用于异步场景,即前端交互中接口请求、浏览器事件以及自定义事件。通过使用rxjs带给我们前所未有的开发体验。 统一异步编程的规范,不管是Promise、ajax还是事件,通通封装成 序列(Observable Sequence) ,一旦有异步环节发生变更,观察序列即可截获发生变更的信息。 前端业务层和展现层解耦,比如展现层不需要关系指定事件触发时和DOM无关的处理逻辑。同时业务层也能组装异步操作中多个异步逻辑之间的关系,无需暴露给展现层

【论文翻译】Neural Architectures for Named Entity Recognition

痞子三分冷 提交于 2020-02-07 03:58:30
Abstract   处于领先水平的命名实体识别系统严重依赖于人工设计的特征与特定领域的知识,从而更高效地学习小型、带标记的语料库 。在这篇论文里我们介绍了两种神经结构——一种结构是基于双向LSTM与条件随机场,另一种结构是通过一种基于转换、Shift-Reduce解析的算法构造并标记了单词。我们的模型依赖于单词信息的两个来源:一是从带监督语料库中学习的基于单字的词表示,二是从无注释语料库中学习的非监督词表示。对于NER(命名实体识别),在使用四种语言且没有任何术语资源(比如Gazetteers,斯坦福开源的地名数据库)的前提下,我们的模型表现出了较好的性能。 1 Introduction   NER 是一个具有挑战性的学习问题。一方面,在大多数的语言和领域中可获取的监督训练数据都是很少的。另一方面,对于可以命名的单词种类限制很少,所以很难从这么小的数据集中泛化出好的模型。因此精心构造的词素特征和术语资源,比如Gazetteers(地名数据库),被广泛用于解决本次任务。不幸地是,在新语言与新领域的发展过程中术语资源与特征是很昂贵的,这给新语言与新领域的发展带来了挑战。利用无注释语料库进行的无监督学习提供了一个可替代策略,以便于即使学习的是小规模的监督数据集,也有较好的泛化能力。然而,甚至那些广泛依赖于无监督特征的系统(Collobert et al., 2011; Turian

论文速读:《AN ACTOR-CRITIC ALGORITHM FOR SEQUENCE PREDICTION》

落花浮王杯 提交于 2020-02-07 02:31:42
摘要 我们提出了一种训练神经网络的方法,使用强化学习(RL)中的演员评论方法生成序列。当前的对数似然训练方法受到训练和测试模式之间差异的限制,因为模型必须以先前的猜测而不是地面真实标记为基础生成标记。我们通过引入一个经过训练来评估输出令牌价值的评论家网络来解决这个问题,给定了演员网络的策略。这导致训练过程更接近测试阶段,并允许我们直接优化任务特定分数,例如BLEU。 至关重要的是,由于我们在监督学习环境中利用这些技术而不是传统的RL设置,因此我们根据地面实况输出来评判批评网络。我们表明,我们的方法可以提高合成任务和德语 - 英语机器翻译的性能。我们的分析为这些方法应用于自然语言生成任务铺平了道路,例如机器翻译,字幕生成和对话建模。 介绍 在机器学习的许多重要应用中,任务是开发一个系统,该系统在给定输入的情况下产生一系列离散标记。最近的工作表明,当训练预测给定输入和先前令牌的下一个输出令牌时,递归神经网络(RNN)可以在许多此类任务中提供出色的性能。这种方法已成功应用于机器翻译(Sutskever等,2014,Bahdanau等,2015),标题生成(Kiros等,2014,Donahue等,2015,Vinyals等,2015,Xu等,2015, Karpathy和Fei-Fei,2015)和语音识别(Chorowski等,2015,Chan等,2015)

你所能用到的数据结构(四)

倖福魔咒の 提交于 2020-02-03 05:38:29
五、如何递,怎样归? 很多人看完递归的原理之后会有这种感觉,喔,这个原理我懂了,然后再找一道其余的题目看一看能不能写的出来,突然发现,我勒个去,还是不会。其实这种现象很普遍,所以如果你是这种的,也没有什么好沮丧的,我敢保证你能看的懂递归的执行过程,基本上已经比30%的人要强了。所以我觉得,我写一写我对递归思维的理解好了。递归这个词我的理解应该是传递和回归,如何把自身的状态传递下去和如何回归到一个结果上是递归问题的基本思维方式。 所谓如何传递,我觉得思维的难点是如何抽象出数学模型,如果是斐波那契数列那种有明确公式的话,很简单,直接按照公式该怎么操作怎么操作,难得是只有叙述性语言的,比如这种题目:有一段楼梯n个阶梯,你可以选择一次上一个阶梯,也可以选择一次上两个阶梯,请问走到顶部一共有多少种走法?看似很高深吧?其实这就是斐波那契数列的一个变体而已。这种描述性的题目如果要抽象出数学模型,我觉得最好的办法就先列举几个试试,先看看有什么规律没有,然后再猜想,再证明。你先看看你上2层楼梯有几种方法,2层楼梯要么是1次性上去,要么分成两步,一次性上一步,于是就是F(2)=2,如果只有一层和没有呢,那明显只有一种走法(一次上一层和不走),也就是F(0)=1,F(1)=1,下面,你要上第三层,你的办法要么是从第二层上一层到第三层,要么是在第一层上两层到第三层,要么一层一层的走上去,这样F(3)=3