Come ricostruire la foresta di alberi di sintassi dal vettore Earley?


9

L'uso del vettore Earley come riconoscitore è piuttosto semplice: quando viene raggiunta la fine della stringa, è sufficiente verificare che una produzione assiomatica completa sia iniziata in posizione 0. Se ne si possiede almeno una, la stringa viene accettata.

L'uso del vettore Earley per ricostruire l'albero o gli alberi di analisi è meno ovvio. In realtà, non riesco a capire come funzionerebbe una procedura algoritmica, inoltre gli unici riferimenti che ho trovato erano vaghi o super-tecnici. Qualcuno potrebbe far luce su di esso?


2
Sarebbe di aiuto se elencassi i riferimenti che hai trovato e che ritieni vaghi e che ritieni eccessivamente tecnici. Altrimenti è probabile che la risposta sia un puntatore ai riferimenti che hai già trovato.
Wandering Logic,

1
Può darsi che ciò che chiami vettore non sia ciò che Earley chiama vettore nel suo documento originale. Oppure potrebbe non avere esattamente lo stesso ruolo. Gli autori introducono variazioni negli algoritmi. Non c'è modo di saperlo poiché non si fornisce alcun riferimento ai documenti che si stanno utilizzando ... e potremmo non avere accesso ad essi comunque. Ciò che può aiutare è essere più espliciti sulle definizioni. Quando rispondevo, supponevo solo che tu avessi usato le stesse definizioni di Earley.
babou,

@babou, ciò che ho chiamato "Earley vector" è la rappresentazione tabellare della struttura dei dati creata dal parser. Era il termine usato dal mio professore di lingue formali mentre si riferiva ad esso. Va notato che la mia lingua principale non è l'inglese, quindi questo potrebbe essere solo un brutto tentativo di tradurre la terminologia. Il riferimento tecnico che ho citato è lo stesso documento di Earley. Mi sono avvicinato, ma è stato un po 'intimidatorio per un vero principiante come me.
Stefano Sanfilippo,

Potresti voler controllare se "Earley vector" è usato dal tuo professore per indicare la stessa struttura di ciò che Earley chiama "vector" nel suo documento. Può essere utile per comunicare. Per il resto, come puoi vedere, devi conservare ulteriori informazioni per poter recuperare gli alberi di analisi, ma Earley non entra nei dettagli. Ora ci sono altri algoritmi e temo che le complessità dell'algoritmo di Earley nascondano in qualche modo le idee chiave di questo tipo di tecniche. In bocca al lupo.
babou,

La mia spiegazione è stata utile o hai bisogno di una descrizione più dettagliata della parte tecnica?
babou,

Risposte:


9

Sto usando la terminologia e le annotazioni dal documento di Earley . È possibile che la descrizione che leggi sia diversa.

Sembra frequente che gli algoritmi generali di analisi CF vengano inizialmente presentati sotto forma di un riconoscitore, quindi la gestione delle informazioni necessaria per costruire effettivamente alberi di analisi e foreste di analisi viene in qualche modo aggiunta come ripensamento. Uno dei motivi potrebbe essere che la conservazione delle informazioni necessarie per costruire la foresta condivisa richiede lo spazio cubico dove è la lunghezza della stringa di input da analizzare, ma il requisito di spazio è solo quadrato per il riconoscimento , quando queste informazioni non vengono conservate. La ragione di questo aumento della complessità dello spazio è abbastanza semplice: la dimensione della foresta di analisi può essere cubica.n O ( n 2 )O(n3)nO(n2)

La complessità temporale peggiore è , come è noto.O(n3)

Il miglior riferimento all'algoritmo di Earley è ovviamente il documento di Earley , ma non è molto esplicito sulla costruzione della foresta di analisi. Questo in realtà può essere un affare disordinato, molto più che la rapida chiacchierata della sezione 7 pagina 101 apparirà. A dire il vero, Earley non parla di foresta di analisi, o di foresta, ma di " una rappresentazione fattorizzata di tutti i possibili alberi di analisi ". E c'è una buona ragione per questo: se provasse a produrre una foresta secondo la sua grammatica, il suo limite di complessità spaziale (quindi il tempo) salirà a dove è la dimensione del più lungo regola sul lato destro. Questo è il motivo per cui altri algoritmi usano grammatiche in forma binaria (non necessariamente Chomsky Normal Form (CNF)).sO(ns+1)s

In realtà, Earley usa implicitamente la forma binaria , perché ciò è necessario per la complessità temporale cubica. Questo è uno dei ruoli principali del punto regola negli stati. Ma questa forma binaria implicita produce analisi e foreste secondo la grammatica binarizzata, non con quella originale, che, temo, è una delle principali fonti di oscurità. Questo è dettagliato più avanti.

Un buon modo per capire come si ottiene la foresta è probabilmente guardarla in un caso più semplice, l'algoritmo CYK . Viene anche spesso descritto come un riconoscitore e l' aspetto parser viene aggiunto alla fine. Puoi guardare la descrizione in Wikipedia. Le informazioni necessarie per costruire la foresta sono ciò che memorizzano nella tabella dei "backpointer". I backpointer sono essenzialmente puntatori a sottostringhe (un simbolo associato) che formano i componenti di una stringa secondo una regola. Offrono tutti i modi possibili per analizzare una sottostringa. Ricordiamo che CYK utilizza la forma binaria, di solito CNF, in modo che le cose siano più semplici. Il parser CYK ha fondamentalmente la stessa struttura di programmazione dinamica di Earley, ma è molto più semplice. Quindi capirlo bene può essere di grande aiuto.

Tornando all'algoritmo di Earley, non credo che tu abbia bisogno del vettore Earley per decidere l'accettazione o costruire alberi e foreste di analisi. Quello che Earley chiama vettore nel suo documento appare solo a pagina 97, nel terzo paragrafo dell'attuazione. È solo un dispositivo per accelerare la ricerca di stati che puntano indietro in una determinata posizione della stringa k, al fine di ottenere una migliore complessità. Ma tutte le informazioni sono negli insiemi di stati, implementate come elenchi di stati. Tuttavia, queste informazioni non sono sufficienti per costruire la foresta di alberi di analisi, poiché l'algoritmo non tiene traccia del modo in cui uno stato può essere ottenuto. In effetti, il vettore viene persino utilizzato per scartare in modo efficiente uno stato già trovato, indipendentemente da come è stato trovato.

Nella sezione 7 dell'articolo di Earley, spiega che per "trasformare il riconoscitore in un parser", ovvero per poter recuperare alberi di analisi, è necessario tenere traccia del modo in cui i completamenti vengono eseguiti.

EαD.βgDDγ.fDγEαD.βgγD

fgfDγg

DEαD.βgwf+1gwf+1:gDDγDγ.fD

Supponendo di aver mantenuto tutti i puntatori necessari come indicato nel documento, è possibile ottenere tutte le rappresentazioni degli alberi condivisi a partire dall'ultimo simbolo riconosciuto dal parser, che è ovviamente il simbolo iniziale della grammatica.

UXYZWUV

wf+1:gXwg+1:hYwh+1:iwh+1:jZUXYZwf+1:iwf+1:jU

wi+1:kwj+1:kVWUVwf+1:kW

wf+1:gwg+1:hXYUUXYZUXY.ZfShZWUV.fSk

Quindi la foresta di alberi di sintassi può essere molto strana, con una specie di sottotitoli siamesi gemelli che possono condividere i primi due bordi di un nodo, ma non il terzo bordo. In altre parole, potrebbe essere una struttura molto imbarazzante. Questo può spiegare perché Earley la definisce " una rappresentazione fattorizzata di tutti i possibili alberi di analisi ", senza essere più specifici.

Qualsiasi attenta a separare chirurgicamente i gemelli siamesi, senza cambiare la grammatica, si tradurrà in una maggiore complessità. Il modo giusto per farlo è binarizzare la grammatica.

Spero che questo ti possa aiutare. Fammi sapere. Ma insisto sul fatto che una buona comprensione dell'analisi CYK può aiutare. Esistono altri algoritmi, più semplici di quelli di Earley, che possono analizzare in modo efficiente tutti i linguaggi CF.

Puoi trovare informazioni più generali su questo problema della foresta di analisi in altre due risposte che ho dato: /cstheory/7374#18006 e https://linguistics.stackexchange.com/questions/4619#6120 . Ma non entrano nei dettagli specifici dell'algoritmo di Earley.


Oltre all'analisi CYK, vale anche la pena esaminare l'analisi GLR.
Pseudonimo,

1
@Pseudonym Conoscere e comprendere varie forme di analisi CF generale non fa certo male, e suggerisco lo stesso con i due riferimenti alla fine della risposta. Tuttavia, la mia scelta di CYK non è stata dovuta al caso. Condivide con l'algoritmo di Earley la proprietà di essere interpretativo, usando direttamente la grammatica, piuttosto che usare le tabelle prodotte dalla compilazione della grammatica in un Push-Down Automaton (come in GLR, GLL, GPrec). Quindi la relazione tra il processo di riconoscimento e la generazione di alberi / foreste è più chiaramente visibile. CKY è anche l'algoritmo più semplice, con un'eccezione.
babou,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.