Creación de un modelo de Markov de entropía máxima a partir de un clasificador de entropía máxima de múltiples entradas existente

9

Me intriga el concepto de un Modelo de Markov de máxima entropía (MEMM), y estoy pensando en usarlo para un etiquetador de Parte de discurso (POS). Por el momento, estoy usando un clasificador convencional de máxima entropía (ME) para etiquetar cada palabra individual. Esto utiliza una serie de características, incluidas las dos etiquetas anteriores.

Los MEMM utilizan el algoritmo de Viterbi para encontrar la ruta óptima a través de la Cadena de Markov (es decir, para encontrar un conjunto completo óptimo de etiquetas para la oración en lugar de los óptimos individuales para cada palabra). Al leer sobre esto, parece tener una maravillosa elegancia y simplicidad. Sin embargo, cada etapa solo se basa en los "resultados" de la etapa anterior (es decir, según una Cadena de Markov).

Sin embargo, mi modelo ME utiliza las dos etapas anteriores (es decir, las etiquetas de las dos palabras anteriores). Parece que tengo dos enfoques posibles:

  • Al igual que con una implementación convencional de Viterbi, use un conjunto de rutas almacenadas de acuerdo con una etapa (la anterior). Mi clasificador ME usaría esto y una etapa 'congelada' antes de esto (congelada en la ruta en consideración) para producir la función de transferencia.

  • O escribo el algoritmo para realizar un seguimiento de dos etapas. Esto es más complicado y ya no sería un verdadero modelo de Markov porque cada función de transferencia (es decir, del modelo ME) dependería de las dos etapas anteriores y no de una sola.

Me parece que el segundo será más preciso, aunque será más complicado.

Todavía tengo que encontrar ejemplos de esto durante mi búsqueda en la literatura. ¿Ha sido probado? ¿El enfoque de dos etapas mejoró la precisión general?

winwaed
fuente

Respuestas:

4

(Esta es realmente una pregunta real a la que me enfrento y el sitio de ML StackExchange en vivo fue el momento más o menos perfecto: había hecho unos días de lectura de libros e investigación en línea y estaba a punto de comenzar a implementar. Aquí están mis resultados. Aunque no son rigurosos, creo que responden a mi propia pregunta. Dejaré la pregunta abierta por ahora en caso de que alguien tenga algún aporte útil, haya intentado algo similar o tenga algunas referencias útiles).

Bien, en los últimos días he codificado esto. El código no es muy eficiente: mucha creación y copia de colecciones, pero el objetivo del ejercicio era ver si funcionaría y qué tan bien funciona.

Estoy dividiendo mis datos aleatoriamente en dos listas: datos de entrenamiento y datos de prueba. Estoy ejecutando los datos de prueba a través del Tagger POS de máxima entropía convencional; y mi nuevo etiquetador MEMM. Por lo tanto, ven los mismos datos de prueba, lo que permite comparaciones directas; debido a la aleatoriedad en los datos elegidos, veo alguna variación entre las pruebas (generalmente alrededor de 0.2-0.4%).

La primera prueba utiliza un etiquetador MEMM con una sola etapa (es decir, una verdadera cadena de Markov). Esto funcionó consistentemente mejor que el simple etiquetador ME en aproximadamente 0.1-0.25%.

Luego probé el enfoque de dos etapas, que parece ser más correcto. Sin embargo, los resultados fueron aún más marginales. A menudo, los resultados serían idénticos, ocasionalmente sería ligeramente inferior, pero probablemente la mayoría de las veces fue ligeramente mejor (por lo tanto, +/- 0.05%).

El etiquetador MEMM es lento. De acuerdo, no he aplicado ninguna optimización, pero la etapa 1 (verdadera cadena de Markov) es N veces más lenta (donde N = número de etiquetas) porque este es el número de rutas que se transfieren entre cada paso. La implementación de 2 etapas es N * N más lenta (debido a la mayor cantidad de rutas transferidas). Aunque las optimizaciones pueden mejorar las cosas, probablemente esto sea demasiado lento para la mayoría de las aplicaciones prácticas.

Una cosa que estoy intentando es aplicar un límite de probabilidad más bajo a los caminos. Es decir. los caminos de Viterbi se podan durante cada iteración con todos los caminos por debajo de una cierta probabilidad (actualmente se podan Log (ruta total P) <- 20.0). Esto funciona bastante más rápido, pero la pregunta sigue siendo si vale la pena. Creo que probablemente no lo sea.

¿Por qué no vemos ninguna mejora? Creo que esto se debe principalmente a la forma en que se comportan las etiquetas POS y al modelo de máxima entropía. Aunque el modelo toma características basadas en las dos etiquetas anteriores, la etiqueta anterior inmediata es mucho más importante en comparación con la anterior. Intuitivamente, esto tendría sentido para el idioma inglés (por ejemplo, un adjetivo generalmente es seguido por un sustantivo u otro adjetivo, pero esto realmente no depende de lo que estaba antes del adjetivo).

winwaed
fuente