Nel livellamento di Kneser-Ney, come vengono gestite le parole invisibili?


15

Da quello che ho visto, la formula di lisciatura di Kneser-Ney (di secondo ordine) è in qualche modo data come

PKN2(wn|wn-1)=max{C(wn-1,wn)-D,0}Σw'C(wn-1,w')+λ(wn-1)×Pcont(wn)

con il fattore di normalizzazione dato comeλ(wn-1)

λ(wn1)=DwC(wn1,w)×N1+(wn1)

e la probabilità di continuazione di una parola w_nw nPcont(wn)wn

Pcont(wn)=N1+(wn)wN1+(w)

dove N1+(w) è il numero di contesti w è stato visto o, più semplice, il numero di parole distinte che precedono la parola data w . Da quello che ho capito, la formula può essere applicata in modo ricorsivo.

Ora questo gestisce bene le parole conosciute in contesti sconosciuti per diverse lunghezze di n-grammi, ma ciò che non spiega è cosa fare quando ci sono parole fuori dal dizionario. Ho provato a seguire questo esempio che afferma che nella fase di ricorsione per unigrammi, Pcont(/)=PKN0(/)=1V . Il documento usa quindi questo - citando Chen e Goodman - per giustificare la formula sopra come PKN1(w)=Pcont(w) .

Non riesco a vedere come funziona in presenza di una parola sconosciuta . In questi casi poiché, ovviamente, la parola sconosciuta non continua nulla riguardo al set di addestramento. Allo stesso modo il conteggio di n-grammi sarà .P c o n t ( sconosciuto ) = 0w=unknown C(wn-1,sconosciuto)=0Pcont(unknown)=0somethingC(wn1,unknown)=0

Inoltre, l'intero termine potrebbe essere zero se si incontra una sequenza di parole sconosciute - diciamo, un trigramma di parole OOD -.wC(wn1,w)

Cosa mi sto perdendo?


Sto lottando anche con KN. Penso che la probabilità di un bigram P invisibile (w1w2) possa arretrare alla probabilità di continuazione dell'ultimo unigram w2. Quando ti rimane un unigram invisibile non hai avuto nulla. Cosa fare dopo? Non lo so.
momobo,

Sto cercando di implementare KN me stesso al momento e sono bloccato con lo stesso problema. Uno di voi due è riuscito a trovare una soluzione?
jbaiter,

Sono tornato al livellamento di Good-Turing per unigrammi invisibili (adattando una funzione di potenza alle frequenze e alla frequenza delle frequenze) ... con risultati variabili.
lato sole

Risposte:


6

Dan Jurafsky ha pubblicato un capitolo sui modelli N-Gram che parla un po 'di questo problema:

Al termine della ricorsione, gli unigrammi sono interpolati con la distribuzione uniforme:

PKN(w)=max(cKN(w)d,0)wcKN(w)+λ(ϵ)1|V|

Se vogliamo includere una parola sconosciuta <UNK>, è appena inclusa come voce di vocabolario normale con conteggio zero, e quindi la sua probabilità sarà:

λ(ϵ)|V|

Ho provato a scoprire cosa significa questo, ma non sono sicuro che significhi solo . Se questo è il caso, e supponi che mentre il conteggio va a zero, forse va in , secondo:ϵlimx0xλ(ϵ)d

λ(wi1)=dc(wi1)|{w:c(wi1,w)>0}|

quindi alla parola sconosciuta viene assegnata solo una frazione dello sconto, ovvero:

λ(ϵ)|V|=d|V|

Non sono affatto sicuro di questa risposta, ma volevo farla uscire nel caso in cui susciti qualche altro pensiero.

Aggiornamento: scavando ancora un po ', sembra che sia tipicamente usato per indicare la stringa vuota (""), ma non è ancora chiaro come questo influisca sul calcolo di . è ancora la mia ipotesi miglioreϵλd|V|


2
Buona risposta ma come te non sono sicuro al 100%. Ho implementato una versione dello script perl research.microsoft.com/en-us/um/redmond/groups/srg/papers/… in python - ma ho capito che funziona così com'è solo se hai un vocabolario chiuso (problema 0 ) - vale a dire che tutti gli unigrammi di prova sono anche in treno. Come suggerito da Jan lagunita.stanford.edu/c4x/Engineering/CS-224N/asset/slp4.pdf ho sostituito prima istanza di ogni parola con <UNK> durante la pre-elaborazione. Tuttavia, durante il partizionamento, ci sono alcuni unigrammi di test non in treno come "goofedup". Quindi ho usato d / | V | Qui. Grazie!
Josh Morel,

1

Esistono molti modi per addestrare un modello <UNK>anche se Jurafsky suggerisce di scegliere quelle parole che ricorrono pochissime volte in allenamento e semplicemente cambiarle <UNK>.

Quindi semplicemente allena le probabilità come faresti normalmente.

Guarda questo video a partire dalle 3:40 -

https://class.coursera.org/nlp/lecture/19

Un altro approccio è semplicemente considerare una parola come <UNK>la prima volta che viene vista in allenamento, anche se dalla mia esperienza questo approccio assegna troppa massa di probabilità a <UNK>.


0

Solo alcuni pensieri, sono ben lungi dall'essere un esperto in materia, quindi non intendo fornire una risposta alla domanda, ma analizzarla.

La cosa semplice da fare sarebbe calcolare forzando la somma ad essere una. Ciò è ragionevole poiché la stringa vuota non viene mai vista nel set di addestramento (nulla può essere previsto dal nulla) e la somma deve essere una. In tal caso, λ ( ϵ ) può essere stimato con: λ(ϵ)λ(ϵ)

λ(ϵ)=1wmax(CKN(w)d,0)wCKN(w)
CKN(w)

Un'altra opzione sarebbe quella di stimare la <unk>probabilità con i metodi menzionati da Randy e trattarla come un token regolare.

λ(ϵ)|V|


Si suppone che le risposte siano per risposte effettive.
Michael R. Chernick,
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.