Cómo entrenar un clasificador SVM a partir de ejemplos de texto

Toma cada palabra como una característica. El valor de cada característica se puede codificar como su presencia (0 o 1), o la frecuencia o TF-IDF de esa característica (palabra). Esta característica también se conoce como característica n-grama. Cuando toma palabras individuales, el valor de n es 1 y se conocen como 1 gramo.

Preprocesamiento: como podría haber pensado, palabras como ‘a’, ‘la’ podrían no ser tan significativas. Estas palabras se conocen como palabras de detención y se eliminan durante el procesamiento previo. Además, no importa si es ‘Apple’ o ‘apple’, por lo que todo el texto se puede llevar a minúsculas. Además, ‘comer’ y ‘comer’ sugerirían un contexto similar y eventualmente conducirán a la misma clase, por lo que se realiza la lematización para llevar cada una de las palabras en forma de raíz (por ejemplo, comer para comer, correr para correr).

Ejemplo: considere dos oraciones juntas, una que mencionó y otra “El mango es realmente dulce”. Para el conjunto de las dos oraciones, las características serán manzana, realmente, sabroso, mango, dulce. El conjunto de datos con estilo se verá así:

manzana muy sabrosa mango dulce
Oración 1: 1 1 1 0 0
Oración 2: 0 1 0 1 1

N-gramas más altos: Básicamente ‘n’ en n-gramas significa cuántas palabras consecutivas estás tomando. Entonces, para 2 gramos tomaremos 2 palabras consecutivas. es decir, para las características de la oración dada, ‘manzana realmente’ y ‘realmente sabroso’. Del mismo modo extender por 3 gramos y así sucesivamente.

Entonces, una pregunta es ¿por qué la técnica de n-gram funciona tan bien?
La presencia de ciertas palabras puede indicar fuertemente la clase de oraciones. Por ejemplo, en su oración ‘sabroso’ sugeriría un sentimiento positivo. Además, cuando se toman 2 gramos, el svm podría obtener una confianza aún mayor para la predicción de la clase o eliminar la ambigüedad. por ejemplo, suponga que el 60% de las veces apareció la palabra ‘sabroso’, fue un sentimiento positivo pero el 40% de las veces fue negativo. Pero cuando tomamos 2 gramos, las características que aparecen pueden ser ‘realmente sabrosas’ y ‘no sabrosas’. Claramente, el primero es un sentimiento positivo, pero el segundo es un sentimiento negativo. Ahora, puede suceder que aparezca 98% ‘realmente sabroso’, es un sentimiento positivo. El modelo aprenderá de acuerdo con los datos reales.

Prácticamente, no obtienes mucho incremento después de 3 gramos, ya que la aparición de las mismas tres palabras consecutivas es insignificante y, por lo tanto, habrá muy pocas muestras de cualquiera de las características para obtener una conlusión fuerte para esa característica. Además, habrá pocas posibilidades de que cualquiera de los 3 gramos provenga del conjunto de 3 gramos presente en el conjunto de trenes y se elimine gradualmente. Por lo tanto, generalmente n no se elige por encima de 3.

Una respuesta similar por mí en:

Sí, SVM no funciona con datos de texto, por lo que debe encontrar una manera de convertir la información textual en numérica o transformar los datos de otras maneras que SVM pueda entender. Puede utilizar el enfoque de modelo de bolsa de palabras, N-gram [1] o incluso características binarias en las que coloca 1 o 0 para representar la presencia o ausencia de una palabra en el texto. Además, ¿quieres predecir categoría o sentimiento? Existen métodos estándar para convertir sentimientos en datos textuales a valores numéricos también [2].

Notas al pie

[1] Respuesta de Shehroz Khan a In Text Classification: ¿Cuál es la diferencia entre Bag of Words (BOW) y N-Grams?

[2] Análisis de opinión de Python NLTK con demostración de clasificación de texto

  • Use un método de palabra a vector para convertir el texto en características numéricas
  • Luego use el kernel SVM para aprender de esas características.

Un código simple: (las publicaciones son su conjunto de datos)

TfidfVect = TfidfVectorizer ()

TfidfTrans = TfidfVect.fit_transform (trainPosts)

TfidfClassifier = SVM (). Fit (TfidfTrans, etiquetas)

TfidfTest = TfidfVect.transform (testPosts)

predicho = TfidfClassifier.predict (TfidfTest)

Puede reemplazar SVM con cualquier otro clasificador.

También recomiende estos dos artículos del sitio web scikit-learn.

  1. Clasificación de documentos de texto usando características dispersas
  2. Trabajando con datos de texto

Ya se dan muchas buenas respuestas. Mis cinco centavos:

  1. SVM funciona con características de tipo bolsa de X. X es típicamente una palabra de contenido (normalmente se excluyen las palabras vacías) o un n-gramo (típicamente bi-gramo con la palabra parada incluida). Puede ser más elegante al incluir etiquetas POS u otras características de motivación lingüística (esto no necesariamente mejorará sus resultados).
  2. Hay varias formas de generar un valor numérico para la característica. Puede usar recuentos sin procesar, valores TF * IDF e incluso recuentos de registros (consulte la referencia a continuación).
  3. Las redes neuronales convolucionales pueden superar a SVM.

Referencias

  1. NRC-Canadá-2014: mejoras recientes en el análisis de opinión de los tweets X Zhu, S Kiritchenko, S Mohammad – Actas del 8 de…, 2014 – Portal de miembros de la Asociación de Lingüística Computacional
  2. Líneas de base y bigramas: clasificación simple, buen sentimiento y tema S Wang, CD Manning – Actas de la 50ª Reunión Anual del…, 2012 – Biblioteca Digital ACM
  3. Redes neuronales convolucionales para la clasificación de oraciones Y Kim – arXiv preprint arXiv: 1408.5882, 2014 – arXiv.org e-Print archive

Una forma típica de hacer ot sería utilizar un esquema de codificación de un solo punto, donde una variable booleana representa cada categoría. Por lo tanto, habrá varias características de categoría para cada variable. Digamos que x1 corresponde a la categoría: comida, x2 corresponde a la categoría deportes, y así sucesivamente.
Para cada ejemplo de entrenamiento, una de las categorías sería una, las otras cero.
Con los ejemplos de entrenamiento y estas características, ahora puede entrenar un clasificador SVM.
Un posible problema es que puede conducir a una gran cantidad de características, y los clasificadores tienden a funcionar mal en espacios de dimensiones tan altas, debido a ‘la maldición de la dimensionalidad’.

Echa un vistazo a http://www.svm-tutorial.com/text

Si usa Python, eche un vistazo a Trabajar con datos de texto

Utilice la codificación de un solo uso a través del “truco hash” para decidir la cantidad de características que desea en sus vectores, por ejemplo, algo grande como 2 ** 25. Luego, solo para cada palabra, haga hash (palabra)% (2 ** 25). Y eso le dará el número del atributo que debe activar. El resultado es un vector laaaaaarge para cada texto con unos pocos y muchísimos ceros. Un vector muy escaso. Así que asegúrese de almacenarlo usando una representación dispersa, en otras palabras, simplemente almacene los índices donde su vector es 1.

Los SVM son particularmente buenos para datos muy escasos en espacios dimensionales muy altos, por eso son buenos para el texto.

Espero que esto ayude.

More Interesting

¿Qué es el mecanismo de atención en redes neuronales?

¿Qué es el aprendizaje automático?

¿Cuál es la diferencia entre la estimación de máxima verosimilitud (ML) y máxima a Posteri (MAP)?

¿Es posible entrenar a un RNN en una sola secuencia extremadamente larga?

¿Por qué podría ser preferible incluir menos predictores sobre muchos?

¿Por qué a veces vanilla SGD y Momentum superan a los optimizadores como AdaDelta en el aprendizaje profundo?

¿Es factible hacer una regresión logística en conjuntos de datos con miles de características sin usar una computadora de clúster? ¿Qué tal decenas de miles?

¿Hay algún paquete de código abierto para aplicar ML a las publicaciones de Twitter?

¿Me puede recomendar algunos buenos libros, blogs, artículos y documentos dedicados a conjuntos de modelos y especialmente apilamiento de modelos, también conocidos como conjuntos de modelos híbridos?

Un fundador de un fondo de cobertura me dijo que los graduados de doctorado en Big Data / ML están generando un millón de dólares al año como salario en el comercio / fondos de cobertura. ¿Qué tan correcto es esto?

En su opinión, ¿la sugerencia de lectura recomendada basada en la actividad de navegación de los usuarios de Wikipedia mejorará la genialidad del sitio?

¿Es útil el aprendizaje automático en el campo de la ingeniería eléctrica?

¿Por qué la red bayesiana no ha tenido tanto éxito como la red neuronal profunda?

¿Vale la pena dejar mi trabajo de desarrollador de software de USD $ 150K para estudiar el aprendizaje automático y el aprendizaje profundo?

¿Cuál es la diferencia entre los datos de entrenamiento y los datos de prueba?