2013-05-05 21 views
12

Ciao persone Sto implementando la tecnica di livellamento Stupid Backoff (pagina 2, equazione 5) per un progetto su cui sto lavorando e ho una domanda sulla sua implementazione. Questo è un algoritmo di smoothing utilizzato in NLP, Good-Turing è l'algoritmo simile più noto.Chiarimento dell'implementazione Stupid Backoff

Una breve descrizione dell'algoritmo è: Quando si cerca di trovare la probabilità che la parola appaia in una frase, prima cercherà il contesto per la parola al livello di n-grammo e se non ci sono n-grammi di quello la dimensione sarà recurse al (n-1) -gram e moltiplicherà il suo punteggio con 0.4. La ricorsione si ferma a unigrams.

Quindi, se voglio trovare la probabilità di "giorno" nel contesto di "una giornata di sole", prima cercherei di vedere se il tri-grammo "una giornata di sole" esiste nel corpus, altrimenti sarebbe prova lo stesso con il bigram "giornata di sole" e alla fine otterrebbe solo la frequenza di "giorno" divisa per la dimensione del corpus (numero totale di parole nei dati di allenamento).

La mia domanda è: faccio a moltiplicare il punteggio con 0.4 ogni volta che riduco la dimensione del n-grammo?

Quindi, nell'esempio di cui sopra, se non siamo in grado di trovare un tri-grammo o bi-gram il punteggio finale sarebbe:

0.4 * 0.4 * frequenza (giorno)/corpus_size?

oppure mi limito a moltiplicare una volta al livello finale quindi indipendentemente da quanti backoff devo fare, ho solo moltiplicato il punteggio finale con 0.4?

+1

sì, moltiplichi ogni volta –

risposta

10

Fondamentalmente leggo l'equazione 5 come descrivi nella tua matematica sopra.

Quindi per "un giorno di sole" in cui non è stata osservata alcuna istanza, si calcola S ("giorno" | "soleggiato"). Non trovando il trigramma "una giornata di sole" si prenderà il caso 2 nell'equazione 5 e si stima S ("giorno" | "soleggiato") come alfa * S ("giorno" | "soleggiato").

Se di nuovo, non hai registrato alcuna osservanza di "giornata di sole" avresti approssimato S ("giorno" | "soleggiato") come alfa * S ("giorno"), che è il caso terminale f ("giorno")/N (il numero di unigram osservati).

Impostando alpha su 0.4 ottieni esattamente ciò che hai scritto sopra.

Spero che questo aiuti.

-bms20

0

Sì, è necessario moltiplicare per 0,4 ogni volta che si sposta verso il basso per un modello inferiore n-gram causa di non trovare la frase cercata.

Come da formula, lo 0.4 viene moltiplicato per il punteggio "Stupid Backoff" ogni volta.