Clasificación de Documentos en WEKA

WEKA Tutorial on Document Classification


Se seleccionó la herramienta Weka con el propósito de generar un modelo que clasifique documentos especializados a partir de dos diferentes courpus (inglés y español).  El paquete de WEKA es una colección de algoritmos  de máquinas de aprendizaje para tareas de la minería de datos. La minería textual hace uso de estos algoritmos que al aprender de grupo de ejemplos  o “training set”, clasifican nuevos textos en categorías analizadas. Se define como Waikato Environment for Knowledge Analysis. Para mayor información dirigirse a http://www.cs.waikato.ac.nz/~ml/weka/.

            Adquisición de datos

Los documentos seleccionados para el conjunto de datos de entrenamiento se han conseguido de la librería de Thompson Rivers University que coenta con la siguiente dirección electrónica: http://www.tru.ca/library.html. Se seleccionaron aleatoriamente 71 artículos académicos de medicina en inglés y español. Estos documentos se almacenaron en formato Portable Document Format (PDF). En base a la librería de TRU, se reconoció la clasificación de los documentos en seis categorías Hemodiálisis, Nutrición, Cáncer, Obesidad, Dieta y Diabetes. Estos documentos se almacenaron en carpetas nombradas por categorías dentro de la carpeta principal llamada Medicina.

Con la finalidad de formar de un archivo arff se creó en Microsoft Visual  Studio Professional C# 2012 una aplicación que generara el archivo arff de una colección de documentos organizados en carpetas en base a su categoría. Esta aplicación pudo ser realizada con la colaboración de una librería PDF llamada iTextSharp para la extracción de texto de un documento de formato portable.

directoryPDFtoARFF puede especificar el nombre de la relación a definir,  la locación del directorio principal contenedor de los documentos subdivididos en  carpetas categóricas y comentarios requeridos. Así también, especifica el nombre del archivo generado con extensión arff y la locación del mismo. Al final de la aplicación se encuentras dos botones, uno de salida y otro para generar el archivo arff con la información descrita.  Esta puede ser descargada  aqui directoryPDFtoARFF.

 

El arff resultante generar un atributo tipo string llamado “textoDocumento” que describirá todo el texto encontrado en el documento y el atributo nominal “docClass” que definirá la clase a la que pertenece. Comprende mencionar que para versiones recientes de Weka  como en este caso Weka 3.6.12 el atributo clase nunca se puede ser nombrado “class”. El archivo a generar se encontrará de la manera siguiente:

%  tutorial de Weka para la Clasificación de Documentos.

@RELATION Medicina

@attribute textoDocumento string

@attribute docClass {Hemodialysis, Nutrition, Cancer, Obesity, Diet, Diabetes}

@data

“texto…”, Hemodialysis

“texto…”, Nutrition

“texto….”, Cancer

“texto…”, Obesity

“texto…”, Diet

“texto…”, Diabetes

 

            Preproceso de documentos.

Para cargar el arff generado se dará clic al botón “Open file…” localizado en la parte superior derecha. En este se seleccionara el archivo creado  “medicinaWeka.arff”.  En la parte inferior se ilustra un histograma de  las etiquetas del atributo “docClass” que al posicionar el cursor sobre el describirá el valor del atributo como se muestra en la siguiente imagen.

 

En Weka para convertir el atributo “textoDocumento” a un conjunto de atributos que representaran la ocurrencia de las palabras del texto completo, usa el filtro StringToWordVector.

Se generaron de diferentes combinaciones de opciones aplicados a los mismos datos de entrenamiento. A los modelos resultantes de cada una se calculó su medida– Fβ, que describe la proporción de instancias erróneamente predichas del modelo. Las opciones que generaron un mayor número de instancias predichas correctamente han sido las siguientes:

wordsToKeep: se coloca con 1000  y  doNotOperateOnPerClassBasis: como “False” TFTransform como “True”, DFTransform como “True”  outputWordCounts como “True” y  normalizeDocLength: se establece con “No normalization”.

lowerCaseTokens: se coloca como “True”

Stemmer: se seleccionara “NullStemmer”.

Stopwords  se añadió el archivo ES-stopwords que se puede descargar  desde aqui.

Se elijara “ES-stopwords”  previamente descargado con la opción   useStoplistse en “True” .

Tokenizer: se seleccionara “WordTokenizer” y se agregaran delimiters en español  .,;:'”()?!“¿!-[]’<>“

 

Extracción de información

 

Después de la limpieza de los datos en la pestaña, se analizará el vector de atributos para la creación del modelo de clasificación que definirá la estructura encontrada en la información analizada.  Se elige el árbol árbol de decisiones J48.  Weka considera J48 como la implementación en java del algoritmo C4.5. para alcanzar  el 100%  en clasificación correcta  se desactiva la poda  y se estableciendo el número mínimo de instancias en una hoja a 1. Se selecciona  “Use training set” para entrenar el método con todos los datos disponibles y aplicar el resultado sobre la misma colección de datos de entrada.

WEKA crea una representación gráfica del árbol de clasificación J48 como se muestra en la imagen siguiente.

 

 

 

Evaluación

Se puede evaluar si el modelo generado clasifico la información de manera correcta. Weka genera la matriz de confusión del modelo generado. Como se explicó anteriormente, la matriz de confusión probé valores binarios para la medición  de sus predicciones.

Weka describe la proporción de instancias erróneamente predichas en con  el cálculo de la medida – Fβ. El valor es un porcentaje compuesto por la precisión y la exhaustividad o sensibilidad (Recall). La precisión mide el porcentaje de las predicciones positivas correctas que son verdaderamente  positivas  La sensibilidad es la capacidad de detectar los casos positivos sobre el total de todos los casos positivos.

Con estos porcentajes se espera que el mejor  modelo es el valor de la medida-F más  cercano a 1. En la siguiente tabla se observan algunas de las primordiales combinaciones en el preproceso de los datos para la generación del modelo. Esta describe sus medidas de precisión y exhaustividad así como la medida-f.

Primero se analizó la mejor estructura para el filtro, sin ajustar los valores del clasificador J48. En este se seleccionaron los mejores parámetros del mismo y selecciono el mejor para después con esta configuración evaluar la mejor configuración para el algoritmo clasificador J48.

 

Tabla comparativa de los diferentes modelos de clasificación de documentos.

Features Precision   Recall  F-Measure
Word Tokenizer  English Spanish (E&S ) 0.810 0.803 0.800
Word Tokenizer  E&S  + Lower Case Conversion 0.863 0.859 0.860
Trigrams  E&S   + Lower Case Conversion 0.823  0.775 0.754
Stemming + Word Tokenizer  E&S  + Lower Case Conversion 0.864 0.817 0.823
Stopwords + Word Tokenizer  E&S  + Lower Case Conversion 0.976 0.972 0.972
Stopwords + Stemming +Word Tokenizer  E&S  + Lower Case Conversion 0.974 0.972 0.971
Stopwords + Word Tokenizer  E&S  + Lower Case Conversion + J48 minNumObj = 1 1 1 1

 

 

Se concluye que el mejor modelo resulta de la combinación de las opciones Stopwords + Word Tokenizer  E&S  + Lower Case Conversion aplicadas al filtro en el preproceso de los datos y adicionalmente ajustando a 1 minNumObj en el algoritmo clasificador  J48.

 

La matriz de confusión resultante  de la combinación de  Stopwords + Word Tokenizer  E&S  + Lower Case Conversion ajustando minNumObj a 1 en el algoritmo J48, genera los siguientes valores binarios en su matriz de confusión.

 

a b c d E f Classified as
11 0 0 0 0 0 a = Hemodialysis
0 12 0 0 0 0 b = Nutrition
0 0 12 0 0 0 c = Cancer
0 0 0 12 0 0 d = Obesity
0 0 0 0 12 0 e = Diet
0 0 0 0 0 12 f = Diabetes

 

En esta tabla solo nos muestra las clases con precisión y exhaustividad al 100%. Sus valores de exactitud son los siguientes para cada clase:

 

Class TP Rate FP Rate Precision Recall F-Measure
Hemodialysis 1 0 1 1 1
Nutrition 1 0 1 1 1
Cancer 1 0 1 1 1
Obesity 1 0 1 1 1
Diet 1 0 1 1 1
Diabetes 1 0 1 1 1
Weighted Avge 1 0 1 1 1