#!/usr/bin/env python # coding: utf-8 # # Etiquetado de Secuencias Parte 2 # # ## Evaluación y Análisis de Errores # # Primero entrenamos y evaluamos el modelo. Para la evaluación usamos la opción '-c' para imprimir la matriz de confusión. # In[20]: get_ipython().run_line_magic('run', 'tagging/scripts/train.py -m base -o base') # In[21]: get_ipython().run_line_magic('run', 'tagging/scripts/eval.py -c -i base') # La matriz de confusión muestra en la fila X columna Y la proporción de veces que el tagger eligió el tag Y pero el tag verdadero es X. Sólo se imprime la matriz para los 10 tags más frecuentes, pero la variable 'error_count' contiene los valores para todas las combinaciones posibles de los 81 tags. # # **Se puede ver que uno de los principales errorres del tagger es confundir nombre propio (np00000) con nombre común (nc0s000), con un 2.05% del error total.** # # El script de evaluación guarda además un diccionario 'error_sents' con el índice de las oraciones en las que ocurre cada error. Por ejemplo, podemos ver algunas oraciones en las que el tagger confunde nombre propio con nombre común: # In[23]: list(error_sents['np00000']['nc0s000'])[:10] # ## Analizando Error en una Oración Puntual # # Veamos la oración 2141 en la que también se da este error: # In[39]: sents[2141] # In[38]: sent = sents[2141] words, tags = zip(*sent) # separar las palabras de los tags model.tag(words) # In[43]: model.unknown('Antártida') # Es claro que el tagger se puede mejorar para palabras desconocidas mirando características como el uso de mayúsculas y también de caracteres no estándar del inglés (e.g. letras acentuadas).