Tatsächlich muss die Chomsky-Normalform (CNF) nicht CYK ausführen, sondern nur die Binärisierung. Die Binarisierung ist wichtig, um die kubische Komplexität des Parsens zu erhalten, jedoch nur in Bezug auf Nicht-Terminals (NT). Wenn Sie jedoch Regeln haben, die nur 2 Nicht-Terminals und einige Terminals enthalten, wird der CYK-Algorithmus komplexer zu programmieren und zu erklären.
Wie Sie sagen, gibt es viele Möglichkeiten, eine Binärisierung durchzuführen. Einige ergeben kleinere Grammatiken als andere. Beispielsweise
X -> B C D
Y -> B C E
kann als binärisiert werden
X -> Z D
Y -> Z E
Z -> B C
Auf diese Weise wird eine Regel durch Faktorisierung gespeichert, wodurch die Berechnung und die Ergebnisgröße eingespart werden können.
Bei anderen Regeln möchten Sie möglicherweise eher das Ende der Regeln als den Anfang faktorisieren.
Ich bin nicht vertraut mit der Arbeit von Song, Ding und Lin , die von Rob Simmons Antwort zitiert wird . Die Idee ist interessant, aber ich frage mich, wie effektiv sie mit anderen Möglichkeiten zur Optimierung der Berechnung verglichen werden kann. Ich fürchte nicht so sehr.
Der Punkt ist, dass die Analyse der Probleme nur in Bezug auf einen reinen CKY-Algorithmus ein wenig akademisch, aber kostspielig erscheint, da es andere Arten der Optimierung gibt, die die Beseitigung von Sackgassen-Parsen erheblich verbessern können.
CYK ist anscheinend nur eine der einfacheren Varianten einer Familie von Algorithmen, die alle auf demselben dynamischen Programmiermodell basieren. Ich sage anscheinend, weil die einfachste Version dieser Algorithmen nicht als dynamische Programmierung, sondern als produktübergreifend bekannt ist. Es ist die alte Konstruktion einer CF-Grammatik G, die aufgrund von Bar Hillel, Perles und Shamir (1961) den Schnittpunkt der Sprache der CF-Grammatik F und der regulären Sprache einer FSA A erzeugt
, wie Lang 1995 bemerkte .
Alle Diagrammparser oder allgemeinen CF-Parser, die auf dynamischer Programmierung basieren, können als "optimierte" Variante dieser produktübergreifenden Konstruktion angesehen werden, wobei die Optimierung hauptsächlich verwendet wird, um nutzlose Berechnungen des Parsers zu vermeiden. Aber das Problem ist subtiler als nutzlos Berechnung vermieden werden kann Duplizieren nützlichsten führen, die schlimmer sein können.
Der Bottom-up-Algorithmus von CKY erzeugt nutzlose Berechnungen von Teilparsen, die sich nicht aus dem Axiom der Grammatik ableiten lassen.
Algorithmen wie der GLR-Parser (um einen der bekannteren zu nennen, obwohl eine fehlerhafte Version veröffentlicht wurde) verfügen über einige Top-Down-Kenntnisse, die viele solcher nutzlosen Berechnungen vermeiden, möglicherweise zu Kosten. Und es gibt viele andere Varianten mit unterschiedlichem Verhalten hinsichtlich der Einsparung nutzloser Berechnungen.
Unter Berücksichtigung dieser Optimierungsstrategien sollte die Binarisierungsstrategie analysiert werden. Was ist der Sinn der Optimierung eines möglicherweise geringfügigen Problems und der Ignorierung leistungsfähigerer Techniken?
Die Optimierung des Analyseprozesses ist auch eng mit der "Qualität" der erhaltenen Analysestruktur verbunden, die alle möglichen Analysen darstellt, und wird häufig als (gemeinsam genutzter) Analysewald bezeichnet. Ich diskutiere das in einer anderen Antwort .
Einige dieser Themen werden in der Literatur diskutiert. Zum Beispiel analysieren Billot und Lang einige Aspekte der Binarisierung im Hinblick auf Parsing-Strategien.