8 votos

Máquina de vectores soporte para la clasificación de textos

Actualmente tengo un conjunto de datos, clase 1 con unos 8000 archivos de texto corto y clase 2 con unos 3000 archivos de texto corto. He aplicado LibSVM y probado un par de combinaciones de parámetros en el experimento de validación cruzada.

En general, la precisión de la clase 1 se sitúa en el intervalo de (85%, 90%); la precisión de la clase 2 se sitúa en el intervalo de (70% , 75%); la recuperación tanto de la clase 1 como de la clase 2 se sitúa en el intervalo de (80% , 85%).

Para clasificar el texto, he creado un espacio de características siguiendo los métodos habituales: clasificación del documento, filtrado de las palabras vacías y creación del vector de palabras mediante tf-idf o frecuencia binaria, etc. También probé el modelo n-gram para construir el espacio de características. Pero estos métodos no mejoraron mucho el rendimiento. Me gustaría saber si hay alguna otra forma de mejorar el rendimiento de LibSVM. LibSVM proporciona la búsqueda de cuadrícula para la configuración de parámetros, pero funciona bastante lento.

1voto

JMW.APRN Puntos 21

Si aún no lo ha hecho, normalmente puede ganar eficacia si de origen las palabras, como explico en esta entrada .

El stemming sustituirá las palabras por su raíz, de modo que, por ejemplo, "cielo" y "cielos", o "esperanza", "espera" y "esperaba", se reconocerán como idénticas. Si sus textos están en inglés, lo más probable es que acabe utilizando Algoritmo de derivación de Porter del que se pueden encontrar muchas implementaciones, siendo una de las más famosas la incluida en NLTK (en Python). El post mencionado anteriormente contiene un fragmento de código que muestra cómo utilizarlo.

Otra idea que desarrollo en esta entrada es utilizar el análisis de co-inercia (CIA), una variante olvidada del análisis canónico para reducir la dimensión de los datos, manteniendo la máxima correlación con sus clases. Acabaría teniendo sólo dos o tres puntuaciones en lugar de los cientos que debe tener en su corpus, lo que podría dar un mejor acuerdo sesgo-varianza.

1voto

Arve Puntos 1056

Si aún no lo ha hecho, puede intentar normalizar cada vector de documento para que la magnitud sea 1.

Las SVM tienden a funcionar mejor si la magnitud de cada vector de entrenamiento es similar.

1voto

LachlanG Puntos 133

LibSVM no ha estado consiguiendo un rendimiento fiable para mí, últimamente. ¿Has probado a usar SVMLight ¿alguna vez?

También puede intentar ver qué características muestran el mayor poder predictivo en su modelo y añadir algún tipo de característica enriquecida. Por ejemplo, si estuviera clasificando documentos en función de si contienen información relacionada con la interacción proteína-proteína, no me importarían los nombres específicos de las proteínas como características predictivas. Preprocesaría mis documentos y normalizaría todas las menciones de proteínas con algún término común que no apareciera normalmente en mis documentos, como "ESTA PALABRA SE UTILIZA EN LA PROTEÍNA". Investigaciones anteriores (lo siento, no se me ocurre ninguna cita, salvo mi propio artículo) Ambert y Cohen, 2012 ) ha demostrado que esto puede mejorar el rendimiento del clasificador al evitar que éste se distraiga con genes comunes (por ejemplo, ADH1A) e ignore los raros, combinando en su lugar el poder predictivo de todos los genes en una única característica que podría denominarse "GeneMentioned".

-1voto

Klathzazt Puntos 1694

Puede limpiar sus documentos tekst utilizando Soundex, un algoritmo fonético para indexar palabras por sonido. Este método Soundex reduce el número de errores ortográficos.

Existe una buena implementación de soundex en SAS, concretamente la función Soundex()

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X