专利名称:使用词汇树的识别系统的制作方法
技术领域:
本发明总体涉及语音识别系统。更具体地说,本发明涉及在独立单词和连续语音识别应用中的动态编程模式序列识别技术。
背景技术:
当今,动态编程技术通常用于独立和连续语音识别的时间延迟问题,以及连续语音(连续单词)识别中的最优单词序列搜索问题。可以在隐藏马尔可夫模型(HMM)范畴使用的一个众所周知的动态编程识别的类型就是Viterbi算法。动态编程技术也可以用于HMM模型以外很多其它类型的语音模型,例如神经网络模型。
经典Viterbi算法是一个归纳算法,该算法在每一个时刻(每一帧)为n状态的每一个保存最可能的状态序列,作为期望观察序列0的中间状态。这样,算法最终发现n状态的每一个状态的最佳路径,作为期望观察序列的最终状态。除此以外,算法选择最大可能性的路径。经典Viterbi算法处理帧,通过帧寻找说话声音和先前的训练模型之间的最佳的匹配。
以隐藏马尔可夫模型识别器为例,由模型(HMM)产生的观察序列(测试人的话音)的概率是通过所有可能的观察序列的每一个可能路径的概率之和。计算每一个路径的概率,并识别出最可能的路径。Viterbi算法计算最大可能性的路径,并记住该路径经过的状态。
经典Viterbi算法计算量很大。它用烦琐的链表或哈希表来保存所有有效假设或标记的列表。大量的计算花费在保存和引用这些列表或表格条目的计帐操作上。
发明内容
因为经典Viterbi算法计算繁杂,它显著地降低了语音识别器的表观速度。这对于需要时间上迅速响应的实时系统尤其是一个问题。现在的解决方案简单的利用了性能更好的处理器—一种不宜在一些内嵌式系统和小的消费产品,例如蜂窝电话和家庭娱乐设备中使用的解决方案。
本发明试图改进经典Viterbi算法,因此可以用在处理能力有限的应用中。我们的实验显示该项新技术将识别速度至少提高了3倍。本发明采用了唯一的词汇树结构,相应的查找算法极大地提高了性能。尽管系统适用于内嵌式应用和消费产品,它也可用于大型高速系统中以获得更高的性能改进。算法可以用于独立单词识别,或作为连续语音识别的第一次快速匹配。它也可以扩展到交叉词建模。
为了更完整地理解本发明,将参考下面的说明和附图,说明它的目标和优点。
图1是语音识别器的框图,示例了依据本发明构成的解码器如何用于实现基于模型的识别器;图2给出了本发明采用的词汇树的最优数据结构;图3是用于表示词汇树每一个节点的数据结构图;图4a是时间线图,示例了在连续语音应用中采用本发明的解码器执行的基本任务;图4b是树图,显示了活动包络是如何被遍历的。
图5是用于理解算法动态性能的树图序列;图6是算法流程图。
具体实施例方式
背景图1示例了一个语音识别系统的实例。系统工作在两个阶段训练阶段,在此期间系统学习代表构成所用词表的不同语音(即短语、词、语调)的参考模式;以及,识别阶段,在此期间借助参考集合识别未知输入模式。在训练阶段,从语音样本中学习每个参考,并以通过某种求平均值法(模板匹配系统)获得模板的形式或表示模式统计特征(类似于在随机系统中)的模型的形式保存参考。最常用的一个随机系统利用了采用隐藏马尔可夫模型(HMM)的统计建模方法。
如图1所示,语音识别器实例在识别过程执行3个步骤。如图框10所示,首先对输入的语音进行语音分析和特征提取。这一步的重点是提取信号分析得到的参数集。下一步,如图框12所示,涉及模式分类。在这一步,执行经典的Viterbi算法。在这一步计算输入语音和每一个参考模式之间的相似度。该过程定义了特征矢量之间的局部距离,进一步涉及两个语音模式排队的方法,它们持续时间和语速不同。模式分类步骤采用包含训练阶段产生的信息的模板或模型字典14。最后一步是判决步骤16。在这一步,未知模式被标注为“最接近的”参考模式。通常,决策基于的规则考虑了相似度测量的结果。
因为现在大量使用的识别器使用了隐藏马尔可夫模型作为语音模型,在图1的20给出了隐藏马尔可夫模型的简单例子。但要认识到,本发明的原理不限于使用隐藏马尔可夫模型的识别器。图1示例了一个3态隐藏马尔可夫模型,状态由s1,s2,s3表示。当然,工作实施中可能采用的状态的数目不同,这里所选择的状态的数目仅仅是示例。虽然本发明不局限于LR(左到右)HMM,但是该算法提供了此类模型的最佳结果。因此图1中的HMM是LRHMM,状态迁移器是从左到右,没有跳跃状态。
隐藏马尔可夫模型涉及一个概率的集合,一些和状态本身相关,其它的和从该状态到另一个状态的迁移或自身的迁移有关。图1中,状态迁移用箭头表示。注意一些箭头表示了从一个状态到一个不同状态的迁移,其它的箭头表示了从一个状态到自身的迁移。
将由语音模型表示的每个短语、词或语调有自己的模型,包括和每一个迁移和每一个状态相关的概率值。因此,每一个自环有一个相关的迁移概率,如图框22所示,每一个到另一个状态的环路的相关迁移概率是24。而且每一个状态也都有与其相关的概率信息。
因为与每一个状态相关的概率值比一个单个值所能表示的更复杂,一些系统用高斯分布表示和每一个状态相关的概率。有时,采用多个分布混合的方式来组成高斯混合密度数据。这样的数据在图框26图示,用混合指数指针28指示。因此每一个状态对应一个混合指数指针,反过来,为该状态指示了高斯混合密度信息。当然,需要重复指出的是,图1中语音识别器和隐藏马尔可夫模型结构仅仅表示了使用本发明的一种识别器的例子。概括而言,发明可应用于任何在模式分类中执行动态编程的系统。像前面指出的,LR HMM得到了最佳的HMM结果。因此,本发明例如可以用来代替经典Viterbi算法。
关于语音识别系统的基本结构和隐藏马尔可夫建模的更多信息,请参见Junqua,Jean-Claude和Haton,Jean-Paul在Kluwer Academic Publishers,1996上发表的Robustness in Automatic Speech Recognition,Fundamentals andApplications(自动语音识别中的鲁棒性,基础与应用)。
最优数据结构本发明将用于大大改进模式分类步骤12执行的方式。本发明采用表示模板或模型词典14的唯一的数据结构,结合遍历数据结构以发现最佳匹配可能的唯一的算法。在这一部分将描述最佳数据结构,下一部分描述最佳算法。最佳数据结构将模板或模型词典14表示为被平面化为链表的词汇树。图2给出了拓扑图。图2更具体地显示了保存由字母组成的独立单词的词汇树30的例子。后面将描述的算法以时间同步的方式遍历这个词汇树,在每一个活动节点采用动态编程等式。算法从节点到节点地遍历该树,测试每一个节点的字母是否和在特征提取步骤10(图1)中识别的字母相匹配。
考虑图2词汇树的例子,要意识到示例中采用了由拼出词的字母组成的词,这只是为了满足说明的需要。在语音识别系统中,在步骤10语音分析期间提取的特征可能是特征或其相应的声音单元,例如音素、音节等。换句话,在每一个节点测试单独字母以识别这些字母拼出的单词并非是本发明的唯一应用。每一个节点可以采用任意合适的单元。例如在连续语音识别器,系统在每一个节点表示一个完整的单词,词汇树包含指向由这些单词组成的整个短语或句子的指针。
参考图2,注意词汇树30由平面化的链表32表示,包括多个要识别的具体特征,不仅识别链表的拓扑图,还识别为了映射对应树的遍历,表所遍历的路由。更具体地说,构建链表使得树中位于同一个子代的所有节点在表中表示为连续的条目。因此,链表开始于第一个结构或节点以表示树的根节点。树根节点结构下面紧接着的是下一代子节点的结构,对应这个例子就是树的k节点和h节点。沿链表继续向下,本例子的下两个节点表示第二层的子节点,即树的节点aa和aa。下面3个节点表示第三层孙节点,节点r,r,和l。最后的四个节点表示树的最后一层,即节点d,d,t和t。
链表的节点保存的不仅仅是对应于树中每一个节点的字母或声音单元。如果要遍历树,每一个节点还包括至少一个前向指针,指向下一个要遍历的节点。因此,为了说明如何在遍历树时从节点k遍历到节点aa,最终拼写对应于单词CARD的声音单元,第一个子节点k包含指向孙节点aa的指针。每一个节点的结构还包括一个标志,图2中表示为右下角的小方块中。设置这个标志,以识别该节点是否表示其父节点的最后一个子节点。该信息用来进一步描述以平面链表形式表示的树的拓扑结构。
链表的实际表示采取图3的数据结构的形式。图3的结构说明了如何为使用隐藏马尔可夫模型的识别器组织平面链表节点。节点也可以容易地设置成存储其它类型的参数。故,图3的例子不应该被理解成为本发明范畴的一个限制。除了隐藏马尔可夫识别器外,该结构还可以用来存储对应其他识别器的参数和/或模板信息。
参考图3,每一个节点象下面一样存储树的拓扑结构。它包括一个数据元素50,保存从该节点到其下一个子节点的指针。这些指针和图2中的指针对应,当遍历树时使用。节点的数据结构还包括一个布尔标志52,其设置与否表示该节点是否是父节点的最后一个子节点。这个算法和这些数据元素是如何起作用的将在下面描述。
算法最优的算法以时间同步的方式遍历上述的数据结构。即,算法与在特征提取过程处理时(图1的步骤10)产生的观察数据同步地遍历节点。在典型的识别器中,输入的语音在时间上分段或分成帧。最优的算法和这些帧同步工作。
从节点到节点的遍历由树的拓扑结构和叫做活动节点包络的第二个结构来支配。活动节点是代表当前最可能匹配假设的那些节点。活动节点包络是这些当前活动节点的链表。活动节点包络表示了一个动态结构。随着算法的进行,节点可以加入或离开活动节点列表。如果节点的概率分值大于定向搜索的门限,节点将加入活动列表,如果先前活动节点的分值小于门限,将从活动列表删除。为了计算活动节点的概率分值,算法对每一个活动节点采用下面的动态编程等式Sk(t)=max{sφ(t-1)+aφ,k}+dk(t)其中Sk(t)是在时间t的分值,φ是父节点。
为了理解算法是如何遍历词汇树的,将作一些定义。参考词汇树,定义节点的深度为节点左侧的状态的数目。参见图4a。数越大,节点深度越大。定义词汇树的一列为相同深度的节点的集合。对于每一列,定义节点上的任意次序关系。活动包络或活动节点列表是活动的、次序给定的节点的列表,该次序给出的关系是,如果节点n的父节点是n*,k节点的父节点是k*,k*<n*意味着k<n。词汇树中某一深度的所有节点可以以任意的次序处理,我们选择了最大化内存缓存性能的遍历序列。换句话,当处理器从内存加载了某一地址,那么板上的缓存机制就会加载紧跟所加载的内存地址的一块连续地址。此后,如果需要访问任一个这些后续地址,处理器可以从缓存中获得,而不是从内存,这样减少了相应的内存访问时间。本发明遍历词汇树,以便利用缓存的这个特点。编码词汇树,以便算法沿利用存储在缓存的信息的方向对词汇树进行遍历。
为了进一步说明,让图2中的节点在内存中以连续阵列排序。最扰实施例以内存堆增序顺序遍历节点。图4b图示了最优遍历路径。遍历从最大深度的活动节点开始,然后在一给定列中按增序进行。一旦遍历了列中所有的活动节点,路径转到前一列。
本最优算法按下述步骤处理1.从词汇树中最大深度的活动表开始。
2.让B是子列活动列表最小序号的节点。
3.按增序遍历活动表。
4.对当前节点k的每一个子节点c,5.如果B<c,增加B直到条件为假。
6.如果B=c,使用动态编程等式。
7.如果B>c,仅链接n之前的c。
8.减小深度,处理父列。
上述算法将语音分析模块的序列输出和其词汇树中的条目相比较,在每一个节点决定哪一个条目具有匹配输入的话音的最大的可能性。尽管它可能穷尽分析树的每一个节点,该强力方法是非常耗时、低效的。最优算法通过识别出当前最可能匹配输入语音的节点,在每一次连续叠代中动态减少了搜索空间。算法识别出这些节点作为下面的活动节点。在后续叠代中使用这些节点,并且仅仅使用这些节点。
在算法访问每一个节点时,计算每一个节点的概率分值。如果我们定义回路和输入概率为lk=ak,k和ik=ak*,k。在t+1时刻,分值sk(·)可以如下计算sk(t+1)=max{sk(t)+lk,sk*(t)+ik}+dk(t)。
注意,算法用t和t+1表示前向递归,而不是用t和t-1表示后向递归。最终的目标是只根据对子节点的认识(即从k*而不是从k)计算出分值,避免使用后向指针(即父节点的信息)。
算法定义拓扑分值rk(t)=sk(t)-dk(t)和部分拓扑分值r^(t)=sk(t)+l。注意部分拓扑分值等于k*不属于活动表时的拓扑分值。算法通过执行下述操作来遍历活动包络的每一个单元
1.计算分值sk←rk+dk(声匹配);2.遗留对于每一个节点c,rc←max{sk+ic,rc}。假设节点的分值字段保存部分分值r^。
3.自激活rk←r^k=rk+lk。现在分值字段保存部分拓扑分值,如果没有分值继承,这仍然是t+1时刻的拓扑分值。
如上面的步骤所示,每一个单元k在每一帧计算自身的拓扑值和声值。我们称该特性为自激活。每一个单元激活自身,然后是它所有的子节点。如果子节点已经自身激活,父单元的值将遗留给其子单元。如果算法在变量中保存sk和下一个活动节点,遗留和自激活将被转化。在这种情况,自激活后,立即从缓存释放来自节点的数据。注意,在遗留过程,节点直接访问它的子节点。通过构建上述的活动包络保证了这一点。
算法的动态特性和活动节点包络传播如上所述,活动节点包络是一个动态结构。活动节点随算法的进行而改变。当活动节点包络叠加在词汇树上时,随着算法在时间上的推移,传播活动节点包络。在图4a中图示了这一概念。
图4a给出了这样的例子,每一个节点表示一个词而不是字母。在前面的例子中,举例了独立单词识别器。树的每一个节点表示了字典中构成单词的一个字母或声音单元。但是,要重提的是本发明可以用于独立单词识别器和连续语音识别器。因此,图4a显示了在连续语音识别器中树结构的形状,其中每一个节点表示一个独立的单词,输出是句子或短语。检查图4a中的树70,可以看到,例如,如何正确的遍历树来构成短语“the quick brown fox”。
图4a显示了活动节点包络如何在时间上传播。时间线72显示了举例的树的下一个活动节点包络在第一个时刻a和后面的一个时刻b的样子,时刻a对应于发音“the quick brown fox”中紧接着语音分析步骤10(图1)分析完单词“the”的那个点,时刻b对应于处理单词“brown”的点。在a时刻,74图示了活动包络,对应于最可能匹配于已经在该点部分分析的声音的那些包络。在后面的时刻b,活动包络向外扩散,如76所示。在74和76的活动节点包络表示了两个不同的时间点(时刻a和时刻b)的活动节点。算法在这些活动节点上工作,用当前的活动节点定义下一次连续叠代的进入词汇树的入口。
如该例所示,接着的活动节点在根节点发展或传播,就象在水塘中落入一颗石子的水波的波动,产生了时间上向外传播的波。在独立单词识别器中,实际上,下面的活动节点的波前是按照这样一种水波的形式向外传播的。这是因为每一个节点只需用一次。然而,在更通用的情况中,例如在连续语音识别器中,节点会再次被访问,因此下面的活动节点的波前不必要总是远离根节点传播。为了理解为什么会这样,想象在连续语音识别器中说话的人可能会将一个单词说若干次。所以,语音“the quick brown quick brown fox”会造成下一个活动节点的波前暂时向根节点传播。
图5是最佳搜索算法的动态特性。更具体地,图5显示了词汇树在不同的时刻时刻=0,时刻=1...时刻=4时的子集。在基于帧的识别器中,这些不同的时刻对应于连续帧。算法在时刻=0从根节点开始,由活动入口点箭头100指示。在时刻=0,根节点是唯一的活动节点。然后,算法进行到识别根节点的子节点,这些节点在时刻=1时变成活动节点。算法采用活动包络遍历路径从一个活动节点访问到下一个节点。路径总是从最深的节点开始,即,从最远离根节点的节点。
在时刻=1,活动节点入口点由箭头100指示。然后按照箭头102和104的指示进行活动节点遍历路径。为了举例,采用了举例的概率分值,来显示独立的节点是如何变成活动节点的,然后是如何被门限搜索算法删除的。在时刻=1,假设根节点的概率分值是100(所有的值显示在图5的括号中)。进一步假设,其它的两个活动节点的概率分值分别为60,80。算法采用了利用门限尺寸的门限搜索技术,门限尺寸定义为在某一时间帧距最佳分值的最大偏差。为了举例,假设门限尺寸是30。门限搜索算法规定,如果节点的概率分值小于最高概率节点的概率分值减去门限尺寸,节点将从进一步处理的过程删除。换句话说,如果节点的概率分值小于最大概率分值减去30,在后续的操作中将跳过该节点。
在时刻=0,最大概率分值是与根节点相联系的概率分值,即概率是100。门限是100-20或70。注意,概率分值是60的节点落在门限以下,因此将被门限搜索算法删除。因此在时刻=2仅有两个活动节点存在,根节点和活动节点入口箭头100指示的节点。因为在每一个时间间隔都重新计算概率分值,将计算每一个活动节点的新值。假设,根节点的概率分值是160,另一个活动节点的概率分值是120。还要注意,在时刻=2,活动节点遍历路径从箭头100指示的地方进入,按箭头102指示的前进。
在时刻=2计算门限,算法确定门限是160-30=130。因为概率分值是120的节点低于门限值,它将在进一步操作中被删除。因此仅有根节点在门限删除过程中被保留。
在时刻=3,根节点继续活动,因而它的子节点也被激活。注意,在这种情况中,在时刻=2被门限搜索切除的最上层的子节点在时刻=3重新激活,因为它是活动的根节点的子节点。还要注意,活动节点入口点100识别出最深的节点,以及,剩余活动的节点箭头102和104显示了活动节点路径是如何被连接或定义的。在本例中,假设在时刻=3,根节点的概率分值是200,入口点节点的概率分值是220,剩余节点的概率分值是240。门限计算240-30=210,将导致根节点在进一步的处理中被去除,因为它的概率分值低于门限值。因此在时刻=4,根节点不再活动。但与最低节点相联系的子节点现在被激活了。入口点100移到最深的节点,恰好是先前最深节点的一个子节点。箭头102,104和106显示了活动节点路径是如何遍历的。与前面的情况相同,入口点总是位于最深的节点,遍历的进程使得总是首先遍历最深的节点,遍历路径在最深节点的父节点结束。
记住前面的例子,现在参考图6的流程图和附录1中的详细的伪码列表解释最佳算法。参考图6,最佳算法从步骤200开始,检查以确定是否当前活动节点列表的父节点必须从进一步的考虑中去除,或者由于分值低于门限值而被“淘汰”。接着,按照202的指示遍历活动节点列表。在步骤204计算声匹配并更新门限。接着在步骤206,算法执行从父节点到子节点的动态编程匹配,在步骤208更新连接,以便在时刻t+1可以遍历下面的活动节点列表。然后过程返回步骤200叠代。
图6流程图中的对应的步骤已经作为标题列表插入了附录1中的伪码中。附录2提供了产生词汇树所用的算法的伪码列表。
在连续语音识别中,处理器必须在声匹配计算、搜索算法本身和语言建模上花费计算时间。由于语言模型补罚的近期应用,必须减少搜索空间。因此,不再可能保存内嵌在词汇树中的假设。然而,如果使用单词内上下文关联模型,我们只需要静态词汇树的一个实例。而且,单字母组语言模型(LM)可以化为前因子。它们对超前的单字母组和双字母组语言模型有用。而且,词汇树中大量的节点将分享同样的LM超前分值。
附录I
<pre listing-type="program-listing">Foreach levelactive_level{ rho=active_level+1 k_prev=scratch_node ael=entry point of rho(the list at time t) for(k=entry point of active_level;k!=tree_end;k=k->next){Check if the parent node has to be beamed out if(r_k<Beam0){ r_k=partial score=-infinity if(k=entry point of active level) entry point of active level=k->next /*do not increment k_prev*/ }Follow active node list /*active node*/ k_prev->next=k; k_prev=k;Compute acoustic match and update the beam /*acoustic match*/ s_k=r_k+d_k /*self-activation*/ r_k=partial score=s_k+l_k beam=max(beam,r_k) /*bequeathal*/Dynamic programming step from parent to child for all children of kc{ r_c=max{r_c=partial score,s_k+i_c} entry point of rho=min(entry point of rho,c) B=max{B,r_c}Keep next_active_node list connected switch(c){ (c<ael) new_ael->next=c;new_ael=c; (c=ael) ael=ael->next;new_ael->next=c;new_ael=c; (c>ael) next=ael->next new_ael->next=ael ael=next while(ael<=c)ael=ael->next new_ael=c } } } new_ael->next=ael;}Beam0=beam-beam-width</pre>
附录2我们用下列算法生成树<pre listing-type="program-listing">leftC={{all transcriptions}} bin={{null}^{max_state}} do{ more=0; Foreach(root)in leftC { split rootforeach(subtran)in root{ prepend transcription at bin[subtran.getNextState()] if(bin not visited) insert bin into lateral list } collect bins foreach bin in lateral list {insert into right column unless end of wordmore=1 } serialize root into vectree }while(more); swap left and right columns}</pre>从前面可以看出,本发明提供了一个在语音识别系统中实现动态编程匹配的紧凑高效的数据结构和算法。该算法和数据结构在不同的动态编程和识别应用中可以代替经典的Viterbi算法。词汇树结构和活动节点遍历技术带来了内存高度有效的处理方法,对于有限内存和/或处理速度的识别系统非常有益。因此,本发明可用于无法使用大内存和高速处理器的内嵌系统,消费品和其它的识别应用。
尽管用最佳的实施例描述了本发明,但是要理解在不偏离所附权利要求书中所指出的发明精神的情况下,可以对发明进行改动。
权利要求
1.在动态编程系统中,改进包括在可由处理器访问的计算机可读内存中实现的树形数据结构,所述树形数据结构具有多个节点,这些节点拓扑地定义了一个根节点和多个父子代,包括一个在拓扑上最远离根的最深的子代;以及由所述处理器实现的遍历算法,所述算法根据遍历规则集遍历所述节点,从而,一给定代的节点在所述给定代的父节点处理之前被处理,首先处理最深的子代,并且每一代节点之间的遍历在同一个拓扑方向上进行。
2.权利要求1的改进,其中,所述树形数据结构在所述内存中以平面表示的形式进行编码,其中每一代的节点占据连续的内存单元。
3.权利要求1的改进,其中,所述树形数据结构在所述内存中以由链表表示的父子代进行编码。
4.权利要求1的改进,其中,所述树形数据结构在所述内存中以平面表示的形式进行编码,其中每一代的节点占据连续的内存单元,并具有指定在同一父节点的子节点之间的拓扑边界的标志。
5.权利要求1的改进,进一步包括一个指定所述节点中选定的节点作为活动节点的机制。
6.权利要求5的改进,其中,所述指定所述节点中选定的节点作为活动节点的机制包括与所述树形数据结构相关的活动包络数据结构。
7.权利要求1的改进,进一步包括一个指定所述节点中选定的节点作为活动节点的机制,并且其中所述遍历算法包括一个仅处理活动节点的遍历规则。
8.权利要求1的改进其中,所述树形数据结构是表示词的词汇树。
9.权利要求1的改进,其中,所述树形数据结构是表示语音识别器词的词汇树。
10.在动态编程系统中,改进包括在可由处理器访问的计算机可读内存中实现的树形数据结构,所述树形数据结构具有多个节点;指定所述节点中选定的节点作为活动节点的机制;以及由所述处理器实现的遍历算法,所述算法根据遍历规则集遍历所述节点,从而只遍历所述活动节点。
11.权利要求10的改进,其中,所述指定所述节点中选定的节点作为活动节点的机制包括与所述树形数据结构相关的活动包络数据结构。
12.权利要求10的改进,其中,所述遍历算法包括一个给所遍历的节点赋予一个似然分值的动态编程过程。
13.权利要求12的改进,其中,所述指定所述节点中选定的节点的机制使用所述似然分值来指定所述活动节点。
14.权利要求10的改进,其中,所述遍历算法包括一个给所遍历的节点赋予一个似然分值的动态编程过程,并且,其中,如果其似然分值高于预定门限,节点被指定为活动节点。
15.权利要求14的改进,其中,所述预定门限是基于最高似然分值计算的。
16.权利要求10的改进,其中,所述指定所述节点中选定的节点作为活动节点的机制定义了一个活动包络,并通过去除似然分值低于预定门限的节点,使用规则集来传播活动包络。
17.权利要求10的改进,其中,所述指定所述节点中选定的节点作为活动节点的机制定义了一个活动包络,并通过插入似然分值高于预定门限的节点,使用规则集来传播活动包络。
18.权利要求17的改进,其中,所述插入节点的规则集保证了所述活动包络中的节点根据它们的拓扑索引来排序。
19.权利要求1的改进,其中,所述处理器采用一个缓存,并且,其中所述树形数据结构在所述内存中编码以便所述树的遍历可以在所述缓存中处理。
20.权利要求10的改进,其中,所述处理器采用一个缓存,并且,其中所述树形数据结构在所述内存中编码以便所述树的遍历可以在所述缓存中处理。
全文摘要
动态编程技术采用了在计算机内存中以平面表示的形式进行编码的词汇树,其中每一代的节点占据连续的内存单元。遍历算法采用了遍历规则集,从而一给定代的节点在该代的父节点之前被处理。首先处理最深的子代,并且,在每一代节点之间的遍历以相同的拓扑方向进行。
文档编号G06F17/30GK1349211SQ01137298
公开日2002年5月15日 申请日期2001年7月31日 优先权日2000年7月31日
发明者卢卡·里加西奥, 帕特里克·加恩 申请人:松下电器产业株式会社