In realtà, la forma normale di Chomsky (CNF) non è necessaria per eseguire CYK, ma solo la binarizzazione. La binarizzazione è essenziale per preservare la complessità cubica dell'analisi, sebbene essenziale solo rispetto ai non terminali (NT). Ma poi, se hai regole che includono solo 2 non terminali e alcuni terminali, l'algoritmo CYK diventa più complesso da programmare e spiegare.
Come dici tu, ci sono molti modi per fare la binarizzazione. Alcuni produrranno grammatiche più piccole rispetto ad altri. Per esempio
X -> B C D
Y -> B C E
può essere binarizzato come
X -> Z D
Y -> Z E
Z -> B C
salvando così una regola per fattorizzazione, che può risparmiare sul calcolo e sulla dimensione del risultato.
Ma con altre regole, potresti voler fattorizzare la fine delle regole piuttosto che l'inizio.
Non ho familiarità con il lavoro di Song, Ding e Lin , citato dalla risposta di Rob Simmons . L'idea è interessante ma mi chiedo quanto possa essere efficace rispetto ad altri modi per ottimizzare il calcolo. Non temo molto.
Il punto è che analizzare i problemi solo rispetto ad un algoritmo CKY puro sembra un po 'un esercizio accademico ma costoso poiché esistono altri tipi di ottimizzazione che possono migliorare significativamente l'eliminazione degli analisi dei vicoli ciechi.
CYK è solo una delle variazioni più semplici in una famiglia di algoritmi che sono tutti costruiti sullo stesso modello di programmazione dinamica, a quanto pare. Sto dicendo apparentemente perché la versione più semplice di questi algoritmi non è conosciuta come programmazione dinamica, ma come prodotto incrociato. È la vecchia costruzione di una grammatica CF G che genera l'intersezione della lingua della grammatica CF F e la lingua regolare di una FSA A., dovuta a
Bar Hillel, Perles e Shamir (1961) , come osservato da Lang nel 1995 .
Tutti i parser di grafici o generatori di CF generici basati sulla programmazione dinamica possono essere visti come una variante "ottimizzata" di quella costruzione tra prodotti, l'ottimizzazione viene utilizzata principalmente per evitare calcoli inutili del parser. Ma il problema è sottile in quanto evitare il calcolo inutile può comportare la duplicazione di quelli utili, il che potrebbe essere peggio.
Essendo bottom-up, l'algoritmo CKY produce calcoli inutili di analisi parziali che non possono derivare dall'assioma della grammatica.
Algoritmi come il parser GLR (per nominare uno dei più noti, sebbene sia stata pubblicata una versione difettosa), hanno alcune conoscenze top-down che eviteranno molti calcoli così inutili, possibilmente a costo. E ci sono molte altre varianti con comportamenti diversi rispetto al risparmio su calcoli inutili ..
È con queste strategie di ottimizzazione che si deve analizzare la strategia di binarizzazione. Qual è il punto di ottimizzare quello che potrebbe essere un problema minore e ignorare tecniche più potenti.
L'ottimizzazione del processo di analisi è anche strettamente legata alla "qualità" della struttura di analisi ottenuta, che rappresenta tutti i possibili analisi, ed è spesso chiamata foresta di analisi (condivisa). Ne discuto in un'altra risposta .
Alcuni di questi problemi sono discussi in letteratura. Ad esempio, Billot e Lang analizzano alcuni aspetti della binarizzazione rispetto alle strategie di analisi.