Categorización de texto: combina diferentes tipos de características

19

El problema que estoy abordando es categorizar textos cortos en varias clases. Mi enfoque actual es utilizar frecuencias de término ponderadas tf-idf y aprender un clasificador lineal simple (regresión logística). Esto funciona razonablemente bien (alrededor del 90% de macro F-1 en el conjunto de prueba, casi el 100% en el conjunto de entrenamiento). Un gran problema son las palabras invisibles / n-gramas.

Estoy tratando de mejorar el clasificador agregando otras características, por ejemplo, un vector de tamaño fijo calculado usando similitudes de distribución (según lo calculado por word2vec) u otras características categóricas de los ejemplos. Mi idea era simplemente agregar las características a las características de entrada dispersas de la bolsa de palabras. Sin embargo, esto resulta en un peor rendimiento en el conjunto de prueba y entrenamiento. Las características adicionales por sí mismas dan alrededor del 80% de F-1 en el conjunto de prueba, por lo que no son basura. Escalar las características no ayudó también. Mi opinión actual es que este tipo de características no se mezclan bien con las características de la bolsa (escasa) de palabras.

Entonces la pregunta es: suponiendo que las características adicionales brinden información adicional, ¿cuál es la mejor manera de incorporarlas? ¿Podría entrenar clasificadores separados y combinarlos en algún tipo de trabajo de conjunto (esto probablemente tendría el inconveniente de que no podría capturarse ninguna interacción entre las características de los diferentes clasificadores)? ¿Hay otros modelos más complejos que debería considerar?

elmille
fuente
3
Alguna actualización: pude lograr resultados aceptables al normalizar l2 los vectores densos adicionales. Asumí erróneamente que el Sklearn StandardScaler haría eso. Sin embargo, todavía estoy buscando métodos más complejos que me permitan modelar dependencias de etiquetas o incorporar la confianza de los subclasificadores.
elmille
Estaba haciendo el mismo experimento básico el año pasado y encuentro exactamente el mismo problema que tienes. ¿Puede su vector word2vec después del proceso de normalización l2 vencer a BOW? No he hecho la normalización l2, pero incluso después de probar muchos métodos de postprocesamiento, el vector semántico sigue estando 2-4 por ciento absoluto detrás de las características BOW tf / idf. Me pregunto si esa dirección es un callejón sin salida. Mi objetivo original es combinar un vector semántico densamente con BOW tradicional y ver si puede mejorar la clasificación de temas / actuaciones de modelado. Por cierto: en qué conjunto de datos has estado trabajando, el mío es 20newsgroup.
Estaba trabajando con un conjunto de datos para la competencia CIKM 2014. Para mí, las representaciones vectoriales nunca fueron capaces de vencer a BOW con pesos tf-idf. Mi plan era usarlos además para mejorar la calidad. En mi experiencia (para la clasificación de texto) alguna forma de tf-idf + un modelo lineal con n-gramos es un enfoque extremadamente fuerte. Actualmente estoy experimentando con redes neuronales convolucionales e incluso con estos (más o menos) modelos complejos que se aproximan difíciles de superar.
elmille
Para Mod: lo siento, no tengo 50 reputación, por lo que no puedo escribir en el área de comentarios. Hola elmille: Sí, eso es lo que experimento en toda la prueba. Sin embargo, ¿encuentra que la palabra vec + BOW ayuda? En mi experiencia, cuando concateno la palabra vec con BOW tf-idf (en mi caso, esta vec es en realidad un vector general en todo el artículo, no es word-vec sino muy similar), el rendimiento es aún más bajo. Originalmente creo que debería ser BOW + vec> BOW> vec. Ya que contienen información mutuamente auxiliar. El resultado real es BOW> vec> BOW + vec. Luego hago escala estándar y normalización para arquear y

Respuestas:

13

Si entiendo correctamente, esencialmente tiene dos formas de características para sus modelos. (1) Datos de texto que ha representado como una escasa bolsa de palabras y (2) características densas más tradicionales. Si ese es el caso, hay 3 enfoques comunes:

  1. Realice una reducción de dimensionalidad (como LSA vía TruncatedSVD) en sus datos dispersos para hacerlos densos y combine las características en una única matriz densa para entrenar su (s) modelo (s).
  2. Agregue sus pocas características densas a su matriz dispersa utilizando algo como scipy's hstacken una única matriz dispersa para entrenar su (s) modelo (s).
  3. Cree un modelo utilizando solo sus datos de texto dispersos y luego combine sus predicciones (probabilidades si es una clasificación) como una característica densa con sus otras características densas para crear un modelo (es decir, agrupación mediante apilamiento). Si sigue esta ruta, recuerde usar solo predicciones de CV como características para entrenar a su modelo; de lo contrario, probablemente se sobreajuste bastante (puede hacer una clase bastante buena para hacer todo esto en un solo Pipelinesi lo desea).

Los tres enfoques son válidos y tienen sus propios pros y contras. Personalmente, creo que (1) suele ser el peor porque, en términos relativos, es extremadamente lento. También encuentro que (3) suele ser el mejor, ya que es lo suficientemente rápido y da como resultado muy buenas predicciones. Obviamente, también puedes hacer una combinación de ellos si estás dispuesto a hacer un conjunto más extenso.

En cuanto a los algoritmos que utiliza, pueden encajar esencialmente en ese marco. La regresión logística funciona sorprendentemente bien la mayor parte del tiempo, pero a otros les puede ir mejor dependiendo del problema en cuestión y qué tan bien los sintonice. Soy partidario de los GBM, pero la conclusión es que puede probar tantos algoritmos como desee e incluso hacer conjuntos simples ponderados de sus predicciones casi siempre conducirá a una mejor solución general.

David
fuente
10

Los modelos lineales simplemente agregan sus características multiplicadas por los pesos correspondientes. Si, por ejemplo, tiene 1000 características dispersas, solo 3 o 4 de las cuales están activas en cada instancia (y las otras son ceros) y 20 características densas que no son ceros, entonces es muy probable que las características densas aprovechen al máximo el impacto mientras que las características dispersas agregarán solo un pequeño valor. Puede verificar esto mirando los pesos de las características para algunas instancias y cómo influyen en la suma resultante.

Una forma de solucionarlo es alejarse del modelo aditivo. Aquí hay un par de modelos candidatos.

SVM se basa en la separación de hiperplanos. Aunque el hiperplano es un modelo lineal en sí mismo, SVM no resume sus parámetros, sino que intenta dividir el espacio de características de una manera óptima. Dada la cantidad de características, diría que el SVM lineal debería funcionar bien, mientras que los núcleos más complicados pueden tender a sobreajustar los datos.

A pesar de su nombre, Naive Bayes es un modelo estadístico bastante poderoso que mostró buenos resultados para la clasificación de texto. También es lo suficientemente flexible como para capturar el desequilibrio en la frecuencia de características dispersas y densas, por lo que definitivamente debe intentarlo.

Finalmente, los bosques aleatorios pueden funcionar como un buen método de conjunto en este caso. La aleatorización garantizará que se usen diferentes tipos de características (dispersas / densas) como nodos de decisión primarios en diferentes árboles. Los árboles de RF / decisión también son buenos para inspeccionar las propias características, por lo que vale la pena notar su estructura de todos modos.

Tenga en cuenta que todos estos métodos tienen sus inconvenientes que pueden convertirlos en basura en su caso. Combinar características dispersas y densas no es una tarea realmente bien estudiada, así que háganos saber cuál de estos enfoques funciona mejor para su caso.

amigo
fuente
¡Gracias por su respuesta! Tengo dos preguntas de seguimiento :) 1) ¿En qué se diferencian SVM (con un núcleo lineal) y Naive Bayes en que no resumen sus características y pesos correspondientes (es decir, lo que usted llama un "modelo aditivo")? Ambos crean efectivamente un hiperplano de separación, por lo que el resultado no es siempre algún tipo de características añadidas multiplicadas por los pesos correspondientes. 2) Me gustaría probar bosques aleatorios, pero desafortunadamente el espacio de características es demasiado grande para representarlo en formato denso (estoy usando sklearn). ¿Hay alguna implementación que pueda manejar eso?
elmille
1) En la regresión lineal, le interesan los puntos en el hiperplano, por lo tanto, suma las funciones ponderadas para obtener el punto predicho. En SVM, por otro lado, está buscando puntos en los lados del hiperplano. Usted realiza la clasificación simplemente comprobando de qué lado es su ejemplo, sin suma involucrada durante la predicción. Los ingenuos Bayes pueden incorporar diferentes tipos de modelos (por ejemplo, binomial o multinomial), pero básicamente multiplicas las probabilidades, no las sumas.
amigo el
2) He visto algunas investigaciones sobre este tema, pero nunca encontré la implementación (probablemente Google buscará algunos enlaces aquí). Sin embargo, siempre puede ir por otro lado: reduzca la dimensionalidad con, por ejemplo, PCA y luego ejecute un bosque aleatorio basado en un conjunto de datos reducido.
amigo