语音识别_语音识别模块 - CSDN
语音识别 订阅
语音识别是一门交叉学科。近二十年来,语音识别技术取得显著进步,开始从实验室走向市场。人们预计,未来10年内,语音识别技术将进入工业、家电、通信、汽车电子、医疗、家庭服务、消费电子产品等各个领域。 语音识别听写机在一些领域的应用被美国新闻界评为1997年计算机发展十件大事之一。很多专家都认为语音识别技术是2000年至2010年间信息技术领域十大重要的科技发展技术之一。 语音识别技术所涉及的领域包括:信号处理、模式识别、概率论和信息论、发声机理和听觉机理、人工智能等等。 展开全文
语音识别是一门交叉学科。近二十年来,语音识别技术取得显著进步,开始从实验室走向市场。人们预计,未来10年内,语音识别技术将进入工业、家电、通信、汽车电子、医疗、家庭服务、消费电子产品等各个领域。 语音识别听写机在一些领域的应用被美国新闻界评为1997年计算机发展十件大事之一。很多专家都认为语音识别技术是2000年至2010年间信息技术领域十大重要的科技发展技术之一。 语音识别技术所涉及的领域包括:信号处理、模式识别、概率论和信息论、发声机理和听觉机理、人工智能等等。
信息
外文名
Voice recognition
发展史
1952年贝尔研究所Davis
中国发展
中国的语音识别研究起始
中文名
语音识别
简    介
与机器进行语音交流
语音识别简介
与机器进行语音交流,让机器明白你说什么,这是人们长期以来梦寐以求的事情。中国物联网校企联盟形象得把语音识别比做为“机器的听觉系统”。语音识别技术就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的高技术。 语音识别技术主要包括特征提取技术、模式匹配准则及模型训练技术三个方面。语音识别技术车联网也得到了充分的引用,例如在翼卡车联网中,只需按一键通客服人员口述即可设置目的地直接导航,安全、便捷。
收起全文
精华内容
参与话题
  • 5分钟弄懂语音识别技术原理

    万次阅读 多人点赞 2018-02-08 22:49:56
    文/张俊博知乎链接:https://www.zhihu.com/question/20398418/answer/18080841简要给大家介绍一下语音怎么变文字的吧。希望这个介绍能让所有同学看懂。首先,我们知道声音实际上是一种波。常见的mp3、wmv等格式都是...

    文/张俊博

    知乎链接:https://www.zhihu.com/question/20398418/answer/18080841


    简要给大家介绍一下语音怎么变文字的吧。希望这个介绍能让所有同学看懂。


    首先,我们知道声音实际上是一种波。常见的mp3、wmv等格式都是压缩格式,必须转成非压缩的纯波形文件来处理,比如Windows PCM文件,也就是俗称的wav文件。wav文件里存储的除了一个文件头以外,就是声音波形的一个个点了。下图是一个波形的示例。


    640?wx_fmt=png&wxfrom=5&wx_lazy=1

    在开始语音识别之前,有时需要把首尾端的静音切除,降低对后续步骤造成的干扰。这个静音切除的操作一般称为VAD,需要用到信号处理的一些技术。要对声音进行分析,需要对声音分帧,也就是把声音切开成一小段一小段,每小段称为一帧。分帧操作一般不是简单的切开,而是使用移动窗函数来实现,这里不详述。帧与帧之间一般是有交叠的,就像下图这样:

    640?wx_fmt=png&wxfrom=5&wx_lazy=1

    图中,每帧的长度为25毫秒,每两帧之间有25-10=15毫秒的交叠。我们称为以帧长25ms、帧移10ms分帧。图中,每帧的长度为25毫秒,每两帧之间有25-10=15毫秒的交叠。我们称为以帧长25ms、帧移10ms分帧。


    分帧后,语音就变成了很多小段。但波形在时域上几乎没有描述能力,因此必须将波形作变换。常见的一种变换方法是提取MFCC特征,根据人耳的生理特性,把每一帧波形变成一个多维向量,可以简单地理解为这个向量包含了这帧语音的内容信息。这个过程叫做声学特征提取。实际应用中,这一步有很多细节,声学特征也不止有MFCC这一种,具体这里不讲。


    至此,声音就成了一个12行(假设声学特征是12维)、N列的一个矩阵,称之为观察序列,这里N为总帧数。观察序列如下图所示,图中,每一帧都用一个12维的向量表示,色块的颜色深浅表示向量值的大小。

    640?wx_fmt=png

    接下来就要介绍怎样把这个矩阵变成文本了。首先要介绍两个概念:

    1. 音素:单词的发音由音素构成。对英语,一种常用的音素集是卡内基梅隆大学的一套由39个音素构成的音素集,参见The CMU Pronouncing Dictionary。汉语一般直接用全部声母和韵母作为音素集,另外汉语识别还分有调无调,不详述。

    2. 状态:这里理解成比音素更细致的语音单位就行啦。通常把一个音素划分成3个状态。


    语音识别是怎么工作的呢?实际上一点都不神秘,无非是:

    第一步,把帧识别成状态(难点);

    第二步,把状态组合成音素;

    第三步,把音素组合成单词。


    如下图所示:

    640?wx_fmt=png

    图中,每个小竖条代表一帧,若干帧语音对应一个状态,每三个状态组合成一个音素,若干个音素组合成一个单词。也就是说,只要知道每帧语音对应哪个状态了,语音识别的结果也就出来了。图中,每个小竖条代表一帧,若干帧语音对应一个状态,每三个状态组合成一个音素,若干个音素组合成一个单词。也就是说,只要知道每帧语音对应哪个状态了,语音识别的结果也就出来了。


    那每帧音素对应哪个状态呢?有个容易想到的办法,看某帧对应哪个状态的概率最大,那这帧就属于哪个状态。比如下面的示意图,这帧对应S3状态的概率最大,因此就让这帧属于S3状态。

    640?wx_fmt=png

    那这些用到的概率从哪里读取呢?有个叫“声学模型”的东西,里面存了一大堆参数,通过这些参数,就可以知道帧和状态对应的概率。获取这一大堆参数的方法叫做“训练”,需要使用巨大数量的语音数据,训练的方法比较繁琐,这里不讲。


    但这样做有一个问题:每一帧都会得到一个状态号,最后整个语音就会得到一堆乱七八糟的状态号,相邻两帧间的状态号基本都不相同。假设语音有1000帧,每帧对应1个状态,每3个状态组合成一个音素,那么大概会组合成300个音素,但这段语音其实根本没有这么多音素。如果真这么做,得到的状态号可能根本无法组合成音素。实际上,相邻帧的状态应该大多数都是相同的才合理,因为每帧很短。


    解决这个问题的常用方法就是使用隐马尔可夫模型(Hidden Markov Model,HMM)。这东西听起来好像很高深的样子,实际上用起来很简单:

    第一步,构建一个状态网络。

    第二步,从状态网络中寻找与声音最匹配的路径。


    这样就把结果限制在预先设定的网络中,避免了刚才说到的问题,当然也带来一个局限,比如你设定的网络里只包含了“今天晴天”和“今天下雨”两个句子的状态路径,那么不管说些什么,识别出的结果必然是这两个句子中的一句。


    那如果想识别任意文本呢?把这个网络搭得足够大,包含任意文本的路径就可以了。但这个网络越大,想要达到比较好的识别准确率就越难。所以要根据实际任务的需求,合理选择网络大小和结构。


    搭建状态网络,是由单词级网络展开成音素网络,再展开成状态网络。语音识别过程其实就是在状态网络中搜索一条最佳路径,语音对应这条路径的概率最大,这称之为“解码”。路径搜索的算法是一种动态规划剪枝的算法,称之为Viterbi算法,用于寻找全局最优路径。

    640?wx_fmt=png

    这里所说的累积概率,由三部分构成,分别是:

    1. 观察概率:每帧和每个状态对应的概率

    2. 转移概率:每个状态转移到自身或转移到下个状态的概率

    3. 语言概率:根据语言统计规律得到的概率


    其中,前两种概率从声学模型中获取,最后一种概率从语言模型中获取。语言模型是使用大量的文本训练出来的,可以利用某门语言本身的统计规律来帮助提升识别正确率。语言模型很重要,如果不使用语言模型,当状态网络较大时,识别出的结果基本是一团乱麻。


    以上介绍的是传统的基于HMM的语音识别。事实上,HMM的内涵绝不是上面所说的“无非是个状态网络”那么简单。以上的文字只是想让大家容易理解,并不追求严谨。

    展开全文
  • 本文搭建一个完整的中文语音识别系统,包括声学模型和语言模型,能够将输入的音频信号识别为汉字。 声学模型使用了应用较为广泛的递归循环网络中的GRU-CTC的组合,除此之外还引入了科大讯飞提出的DFCNN深度全序列...

    本文搭建一个完整的中文语音识别系统,包括声学模型和语言模型,能够将输入的音频信号识别为汉字。

    该系统实现了基于深度框架的语音识别中的声学模型和语言模型建模,其中声学模型包括CNN-CTC、GRU-CTC、CNN-RNN-CTC,语言模型包含transformerCBHG
    数据集采用了目前能找到的所有中文免费数据,包括:thchs-30、aishell、primewords、st-cmd四个数据集,训练集总计大约450个小时。

    项目地址:https://github.com/audier/DeepSpeechRecognition

    为了方便同学们自己做实验,写了实践版的tutorial:

    1. 声学模型

    声学模型目前开源了部分示例模型,后期将不定期更新一些模型。

    GRU-CTC

    我们使用 GRU-CTC的结构搭建了第一个声学模型,该模型在项目的gru_ctc.py文件中。
    利用循环神经网络可以利用语音上下文相关的信息,得到更加准确地信息,而GUR又能选择性的保留需要的长时信息,使用双向rnn又能够充分的利用上下文信号。
    但该方法缺点是一句话说完之后才能进行识别,且训练相对cnn较慢。该模型使用python/keras进行搭建,本文系统都使用python搭建。

    • 网络结构如下:
        def _model_init(self):
            self.inputs = Input(name='the_inputs', shape=(None, 200, 1))
            x = Reshape((-1, 200))(self.inputs)
            x = dense(512, x)
            x = dense(512, x)
            x = bi_gru(512, x)
            x = bi_gru(512, x)
            x = bi_gru(512, x)
            x = dense(512, x)
            self.outputs = dense(self.vocab_size, x, activation='softmax')
            self.model = Model(inputs=self.inputs, outputs=self.outputs)
            self.model.summary()
    

    DFCNN

    由于两个原因在使用GRU作为语音识别的时候我们会遇到问题。

    • 一方面是我们常常使用双向循环神经网络才能取得更好的识别效果,这样会影响解码实时性。
    • 另一方面随着网络结构复杂性增加,双向GRU的参数是相同节点数全连接层的6倍,这样会导致训练速度非常缓慢。

    科大讯飞提出了一种使用深度卷积神经网络来对时频图进行识别的方法,就是DFCNN
    论文地址:http://xueshu.baidu.com/usercenter/paper/show?paperid=be5348048dd263aced0f2bdc75a535e8&site=xueshu_se

    利用CNN参数共享机制,可以将参数数量下降几个数量级别,且深层次的卷积和池化层能够充分考虑语音信号的上下文信息,且可以在较短的时间内就可以得到识别结果,具有较好的实时性。
    该模型在cnn_ctc.py中,实验中是所有网络结果最好的模型,目前能够取得较好的泛化能力。其网络结构如下:
    DFCNN

    def cnn_cell(size, x, pool=True):
        x = norm(conv2d(size)(x))
        x = norm(conv2d(size)(x))
        if pool:
            x = maxpool(x)
        return x
    
    class Am():
        def _model_init(self):
            self.inputs = Input(name='the_inputs', shape=(None, 200, 1))
            self.h1 = cnn_cell(32, self.inputs)
            self.h2 = cnn_cell(64, self.h1)
            self.h3 = cnn_cell(128, self.h2)
            self.h4 = cnn_cell(128, self.h3, pool=False)
            self.h5 = cnn_cell(128, self.h4, pool=False)
            # 200 / 8 * 128 = 3200
            self.h6 = Reshape((-1, 3200))(self.h5)
            self.h7 = dense(256)(self.h6)
            self.outputs = dense(self.vocab_size, activation='softmax')(self.h7)
            self.model = Model(inputs=self.inputs, outputs=self.outputs)
            self.model.summary()
    

    DFSMN

    而前馈记忆神经网络也也解决了双向GRU的参数过多和实时性较差的缺点,它利用一个记忆模块,包含了上下几帧信息,能够得到不输于双向GRU-CTC的识别结果,阿里最新的开源系统就是基于DFSMN的声学模型,只不过在kaldi的框架上实现的。我们将考虑使用DFSMN+CTC的结构在python上实现。该网络实质上是用一个特殊的CNN就可以取得相同的效果,我们将CNN的宽设置为memory size,将高度设置为feature dim,将channel设置为hidden units,这样一个cnn的层就可以模仿fsmn的实现了。
    结构如下:
    DFSMN

    2. 语言模型

    n-gram

    n元语法是一个非常经典的语言模型,这里不过多介绍啦。
    如果想要通过语料来训练一个n-gram的模型,可以参考我的小实验的实现方法。

    CBHG

    该想法来自于一个大神搞输入法的项目,下面部分也引用此处:搜喵出入法
    他是利用该模型建立一个按键到汉字的作用,本文对其结构和数据处理部分稍作改动,作为语言模型。

    拼音输入的本质上就是一个序列到序列的模型:输入拼音序列,输出汉字序列。所以天然适合用在诸如机器翻译的seq2seq模型上。

    模型初始输入是一个随机采样的拼音字母的character embedding,经过一个CBHG的模型,输出是五千个汉字对应的label。
    这里使用的CBHG模块是state-of-art的seq2seq模型,用在Google的机器翻译和语音合成中,该模型放在cbhg.py中,结构如下:
    图片来自 Tacotron: Towards End-to-End Speech Synthesis
    CBHG

    该模型训练实验结果如下,实际上,后续和transformer的比较中,该模型无论是收敛速度还是识别效果上都是很难和transformer比较。

    请输入测试拼音:ta1 mei2 you3 duo1 shao3 hao2 yan2 zhuang4 yu3 dan4 ta1 que4 ba3 ai4 qin1 ren2 ai4 jia1 ting2 ai4 zu3 guo2 ai4 jun1 dui4 wan2 mei3 de tong3 yi1 le qi3 lai2
    她没有多少豪言壮语但她却把爱亲人爱家庭爱祖国爱军队完美地统一了起来
    
    请输入测试拼音:chu2 cai2 zheng4 bo1 gei3 liang3 qian1 san1 bai3 wan4 yuan2 jiao4 yu4 zi1 jin1 wai4 hai2 bo1 chu1 zhuan1 kuan3 si4 qian1 wu3 bai3 qi1 shi2 wan4 yuan2 xin1 jian4 zhong1 xiao3 xue2
    除财政拨给两千三百万元教太资金外还拨出专款四千五百七十万元新建中小学
    
    请输入测试拼音:ke3 shi4 chang2 chang2 you3 ren2 gao4 su4 yao2 xian1 sheng1 shuo1 kan4 jian4 er4 xiao3 jie3 zai4 ka1 fei1 guan3 li3 he2 wang2 jun4 ye4 wo4 zhe shou3 yi1 zuo4 zuo4 shang4 ji3 ge4 zhong1 tou2
    可是常常有人告诉姚先生说看见二小姐在咖啡馆里和王俊业握着族一坐坐上几个钟头
    

    transformer

    新增基于transformer结构的语言模型transformer.py,该模型已经被证明有强于其他框架的语言表达能力。

    建议使用transformer作为语言模型,该模型是自然语言处理这两年最火的模型,今年的bert就是使用的该结构。本文最近更新系统使用的语言模型就是transformer。

     the  0 th example.
    文本结果: lv4 shi4 yang2 chun1 yan1 jing3 da4 kuai4 wen2 zhang1 de di3 se4 si4 yue4 de lin2 luan2 geng4 shi4 lv4 de2 xian1 huo2 xiu4 mei4 shi1 yi4 ang4 ran2
    原文结果: lv4 shi4 yang2 chun1 yan1 jing3 da4 kuai4 wen2 zhang1 de di3 se4 si4 yue4 de lin2 luan2 geng4 shi4 lv4 de2 xian1 huo2 xiu4 mei4 shi1 yi4 ang4 ran2
    原文汉字: 绿是阳春烟景大块文章的底色四月的林峦更是绿得鲜活秀媚诗意盎然
    识别结果: 绿是阳春烟景大块文章的底色四月的林峦更是绿得鲜活秀媚诗意盎然
    
     the  1 th example.
    文本结果: ta1 jin3 ping2 yao1 bu4 de li4 liang4 zai4 yong3 dao4 shang4 xia4 fan1 teng2 yong3 dong4 she2 xing2 zhuang4 ru2 hai3 tun2 yi4 zhi2 yi3 yi1 tou2 de you1 shi4 ling3 xian1
    原文结果: ta1 jin3 ping2 yao1 bu4 de li4 liang4 zai4 yong3 dao4 shang4 xia4 fan1 teng2 yong3 dong4 she2 xing2 zhuang4 ru2 hai3 tun2 yi4 zhi2 yi3 yi1 tou2 de you1 shi4 ling3 xian1
    原文汉字: 他仅凭腰部的力量在泳道上下翻腾蛹动蛇行状如海豚一直以一头的优势领先
    识别结果: 他仅凭腰部的力量在泳道上下翻腾蛹动蛇行状如海豚一直以一头的优势领先
    
     the  2 th example.
    文本结果: pao4 yan3 da3 hao3 le zha4 yao4 zen3 me zhuang1 yue4 zheng4 cai2 yao3 le yao3 ya2 shu1 di4 tuo1 qu4 yi1 fu2 guang1 bang3 zi chong1 jin4 le shui3 cuan4 dong4
    原文结果: pao4 yan3 da3 hao3 le zha4 yao4 zen3 me zhuang1 yue4 zheng4 cai2 yao3 le yao3 ya2 shu1 di4 tuo1 qu4 yi1 fu2 guang1 bang3 zi chong1 jin4 le shui3 cuan4 dong4
    原文汉字: 炮眼打好了炸药怎么装岳正才咬了咬牙倏地脱去衣服光膀子冲进了水窜洞
    识别结果: 炮眼打好了炸药怎么装岳正才咬了咬牙倏地脱去衣服光膀子冲进了水窜洞
    

    3. 数据集

    数据集采用了目前我能找到的所有中文免费数据,包括:thchs-30、aishell、primewords、st-cmd四个数据集,训练集总计大约450个小时,在之前实验过程中,使用thchs-30+aishell+st-cmd数据集对DFCNN声学模型进行训练,以64batch_size训练。
    包括stc、primewords、Aishell、thchs30四个数据集,共计约430小时, 相关链接:http://www.openslr.org/resources.php

    Name train dev test
    aishell 120098 14326 7176
    primewords 40783 5046 5073
    thchs-30 10000 893 2495
    st-cmd 10000 600 2000

    数据标签整理在data路径下,其中primewords、st-cmd目前未区分训练集测试集。

    若需要使用所有数据集,只需解压到统一路径下,然后设置utils.py中datapath的路径即可。

    4. 配置

    本项目现已训练一个迷你的语音识别系统,将项目下载到本地上,下载thchs数据集并解压至data,运行test.py,不出意外能够进行识别,结果如下:

     the  0 th example.
    文本结果: lv4 shi4 yang2 chun1 yan1 jing3 da4 kuai4 wen2 zhang1 de di3 se4 si4 yue4 de lin2 luan2 geng4 shi4 lv4 de2 xian1 huo2 xiu4 mei4 shi1 yi4 ang4 ran2
    原文结果: lv4 shi4 yang2 chun1 yan1 jing3 da4 kuai4 wen2 zhang1 de di3 se4 si4 yue4 de lin2 luan2 geng4 shi4 lv4 de2 xian1 huo2 xiu4 mei4 shi1 yi4 ang4 ran2
    原文汉字: 绿是阳春烟景大块文章的底色四月的林峦更是绿得鲜活秀媚诗意盎然
    识别结果: 绿是阳春烟景大块文章的底色四月的林峦更是绿得鲜活秀媚诗意盎然
    

    若自己建立模型则需要删除现有模型,重新配置参数训练。

    与数据相关参数在utils.py中:

    • data_type: train, test, dev
    • data_path: 对应解压数据的路径
    • thchs30, aishell, prime, stcmd: 是否使用该数据集
    • batch_size: batch_size
    • data_length: 我自己做实验时写小一些看效果用的,正常使用设为None即可
    • shuffle:正常训练设为True,是否打乱训练顺序
    def data_hparams():
        params = tf.contrib.training.HParams(
            # vocab
            data_type = 'train',
            data_path = 'data/',
            thchs30 = True,
            aishell = True,
            prime = False,
            stcmd = False,
            batch_size = 1,
            data_length = None,
            shuffle = False)
          return params
    

    使用train.py文件进行模型的训练。

    声学模型可选cnn-ctc、gru-ctc,只需修改导入路径即可:

    from model_speech.cnn_ctc import Am, am_hparams

    from model_speech.gru_ctc import Am, am_hparams

    语言模型可选transformer和cbhg:

    from model_language.transformer import Lm, lm_hparams

    from model_language.cbhg import Lm, lm_hparams

    转载请注明出处:https://blog.csdn.net/chinatelecom08/article/details/82557715

    展开全文
  • 基于Python + Tensorflow + RNN,通过一个完整项目案例,系统学习语音识别系统的样本标注、模型训练和程序设计。
  • C++语音识别开篇

    千人学习 2018-10-22 21:38:06
    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。
  • (一)语音识别基本概念

    千次阅读 2018-08-30 15:42:19
    写在前面 这是CMUSphinx系列教程的第一篇,文章译自官网,文中很多概念能...识别过程 模型 其他常用概念 评价指标 语音是一个复杂的现象(phenomenon)。人们很少能理解它是怎样产生以及被感知的(percei...

    写在前面
    这是CMUSphinx系列教程的第一篇,文章译自官网,文中很多概念能翻译的尽量用中文翻译出来,并在后面跟上原英文,实在翻译不出来的就用原英文了,相信不会影响到大家的理解。如有翻译不当之处,请多但待并指出,谢谢!


    语音是一个复杂的现象(phenomenon)。人们很少能理解它是怎样产生以及被感知的(perceived)。一个直观的感知(perception,和前面的感知意思类似,只不过词性不同)通常是:语音是由多个词(words)构建的,而每个词又是由多个音素(phones,语音学概念,但在多数情况下和语言学中phonemes(音位)的概念不做区分)构成的。但是很不幸,事实却和人们所感知的差别很大。语音是一个动态的过程,在它的每一部分之间没有明确的界限。因此,了解一段语音的一个很有效的方式是通过一个声音编辑器去观察(look into)下语音的波形(rcording),并去听一下。这是一段通过音频编辑器打开的语音的波形
    image
    当前所有对语音的刻画的方法或多或少都是用概率。这意味着在单元与单元,或者词与词之间不存在确定的界限。语音转写(speech to text)以及其他语音方面的应用不存在100%正确的情况。这和传统的软件开发人员的想法是相悖(rather unusual)的,他们通常是在确定的(deterministic)系统上进行工作的。这就产生了很多只属于语音技术的概念和话题。

    语音的构成

    目前的实践(practice)中,语音结构的描述如下文所示:
    语音是一个连续的音频流,它是由相对稳定的状态和剧烈变化的状态混合而成的。在这些状态序列里,人们可以针对声音(sound)或者音素(phones)根据相似性定义一定数量的类别(我的理解是,作者想要表达的意思是确定一种建模方式,对于每一种建模方式,建模单元的数量是可以确定的)。词(words)通常被理解为是由音素(phones)构建的,但事实并不如此。一个音素对应的波形(waveform)的声学特性(acoustic properties)的变化会严重依赖于音素上下文(phone context)、说话人(speaker)、语音的风格(style)等等。所谓的协同发音(coarticulation,可以理解为一个音素的发音会受到相邻音素的影响,为了使发音自然连贯,人类在发音时总会使用协同发音以使音素与音素之间过渡平滑),会使得音素听起来和它原本的发音(canonical,单个音素的发音)差异很大。因为词与词之间的过渡所蕴含的信息要比稳定区域(stable regions,这里指一个词的内部)多得多,语音开发人员谈论的更多的是diphones,即两个音素相邻的部分(包括前一个音素的末尾部分和后一个音素的起始部分)。有时,他们也会谈论subphonetic单元,即一个音素的不同子状态(substates,这就是多音素建模方式的思想)。通常,一个音素可以根据不同的特性分成三个或更多的区域(regions)。
    对于三个的情况很好解释:音素的第一部分依赖于它的前一个音素,中间的是稳定的自身的部分,第三部分依赖于它的下一个音素。这就是为什么在语音识别中一个音素常常包含三个状态。
    有时,音素会被放到上下文中进行考虑。这些在上下文中的音素被称为三音素(triphones)甚至是五音素(quinphones)(注意:无论是考虑多少个相邻音素,这些音素都是一个音素,而不是将多个音素当作一个音素)。例如在单词”bad”中,”u”的左边是音素”b”,右边是音素”d”,它的发音和单词”ban”中,左边是音素”b”,右边是音素”n”的”u”发音就有点不同。注意,和diphones不同的是,考虑上下文的多音素和不考虑上下文的音素,对于同一个音素来说,它们在波形上的范围是一样的,多音素并不是将多个音素组成一个“大”的音素。它们只是因为发音有区别用不同的名字表示而已。
    举例来说,如果你想对一个三音素的起始创建一个检测器,并将它在多个三音素之间共享,为了降低计算量,一个有效的做法是只检测(detect)部分三音素而不是检测所有(这里对detect的概念不是很明白,我的理解是,理论上,对于有N个音素的模型,对应的三音素个数是N3,而实际系统中,可以采用一些手段来降低三音素的个数,如下面提到的决策数聚类方法)。这样,大量的声音检测器(sound detector)就可以用少量的具有区分度的声音检测器来代表(很多三音素类似,可以将它们聚在一起,共享参数,经过聚类之后,不同类别之间的三音素区分度是比较大的)。通常我们是以哦嗯4000个具有区分性的声音检测器去组成三音素的检测器。我们称这些检测器为senones(也称为tied triphone states,即将分布类似的状态聚成一类共享参数)。一个senone可以依赖除了左边和右边的上下文以外更多的上下文信息。可以通过决策数或者其他方式定义相当复杂的函数。
    音素也可以构成子词单元,如音节(syllables)。有时,音节被定义为“减少的稳定实体”(reduction-stable entities)。举个例子,当语音变得快的时候,音素经常会变化,但是音节就可以保持不变。同时,音节还可以反映语调轮廓(intonational contour)。除了音节,还有其他方式构建子词,即基于形态学的(morphologically-based)或者基于发音的(phonetically-based)。子词常常被用于开放词汇(open vocabulary)语音识别。
    子词构成词。在语音识别中,词是很重要的,因为它们极大地限制了音素的组合。如果有40个音素,平均每个词有7个音素,那就有407个词。庆幸的是,在实际生活中,人们的常用词汇不超过20000个,这使得语音识别变得更可行。
    词和其他非语言的声音(non-linguistic sounds,这些声音我们称为填充物(fillers),具体有呼吸声、表示犹豫或说话中间停顿的嗯声(um)、表示不肯定、不清楚或征求同意的啊声(uh)以及咳嗽声)构成了语音片段(utterances,语音学概念,人在说话时,两个较长停顿之间说的语音片段称为一个utterance,与句子(sentence,语言学概念,句子是具有更强的语义概念的)不是一个概念)。
    还有其他的一些概念这里就不表了(dialog acts like turns)。

    识别过程

    目前通用的语音识别方式如下:有一段波形,通过静音(silences)将它分割成若干个语音片段(utterances),然后识别每一个语音片段说的是什么。要想实现上述想法,我们需要穷举出所有可能的词的组合,然后和音频进行匹配(match),选择最好的匹配组合。
    在匹配过程中,有几个重要的概念。第一是特征(features)。因为参数的数量非常大,我们尝试减少它。通常会将语音分成帧(frames),然后在帧的单位上计算参数数量。对于每一帧,通常选择10ms作为一帧的长度,然后提取39个数来表示语音。这39个数就构成了一个特征向量。至于这39个数怎么计算是一个活跃的研究方向,但是一个简单的方式是,它可以从声谱(spectrum)中得到。
    第二个概念是模型(model)。一个模型描述了一些数学对象,这些对象集合了口语说的话(spoken word)的共同属性。实际上,对于一个senone音频模型,模型就是指它的三个状态的高斯混合,简单地说,它是最有可能的特征向量(这里是按照原文翻译的,可能不太好理解,我个人理解是模型就是通过高斯混合模型去刻画每一帧特征向量的分布,并将特征向量对齐到HMM每一个状态上去)。从模型的概念,可以导出如下议题:
    - 1.模型对实际语音的刻画能力有多好
    - 2.如果模型内部有问题,可以使模型变得更好吗
    - 3.如果条件发生变化模型的适应能力有多强
    语音的模型称为隐马尔可夫模型(Hidden Markov Model,HMM)。它是一个用于刻画黑盒通信信道(black-box communication channel)的通用模型。在这个模型中,过程被描述为一系列状态以特定的概率进行跳转。这个模型试图去描述包括语音在内的任何序列过程。HMMs已经被证明在语音解码(speech decoding)中是确实有效的。
    第三,就是匹配过程本身。因为将所有的特征向量和所有的模型进行比较是非常耗时的,因此通常会应用很多技巧来优化搜索过程。在任何时候,我们保存最佳匹配的变量,并随着时间推移对其进行扩展,为下一帧生成最佳匹配变量(动态规划的思想,对于每一帧来说,它前面走过的路径是最优的)。

    模型

    按照语音结构,在语音识别中有三个被用到的模型去进行匹配:
    -声学模型(acoustic model)
    对于每一个senone,声学模型包含了其声学特性。有上下文无关的模型和上下文相关的模型两种。
    -发音字典(phonetic dictionary)
    发音字典包含了从词到音素的映射关系。这个映射并不是非常有效。例如,对大多数音素,字典中只记录了两种或三种不同的发音方式。但是,这在绝大多数情况下也够用了。字典并不是将词映射到音素的唯一方法。你也可以使用一些通过机器学习算法学习到的复杂的函数来进行映射。
    -语言模型(language model)
    语言模型用于限制词的搜索范围。它定义了哪个词可以跟在前一个已经被识别出来的词的后面(因为匹配是一个序列的过程,只有识别出前一个词才能识别后一个词),并且通过剔除不可能的词来帮助我们极大地限制匹配的过程。最广泛使用的语言模型就是n-gram语言模型(统计词序列)和有限状态(finite state)语言模型(通过有限状态自动机,有时还带有权重,来定义语音序列)。要想获得好的识别精度,你的语言模型必须限制搜索空间上做的非常成功。这就意味着它应该非常善于预测下一个词。一个语言模型常常会限制被考虑包含的单词的词汇量。这是命名识别(name recognition)中的一个问题。为了处理这种情况,一个语言模型可以包含更小的块(chunks),如子词甚至音素。但要注意的是,在这种情况下对搜索空间的限制要差很多,因此识别的精度也会比基于词的语言模型要低。
    在一个引擎中,这三个部分被组合到一起用于识别语音。如果你想用你的引擎去识别其他的语言,你需要把这些部分放在适当的位置。对很多语言来说,有声学模型、发音字典甚至大词汇量语言模型可供下载。

    其他常用概念

    -Lattice
    一个Lattice是用于表示所有识别可能的有向图(directed graph)。通常,获得最佳匹配是不实际的(动态规划只能获得局部最优,无法保证全局最优)。在这种情况下,lattices是一种好的用于表示识别结果的中间形式。
    -N-best lists
    和lattices类似,但是没有lattices稠密(只保留前N条概率最大的路径)
    -词混淆网络(Word confusion networks)
    和lattices一样,只是格式更为规整
    -语音数据库
    -文本数据库
    用于语言模型训练。需要将格式转化成口语文本形式(spoken text form),即,将标签和头移除,将数字转化成口语的形式,将缩写转化为完整形式。

    评价指标

    当语音识别开发完成后,最复杂的问题是使搜索精确,并使搜索速度达到最快。因为模型不完美,另一个挑战是使模型匹配语音。
    通常系统会在测试集上进行测试,评价指标如下:
    -词错误率(Word error rate)
    假设我们有一个原始的文本以及长度为N个词的识别文本。I是插入词(inserted words)的数量,D是删除词(deleted words),S表示替换词(substituted words)。则词错误率可以通过下式计算:

    WER=(I+D+S)/N

    词错误率通常用百分数来表示。
    -准确率(Accuracy)
    和词错误率类似,但是不考虑插入错误的情况:
    Accuracy=(NDS)/N

    在绝大多数情况下,准确率都是一种比词错误率更差的衡量指标,因为插入错误对最终的结果也非常重要。然而,对于一些任务,准确率是一个合理的评价指标。
    -速度
    包括录音的时间和解码的时间
    -ROC曲线
    当我们谈论检测任务时,会有虚警(false alarms)和命中/错过(hits/misses)的概念。用ROC曲线可以描述它们。ROC曲线试图找出最佳点,在这个点上虚警小而命中数100%匹配上(意思是所有被命中的都是应该被命中的,即precision为100%)。关于ROC曲线可以参考维基百科
    还有一些其他一些不常被考虑但是对于很多应用很有用的特性。你的第一个任务应该是创建该评价方式并且将其应用到系统开发中。你的第二个人无是收集文本数据库,然后测试你的应用的性能怎么样。

    展开全文
  • 语音识别

    2020-09-20 22:09:24
    目标 在往后的一年中创建一个人与机器可以交流英语的软件,内容包括你说英语它说汉语意思,你说汉语意思它说英语,更高深的可以进行在线交流英语(人与机器对话)。 任务 一天一篇csdn文章,坚持下去!...

    加油,向前冲

    展开全文
  • 1. 语言模型 P(X1,X2,X3,X4)=P(X1)∗P(X2∣X1)∗P(X3∣X1,X2)∗P(X4∣X1,X2,X3)P(X_1,X_2,X_3,X_4)=P(X_1)*P(X_2|X_1)*P(X_3|X_1,X_2)*P(X_4|X_1,X_2,X_3)P(X1​,X2​,X3​,X4​)=P(X1​)∗P(X2​∣X1​)∗P(X3​∣...
  • 语音识别工具

    千次阅读 2020-03-01 01:23:29
    各大公司都开源了语音识别api,然而却很多限制。例如文件格式必须是pcm,每次的时长不能超过60s。当然也有一些商业的,例如讯飞。为了突破这些限制,我随手写了一个小工具,可以对长音频进行识别了。原理很简单,...
  • 百度离线语音识别

    万次阅读 2019-01-11 15:56:24
    百度离线语音识别简介百度语音离线识别集成离线识别实现合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...
  • 浅析语音识别技术的工作原理及发展 语音是人类最自然的交互方式。计算机发明之后,让机器能够“听懂”人类的语言,理解语言中的内在含义,并能做出正确的回答就成为了人们追求的目标。我们都希望像科幻电影中那些...
  • 语音识别-特征提取 (一)

    万次阅读 2018-01-26 10:53:06
    语音的产生简介 1.1 发音器官  人体的语音是由人体的发音器官在大脑的控制下做生理运动产生的。人体发音器官由三部分组成:肺和气管、喉、声道。 肺是语音产生的能源所在。气管连接着肺和喉,是肺与声道的...
  • 最近研究语音识别,我说的语音识别不包括语意的识别,是针对说话人的识别, 即利用语音进行身份认证,说话人识别力求将语音信号中语意信息平均化,突出个性。 但不论是何种第一步所需要做的工作是获得语音中包含的...
  • title: 手写BP网络并进行语音识别(二) date: 2019-06-09 20:45:40 tags: [python, BP, 语音识别] 前言 BP算法作为神经网络的经典算法,理解其原理非常重要,我将从原理开始讲起,然后过渡到代码实现。 一:BP算法...
  • 近年来,语音识别技术取得了重大进展,并已开始从实验室走向人们的生活。 预计在未来10年内,语音识别技术将进入各个领域,如工业、家用电子产品、通信、汽车电子。今天小编就语音识别的公司来分析。 大致来看,语音...
  • 五款免费开源的语音识别工具

    万次阅读 2018-03-23 15:41:51
    按:本文原作者 Cindi Thompson,美国德克萨斯大学奥斯汀分校(University of Texas at Austin)计算机科学博士,数据科学咨询公司硅谷数据科学...作为 SVDS 研究团队的成员,我们会经常接触各种不同的语音识别...
  • html5录音+百度语音实现语音识别

    万次阅读 热门讨论 2019-08-06 17:57:26
    首先,语音识别技术已经不是什么新鲜的词汇了,各大公司也提供了自己的语音识别API,据说百度、讯飞等公司的识别率已经达到99%。 最近我也想给网站加上一个语音识别功能,用于搜索词汇。我首选的是讯飞,毕竟人家是...
  • 本文采用百度云语音识别API接口,实现低于60s音频的语音识别,也可以用于合成文本长度小于1024字节的音频,此外采用snowboy离线语音唤醒引擎可实现离线语音唤醒,实现语音交互。基于本内容可实现语音控制小车,语音...
  • 语音识别、声纹识别的区别及测试

    万次阅读 多人点赞 2018-09-02 22:15:45
    很多除接触AI的小伙伴, 不清楚语音识别和声纹识别的区别,经常混淆概念,以为语音识别、声纹识别、语义识别是同一回事,其实不然。这篇文章主要为小伙伴普及一下这三者的区别, 并且分别讲一讲如何测试。   语音...
  • 教你如何在树莓派上搭建语音识别服务

    万次阅读 多人点赞 2019-09-25 19:26:09
    最近项目原因需要我完成一个在树莓派上的离线语音识别,忙活了近一周,起初用了开源的PocketSphinx,但是不得不说,识别率低的惊人,甚至可以说有些字词根本没法识别,除非你自己制作声学模型,不然这玩意儿就是个...
  • Python 实时语音识别

    千次阅读 2019-11-27 14:54:38
    Python 实时语音识别语音识别语音识别API语音识别步骤效果展示代码下载 最近自己想接触下语音识别,经过一番了解和摸索,实现了对语音识别API的简单调用,正好写文章记录下。目前搜到的帖子里,有现成的调用百度语音...
1 2 3 4 5 ... 20
收藏数 113,147
精华内容 45,258
关键字:

语音识别