Universidad Internacional de La Rioja (UNIR) - Máster Universitario en Inteligencia Artificial - Procesamiento del Lenguaje Natural


Datos del alumno (Nombre y Apellidos): German Arley Portilla gonzalez

Fecha: 4-05-2022


Trabajo: Etiquetado morfosintáctico

Objetivos

Con esta actividad se tratará de que el alumno consiga aplicar un método basado en modelos ocultos de Markov (HMM) para realizar el etiquetado morfosintáctico de una oración.

Descripción

En esta actividad debes implementar en Python un etiquetador morfosintáctico basado en modelos ocultos de Markov (HMM) y realizar el etiquetado morfosintáctico de la oración:

Habla con el enfermo grave de trasplantes.

Implementando también en Python el algoritmo de Viterbi.

Parte 1: Construir el etiquetador morfosintáctico

En esta primera parte de la actividad tienes que implementar en Python el etiquetador morfosintáctico basado en un HMM bigrama a partir de un corpus etiquetado.


Para ello debes utilizar el corpus mia07_t3_tra_Corpus-tagged, que se encuentra disponible en el aula virtual.


El corpus se compone de frases en español etiquetadas con conocimiento sobre las partes de la oración (categorías gramaticales o POS tags). Estas frases etiquetadas han sido extraídas de algunos documentos que forman parte de Wikicorpus, un corpus trilingüe (español, catalán e inglés) compuesto por más de 750 millones de palabras. Wikicorpus fue creado por investigadores de la Universitat Politèncnica de Catalunya a partir de documentos de la Wikipedia que fueron anotados con la librería opensource FreeLing.

La tabla 1 muestra en formato de texto plano y sin etiquetar algunos ejemplos de frases que componen el corpus. De hecho, también se indica el identificador del documento del cual han sido extraídas las frases etiquetadas.

La versión anotada la conforma el corpus anotado proporcionado para realizar esta actividad. El formato del fichero de texto que contiene el corpus es el mismo que el utilizado en Wikicorpus. Por lo tanto, cada uno de los documentos de Wikipedia se identifica con el tag XML donde se indica el identificador del documento (id).

Además, cada una de las frases en el documento viene separada por una línea en blanco. La información relativa a cada palabra de la frase se representa en una nueva línea del fichero. Para cada palabra, es decir, en cada línea del fichero, se proporciona —además del token que representa a la propia palabra— su lema, la etiqueta gramatical (POS tag) asociada a la palabra y el sentido de esta.

La figura 1 muestra una captura del corpus anotado, donde se observa la frase «Tristana es una película del director español nacionalizado mexicano Luis Buñuel.» perteneciente al documento de Wikicorpus con identificador 27315 y titulado Tristana.

Si se analizan las anotaciones para la palabra «es», se observa que su lema es «ser», que la categoría gramatical a la que pertenece esa palabra es la identificada por la etiqueta gramatical «VSIP3S0» y que el sentido de la palabra es el identificado por el código «01775973175».

También se observa que la palabra «del» en la frase se representa en dos líneas y se anota con dos tokens, el primero «de» y el segundo «el». Esto se debe a que la palabra «del» es la contracción de la preposición «de» y el artículo «el». Por el contrario, el nombre propio «Luis Buñuel», que está formado por dos palabras (el nombre «Luis» y el apellido «Buñuel»), se anota como un único token «luis_buñuel». Además, se observa que el punto final de la frase también viene anotado como un token «.».

Aunque el corpus anotado proporciona más información (ver figura 1), es importante tener en cuenta de que para realizar esta actividad solo será necesario el token y la etiqueta gramatical (POS tag) de cada palabra; es decir, la información contenida en la primera y la tercera cadena de cada línea que representa una palabra en el corpus anotado.

Las etiquetas gramaticales (POS tags) utilizadas para anotar la información morfosintáctica del corpus son las definidas en FreeLing y se basan en EAGLES, una recomendación para la anotación de la mayoría de las lenguas europeas. La definición del conjunto de etiquetas gramaticales (POS tags) utilizadas por FreeLing en el etiquetado de un corpus en español se puede consultar en la web.


Accede al recurso a través del aula virtual o desde la siguiente dirección web: https://freeling-user-manual.readthedocs.io/en/v4.1/tagsets/tagset-es/


Las etiquetas gramaticales de EAGLES utilizadas por FreeLing son de longitud variable, donde cada carácter corresponde a una característica morfosintáctica. El primer carácter en la etiqueta es siempre la categoría gramatical o parte de la oración. Esa categoría gramatical determina la longitud de la etiqueta y la interpretación de cada uno del resto de caracteres en la misma.

La definición de la etiqueta para la categoría gramatical «verbo» se muestra en la tabla 2. Entonces, la etiqueta «VSIP3S0», con la que ha sido etiquetada la palabra «es» en la frase que se presentó anteriormente, se interpreta de la siguiente forma: se refiere a un verbo (V) de tipo semiauxiliar (S) en modo indicativo (I) y en tiempo presente (P) para la tercera persona (3) de (número) singular (S). Asimismo, el carácter «0» al final de la etiqueta indica que esta forma verbal no tiene género.

Es importante destacar que para realizar la actividad se deben utilizar las etiquetas con las que se anota el corpus en formato EAGLES; por ejemplo, «VSIP3S0».

Importante: Si se utilizan otras etiquetas la actividad será considerada incorrecta y puntuada con cero puntos.

Para construir el etiquetador morfosintáctico a partir del corpus etiquetado con los datos de entrenamiento, deberás seguir los siguientes pasos:

Nota: Presenta en el envío de la actividad la tabla (guardada en formato de hoja de cálculo de Microsoft Excel (.xlsx) o equivalente) con las probabilidades de emisión y las de transición, calculadas para todas las etiquetas y tokens (palabras) que aparecen en el corpus.

Cargar el corpus para extraer la primera y tercera columna de cada registro

En primer lugar se va a cargar el corpus leyendo el archivo y recuperando la información de la primera y tercera columna de cada registro que continen el token de la palabra y la etiqueta, respectivamente.

Estos valores se almacenarán en objetos de la clase Palabra.

Esta clase permitirá recuperar el Token() y el Tag() fácilmente para cada registro.

El corpus se guardará como una lista que a su vez contiene una serie de listas de objetos del tipo Palabra. Cada una de las listas de objetos del tipo Palabra guarda una oración.

El siguiente código te permite imprimir el corpus:

Calcular las probabilidades que rigen el HMM bigrama

Una vez se dispone del corpus correctamente cargado se creará un objeto, hmmbigrama de la clase HMMBigrama.

hmmbigrama permitirá hacer el cálculo de las tablas de probabilidades de transición y de emisión.

El siguiente código te permite crear el HMM Bigrama y obtener información relevante:

El método ProbabilidadesDeTransición() de la clase HMMBigrama devuelve la tabla de probabilidades de transición.

El método ProbabilidadesDeEmision() de la clase HMMBigrama devuelve la tabla de probabilidades de emisión.

Parte 2: Etiquetar morfosintácticamente una oración

En esta segunda parte de la actividad tienes que implementar en Python un programa que permita calcular la mejor secuencia de etiquetas para una oración, dicho de otro modo, realizar el etiquetado morfosintáctico de la oración: «Habla con el enfermo grave de trasplantes. ».

Para ello debes utilizar el etiquetador que has construido en la parte 1 de esta actividad, es decir las tablas de probabilidades calculadas, y aplicar el algoritmo de Viterbi.

Para aplicar el algoritmo de Viterbi, se deben seguir los siguientes pasos:

Nota: Presenta en el envío de la actividad la tabla (guardada en formato de hoja de cálculo de Microsoft Excel (.xlsx) o equivalente) con la matriz de probabilidades de la ruta Viterbi para el etiquetado morfosintáctico de la oración «Habla con el enfermo grave de trasplantes. ».

Calcular la matriz de probabilidades de la ruta de Viterbi

La clase Viterbi permitirá realizar el cálculo de la matriz de probabilidades de la ruta de Viterbi y la posterior decodificación de la secuencia óptima de etiquetado para una oración a analizar.

El etiquetado morfosintáctico creado en la Parte 1, es decir el objeto hmmbigrama de la clase HMMBigrama, será proporcionado al objeto viterbi de la clase Viterbi para poder aplicar el Algoritmo de Viterbi.

El cálculo de los valores de Viterbi se realiza en el método Probabilidades() de la clase Viterbi.

Obtener la ruta con máxima probabilidad

El método DecodificacionSecuenciaOptima() de la clase Viterbi permite obtener la secuencia de etiquetas más probables para la oración a analizar.

El siguiente código te permite realizar el análisis de la oración: "Habla con el enfermo grave de trasplantes."

El siguiente código te permite mostrar la matriz de probabilidades de la ruta de Viterbi (solo se presentan aquellas etiquetas que tienen algún valor no nulo para alguna de las palabras de la oración analizada).

El siguiente código te permite mostrar la ruta de Viterbi con máxima probabilidad

Mostrar la oración etiquetada

El siguiente código te permite mostrar la oración etiquetada

Parte 3: Analizar el etiquetador morfosintáctico

Una vez hayas creado el etiquetador morfosintáctico y lo hayas utilizado para etiquetar la oración «Habla con el enfermo grave de trasplantes.», reflexiona sobre los resultados obtenidos, interprétalos y analiza el rendimiento del etiquetador creado y sus limitaciones. Para ello responde de forma razonada a las siguientes preguntas:

El etiquetado monosintactico es correcto puesto que se genera en primera instancia un etiquetador monosintactico basado en el corpus indicado, este corpus que es como un dataset segun lo explicado en la clase entregara las caracteristicas propias que se enmarcan desde el lenguaje, que para este caso es el español, las probabilidades dadas tanto para la transmision como para emision u observacion son similares a las trabajadas y vistas en el material presentado, pero pueden cambiar, segun los resultados las incidencias presentan procentajes bajos, pero est o se debe al conjunto de multiplicaciones de las probabilidades que hacen que se vena levenmente menores, pero si nos dirigimos a las etiquetas eagles se puede evidenciar que este etiquetado en un porcnetaje cumple con lo relacionado en las tabla, como es el caso del verbo hablar, para el caso de transpalantes lo amrca como nombre, y en otros correctos para el caso de grave que lo marca como adjetivo

El enfermo grave habla de trasplantes

habla / VMIP3S0 con / SPS00 el / DA0MS0 enfermo / NCMS000 grave / AQ0CS0 de / SPS00 trasplantes / NCMP000

Como se habla en el apartado anterior es correcto el etiqueta hasta cierto punto, puesto que en la comparacion de cada uno de los resultados las probabilidades propenden a ser bajas pero esto se debe a los resultados, y si se revisa lo presentado por las etiquetas eqgles algunos se encuentran enmarcados en una solucion óptima como grave y habla, otros como enfermo y trabplantes no se encuentran enmarcados en los que presenta la referencia de la etiqueta eagles, pero todo se debe a la forma como se presenta la oracion, puesto que como se vio en la clase con el ejemplo del vino los resultados pueden cambiar dependiendo la manera como el etieutado trabaje sobre la oracion, pero los resultados son favorables desde la construccion del etiquetador mediante el corpues hasta el etiquetado de la oracion de estudio, con el punto y sin el punto.

Las limitaciones dependen directamente del nalisis sobre el algoritmo, y la seleccion de cada uno de los metodos pdispuestos para tal fin, se puede percibir las limitaciones del algoritmo si los resultados se cruzan con variaciones en las frases, donde se pueda realizar una validacion cruzada como la vista en clase de los resultados en cada una de las fases. Otro detalle relevante del ejercicio es que al tratarse de un algoritmo generico para la contruccion del etiquetador y el etiquetado puede verse limitado en la modificacion a fondo de las estrucutruras de codigo dispuesta para el calculo de cada uno de los requerminetos

Dentro de las posibles mejoras se puede resaltar el uso de tematicas vistas en otros cursos que apoyen el proceso de calculo de las probalididades, ademas de la adecuacion mediante otras tecncias de la deteerminacion de los mejores resultados para cada uana de las fases, que hagn que el algorimo sea mucho mas corto y rapido. Otra mejora puede ser la sintesis del algoritmo, la creacion de un etiquetador con la menor cantidad de sentencias posibles hacen que la capacidad de modificacion sea mayor ademas de la prueba o cruce con diferentes corpus que mejoren los resultados observados en cada una de las fases. El uso de los automatas es practico para el ejercicio pero como se vio en el material de estudio el cruzarlo con herramientas de aprendizaje automatico prodria entregar resultados mejores en cuanto al proceso de etiquetado de una oracion de estudio, con un apartado de etiquetas de Eagles como se trabajo en esta actividad.