在ER中,有一类算法依靠参考结构化数据库的模型实现,以便提升ER的速度。可是这类算法经常在运行中产生了大量重复计算,下降了效率。由此,经过介绍如下方法,来解决这个问题:算法
给定的字符串:数据库
X=x1,...xn;其中既有单词又有标点
子序列:网络
s1,...,sp;对X进行分割后,生成的包含一个或多个单词的字符串 sp=(tp,up,y);tp起始位置,up为结束位置,y为特征
特征集合:函数
Y=y1,..,yj;前后有序令y表示X中子序列的特征
例子:
x1x2x3表示一我的名;x5x6x7x8表示一个题目;
人名,题目用yj表示;
子序列s1=x1x2x3。
其中s1的起始位置用t1表示(这里t1=2),结束位置用u1=3表示。
而且
最大不超过X的长度,最小不低于1.学习
第二个子串的起始位置在第一个子串结束位置以后的第一个单词,也就是相邻子串之间没有空隙,是连续的。优化
最后一个子串up结束的位置为X序列结束位置,第一个子串s1起始位置为X序列第一个单词。
注意up的下标p,对应子序列sp中的p,下标的计数p跟子串个数S相关,把X分红10个子串,那么P=10,且起始位置tp与结束位置up的下标是一致的,例s1(t1,u1),s2(t2,u2)spa
特征提取函数:设计
y'表示前一个特征,y表示当前特征,X表示字符串,tj,uj同上描述。
特征提取函数集g1,...gv,每一个一个特征函数(就是一种分割方法)都会有一个与其对应的权重wk。
经过使用维特比算法从这些特征函数中找到使得权重和最大的特征提取函数序列,换句话说,权重和最大表示了该特征提取函数序列对X进行了最优化分割。
这一过程是在训练中完成。接下来将介绍最优化分割。code
最优化分割:图片
s*表示在全部s1,...,sp中,得分最高的一个si。
因为每一个特征提取函数g都会生成一个序列s1,...,sp,因此须要维特比算法找到一条路径,使得改路径上的每个s都达到最大值。
表示可能的分割序列的集合,所谓分割序列,意思是由不一样的特征提取函数生成不一样的分割序列,s1:y---si:y
该算法将造成一条路径,该路径上每个si:y都是整个Si:y集合中的最大值,用表示
y'表示前一个特征,其做用是几率传递,意思是,在计算完第一个特征值后,其值将影响下一个特征值的计算,以此类推,造成一条路径。若没有y',则退化成简单最大值计算问题。
y1 y2 y3 . . . ym s1 s1max . . . . s1 s2max s2 . s2 s3 s3 . s3 . . . . . . . . . . . . . . . . . si si . . . . . . . . . si
i行m个列,每次计算从m个列中选取一个,计算到下一个列的距离(从第i行的m个节点中挑一个计算到i+1行m个节点的距离),m*m,一共计算i行, 其复杂度为O(IM2)
σ(1,y)表示在序列s2中,y1特征获得了最大值。依据公式(1),在对y2计算时,将选取s2做为起点,将其值传入下一步计算。也就是说y2的最大值受y1影响。
从m个分词中挑选一个分词,计算该分词到下一个分词的值(之前一个分词为起点,把下一个全部特征的分词都计算一遍)。
维特比算法是一个特殊但应用最广的动态规划算法,利用动态规划,能够解决任何一个图中的最短路径问题。其优势是利用动态规划下降复杂度。而维特比算法是针对一个特殊的图——篱笆网络的有向图(Lattice )的最短路径问题而提出的。 它之因此重要,是由于凡是使用隐含马尔可夫模型描述的问题均可以用它来解码。
假设整个篱笆有向图中每一列节点最多有m个(也就是图的宽度为D),而且图一共有N列,那么,每次计算至多计算m*m次(从i列的m个节点中挑一个计算到i+1列m个节点的距离)。至多计算N次。那么复杂度骤减为O(Nm2)m的平方,远远小于穷举O(mN)m的n次方。
马尔科夫链是对多参数条件几率计算的化简,假设某一点的条件几率只和其以前某点相关,与其余点无关。这样就造成了几率传递链。
为了比较算法的优劣,咱们设计了一个时间下线,即在最好的状况下的时间消耗。用空间换时间是优化算法的一个经常使用的方法。存储大量中间生成组件,并重复利用,避免了从新生成部件的过程,减小了时间,但存储空间变大了。