一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种支持领域定制语言模型的解码方法及装置与流程

2021-06-22 17:08:00 来源:中国专利 TAG:解码 端到 定制 装置 模型
一种支持领域定制语言模型的解码方法及装置与流程

本发明属于计算机技术领域,尤其涉及端到端语音识别技术中的一种支持领域定制语言模型的解码方法及相应的解码装置。



背景技术:

下述背景技术部分公开的上述信息仅用于加强对本公开的背景的理解,因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。背景技术部分的内容仅仅是公开人所知晓的技术,并不当然代表本领域的现有技术。

现有的端到端语音识别系统主要包括基于connectionisttemporalclassification(ctc)、sequence-to-sequence(seq2seq)或rnntransducer(rnnt,循环神经网络变换器)的三类系统。基于rnnt的端到端语音识别系统由于系统占用空间小的特点非常适用于在终端上部署的语音识别服务场景,在此系统中端到端可以在离线环境下对用户提供高质量的语音识别服务。rnntransducer的端到端语音识别技术,已经证明在大数据上面拥有比传统hybrid系统更简洁的流程和更好的模型识别精度。端到端语音识别近两年已经成为语音识别最为主流的研究方向,并且在大规模语音识别领域取得了令人瞩目的效果和性能提升,得到了语音识别界的强烈关注。语音识别的基础之一是语言模型。语言模型一般有三种类型:①生成性模型,②分析性模型,③辨识性模型。在生成性模型和分析性模型的基础上,把二者结合起来,便产生了一种支持领域定制语言模型的解码方法很有实用价值的模型,即辨识性模型。辨识性模型可以从语言元素的某一集合及规则系统出发,通过有限步骤的运算,确定这些元素是一堆乱七八糟的词还是语言中合格的句子。如y.巴尔-希列尔用数理逻辑方法提出的句法类型演算模型。对于语言序列,语言模型就是计算该序列的概率。从机器学习的角度来看:语言模型是对语句的概率分布的建模,可以理解为是一个概率分布模型p,对于语言里的每一个字符串s给出一个概率p(s)。语言模型除了在语音识别领域,在机器翻译、句法分析、手写体识别等应用领域也都有重要的意义。语音识别中,输入语音可能会被识别出多个候选语句,而这些候选语句有些是带有错误词或者语法的,并不符合人类的语言,在该种情况下,就需要利用语言模型来输出各个候选语句合理性的概率。语言模型核心的就是计算得到一个句子的概率,为了得到这个概率,需要计算得到一系列的条件概率。这些条件概率就是整个语言模型的参数。现有技术中主要基于神经网络的方法来得到这些条件概率。即通过神经网络训练语言模型,因此需要输入足够多的语音数据样本。

各种支持语音识别功能的智能产品已经逐渐深入到用户工作生活的各个角落,例如智能机器人、智能车载设备等,这类智能产品通过语音识别功能为用户提供更智能的服务。在实际应用中,这类智能产品需要不断地将应用场景中新增的词条更新至解码网络中,以保证智能产品能够及时适配不断变化的场景;所谓解码网络实际上是状态网络,语音识别过程实际上就是在状态网络中搜索一条与语音最匹配的路径,这个过程称为解码过程。

由此可知,语音识别的核心是如何通过在解码网络搜索语音信号的解码路径,输出最佳解码路径中串联的节点作为语音识别的结果。因此解码方法直接影响语音识别的效率和精度。目前端到端语音识别技术中的解码方法采用的是一种称为beamsearchdecoder(集束搜索解码)的技术,beamsearchdecoder也常应用在ocr、文本翻译、语音识别等算法应用中。这种解码方法对每一路待解码的音频,控制一个大小为b的解码假设集合(解码假设集合中的每一条解码假设包括从最初到当前步骤的按照顺序的输出词序列)。每一次前向的过程,对每一个假设集合的输出进行一个全量词表大小v上的集束扩张,计算出一个总大小为b*v的得分矩阵,记录了所有假设集合在词表v上的log概率分布。根据这个概率分布矩阵,和已有的每一个解码假设集合上的得分,本申请中称为scores(本申请中,因为有b个解码假设,所以scores是一个维数为b的向量)。将当前的scores和大小为b*v的矩阵的对应行加起来,形成一个b*v的新的得分矩阵。对这个得分矩阵中的元素进行按大小排序,找出得分最高的新的b个元素,记录这b个元素的信息,主要信息包括:1.每个元素对应于哪一个解码假设集合,也就是b个集合中的第几个;2.每个元素对应于词表v中的哪个词。根据这两个信息,可以更新已有的b个解码假设集合。主要的更新包括:根据新的b个元素来自于哪个解码假设集合和它对应的新的信息;更新解码假设,并将其添加到解码假设集合的对应位置中,直到完成所有b个更新。重复上述的更新过程,直到解码过程走到最后一帧,则将对应的解码假设集合放入一个最终(final)的解码路径集合中,该集合的元素是每个解码假设的解码路径。解码路径的元素包括得分、集束和解码假设。如果最终final解码路径集合中的元素达到事先设定的个数,则停止解码过程,输出最终的解码结果。可以对基于神经网络的端到端语音识别系统进行很好地解码,输出对应的语音识别结果。但是其主要问题在于难以进行很方便的领域定制和领域扩充,解码仅仅限制在神经网络训练语言模型的过程中已经包含的语音领域。对于训练没包含的语音领域,语音识别的解码效果则会相对减弱,即对新的或定制的领域语音的识别中鲁棒性较差。例如,用生活场景语料训练的语言模型用在专业工程场景时语言识别率就会较差。现有的解码方法如果要在新的领域提升语言模型性能,则需要收集新领域的语音数据,并且重新开始训练端到端神经网路语言模型,这使得对于一些要求快速定制的语言识别内容的支持效果很低,使用目前的解码方法不能满足语音识别中的实际应用需求。由此可以了解现有技术中的存在局限性,不利于语音识别技术的进一步优化和推广应用。



技术实现要素:

本发明是为解决上述现有技术的全部或部分问题,本发明一方面提供了一种支持领域定制语言模型的解码方法,用于端到端语音识别,能够使得端到端的语言模型快速适应到新的领域。本发明的另外一个方面提供了使用所述解码方法的解码装置,能够实现本发明的解码方法,用于端到端语言识别系统中。

基于rnnt的端到端神经网络一般由transcriptionencoder,prediction(decoder)以及joint神经网络组成。本发明中rnnt端到端神经网络结构采取卷积以及transformer混合的网络结构。如图1所示,本发明中采用基于卷积和transformer的rnnt架构,transcription网络由三个基本模块堆叠而成,其中每个模块由三层时延神经网络(tdnn)及一层transformer组成。prediction网络同样包含三个基本模块,每个模块包含一层一维因果卷积及一个transformer层。在本申请中涉及的名词以及相关技术原理所有解释或定义仅是进行示例性而非限定性说明。对本发明进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。

wfst(weightedfinite-statetransducer),即加权有限状态转换机用于大规模的语音识别,wfst定义了一个二元关系,第一个序列是输入标签,第二个序列是输出标签。相同的输入会有不同的输出路径,因此每一个序列对用权重来表示。wfst是一种抽象的数学结构,描述的是一个输入序列和输出序列的序列映射关系:wfst接收一个输入序列,通过内部的状态跳转得到一个输出序列和对应的跳转代价cost。wfst使得序列与序列的映射关系可以用一种统一的数学语言来描述,从而可以通过wfst定义的各种数学操作来组合不同的wfst,描述各种复杂的序列映射关系。语音识别中用到的wfst操作主要有compose复合操作,还有一些优化操作:determinize、minimize及weightpush等。wfst技术是语音识别技术里面习知的技术,可以通过openfst工具和kaldi工具直接生成出来,在此不再展开叙述。

语音帧:特征提取是将输入的样点序列转换成特征向量序列,一个特征向量用于表示一个语音片段,称为一个语音帧(frame)。

解码器(decoder)是语音识别系统的核心之一,其任务是对输入的信号,根据声学、语言模型及词典,寻找能够以最大概率输出该信号的词串。

知识源,即解码器(decoder)基于语音信号的特征序列解码得到识别结果时所需要的知识的来源,文中涉及的几种基于wfst表示的知识源,包括:发音词典,用l表示,输入符号:音素,输出符号:词;包含单词的集合及其发音;语言模型(lm,languagemodel),本文中使用g表示,输入符合和输出符号相同,是语言结构(包括词语、句子之间的规律,例如语法、词语常用搭配等)的知识表示,语言模型概率p(w)用于表示语音单元的序列w在一段语音信号中出现的先验概率。

解码网络(searchspace),也称为搜索空间,使用wfst融合的各种知识源编译成一个网络。解码就是在这个wfst构造的动态网络空间中,找到最优的输出字符序列。解码器的工作就是对于给定的语音输入搜索最优的路径。

本发明一方面提供的一种支持领域定制语言模型的解码方法,基于集束搜索解码,包括:步骤s1.生成第一解码网络,作为第一遍解码搜索网络,获得第一得分集合;通过定制领域的语言模型生成第二解码网络,作为语言模型得分查询网络获得第二得分集合;所述第一得分集合的元素为第一得分,第二得分集合的元素为第二得分;步骤s2.扩张集束同时对定制领域的语言模型重新打分,包括迭代进行:取当前语音帧对应的编码器扩张矩阵的子矩阵与解码器输出矩阵,将其拼接后的矩阵输入到输出层做transducer前向计算,生成第一得分矩阵;将第一得分集合、第二得分集合与所述第一得分矩阵对应位置相加得到第二得分矩阵;基于第二得分矩阵,扩张集束放入解码假设集合;更新第一得分和第二得分。步骤s3.判断最终解码假设集合里面是否已经有足够的解码假设;判断为是,则输出所有解码假设;判断为否,则返回步骤s2后继续进行直至有足够的解码假设。

一般情况中,在步骤s2之前初始化语音信号,包括:提取输入的语音序列的特征,将语音序列的帧数记为num_frames,每一个语音帧的维数记为dim_feat,以所述帧数和维数为元素得到语音特征矩阵;

将所述语音特征矩阵输入到编码器中,经编码得到矩阵[num_frames,enc_dim],将其扩张为[b,num_frames,enc_dim]的编码器扩张矩阵,其中b代表整个集束的大小;预设字表的大小记为v。

所述初始化语音信号还包括:初始化解码的b个字的集合;每个字代表句子初始符号,并得到每个字的大小为向量表示;输入解码器,初始化解码器输出矩阵。

所述第一得分集合及第二得分集合是维数为b的向量。所述第一得分矩阵和所述第二得分矩阵是大小为[b,v]的矩阵。

步骤s2开始时初始化解码环境,包括:记录当前每一个集束解码对应时刻的大小为b的集合t_idx,每个元素t_idx_i为第i个集束对应的当前语音帧对应的时间戳;初始化第一得分集合,实施例中记为{score_1,score_2,...,score_b},大小为b;初始化第二得分集合,实施例中记为lm_scores{lm_score_1,lm_score_2,...,lm_score_b},大小为b;记录当前每一个集束解码对应的第一解码网络与第二解码网络的笛卡尔乘积状态的集合,记为笛卡尔积得分对集合{cartesian_1,cartesian_2,...,cartesian_b},大小是b,其中的元素是对应第一解码网络与第二解码网络的状态的笛卡尔积对以及相应跳转代价的集合,记为(<lstate,lmstate>,cost),包括笛卡尔积对<lstate,lmstate>和跳转代价cost。文中“i”表示初始值到b之间的任意一个数。

t_idx_i的初始值设为1。

每个第一得分初始值均设为0;每个第二得分初始值均设为0;

第一解码网络的状态lstate初始值设为startl,第二解码网络的状态lmstate初始值设为startlm,start表示相对应的第一解码网络、第二解码网络的初始状态;cost初始值设为0。

步骤s2中“拼接后的矩阵”是保持b不变,将编码器扩张矩阵的子矩阵与所述解码器输出矩阵的其它元素进行拼接操作得到的矩阵。

所述初始化解码环境还包括:选取初始t_idx位置对应的编码器扩张矩阵中的子矩阵和对应的解码器输出矩阵,拼接起来得到的矩阵输入输出层生成初始的第一得分矩阵。

所述步骤s2中,从t_idx_i的初始值开始到b遍历i进行迭代操作。

作为进一步的改进,当t_idx_i等于num_frames,将当前集束的解码的第一得分和第二得分都置为负无穷大。将当前集束的解码的第一得分和第二得分都置为负无穷大。置为负无穷大能够保证当前集束无法再进行下一步扩张。

步骤s2中“基于第二得分矩阵”是指将第二得分矩阵中的元素按大小排序,获取得分最高的b个有效得分值;t_idx_i的初始值开始到b遍历i,记录每个有效得分值对应的字,记为idx_i,以及idx_i来自于哪一个集束;判断idx_i对应的是否是空字符,根据判断结果扩张集束。

如果idx_i对应不是空字符,则先进行第一过程:更新当前集束对应的笛卡尔积得分对集合;更新每个集束的第二得分为更新后的笛卡尔积得分对集合中新的cost中得分最大的那一个得分最大值;用idx_i更新解码器输出矩阵的第i行矩阵;之后进行第二过程:将当前集束的第一得分,与当前第i个有效得分值对应的第一得分矩阵的相应元素相加的结果作为更新的第一得分;如果idx_i对应的是空字符,则将t_idx_i=t_idx_i 1即对应的语音帧增加到下一个位置,并以当前集束对应的笛卡尔积得分对集合直接作为更新的笛卡尔积得分对集合,以当前集束的第二得分直接作为更新的第二得分;之后直接进行所述第二过程。

所述第一过程中,确认每个集束对应的笛卡尔积得分对集合中第一解码网络的状态lstate是第一解码网络的最终状态。最终状态保证整个词已经输出出来,否则的话词还没有输出完毕。

所述第一过程中更新当前集束对应的笛卡尔积得分对集合包括在所有的笛卡尔积对及相应跳转代价的集合都完成更新之前,遍历i进行:第一步:从当前集束对应状态的笛卡尔积得分对集合中找到所有的笛卡尔积对及相应跳转代价的集合,并输入当前字符idx_i;第二步:判断当前状态lstate是否接收idx_i,并跳转到状态lstate_j(1<=j<=m);如果判断为否,没有对应状态,即m为0,则跳过当前的(<lstate,lmstate>,cost)返回到第一步;如果判断为是,进行继续判断:如果从当前状态lstate到lstate_j跳转状态的第一解码网络中的边输出一个非空的词w,则找到第二解码网络的状态lmstate,并接收w,得到新的状态lmstate_j,更新cost为cost加上语言模型从状态lmstate跳转到状态lmstate_j时增加的跳转代价delta,即cost’=cost δ;用新的(<lstate_j,lmstate_j>,cost’)替换原来的(<lstate,lmstate>,cost)更新当前集束对应状态的笛卡尔积得分对集合;如果从lstate到lstate_j的边没有输出非空词,则用新的(<lstate_j,lmstate>,cost)替换原来的(<lstate,lmstate>,cost)更新当前集束beamb_i对应状态的笛卡尔积得分对集合。

更新t_idx集合,当t_idx_i等于num_frames则把当前集束输出到最终的解码假设集合中。

所述第一解码网络是解码器根据词到字的字典生成的wfst网络。是词语(word)到单个字(character)的一个映射,具体来说就是将一个词语拆分为字的序列。

本发明的另一方面提供了一种支持领域定制语言模型的解码装置,包括相互通信连接输入设备和解码器;所述输入设备用于获取语音信号;所述解码器包括处理器和存储器,所述存储器存储有计算机程序;所述处理器包括提取模块、解码网络模块和解码模块;所述提取模块用于提取语音序列的特征;所述解码网络模块用于基于知识源生成解码网络;所述解码模块用于在解码网络中搜索最优路径;所述处理器根据所述计算机程序指令执行本发明的解码方法。

与现有技术相比,本发明主要的有益效果包括:

1、本发明的一种支持领域定制语言模型的解码方法,通过引入定制领域的语言模型,并将第二得分结合到集束扩张的过程中,通过基于第二得分矩阵对定制领域的语言模型重新打分,解决了传统端到端识别在新定制领域的快速识别问题,可以使得端到端的语音识别快速扩张到新的领域,提高端到端语音识别的效果和扩展性,极大提升端到端语音识别的运用范围,能够针对客户需求快速订制快速扩展,提高用户的使用感受。

2、本发明的一种支持领域定制语言模型的解码装置,因采用本发明的支持领域定制语言模型的解码方法,而具有相应优势;仅需有限的资源配置,利于语音识别系统的进一步推广。

附图说明

图1为本发明中采用基于卷积和transformer的rnnt架构示意图。

图2为本发明实施例一的支持领域定制语言模型的解码方法的示意图。

图3为本发明实施例一的支持领域定制语言模型的解码装置示意图。

图4为本发明实施例二的整体过程示意图。

图5为本发明实施例三的涉及第一过程的步骤示意图。

具体实施方式

下面将对本发明具体实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解。附图中,相同结构或功能的部分利用相同的附图标记来标记,出于显示清楚的原因必要时并不是所有示出的部分在全部附图中用所属的附图标记来标记。本发明为了便于叙述清楚而采用的一些常用的英文名词或字母只是用于示例性指代而非限定性解释或特定用法,不应以其可能的中文翻译或具体字母来限定本发明的保护范围。

在下述实施例中采用特定次序描绘了实施例的操作,这些次序的描述是为了更好的理解实施例中的细节以全面了解本发明,但这些次序的描述并不一定与本发明的解码方法一一对应,也不能以此限定本发明的范围。

需要说明的是,附图中的流程图和框图,图示出按照本发明实施例的方法可能实现的操作过程。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以并不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以穿插的执行,依所涉及的步骤要实现的目的而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与人工操作结合来实现。

实施例一

本发明实施例一中,端到端语音识别编码器encoder和解码器decoder的一个样例,如图1所示,是采用基于卷积和transformer的rnnt架构。本实施例中,支持领域定制语言模型的解码方法,基于集束搜索解码,如图2所示,包括:步骤s1.生成第一解码网络,作为第一遍解码搜索网络,获得第一得分集合;通过定制领域的语言模型生成第二解码网络,作为语言模型得分查询网络获得第二得分集合;步骤s2.更新集束同时对定制领域的语言模型重新打分,包括迭代进行如下操作:取当前语音帧对应的编码器扩张矩阵的子矩阵与解码器输出矩阵,将其拼接后的矩阵输入到输出层做transducer前向计算,生成第一得分矩阵;将第一得分集合、第二得分集合与所述第一得分矩阵对应位置相加得到第二得分矩阵;基于第二得分矩阵,扩张集束放入解码假设集合;更新第一得分和第二得分。步骤s3.判断最终解码假设集合里面是否已经有足够的解码假设;判断为是,则输出所有解码假设;判断为否,则返回步骤s2后继续进行。

如图3所示,本实施例的解码装置包括相互通信连接输入设备1和解码器2;本实施例中通过输入设备1获取语音序列;解码器2包括处理器21和存储器22,存储器22存储有计算机程序;处理器包括提取模块、解码网络模块和解码模块;提取模块用于语音序列的特征;解码网络模块用于基于知识源生成解码网络;解码模块用于在解码网络中搜索最优路径。本实施例中通过处理器1运行所述计算机程序指令执行本发明的解码方法。应当了解上述说明是配合附图为了便于理解而叙述,实际应用中,解码器2可以是一台设备,也可以布局在不同空间的相互通信连接的多台设备构成的系统;同样所述的功能模块例如提取模块、解码网络模块和解码模块可以设置在一台设备的一个或多个存储器中,也可以设置在系统中的几台设备中,并不限定。本实施例中通过处理器21运行存储在存储器22上的计算机程序来实现本发明的解码方法,在实际应用中本发明的解码方法可以人工和计算机程序相配合来实现或者通过多个不同的计算机程序实现,也可以作为语音识别软件的一个子程序配合语音识别系统的其它功能一同实现。所述输出结果在本实施例中以计算机代码的形式存储在存储器22中,在实际应用中所述输出结果也可以是文本形式显示在电脑显示器或其它显示设备中,也可以是以文本文件的形式记录的,在此并不限定。

实施例二

实施例二与实施例一不同的是在步骤s2之前还包括初始化语音信号,得到编码器扩张矩阵及解码器输出矩阵。如图4所示,本实施例中,首先,向输入设备输入的语音信号,通过前述的提取模块提取出这个语音序列的特征,语音序列的帧数是num_frames,每一个语音帧的维数是dim_feat,以其为元素得到语音特征矩阵。将此语音矩阵输入到端到端的语音识别系统的encoder中,得到一个的经过变换的矩阵[num_frames,enc_dim],并且扩张为[b,num_frames,enc_dim]的编码器encoder扩张矩阵。初始化解码的b个字的集合,其中b代表整个集束beam的大小。每个字记为<s>,代表句子初始符号,并得到每一个<s>的大小为向量表示,输入解码器decoder,得到一个大小为[b,dec_dim]的解码器decoder输出矩阵,作为初始解码器输出矩阵。预设字表的大小为v。

本实施例中通过解码网络模块生成的第一解码网络是通过词到字的字典生成出来的wfst网络,作为第一遍的解码搜索网络,记为l.fst。在wfst框架里,语音识别问题被当作把输入语音信号转换成词序列的一个转换(transduction)过程。语音识别系统中的每一个模型都被解释为一个wfst,而模型的得分的取反(-log概率)被作为wfst的weight。本实施例中wfst框架是通过openfst工具或kaldi工具直接生成出来,这里不再展开叙述。其中的知识源l的形式如下示意:

语音识别语音识别

eof

其中第一个字段是词,这个词和语言模型的词表是一一对应关系,后面的字段是字,是一个词到字的映射关系。

本实施例中,步骤s2开始时初始化解码环境,包括需要解码的集束的大小b。本实施例中在集束解码搜索中,进行维比特剪枝搜索(viterbeamsearch),解码器在解码网络中搜索最佳路径时,在扩展路径的每个状态时,仅保留集束宽度数量的节点,从而可以去除不必要的路径,由于不需要全路径搜索因此内存消耗得以减少,解码效率得以提升。

本实施例中初始化解码环境具体是记录当前每一个集束解码对应时刻的大小为b的集合t_idx,每个元素t_idx_i为第i个集束对应的当前语音帧对应的时间戳,初始值为1;初始化第一得分集合记为scores,{score_1,score_2,...,score_b},大小为b,集合中每一个得分初始化为0;初始的语言模型得分集合,即第二得分集合,记为lm_scores,{lm_score_1,lm_score_2,...,lm_score_b},大小为b,集合中每一个得分初始化为0。选取初始t_idx位置对应的encoder扩张矩阵中的子矩阵[b,enc_dim]矩阵和decoder输出矩阵[b,dec_dim]矩阵,保持b不变,拼接起来得到一个[b,enc_dim dec_dim]的矩阵,输入到输出层output,得到一个大小为[b,v]的得分矩阵,记为t-matrix,即将第一得分矩阵初始化。所述第一得分集合及第二得分集合是维数为b的向量。下文中以“i”表示初始值到b之间的任意一个数。

记录当前每一个集束解码对应的第一解码网络与第二解码网络的笛卡尔乘积状态的集合,记为{cartesian_1,cartesian_2,...,cartesian_b},集合大小是b,其中集合中的每个元素cartesian_i也是一个集合,以下称为笛卡尔积得分对集合,是对应第一解码网络与第二解码网络的状态的笛卡尔积对以及相应跳转代价的集合,记为(<lstate,lmstate>,cost),包括笛卡尔积对<lstate,lmstate>和跳转代价cost;其中,第一解码网络的状态lstate初始值为startl,第二解码网络的状态lmstate初始值为startlm,start表示相对应的第一解码网络、第二解码网络的初始状态;cost初始化为0。即初始化cartesian_i={(<lstate=startl,lmstate=startlm>,0)},其中start表示相对应的fst网络的初始状态。

本实施例中生成的第二解码网络是根据定制领域的语言模型生成的g网络,记为g.fst。

本实施例中,所述步骤s2中,从t_idx_i的初始值开始到b遍历i进行迭代操作。

从初始t_idx位置开始,根据t_idx对应的值,选取[b,num_frames,enc_dim]的encoder扩张矩阵的对应帧位置的子矩阵。即如果当前集束beami对应t_idx_i,则选取[i,t_idx_i,enc_dim]这个位置的子矩阵,直到完成b个子矩阵的选取,得到一个大小为[b,enc_dim]的encoder子矩阵。其中如果idx_i对应的不是空字符,则更新对应的decoder输出,如果idx_i对应的是空字符,则将t_idx_i=t_idx_i 1即对应的帧增加到下一个位置,直到b个输出完成更新,得到一个[b,dec_dim]的decoder输出矩阵。将这两个矩阵拼接起来,得到一个[b,enc_dim dec_dim]的矩阵,输入到最终的输出层,得到一个大小为[b,v]的得分矩阵的第一得分矩阵t-matrix。如此完成1到b的遍历。

本实施例中,步骤s2中“基于第二得分矩阵”是指将第二得分矩阵中的元素按大小排序,获取得分最高的b个有效得分值,即得分值最高的b个得分;t_idx_i的初始值开始到b遍历i,记录每个有效得分值对应的字,记为idx_i,以及idx_i来自于哪一个集束;判断idx_i对应的是否是空字符,根据判断结果扩张集束。本实施例中,将第一得分集合scores和第二得分集合lm_scores以及第一得分矩阵t-matrix对应位置相加。partial_scores=scores lm_scores t-matrix,为一个大小为[b,v]的得分矩阵,即所述第二得分矩阵。将第二得分矩阵的元素按大小排序,得到得分最好的b个得分值,这b个得分值为所述有效得分值。记录这b个按大小排序的有效得分以及来自于哪一个集束beam和对应的字的idx(字的idx是在字表中的对应位置,字表有v个字,0<=idx<=v-1)。得到b个元组(score_1,b_1,idx_1),……,(score_b,b_b,idx_b)。例如,[1.2,2.2,3.2,3.5;1.8,2.3,,3.3,4.5;1.9,2.7,3.6,4.9;]得分最高的是4.9、4.5、3.6,分别来自第3,2,3个集束beam,它们的列坐标从0开始数分别是3、3、2。

对于每个idx_i,从1到b遍历i进行扩张。之后进行第二过程。进行第二过程包括:将当前集束的第一得分,记为score_i,将score_i与当前第i个有效得分值对应的第一得分矩阵的相应元素相加的结果作为更新的score_i。

完成1到b遍历i的上述迭代过程后,当t_idx_i等于num_frames则把当前集束输出到最终的解码假设集合中,即把当前集束beam的解码结果输出到最终的输出结果中完成了最后一个语音帧的解码。本实施例较好的做法中,当t_idx_i等于num_frames,则将当前集束的解码的第一得分和第二得分都置为负无穷大。置为负无穷大能够保证当前集束无法再进行下一步扩张。

实施例三

实施例三是在实施例二的基础上,在集束扩张过程中,如图5所示,首先判断判断idx_i对应的是否是空字符,根据判断结果扩张集束。如果idx_i对应的是空字符,则将t_idx_i=t_idx_i 1即对应的语音帧增加到下一个位置,并以当前集束对应的笛卡尔积得分对集合直接作为更新的笛卡尔积得分对集合,以当前集束的第二得分直接作为更新的第二得分;之后直接进行所述第二过程。如果idx_i对应不是空字符,则先进行第一过程。

以下具体展开叙述第一过程,包括第一步:从当前集束beamb_i对应状态的笛卡尔积得分对集合cartesian_{b_i}中找到所有的笛卡尔积对{lstate_1,lstate_2,……,lstate_m}以及相应跳转代价的集合,并输入当前字符idx_i。判断是否cartesian_{b_i}中的所有(<lstate,lmstate>,cost)完成更新。根据判断结果分别进行两种操作。第一种,判断结果是:cartesian_{b_i}中的不是所有(<lstate,lmstate>,cost)都完成更新,则进行第二步操作:判断当前状态lstate是否接收idx_i,并跳转到状态lstate_j(1<=j<=m)。如果判断为否,没有对应状态,即m为0,则跳过当前的(<lstate,lmstate>,cost)返回到第一步;如果判断为是,进行继续判断:如果从当前状态lstate到lstate_j跳转状态的l.fst中的边输出一个非空的词w,则找到g.fst的状态lmstate,并接收w,得到新的状态lmstate_j,更新cost为cost加上语言模型从状态lmstate跳转到状态lmstate_j时增加的跳转代价delta,即cost’=cost δ。用新的(<lstate_j,lmstate_j>,cost’)替换原来的(<lstate,lmstate>,cost)更新当前集束beamb_i对应状态的笛卡尔积得分对集合,回到第一步。如果从lstate到lstate_j的边没有输出非空词,则用新的(<lstate_j,lmstate>,cost)替换原来的(<lstate,lmstate>,cost)更新当前集束beamb_i对应状态的笛卡尔积得分对集合,回到第一步。第二种:判断结果是:cartesian_{b_i}中的所有(<lstate,lmstate>,cost)都完成了更新,则直接进行第三步。

第三步:更新每个集束的第二得分lmscorei为newcartesian_i中新的cost中得分最大的那一个得分最大值。确认每个集束对应的笛卡尔积得分对集合中第一解码网络的状态lstate是第一解码网络的最终状态。最终状态保证整个词已经输出出来,否则的话词还没有输出完毕。用idx_i更新[b,dec_dim]的第i行矩阵。

本技术领域的普通技术人员可以理解实现上述实施例方法的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于存储器中,该程序在执行时,包括方法实施例的步骤之一或其组合。在本发明各个实施例中的各功能模块可以集成在一个处理器中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个处理器中。上述功能模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个存储器中。

本发明的存储器可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。

以上对本发明进行了详细介绍,本文中应用了具体的示例对本发明的结构及工作原理进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及核心思想,并不能因实施例中的细节而限定本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求保护的范围内。

再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文章

  • 日榜
  • 周榜
  • 月榜