Clasificación y predicción de texto utilizando el enfoque Bag Of Words

Hay varios enfoques para la clasificación de textos. En otros artículos he cubierto Multinomial Naive Bayes y Neural Networks.

Uno de los enfoques más simples y comunes se llama "Bolsa de palabras". Ha sido utilizado por productos de análisis comerciales, incluidos Clarabridge, Radian6 y otros.

El enfoque es relativamente simple: dado un conjunto de temas y un conjunto de términos asociados con cada tema, determine qué tema (s) existen dentro de un documento (por ejemplo, una oración).

Mientras que otros algoritmos más exóticos también organizan las palabras en "bolsas", en esta técnica no creamos un modelo ni aplicamos las matemáticas a la forma en que esta "bolsa" se cruza con un documento clasificado. La clasificación de un documento será polimórfica, ya que puede estar asociada a múltiples temas.

¿Parece esto demasiado simple para ser útil? Pruébelo antes de sacar conclusiones precipitadas. En PNL, a menudo ocurre que un enfoque simple a veces puede ser de gran ayuda.

Necesitaremos tres cosas:

  • Un archivo de definición de temas / palabras
  • Una función de clasificador
  • Un cuaderno para probar nuestro clasificador

Y luego nos aventuraremos un poco más y crearemos y probaremos un modelo predictivo utilizando nuestros datos de clasificación.

Temas y palabras

Nuestro archivo de definición está en formato JSON, lo usaremos para clasificar los mensajes entre los pacientes y una enfermera asignada a su cuidado.

topics.json

Hay dos elementos a destacar en esta definición.

Primero, veamos algunos términos algunos términos. Por ejemplo, "bruis" es una raíz. Cubrirá superconjuntos como "hematomas", "hematomas", etc. En segundo lugar, términos que contienen * son en realidad los patrones , por ejemplo * dpm es un patrón numérico para un d igit seguido de “pm”.

Para simplificar las cosas, solo manejamos la coincidencia de patrones numéricos, pero esto podría expandirse a un alcance más amplio.

Esta capacidad de encontrar patrones dentro de un término es muy útil para clasificar documentos que contienen fechas, horas, valores monetarios, etc.

Probemos alguna clasificación.

El clasificador devuelve un conjunto de resultados JSON que contiene las oraciones asociadas con cada tema que se encuentra en el mensaje. Un mensaje puede contener varias oraciones y una oración se puede asociar con ninguno, uno o varios temas.

Echemos un vistazo a nuestro clasificador. El código está aquí.

msgClassify.py

El código es relativamente sencillo e incluye una función de conveniencia para dividir un documento en oraciones.

Modelado predictivo

La clasificación agregada de un conjunto de documentos asociados con un resultado se puede utilizar para construir un modelo predictivo.

En este caso de uso, queríamos ver si podíamos predecir las hospitalizaciones en función de los mensajes entre el paciente y la enfermera antes del incidente. Comparamos los mensajes de los pacientes que sufrieron o no hospitalizaciones.

Puede utilizar una técnica similar para otros tipos de mensajes asociados con algún resultado binario.

Este proceso consta de varios pasos:

  • Se clasifica un conjunto de mensajes y cada tema recibe un recuento para este conjunto. El resultado es una lista fija de temas con un porcentaje de asignación de los mensajes.
  • A la asignación del tema se le asigna un valor binario , en nuestro caso un 0 si no hubo hospitalización y un 1 si hubo hospitalización.
  • Se utiliza un algoritmo de regresión logística para construir un modelo predictivo
  • El modelo se utiliza para predecir el resultado de una nueva entrada.

Veamos nuestros datos de entrada. Tus datos deben tener una estructura similar. Estamos usando un DataFrame de pandas.

"Incidente" es el resultado binario y debe ser la primera columna en los datos de entrada.

Cada columna subsiguiente es un tema y el% de clasificación del conjunto de mensajes que pertenecen al paciente.

En la fila 0, vemos que aproximadamente una cuarta parte de los mensajes para este paciente son sobre el tema de agradecimiento y ninguno sobre términos médicos o dinero . Por lo tanto, cada fila es un resultado binario y un perfil de clasificación de mensajes entre temas.

Sus datos de entrada tendrán diferentes temas, diferentes etiquetas de columna y una condición binaria diferente, pero por lo demás tendrán una estructura similar.

Usemos scikit-learn para construir una regresión logística y probar nuestro modelo.

Aquí está nuestro resultado:

precision recall f1-score support 0 0.66 0.69 0.67 191 1 0.69 0.67 0.68 202avg / total 0.68 0.68 0.68 393

La precisión y la recuperación de este modelo en comparación con los datos de prueba están en los altos 60, un poco mejor que una suposición , y no lo suficientemente precisa como para ser de mucho valor, desafortunadamente.

En este ejemplo, la cantidad de datos fue relativamente pequeña (mil pacientes, ~ 30 mensajes muestreados por paciente). Recuerde que solo la mitad de los datos se pueden usar para entrenamiento, mientras que la otra mitad (después de barajar) se usa para probar.

Al incluir datos estructurados como edad, sexo, condición, incidentes pasados, etc., podríamos fortalecer nuestro modelo y producir una señal más sólida. Tener más datos también sería útil, ya que la cantidad de columnas de datos de entrenamiento es bastante grande.

Pruebe esto con sus datos estructurados / no estructurados y vea si puede obtener un modelo altamente predictivo. Es posible que no obtenga el tipo de precisión que conduce a acciones automatizadas, pero una probabilidad de "riesgo" podría usarse como función de filtro o clasificación o como una señal de advertencia temprana para los expertos humanos.

El enfoque de la “bolsa de palabras” es adecuado para ciertos tipos de trabajo de clasificación de texto, particularmente cuando el idioma no tiene matices.

Disfrutar.