通过修剪句子来减少斯坦福解析器的解析时间

时间:2015-02-05 09:59:40

标签: parsing nlp text-processing text-parsing text-analysis

我们已经意识到斯坦福分析器的解析时间随着句子长度的增加而增加。我有兴趣找到创造性的方法来修剪句子,使得解析时间减少而不影响准确性。对于例如我们可以用一个单词名词替换已知的名词短语。同样可以预先猜测一个子树的其他智能方法,比方说,使用POS标签信息?我们拥有庞大的非结构化文本库。因此,我们希望学习一些可以最终缩短解析时间的常见模式。此外,对这方面的公开文献的一些参考也将受到高度赞赏。

P.S。我们已经知道如何使用Stanford Parser进行多线程,所以我们不是从这个角度寻找答案。

1 个答案:

答案 0 :(得分:4)

你要求'创意'方法 - Cell Closure 修剪方法可能值得一看。参见Brian Roark,Kristy Hollingshead和Nathan Bodenstab的系列出版物。论文:1 2 3。基本的直觉是:

  • CYK解析图表中的每个单元格覆盖了'一定的跨度(例如句子的前4个单词,或单词13-18等)
  • 有些词 - 特别是在某些情境中 - 非常不太可能开始多字句法成分;其他人同样不太可能结束成分。例如,''几乎总是在一个名词短语之前,它几乎是不可想象的,它会结束一个成分。
  • 如果我们可以训练机器学习的分类器来识别具有非常高精度的这些单词,那么我们就可以识别出只会参与将所述单词置于极不可能的句法位置的解析的单元格。 (请注意,此分类器可能会使用线性时间POS标记器或其他高速预处理步骤。)
  • 关闭'在这些细胞中,我们可以大大减少渐近和平均情况的复杂性 - 理论上,从立方复杂度一直到线性;实际上,我们可以在不损失精度的情况下达到大约n ^ 1.5。

在许多情况下,这种修剪实际上相对于穷举搜索略微提高了准确度,因为分类器可以包含PCFG无法获得的信息。请注意,这是一种简单但非常有效的粗到细修剪形式,具有单个粗阶段(与伯克利分析器中的7阶段CTF方法相比)。

据我所知,斯坦福分析师目前还没有实施这种修剪技术;我怀疑你发现它非常有效。

无耻插头 BUBS Parser实现了这种方法,以及其他一些优化,因此实现了大约每秒2500-5000字的吞吐量,通常精度至少等于我用斯坦福分析器测量的精度。显然,如果您正在使用斯坦福大学的其他管道,那么内置的解析器已经很好地集成并且非常方便。但是如果你需要提高速度,BUBS可能值得一看,它确实包含一些示例代码,以帮助将引擎嵌入到更大的系统中。

记下常用子字符串 关于你对预先分析已知名词短语或其他经常观察到的具有一致结构的序列的想法:几年前我对一个类似的想法进行了一些评估(在大型语料库中共享共同子结构的情况下,在大量解析时并行架构)。初步的结果并不令人鼓舞。在我们看到的语料库中,没有足够长的重复子串来使它值得。而前面提到的单元格闭包方法通常会使这些子串很难解析。

然而,如果您的目标域涉及大量重复,您可能会得出不同的结论(也许它会对具有大量复制和粘贴样板的法律文档有效?或者从各种来源重复出现的新闻报道或通过编辑重新发布?)