文档介绍:1 关于Mecab的算法
Mecab的算法,为最小开销法,该算法主要利用了单词的产生权重(语法对应为分词,但需要注意的一点是语法上不同类型的词语,即便是构成假名的长度一致,也会存在着差异)以及连接权重(语法对应为同音异意)这两个概念。算法逻辑如下。
例:
くるまでまつ(kurumadematu)
下面从左到右开始读取假名,从字典里面取出有记录的假名序列-注意,这里排除了首词为单假名的情况。每读到一个在字典中有对应项的假名序列的时,将该序列压入匹配堆栈的第一组(记录为a[0])。
上图为分解图,其中方框内的蓝色色的部分为该假名序列的产生权重(请注意,同样字长的假名序列的产生权重随着词性的不同也会有所不同),红色部分则为连接权重(请注意,该权重表述为当前假名序列到句首的连接可能度的总的权重值,在下文,如果没有做特别说明,则“连接权重”则表示的是总的连接度的权重)。而连接线上的蓝色部分,则为该文法段和它的左端文法段的连接权重。(从文法上,可以理解为某一个词和它的前置部分的权重关系,比如果该词位名词则前半部分可能为状语段。)
由上图可知,くるまでまつ(kurumadematu) 这一个序列,从第一个假名く(ku)开始,最长在で(de) 位置失去了在字典中的匹配记录。则按照匹配堆栈中的记录,有三种选择(堆栈中的记录为a[0][2]),分别为
くるま(kuruma) 名词原型为車产生权重为2500 连接权重为 3200
くる(kuru) か段动词原型为来る产生权重为450 连接权重为 3150
くる(kuru) 五段动词原型为繰る产生权重为3000 连接权重为 5700
而这里的连接权重,由于该组匹配序列中的数据皆为头序列,因此,此处的连接权重为该数据(匹配项)出现在句首的可能度。
在完成了“分词可能数据堆栈”的第一组数据的的可能匹配压栈处理后,接下来则按照第一步的步骤,对截取了第一组数据的假名序列之后的假名序列进行同样的匹配压栈操作。这里可以得到第二组的数据(记录为a[1][2])。
根据上图,这个第二组数据将是这样的
で(de) 格助词,在本例中用来表示手段产生权重为0连接权重为4200
で(de) 助动词,产生权重为1300 连接权重为0
まで(made) 格助词,在本例中用来表示为时间上的终止,产生权重为0 连接权重为4550
但正如图所示,这个产生并不是一对一的关系,而是一对多的关系。即使,从a[0][0](くるま(kuruma))可以产生出a[1][0](で(de)),a[1][1](で(de))两种情况。而a[0][1],a[0][2]则只能产生出a[1][2](まで(made))这一种可能。
因此,完成了这一步之后,需要对所得到的第一组和第二组数据进行一次权重数值上的选取(因为第一组数据和第二组数据,其实是一个笛卡尔集的关系,这样重复下去,将会导致分析结果急剧膨胀。)。这个选取原则,从上图可以看出,是在a[0]和a[1]所形成的语法树中,针对于每个独立的叶子,仅保留权重值最小的支路。由于只选用最小权重的树,因此,在形成的文法分析树中,路径为“くるまで”且连接权重为7100的部分被删除了,对于“くるまで”而言,仅仅保留了连接权重为4500的文法分析树。
注:
这里再来看连接权重的概念,该权重其实是由文法权重以