Creazione di un modello Markov di massima entropia da un classificatore di entropia massima multi-input esistente


9

Sono incuriosito dal concetto di un modello di entropia di Markov (MEMM) e sto pensando di usarlo per un tagger di Part of Speech (POS). Al momento, sto usando un classificatore convenzionale di massima entropia (ME) per taggare ogni singola parola. Questo utilizza una serie di funzionalità, inclusi i due tag precedenti.

I MEMM usano l'algoritmo di Viterbi per trovare il percorso ottimale attraverso la catena di Markov (cioè per trovare un set ottimale completo di tag per la frase piuttosto che singoli ottimum per ogni parola). Leggendolo, sembra che abbia una meravigliosa eleganza e semplicità. Tuttavia, ogni fase si basa solo sui "risultati" della fase precedente (ovvero secondo una catena di Markov).

Tuttavia, il mio modello ME utilizza le due fasi precedenti (ovvero i tag per le due parole precedenti). Sembra che io abbia due possibili approcci:

  • Come con un'implementazione convenzionale di Viterbi, utilizzare una serie di percorsi memorizzati secondo uno (il precedente) stadio. Il mio classificatore ME userebbe questo e uno stadio "congelato" prima di questo (congelato nel percorso in esame) per produrre la funzione di trasferimento.

  • Oppure scrivo l'algoritmo per tenere traccia di due fasi. Questo è più complicato e non sarebbe più un vero modello Markov perché ogni funzione di trasferimento (cioè dal modello ME) dipenderebbe dalle due fasi precedenti e non da una fase.

Mi sembra che il secondo sarà più preciso, anche se sarà più complicato.

Devo ancora trovare alcuni esempi di questo durante la mia ricerca di letteratura. È stato provato? L'approccio a due fasi ha migliorato la precisione complessiva?

Risposte:


4

(Questa è davvero una vera domanda che sto affrontando e il sito ML StackExchange in diretta è stato un tempismo praticamente perfetto: avevo fatto alcuni giorni di lettura di libri e ricerche online e stavo per iniziare a implementare. Ecco i miei risultati. Sebbene non sono rigorosi, penso che rispondano alla mia domanda. Lascerò la domanda aperta per ora nel caso qualcuno abbia qualche input utile, abbia provato qualcosa di simile o abbia dei riferimenti utili.)

Va bene negli ultimi due giorni, l'ho codificato. Il codice non è molto efficiente: molta creazione e copia di raccolte, ma l'obiettivo dell'esercizio era vedere se avrebbe funzionato e quanto funzionasse.

Divido i miei dati in modo casuale in due elenchi: dati di allenamento e dati di test. Sto eseguendo i dati di test tramite il tradizionaleaggiatissimo POS Entaggy Tagger; e il mio nuovo tagger MEMM. Quindi vedono gli stessi dati dei test, consentendo confronti diretti - a causa della casualità nei dati scelti, vedo alcune variazioni tra i test (in genere circa 0,2-0,4%).

Il primo test utilizza un tagger MEMM con un singolo stadio (cioè una vera catena di Markov). Ciò ha funzionato costantemente meglio del semplice tagger ME di circa lo 0,1-0,25%.

Successivamente ho provato l'approccio a due fasi che sembra dovrebbe essere più corretto. Tuttavia i risultati sono stati ancora più marginali. Spesso i risultati sarebbero identici, a volte sarebbe leggermente inferiore, ma probabilmente la maggior parte delle volte era leggermente migliore (quindi +/- 0,05%).

Il tagger MEMM è lento. Va bene non ho applicato alcuna ottimizzazione, ma lo stadio 1 (vera catena di Markov) è N volte più lento (dove N = Numero di etichette) perché questo è il numero di percorsi che vengono trasferiti tra ogni passaggio. L'implementazione in 2 fasi è N * N più lenta (a causa del maggior numero di percorsi trasferiti). Sebbene le ottimizzazioni possano migliorare le cose, probabilmente è troppo lento per la maggior parte delle applicazioni pratiche.

Una cosa che sto provando è applicare un limite di probabilità inferiore ai percorsi. Vale a dire. i percorsi di Viterbi sono potati durante ogni iterazione con tutti i percorsi al di sotto di una certa probabilità (attualmente Log (percorso totale P) <- 20.0) sono potati. Questo funziona un po 'più veloce, ma rimane la domanda se ne valga la pena. Penso che probabilmente non lo sia.

Perché non vediamo alcun miglioramento? Penso che ciò sia dovuto principalmente al comportamento dei tag POS e al modello di Entropia massima. Sebbene il modello abbia funzionalità basate sui due tag precedenti, il tag precedente immediato è molto più importante rispetto a quello precedente. Intuitivamente questo avrebbe senso per la lingua inglese (ad es. Un aggettivo di solito è seguito da un sostantivo o da un altro aggettivo, ma ciò non dipende da ciò che era prima dell'aggettivo).

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.