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.

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.

Contenido exclusivo suscriptores

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:

  1. context: el texto completo (contexto)
  2. question: una pregunta acerca del contenido del contexto
  3. answer_text: el texto dentro del contexto que responde la pregunta
  4. start_char_idx: el caracter dentro del contexto en donde inicia la respuesta
  5. all_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.

Contenido exclusivo suscriptores

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.

Ver todas las lecciones de este curso