Mejor análisis de sentimientos con BERT

Imagina que tienes un bot respondiendo a tus clientes y quieres que suene un poco más natural, más humano.

Foto de Hybrid en Unsplash

Para lograr eso, debes hacer que las respuestas sean más personalizadas. Una forma de obtener más información sobre los clientes con los que está hablando es analizar la polaridad de sus respuestas. Por polaridad aquí quiero decir detectar si la oración (o grupo de oraciones) está escrita con la intención de ser percibida como una declaración positiva o negativa. Esto significa que nos enfrentamos a un problema de clasificación binaria. Existen muchos métodos para resolver esta tarea de PNL. Probé algunos y el que realmente superó a los demás fue BERT.

Descripción general de BERT

BERT (Representaciones de codificador bidireccional para transformadores) es un "nuevo método de representación de lenguaje de pre-entrenamiento" desarrollado por Google y lanzado a fines de 2018 (puede leer más sobre esto aquí). Como está pre-entrenado en conjuntos de datos genéricos (de Wikipedia y BooksCorpus), puede usarse para resolver diferentes tareas de PNL. Esto incluye la clasificación de nivel de oración (como lo hacemos aquí), la respuesta a preguntas o la clasificación de nivel de token (por ejemplo, parte del etiquetado del habla), y BERT puede lograr actuaciones de vanguardia en muchas de estas tareas.

Arquitectura BERT en comparación con otros dos modelos de vanguardia (fuente: Devlin et al.)

En la práctica, BERT proporciona modelos de idiomas previamente entrenados para inglés y otros 103 idiomas que puede ajustar para satisfacer sus necesidades. Aquí, veremos cómo ajustar el modelo en inglés para hacer un análisis de sentimientos.

Afinando con BERT

BERT recientemente proporcionó un cuaderno tutorial en Python para ilustrar cómo hacer la detección de sentimientos en las críticas de películas. El cuaderno de tutoriales está bien hecho y es claro, por lo que no lo examinaré en detalle: aquí hay algunas ideas al respecto. Primero, el cuaderno utiliza el conjunto de datos de IMDb, que se puede descargar directamente de Keras. Este conjunto de datos contiene 50000 reseñas de películas divididas en dos partes iguales, una para capacitación y otra para pruebas. Cada conjunto de datos está equilibrado, con 12500 comentarios positivos y 12500 negativos.

Ejemplos de revisiones del conjunto de datos de IMDb. La polaridad a cero significa que la oración expresa sentimientos negativos, mientras que uno significa que es positiva.

Para ajustar, aplican una sola capa nueva y softmax sobre el modelo pre-entrenado, pero puede personalizarlo. Utiliza la estructura de estimadores de Tensorflow para entrenar y predecir los resultados, y requieren algunas funciones como run_config o model_fn, ya sea codificadas en el cuaderno o importadas del archivo run_classifier.py presente en GitHub, por lo que no tiene que preocuparse por ellas. .

Evaluación modelo

Para ver qué tan bien funciona BERT, lo comparé con otros dos modelos. El primero es una regresión logística con vectorización TF-IDF. El segundo está inspirado en Rezaeinia et al. (git) Utiliza las incrustaciones de Word2Vec, junto con el etiquetado Parte de voz, y pasa la concatenación de ambos a una red convolucional 1D.

Aunque la regresión logística funciona sorprendentemente bien, superando al modelo basado en los nervios, el BERT arroja puntajes aún mejores. Además, los resultados BERT mejoran significativamente cuando el modelo se entrena en un conjunto de datos más grande. Lo que puede ser un inconveniente es que lleva bastante tiempo entrenar, incluso con GPU. La regresión logística completa el entrenamiento en segundos, cuando BERT necesita alrededor de 20 minutos para hacerlo (con GPU y 25000 revisiones de entrenamiento).

Resultados de los diferentes modelos.

Sirviendo con Docker y Tensorflow

Una vez que haya guardado su modelo como salvado_modelo.pb (obtenido, por ejemplo, con el método export_savedmodel), puede configurar un servidor que ejecutará el modelo y hará predicciones. Primero, creamos un contenedor Docker a partir del servicio de tensorflow (primero deberá instalar Docker) y agregamos nuestro modelo. Model_en debe ser una carpeta que contenga una carpeta llamada 1 (necesaria para tensorflow) que contiene el modelo que ha exportado. Esto se logra mediante las siguientes líneas de comando.

Luego, escribimos un cliente simple, que tomará una oración como entrada, la transformará en funciones de entrada BERT (al igual que en el cuaderno de aprendizaje) y llamaremos al contenedor Docker en ejecución que hará la predicción. Puede convertir el cliente en una API simple usando Flask. El siguiente código de Python muestra esos diferentes pasos.

Luego puede hacer predicciones enviando solicitudes de cadena, utilizando Postman, por ejemplo.

Voilà! Ahora está listo para hacer un buen análisis de sentimientos con BERT y usarlo en una aplicación del mundo real.