图表解析器可以基于Chomsky范式或直接基于生产规则来实现。现在让我们假设我们有一个使用Chomsky范式的CYK图表解析器。二值化不是唯一定义的。这是否会影响CYK图表解析的性能。可以利用它来改善CYK图表解析器的性能吗?
图表解析器可以基于Chomsky范式或直接基于生产规则来实现。现在让我们假设我们有一个使用Chomsky范式的CYK图表解析器。二值化不是唯一定义的。这是否会影响CYK图表解析的性能。可以利用它来改善CYK图表解析器的性能吗?
Answers:
虽然显而易见的答案是基本复杂性无法改变,但解析您实际上将要遇到的字符串的算法可能会更好或更坏。但是,问题似乎似乎不像单个语法产生的相对频率(问题中的A,B和C),而更多的是一个未二进制化的死角解析,即一个二值化与另一个二值化可能产生。
经过一番搜索,我发现CKY解析的更好的二值化(Song,Ding和Lin,EMNLP 2008),它似乎可以肯定地得出结论:相对于您实际期望的字符串,您可以选择“更好”或“更糟糕”的二值化不得不解析。他们希望在实践中尽量减少的“死胡同解析”的名称似乎是不完整的成分,并且在首页上有一个很好的例子。
实际上,Chomsky范式(CNF)不需要运行CYK,只需二进制化即可。尽管仅对非终端(NT)而言必不可少,但是二值化对于保持解析的立方复杂性至关重要。但是,如果您有仅包含2个非终结点和一些终结点的规则,则CYK算法的编程和解释变得更加复杂。
如您所说,有许多方法可以进行二值化。有些语法的语法会比其他语法小。例如
X -> B C D
Y -> B C E
可以二进制化为
X -> Z D
Y -> Z E
Z -> B C
因此可以通过分解来保存一条规则,从而可以节省计算量和结果大小。
但是,对于其他规则,您可能希望分解规则的结尾而不是开头。
我不熟悉Rob Simmons的回答所引用的Song,Ding和Lin的作品。这个想法很有趣,但是我想知道它与其他优化计算的方法相比有多有效。我不太担心。
关键是,仅针对纯CKY算法分析问题似乎有点学术,但代价高昂,因为还有其他类型的优化可以显着改善对死角解析的消除。
显然,CYK只是一系列算法都基于相同的动态编程模型构建而成的简单算法之一。我说这显然是因为这些算法的最简单版本不是动态编程,而是交叉产品。CF语法G的旧结构产生了CF语法F的语言和FSA A的常规语言的交集,这要归功于 Bar Hillel,Perles和Shamir(1961),这是Lang在1995年提出的。
所有基于动态编程的图表解析器或常规CF解析器都可以视为该跨产品构造的“优化”变体,该优化主要用于避免解析器的无用计算。但是问题很细微,因为避免无用的计算可能会导致重复有用的计算,这可能会更糟。
自下而上,CKY算法会产生无法用于语法公理的部分解析的无用计算。
诸如GLR解析器之类的算法(尽管已经发布了有缺陷的版本,是其中一个较为知名的算法),具有自上而下的知识,可以避免许多此类无用的计算,这可能是有代价的。在节省无用的计算方面,还有许多其他变体具有不同的行为。
考虑到这些优化策略,应分析二值化策略。优化可能是次要问题的点是什么,而忽略更强大的技术。
解析过程的优化也与获得的解析结构的“质量”紧密相关,解析结构代表所有可能的解析,通常被称为(共享)解析林。我将在另一个答案中对此进行讨论。
其中一些问题已在文献中讨论。例如,比洛(Billot)和朗(Lang)分析了二值化与解析策略有关的某些方面。