声明:文本为“2D Trie for Fast Parsing[Xian Qian,,,.School of Computer Science, Fudan University]”的学习笔记。
1简介
在实际的应用中,解码的速度很重要。最新的结构化学习技术都是采用基于模板的方法(template based method)来抽取数百万的特征(features)。复杂的模板(Complicated templates)带来大量的丰富特征,这带来了更高的准确度,同时也需要更多的特征抽取时间。本文提出了Two Dimensional Trie (2D Trie),一种新型的高校的特征索引结构。
现在的结构化学习方法,需要很多特征来生成,比如浅层句法分析(shallow parsing),命名实体识别(named entity recognition),依存句法分析(dependency parsing)。特别的是对于对于最大生成树(maximum spanning tree, MST, dependency parsing)的依存句法分析,因为即使用了一阶模型,特征抽取也需要二次时间(quadratic time)。
2 特征抽取
下面简单介绍一下结构化学习特征抽取的阶段。典型的结构化学习包括两个步骤,第一,利用模板生成用字符串表示的特征。第二,一个特征索引结构搜索特征索引得到相应的特征权重。Figure 1指出了MST解析的流程图,p0.word和p0.pos代表相应的父节点的一个词和对应的POS tag。
一般的索引结构像Hash、Trie不考虑模板之间的关系,因此不会加快特征的抽取,这对于搜索特征索引(searching feature indexes)来说并不是完全有效的方法。假如,由模板“p0.word”生成特征字符串s1是由模板“p0.word + c0.word”生成的特征字符串s2的前缀即,字符串和字串。因此,s1的索引可以用来搜索s2。进一步说,如果s1不在特征集中,那么s2也不会出现的特征集中。s2的生成会被忽略掉。2D Trie对于处理模板质检的关系是一种非常有效的索引方法。
3 模板树
3.1 模板的结构
模板是一个模板单位集,他是有人工定义的T={t1,...,tm}。为了表示方便用以下形式来表示:T = t1 + ... + tm。例如,“T= p0.word + c0.word|l”表示父子节点词对(word pair)。下图为常用的特征。
3.2 模板树
在下文中为了表示方,用si表示一个由模板Ti生成的特征字符串。定义模板之间的关系如下:如果T2属于T1那么T1是T2的前驱,T2成为T1的后继。前边提到过,特征字符串s1是s2的前缀。假设,T2属于T1属于T3,最有效的方法是查找s1,s1,s3的方法是首先搜索s3,然后利用索引id3来搜索s1,最后利用id1来搜索s2。这样T2和T3的关系可以忽略掉。
因此,在这里定义T1:T2的直接前驱(direct ancestor)是T2属于T1时的T1的直接前驱,在这里没有模板T'使得T1属于T'属于T2。相应的T1成为T2的直接前驱。
模板图G = (V,E)是个有向图,表示了不同模板间的关系。V = {T1,...,Tn}是模板集合,E = {e1,...,en}是边的集合。如果Ti是Tj的直接前驱,那么Ti到Tj的边是存在的。对于那些没有前驱的模板,增加了一个空模板作为他们共同的直接祖先,这个共同的前驱同样是图根节点的前驱。
上图展示了一个模板树,有三个模板T1 = p0.word,T2 = p2.pos,T3 = p0.word + p0.pos。在这个例子中,T3有两个直接前驱,但是s3仅有一个前缀,这个s3的前缀依靠在生成阶段模板单元的顺序。假如,s3 = s1 + s2,那么s3的前缀是s1,或者是s2。在本文中,我们只需使用宽度优先数来消歧,成为模板树(template tree)。T2的仅有的直接前驱T1成为T2的父节点,T2成为T1的子节点。上图的有半部分,展示了相应的模板树,每个边保存了模板单元的子集,这些子节点不属于他的父节点。
3.3 虚拟顶点(virtual vertexes)
考虑Figure 3的图,红色的边和蓝色的边部分重叠,他们的交点是p0.word,如果s是由模板T = p0.word生成,这个模板T不在特征集中,那么这两个节点都会被忽略。对于有效的剪枝候选模板,模板数的每个边被严格限制为恰好有一个模板单元(除了根节点)。这种限制的原因在后面予以说明。
到此,虚拟顶点由多单元顶点生成(multi-unit vertexes)。为了有效的剪枝,新的虚拟顶点应该抽取最常见的模板单位。自然的目的是为了最小化生成数( creation number)。这里我们利用一个简单的贪婪策略,对于拥有共同父节点的边,最频繁的常用模板单元抽取为新的顶点。虚拟顶点就这样迭代的生成,直到所有的顶点有一个单元。最后的模板树在Figure3所示,新生成的虚拟顶点由虚线圆所示。