7 votos

Número adecuado de clases para SVM en categorización de texto

Me estoy haciendo de categorización de texto con R y SVM en el paquete e1071. Tengo alrededor de 30000 archivos de texto para la formación, y 10000 para la prueba. El objetivo es jerárquicamente categorizar estos archivos. Por ejemplo, yo tengo 13 categorías en el nivel 1, tales como los deportes, la literatura, la política, etc, y en el segundo nivel, hay más de 300 categorías. Por ejemplo, por debajo de la categoría de deportes, hay sub-categorías, como el fútbol, baloncesto, rugby, etc.

Hay dos estrategias para alcanzar la clasificación en el nivel 2. Primero es clasificar los archivos en el primer nivel (13 categorías) y, a continuación, de forma recursiva, clasificar los archivos entre sus propias subcategorías. La segunda estrategia es la más directa, es decir podemos asignar distintas etiquetas para todas las categorías (más de 300) en el nivel 2, luego formamos el modelo con SVM.

Para la segunda estrategia, aunque yo he usado de enfermedad vesicular porcina para doc plazo de la matriz, la reducción de su dimensión 30.000 * 10. El svm función en el paquete e1071 todavía se descompone, dando el error no puede asignar un vector de tamaño 12.4 Gb.

Así que me gustaría pedir a los gurús, si el gran número de categorías es un problema real para la SVM? Específicamente, en mi caso, el tipo de estrategia que se producirán mejores resultados y es más factible en la práctica ?

Muchas gracias por cualquier útiles comentarios y soluciones !

4voto

MrJavaGuy Puntos 631

Siguiente respuesta está basado en mi propia visión personal de hacer el análisis de texto.

Por supuesto, un aumento en el número de categorías se incrementará el tiempo considerablemente ya que tienen mayor matriz de dimensiones y así sucesivamente. Pero no es necesario un mal enfoque. Por otra parte primera estrategia se ve de alguna manera extraña para mí, ya que el resultado de adivinar subgrupo tal vez interferido con el mal resultado de adivinar el grupo (algunas subcategorías pueden ser significally diferente de las otras categorías o subcategorías, pero todo no se puede). Así que probablemente vaya con la segunda estrategia.

En el segundo enfoque que se necesita bastante potencia de cálculo. El error que estás recibiendo es que su memoria RAM es completa (también swap si usted tiene uno). Hay par de ideas básicas sobre este problema.

  1. Trate de reducir su doc-plazo de matrices. Que incluye la eliminación de palabras, signos de puntuación, eliminación de palabras que no tienen significado alguno. Este es procedimiento muy común, pero en algún momento uno puede considerar la creación de su propio más grande de filtro.
  2. No utilizar toda la cantidad de artículos, en lugar de utilizar sólo la muestra. Así, el muestreo es uno de los la mayoría de los procedimientos más simples para reducir la cantidad de la computación.
  3. Los más perezosos solución, ya sea conseguir un pc, con más de la memoria operativa o de aumentar su memoria de intercambio o swap y deja que la computadora haga el resto.

Estos son los enfoques más comunes en el segundo caso. Yo podría iba a saltar a través del paquete que se llama RTextTools que hace todo este trabajo más fácil. Otra visión sería utilizar otro enfoque, en lugar de la SVM. No estoy seguro, pero creo que ya hay implementado algoritmos de clasificación que implica que algunas de sus categorías y subcategorías.

Y como siempre no te olvides de proteger tu progreso cuando R se bloquea por el ahorro de espacio de trabajo .Rdata y, a continuación, cargar. También trate de usar R recolector de basura de la gc().

3voto

Nadeem Puntos 106

Puede utilizar LibLINEAR en lugar de (Lib) SVM. Se dice que correr más rápido que la SVM para casos como la clasificación de documentos, aunque no estoy seguro de cómo afecta el uso de memoria (Ver sección 'Cuando uso LIBLINEAR pero no LIBSVM'). Aquí está el paquete para R.

2voto

user13798 Puntos 206

Yo trabajo como gerente de proyecto y el ingeniero de software en una pequeña, orientados a la investigación de software de la compañía. Hemos completado recientemente un proyecto de categorización de texto y de hecho muchos experimentos en el camino.

Trabajamos con un Lineer SVM implementación codificado en C# basado en Platt "Secuencial Mínima de Optimización" Algoritmo y después de las mejoras para el caso lineal. Los elementos son la definición de los productos que se venden en internet. Nuestras categorías es de dos niveles árbol con unos 15 primeros nodos de nivel y 200 hojas. Aquí está una dos frases resumen de lo que he aprendido:

El éxito depende de la calidad del conjunto de entrenamiento, mucho más que el metodología exacta. Si bien es cierto que la SVM realiza algo mejor que en la Decisión Los árboles, más Cercano Vecinos y algún que otro "simple" enfoque, la selección de la núcleo, la optimización de los parámetros del sistema, una pequeña diferencia en términos de tasa de éxito.

Nuestros experimentos incluyó la comparación de los dos enfoques que escribió acerca de. A pesar de que mi sentido común todavía me dice que el primer enfoque debe realizar mejor, no hubo ninguna diferencia estadísticamente significativa en términos de tasa de éxito en nuestros experimentos: muy probablemente, cuando un producto está clasificado, de cualquiera de los dos enfoques de clasificar correctamente, de ninguno de los dos.

Para el uso de la memoria RAM, yo no sé acerca de R para hacer sugerencias concretas. Sin embargo, me pueden dar algunos consejos generales, en caso de que usted no tiene ya implementado estos pasos:

  • Eliminar las palabras vacías
  • Quitar palabras poco comunes (es decir, las palabras que ocurren en menos de 10 documentos)
  • El formato y la Madre de todas las palabras, así que VENGA, venga, vino, viene, etc. se asignan para el mismo plazo. (Hay bibliotecas gratuitas para esto)

SVM necesita mucha memoria durante el entrenamiento. Aún así, de 24 Gb parece más que suficiente para mí. (De nuevo, no sé nada acerca de la R de la aplicación) sin Embargo, aquí es un experimento que se puede realizar, que si se logra hacer que la formación mucho más rápido, y consume mucho menos recursos:

Si usted tiene 300 categorías, la construcción de 300 diferentes conjuntos de entrenamiento y Máquinas De Vectores Soporte. Para cada categoría de dejar que su conjunto de entrenamiento consisten de 100 muestras positivas y dicen que 400 seleccionados al azar negativo muestras (encontrar el número óptimo por la experimentación). Usted tendrá 300 diferentes término-documento de matrices pero cada uno va a ser de mucho menos tamaño. Cuando un documento se debe clasificar, pida a cada SVM y devolver el categoría con el valor máximo.

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