Cómo sacar valor de descripciones sin clasificar | NLP

Francisco / Pachu
5 min readFeb 14, 2022

Tenemos miles de registros de texto y queremos sacar algo de información de ellos, sería una eternidad leer uno por uno, ¿cómo podemos crear valor a partir de esos datos? Para eso está Natural Lenguage Processing (NLP), una técnica de Machine Learning para crear modelos matemáticos que clasifiquen texto, detecten si un correo es spam, crear asistentes virtuales etc.

Tenemos la información de las auto-observaciones (o descripciones) de las personas que buscan empleo, haría referencia a esa última casilla de un formulario en la que te deja añadir cualquier cosa escrita, vamos a ver que nos permite hacer NLP con estos datos. Vemos unos ejemplos:

Datos de las auto-observaciones

¡BUM! Casi 50.000 registros, como para leerlos uno por uno... Tenemos que lograr extraer información de todos los registros de forma automática, y a su vez, en caso de recibir más observaciones de demandantes de empleo saber clasificarlas.

🛠️ Preprocesado

Como vemos los textos están llenos de caracteres, símbolos y palabras que no nos interesan, así como palabras muy similares: honesto, honesta y honestidad que podemos considerarlas la misma. Hacemos un preprocesado de los datos para dejar solo los más relevantes.

Pasamos todas las letras a minúsculas, eliminamos urls, números, hashtags, menciones, puntos, comas y palabras vacías, estas son las palabras que no nos van a aportar información y solo van a confundir a nuestro modelo de IA, tales como: de, con, y, ese, a, etc.

Parte del script donde se realiza el preprocesado

Vemos como han quedado los registros listos para aplicar las técnicas de Machine Learning.

ANTES: Ordenado.\n\nInterés por el aprendizaje.\n\n Puntual. DESPUÉS: ordenado interés aprendizaje puntual 
Registros tras el preprocesado

🔐 Clasificación no supervisada

Vamos a clasificar los registros en tres grupos, pero como dijimos, de forma automática, para ello implementamos un algoritmo de clasificación no supervisada, es decir, le vamos a pedir al ordenador que encuentre la forma de agrupar los registros.

Representación visual de KMeans

Utilizamos el algoritmo de KMeans, la idea del algoritmo sería ir creando grupos en función de la cercanía de los puntos, en nuestro caso, al tratar con texto se basa en el mismo concepto pero ligeramente más complejo.

Registros de las auto-observaciones clasificados en tres grupos

En la columna label tenemos las descripciones clasificadas como 1, 2 o 3, ¿en base a qué se han agrupado? ¿Qué comparten los registros de un mismo grupo?

🧐 EDA (Exploratory Data Analysis)

¿Qué tenemos entre manos? La cantidad de registros para cada grupo:

Porcentaje del número de registros por grupo

¿Hay algún grupo con descripciones más extensos? Vemos la cantidad de descripciones en función del números de palabras y separado por grupos, el primer y segundo grupo muestra un comportamiento similar, distinto al tercero en el que predominan los registros con menos de 5 palabras.

Número de descripciones en función del número de palabras

Llegamos a lo más interesante, descubriremos que palabras conforman los tres grupos, las más frecuentes se ven a continuación, tras un breve vistazo, ¿cómo describirías cada grupo?

Podríamos describir cada grupo con una palabra:

> Grupo 1, capacidad: “capacidad trabajar”, “trabajar equipo”, “buen comunicador”, “resolución problema”.

> Grupo 2, actitud: “ganas trabajar”, “ganas aprender”, “considero persona”.

> Grupo 3, responsabilidad: “responsable”

📚 Aprendizaje supervisado

Ya tenemos los datos agrupados y hemos comprendido la agrupación que hemos realizado. Pasamos a la última parte, crear un modelo de Machine Learning para poder predecir el grupo de una descripción nueva, es decir, si pasamos una nueva descripción al modelo, aunque sea totalmente distinta a las anteriores, nuestro modelo la va a clasificar como 1, 2 o 3.

Si logramos que agrupe bien y sea fiable tendremos un herramienta esplendida, ¡te clasifica automáticamente la auto-observación/descripción de los demandantes de empleo! Agrupándolo por persona que prioriza su capacidad, actitud o responsabilidad.

Implementamos el modelo de ML con TensorFlow

Para comprobar la precisión del modelo, entrenamos un 70 % de los datos, y le “explicamos” al modelo que para cada registro tiene asociado un grupo, debe aprender la relación entre descripción-grupo. Una vez el modelo ha terminado de repasar la lección, le preguntamos, ¿cuál es el grupo del otro 30 % de los datos? Y comparamos la respuesta del modelo con la realidad, en función de ello sabremos la precisión y si nos podemos fiar del modelo o no, por ejemplo, un 50 % de precisión sería acertar en la mitad de los casos, nadie se fiaría de ello.

En la siguiente gráfica vemos como en los cinco epochs, o vueltas que da la red neuronal sobre todo el conjunto de descripciones, va aumentando la precisión, hasta alcanzar un precisión del 95'24 % sobre los nuevos registros.

💡 Resultado

De tener miles de registros sin obtener valor alguno hemos creado un modelo a partir del cual podemos clasificar descripciones/auto-observaciones en tres grupos: capacidad, actitud o responsabilidad.

Solo se analiza un 1 % de los datos mundiales, la Inteligencia Artificial abre infinidad de oportunidades para crecer ayudados de la tecnología, ¿qué otras áreas se puede utilizar NLP?

Os dejo el GitHub con todo el código, buena semana! 😄

--

--