5.14 - Práctica 2: preguntas y respuestas con BERT
Lección 14 de la sección “Redes Transformer” del curso Fundamentos de Deep Learning con Python.
Tabla de contenido
Introducción
En la lección anterior hablamos en detalle de BERT, una arquitectura derivada de la Red Transformer y que usa el principio de transferencia de aprendizaje para resolver diversos problemas del procesamiento de secuencias.
Así que en esta lección veremos de forma práctica cómo usar BERT para resolver un problema de pregunta-respuesta, típico del Procesamiento del Lenguaje Natural.
Suscríbete y accede al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online
El problema a resolver
La idea es implementar un modelo que dada una pregunta y un contexto (una porción de texto), sea capaz de encontrar la respuesta correspondiente.
Arquitectura del modelo
Para esto tomaremos el modelo BERT BASE pre-entrenado, agregaremos algunas capas adicionales, y lo afinaremos para que aprenda a encontrar la respuesta dados un contexto y una pregunta como entrada.
Hugging Face
Dada la complejidad del modelo, y la imposibilidad de entrenarlo con los recursos proporcionados por Google Colab, usaremos un Tokenizer y un modelo BERT pre-entrenado disponibles en Hugging Face.
El set de datos
Usaremos el set SQuAD v1.1 (Stanford Question Answering Dataset), que contiene más de 100.000 pares de preguntas-respuestas.
Cada ejemplo de entrenamiento contiene estas variables:
context
: el texto completo (contexto)question
: una pregunta acerca del contenido del contextoanswer_text
: el texto dentro del contexto que responde la preguntastart_char_idx
: el caracter dentro del contexto en donde inicia la respuestaall_answers
: todos los posibles textos de respuesta (en caso de que la respuesta aparezca varias veces dentro del contexto)
Una vez leído, tendremos que realizar el proceso de tokenización y pre-procesamiento, de tal manera que cada secuencia esté en el formato de entrada requerido por el modelo BERT de Hugging Face.
Una vez realizadas estas tareas crearemos los sets de entrenamiento (aproximadamente el 90% del set original) y prueba (10% restante).
Creación del modelo
Usando la librería transformers
de Hugging Face, implementaremos la arquitectura descrita hace un momento.
Teniendo en cuenta el elevado número de parámetros (¡110 millones!) que se deben aprender, es recomendable usar la TPU para el entrenamiento: Runtime -> Change runtime type -> Hardware accelerator -> TPU.
Entrenamiento del modelo
Para este entrenamiento usaremos el método fit
, un total de 3 iteraciones y un tamaño de lote de 32. Haciendo uso de la TPU proporcionada por Google Colab, se requerirán aproximadamente 6 minutos para ejecutar cada iteración de entrenamiento.
Predicción: preguntas y respuestas
Al hacer la predicción con el set de prueba, es decir al introducir un texto y una pregunta asociada y pedir al modelo la respuesta, vemos un excelente desempeño.
Pero lo más impresionante es que este modelo es capaz de generalizar, pues al tomar por ejemplo el extracto de un texto tomado de Wikipedia y escribir una pregunta asociada, vemos que el modelo responde correctamente casi la totalidad de las preguntas propuestas.
Realmente es impresionante este desempeño, y acá vemos en acción el principio de transferencia de aprendizaje que está detrás de BERT.
Recuerda suscribirte para acceder al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online
Conclusión
En esta práctica acabamos de ver cómo usar BERT para resolver una tarea de preguntas y respuestas, y pudimos verificar el excelente desempeño de este modelo pre-entrenado y luego afinado para esta tarea específica.
n la siguiente lección veremos en detalle otro de los desarrollos revolucionarios derivado de la Red Transformer. En particular hablaremos de GPT y el uso del aprendizaje no supervisado, en estas arquitecturas.