Los insignes BERT, ELMo y compa帽铆a. (C贸mo la PNL descifr贸 el aprendizaje de transferencia)

Translation into Spanish of an interesting article by Jay Alammar, a brilliant ML research engineer, builder, writter and developper focused on NLP language models and visualization.

bertelmonlptranslation into spanish
2 May, 2022 How NLP cracked transfer learning.
2 May, 2022 How NLP cracked transfer learning.

A free translation by Chema, a Spain-based translator specializing in English to Spanish translations, with a growing interest in Machine Learning Models and Machine Translation.

An original text written by Jay Alammar, originally published in
https://jalammar.github.io/illustrated-bert/

* * *

Actualizaci贸n 2021
Echa un vistazo a esta breve y sencilla introducci贸n en video sobre BERT

 

El a帽o 2018 ha sido un importante punto de inflexi贸n para los modelos de aprendizaje autom谩tico que manejan texto (o, m谩s exactamente, Procesamiento del Lenguaje Natural o PNL para abreviar). Nuestra comprensi贸n conceptual de la mejor forma de representar palabras y oraciones comprendiendo los significados y las relaciones subyacentes est谩 evolucionando r谩pidamente. Adem谩s, la comunidad de NLP ha estado presentando componentes incre铆blemente poderosos que puedes descargar y usar libremente en tus propios modelos y versiones (lo que se conoce como el momento ImageNet de NLP, en referencia a c贸mo hace a帽os desarrollos similares aceleraron el desarrollo del aprendizaje autom谩tico en tareas de Visi贸n Artificial) .

ULM-FiT no tiene nada que ver con el monstruo de las galletas pero no se me ocurri贸 nada mejor 馃檪

Uno de los 煤ltimos hitos en este desarrollo es el lanzamiento de BERT, un evento descrito como el comienzo de una nueva era en la PNL. BERT es un modelo que rompi贸 varios r茅cords relativos a la forma en la que estos modelos pueden manejar tareas basadas en el lenguaje. Poco despu茅s del lanzamiento del documento que presenta Bert, el equipo abri贸 el c贸digo del modelo y puso a libre disposici贸n la descarga de versiones del modelo pre-entrenadas con conjuntos de datos masivos. Este es un desarrollo trascendental, ya que permite a cualquier persona desarrollar un modelo de aprendizaje autom谩tico que involucre procesamiento del lenguaje, usando este motor como un componente f谩cilmente disponible, ahorrando el tiempo, la energ铆a, el conocimiento y los recursos que habr铆a tenido que destinar a entrenar un modelo de procesamiento del lenguaje construido desde cero.

Estos son los 2 pasos a seguir para usar BERT. Primero descargas el modelo previamente entrenado con datos no anotados (PASO 1) y luego te concentras en ajustarlo (PASO 2). [Fuente de la imagen].

BERT se basa en algunas buenas ideas que han ido surgiendo recientemente en la comunidad de NLP, y que incluyen, entre otros, el aprendizaje semi-supervisado (de Andrew Dai y Quoc Le), ELMo (de Matthew Peters e investigadores de AI2 y UW CSE ), ULMFiT (del fundador de fast.ai Jeremy Howard y Sebastian Ruder), transformer OpenAI (de los investigadores de OpenAI RadfordNarasimhanSalimans y Sutskever) y los Transformer (de Vaswani et alia.) .

Conviene conocer bien algunos conceptos esenciales para comprender correctamente qu茅 es BERT. Pero comencemos por ver las formas en que puedes usar BERT, antes de ver los conceptos involucrados en el modelo en s铆.

Ejemplo: clasificaci贸n de oraciones

La forma m谩s directa de emplear BERT es usarlo para clasificar un fragmento de texto. El modelo tendr铆a este aspecto:

Para entrenar un modelo de este tipo, principalmente se tiene que entrenar el clasificador, con cambios m铆nimos en el modelo BERT durante la fase de entrenamiento. Este proceso de entrenamiento se llama Ajuste Fino (Fine-Tunning) y tiene sus ra铆ces en el Aprendizaje Secuencial Semi-supervisado y ULMFiT.

Para las personas que no est谩n versadas en el tema, dado que hablamos de clasificadores, estamos en el dominio del aprendizaje supervisado, dentro del campo del aprendizaje autom谩tico. Lo que significar铆a que necesitamos un conjunto de datos etiquetados para entrenar dicho modelo. Para este ejemplo de clasificador de spam, el conjunto de datos etiquetado ser铆a una lista de mensajes de correo electr贸nico y una etiqueta (“spam” o “no spam” para cada mensaje).

Otros ejemplos de este uso podr铆an incluir:

  • An谩lisis de sentimientos
    • Entrada: Rese帽a de pel铆cula/producto. Salida: 驴la revisi贸n es positiva o negativa?
    • Conjunto de datos de ejemplo: SST
  • Comprobaci贸n de hechos
    • Entrada: oraci贸n. Salida: “Declaraci贸n” o “No declaraci贸n”
    • Ejemplo m谩s ambicioso/futurista:
      • Entrada: Declaraci贸n. Salida: “Verdadera” o “Falsa”
    • Full Fact es una organizaci贸n que crea herramientas autom谩ticas de verificaci贸n de datos y declaraciones para el beneficio del p煤blico. Parte de su flujo de trabajo es un clasificador autom谩tico que lee art铆culos de noticias y detecta declaraciones y datos falsos (clasifica los textos como afirmaciones veraces o falsas) que luego pueden verificarse (por humanos de momento, con ML m谩s adelante).
    • Video: frases incrustadas y verificaci贸n autom谩tica de datos: Lev Konstantinovskiy .

Arquitectura del modelo

Ahora que tienes en tu cabeza un ejemplo sobre c贸mo usar BERT, echemos un vistazo m谩s de cerca a c贸mo funciona.

El paper original del BERT presenta dos tama帽os del modelo:

  • BERT BASE: comparable en tama帽o al Transformer OpenAI (para comparar rendimiento)
  • BERT LARGE: un modelo rid铆culamente enorme que logr贸 los incre铆bles resultados rese帽ados en el paper original

BERT es b谩sicamente una pila de codificadores de transformers entrenados. Este es un buen momento para sugerir que leas mi publicaci贸n anterior The Illustrated Transformer, donde explico en profundidad el modelo Transformer, un concepto fundamental para entender BERT y los conceptos que discutiremos a continuaci贸n.

Ambos tama帽os de modelos BERT tienen una gran cantidad de capas de codificador (que el documento llama Bloques de transformers): 12 para la versi贸n b谩sica y 24 para la versi贸n grande. Estos tambi茅n tienen redes feedforward m谩s grandes (768 y 1024 unidades ocultas respectivamente) y m谩s attention heads (12 y 16 respectivamente) que la configuraci贸n predeterminada en la implementaci贸n de referencia del Transformer en el paper inicial (6 capas de codificador, 512 unidades ocultas, y 8 attention heads).

Entradas del modelo

El primer token de entrada viene con un token [CLS] especial por motivos que se aclarar谩n m谩s adelante. CLS aqu铆 significa Clasificaci贸n.

Al igual que el codificador Vanilla del transformer, BERT toma una secuencia de palabras como entrada que sigue fluyendo hacia arriba en la pila. Cada capa aplica auto atenci贸n, pasa sus resultados a trav茅s de una red de avance y luego los devuelve al siguiente codificador.

En t茅rminos de arquitectura, es id茅ntica a la del Transformer hasta este punto (aparte del tama帽o, que no deja de ser una configuraciones a elecci贸n de cada uno). Es en la salida donde empezamos a ver c贸mo cambian las cosas.

Salidas del modelo

Cada posici贸n genera un vector de tama帽o hidden_size (768 en BERT Base). Para el ejemplo de clasificaci贸n de oraciones que vimos anteriormente, nos enfocamos en la salida de solo la primera posici贸n (a la que le pasamos el token [CLS] especial).

Ese vector ahora se puede usar como entrada para un clasificador de nuestra elecci贸n. El documento logra excelentes resultados usando 煤nicamente una red neuronal de una sola capa como clasificador.

Si tienes m谩s etiquetas (por ejemplo, si es un servicio de correo electr贸nico que etiqueta los correos electr贸nicos como “spam”, “no spam”, “social” y “promoci贸n”), simplemente modifica la red clasificadora para tener m谩s neuronas de salida que luego pasar por softmax.

Paralelismos con Redes Convolucionales

Para aquellos con experiencia en visi贸n por computadora, este traspaso de vectores deber铆a recordar lo que sucede entre la parte de convoluci贸n de una red como VGGNet y la parte de clasificaci贸n totalmente conectada al final de la red.

Una nueva era de integraci贸n

Estos nuevos desarrollos traen consigo un nuevo cambio en la forma en que se codifican las palabras. Hasta ahora, las incrustaciones de palabras han sido un motor importante en la forma en que los principales modelos de PNL tratan el lenguaje. M茅todos como Word2Vec y Glove se han utilizado ampliamente para este tipo de tareas. Recapitulemos c贸mo se usan antes de se帽alar lo que ahora ha cambiado.

Resumen de incrustaci贸n de palabras

Para que las palabras sean procesadas por modelos de aprendizaje autom谩tico, necesitan alguna forma de representaci贸n num茅rica que los modelos puedan usar en sus c谩lculos. Word2Vec demostr贸 que podemos usar un vector (una lista de n煤meros) para representar correctamente las palabras de una manera que captura las relaciones sem谩nticas o relacionadas con el significado (por ejemplo, la capacidad de saber si las palabras son similares u opuestas, o que un par de palabras como 鈥淓stocolmo鈥 y 鈥淪uecia鈥 tienen entre ellos la misma relaci贸n que tienen entre ellos 鈥淓l Cairo鈥 y 鈥淓gipto鈥), as铆 como relaciones sint谩cticas o basadas en la gram谩tica (por ejemplo, la relaci贸n entre 鈥渢en铆a鈥 y 鈥渢engo鈥 es la mismo que entre 鈥渆ra鈥 y 鈥渆s鈥).

La comunidad r谩pidamente se dio cuenta de que era mucho mejor idea usar incrustaciones previamente entrenadas con grandes cantidades de datos de texto, en lugar de entrenarlas junto con el modelo en lo que con frecuencia eran peque帽os conjuntos de datos. Se pudo as铆 descargar una lista de palabras y sus incrustaciones a partir del entrenamiento previo con Word2Vec o GloVe. Este es un ejemplo de la incrustaci贸n GloVe de la palabra “palo” (con un tama帽o de vector de incrustaci贸n de 200)

La incrustaci贸n GloVe de la palabra “palo”: un vector de 200 floats (redondeados a dos decimales). Contin煤a con m谩s de doscientos valores.

Dada su longitud y la gran cantidad de n煤meros, en las ilustraciones de mis publicaciones utilizo esta cuadr铆cula simplificada para representar vectores:

ELMo: el contexto importa

Si estamos usando esta representaci贸n GloVe, entonces la palabra “palo” estar铆a representada por este vector sin importar el contexto. “Espera un minuto”, dijeron varios investigadores de PNL (Peters et. al., 2017 , McCann et. al., 2017 , y una vez m谩s Peters et. al., 2018 en el art铆culo de ELMo ) , ” palo” tiene m煤ltiples significados dependiendo de d贸nde se use. 驴Por qu茅 no darle una incrustaci贸n basada en el contexto en el que se usa, tanto para capturar el significado de la palabra en ese contexto como para otra informaci贸n contextual?鈥. Y as铆 nacieron las incrustaciones de palabras contextualizadas .

Las incrustaciones de palabras contextualizadas pueden dar a las palabras incrustaciones diferentes seg煤n el significado que tengan en el contexto de la oraci贸n. Adem谩s, RIP Robin Williams

En lugar de usar una incrustaci贸n fija para cada palabra, ELMo analiza la oraci贸n completa antes de asignarle una incrustaci贸n a cada palabra. Utiliza un LSTM bidireccional entrenado en una tarea espec铆fica para poder crear esas incrustaciones.

ELMo supuso un paso significativo hacia la formaci贸n previa en el contexto de la PNL. El ELMo LSTM se entrenar铆a en un conjunto de datos masivo en el idioma de nuestro conjunto de datos, y luego podemos usarlo como componente en otros modelos que necesitan manejar el idioma.

驴Cu谩l es el secreto de ELMo?

ELMo adquiri贸 su comprensi贸n del idioma al ser entrenado para predecir la siguiente palabra en una secuencia de palabras, una tarea llamada Modelado del Lenguaje. Esto es muy interesante porque tenemos grandes cantidades de datos de texto de los que dicho modelo puede aprender sin necesidad de etiquetas.

Uno de los pasos en el proceso de pre-entrenamiento de ELMo: dado “Lets stick to” como entrada, predecir la siguiente palabra m谩s probable: una tarea de Modelado de Lenguaje . Cuando se entrena en un gran conjunto de datos, el modelo comienza a captar patrones de lenguaje. Es poco probable que adivine con precisi贸n la siguiente palabra en este ejemplo. De manera m谩s realista, despu茅s de una palabra como “pasar”, asignar谩 una mayor probabilidad a una palabra como “tiempo” (para conformar “pasar tiempo”) que a “c谩mara”.


Podemos entrever cada uno de los pasos de LSTM asomando por detr谩s de la cabeza de ELMo. Resultan muy 煤tiles en el proceso de incrustaci贸n despu茅s de que realizar este entrenamiento previo.

ELMo en realidad va un paso m谩s all谩 y entrena un LSTM bidireccional, de modo que su modelo de lenguaje no solo se hace una idea de la palabra siguiente, sino tambi茅n de la palabra anterior.

ELMo llega a la incrustaci贸n contextualizada mediante la agrupaci贸n de los estados ocultos (y la incrustaci贸n inicial) de cierta manera (concatenaci贸n seguida de suma ponderada).

ULM-FiT: dando en la diana del Aprendizaje de Transferencia en PNL

ULM-FiT introdujo nuevos m茅todos para utilizar de manera m谩s efectiva mucho de lo que el modelo aprende durante el entrenamiento previo, m谩s all谩 de las meras incrustaciones e incrustaciones contextualizadas. ULM-FiT introdujo un nuevo modelo de lenguaje y un proceso para ajustar efectivamente ese modelo de lenguaje para resolver varias tareas.

La PNL tuvo por fin una forma de transferir el aprendizaje probablemente tan bien como lo hace la Visi贸n Computerizada.

El Transformer: yendo m谩s all谩 que los LSTM

El lanzamiento del paper y el c贸digo de Transformer, y los resultados que logr贸 en tareas como la traducci贸n autom谩tica, comenzaron a hacer que algunos pensaran en ellos como un reemplazo de los LSTM. Esto se vio agravado por el hecho de que los Transformers manejan las dependencias a largo plazo mejor que los LSTM.

La estructura Codificador-Decodificador del Transformer lo hizo perfecto para la traducci贸n autom谩tica. Pero, 驴c贸mo lo usar铆as para la clasificaci贸n de oraciones? 驴C贸mo lo usar铆a para entrenar previamente un modelo de idioma que se puede ajustar para otras tareas (tareas posteriores es lo que el campo llama tareas de aprendizaje supervisado que utilizan un modelo o componente entrenado previamente).

OpenAI Transformer: pre-entrenando un Decodificador de Transformer para Modelado de Lenguaje

Resulta que no necesitamos un Transformer completo para adoptar el aprendizaje por transferencia y un modelo de lenguaje ajustable para tareas de PNL. Podemos hacerlo solo con el decodificador del Transformer. El decodificador es una buena opci贸n porque es una opci贸n natural para el modelado del lenguaje (predecir la siguiente palabra) ya que est谩 dise帽ado para enmascarar tokens futuros, una caracter铆stica valiosa cuando genera una traducci贸n palabra por palabra.

El transformer OpenAI est谩 integrado por la pila de decodificadores del Transformer

El modelo apil贸 doce capas de decodificador. Dado que no hay codificador en esta configuraci贸n, estas capas de decodificador no tendr铆an la subcapa de atenci贸n de codificador-decodificador que tienen las capas de decodificador de Transformer est谩ndar. Sin embargo, todav铆a tendr铆a la capa de auto atenci贸n (enmascarada para que no alcance su punto m谩ximo en tokens futuros).

Con esta estructura, podemos proceder a entrenar el modelo en la misma tarea de modelado de lenguaje: predecir la siguiente palabra utilizando conjuntos de datos masivos (sin etiquetar). 隆M茅tele 7.000 libros y que aprenda! Los libros son excelentes para este tipo de tareas, ya que permiten que el modelo aprenda a asociar informaci贸n relacionada, incluso si est谩n separados por mucho texto, algo que no se obtiene, por ejemplo, cuando se entrena con tweets o art铆culos.

OpenAI Transformer listo para ser entrenado para predecir la siguiente palabra, con un conjunto de datos compuesto por 7.000 libros.

Aprendizaje por transferencia a tareas posteriores

Ahora que el Transformer OpenAI est谩 preentrenado y sus capas se han ajustado para manejar razonablemente el lenguaje, podemos comenzar a usarlo para tareas posteriores. Primero veamos la clasificaci贸n de oraciones (clasificar un mensaje de correo electr贸nico como “spam” o “no spam”):

C贸mo usar un Transformer OpenAI preentrenado para clasificar oraciones

El documento de OpenAI describe una serie de transformaciones de entrada para manejar las entradas para diferentes tipos de tareas. La siguiente imagen del paper muestra las estructuras de los modelos y las transformaciones de entrada para llevar a cabo diferentes tareas.

Muy inteligente, no?

BERT: de Decodificadores a Codificadores

El Transformer openAI nos brind贸 un modelo preentrenado ajustable con precisi贸n basado en el Transformer. Pero faltaba algo en esta transici贸n de LSTM a Transformers. El modelo de lenguaje de ELMo era bidireccional, pero el Transformer openAI solo entrena un modelo de lenguaje directo. 驴Podr铆amos construir un modelo basado en Transformers cuyo modelo de lenguaje mire tanto hacia adelante como hacia atr谩s (en la jerga t茅cnica, 鈥渆st茅 condicionado tanto en el contexto izquierdo como en el derecho鈥)?

“Agu谩ntame la cerveza”, dijo BERT -R.

Modelo de lenguaje enmascarado

鈥淯saremos codificadores de transformer鈥, dijo BERT.

“Eso es una locura”, respondi贸 Ernie, “Todo el mundo sabe que el condicionamiento bidireccional permitir铆a que cada palabra se viera indirectamente en un contexto de varias capas”.

鈥淯saremos m谩scaras鈥, sentenci贸 BERT.

El proceso de modelado de lenguaje inteligente de BERT enmascara el 15% de las palabras en la entrada y le pide al modelo que prediga la palabra que falta.

Encontrar la tarea correcta para entrenar una pila de codificadores de Transformer es un obst谩culo complejo que BERT resuelve adoptando un concepto de “modelo de lenguaje enmascarado” de la literatura anterior (donde se denomina tarea Cloze).

M谩s all谩 de enmascarar el 15% de la entrada, BERT tambi茅n mezcla un poco las cosas para mejorar la forma en que el modelo se ajusta m谩s tarde. A veces reemplaza aleatoriamente una palabra con otra palabra y le pide al modelo que prediga la palabra correcta en esa posici贸n.

Tareas de dos oraciones

Si miramos atr谩s en las transformaciones de entrada que hace el Transformer OpenAI para gestionar diferentes tareas, notaremos que algunas tareas requieren que el modelo diga algo inteligente sobre dos oraciones (por ejemplo, 驴son simplemente versiones parafraseadas una de la otra? Dada una entrada de wikipedia como entrada, y una pregunta sobre esa entrada como otra entrada, 驴podemos responder esa pregunta?).

Para hacer que BERT sea mejor en el manejo de relaciones entre m煤ltiples oraciones, el proceso de entrenamiento previo incluye una tarea adicional: dadas dos oraciones (A y B), 驴es probable que B sea la oraci贸n que sigue a A, o no?

La segunda tarea en la que BERT est谩 pre-entrenado es una tarea de clasificaci贸n de dos oraciones. La tokenizaci贸n esta muy simplificada en este gr谩fico, ya que BERT en realidad usa WordPieces como tokens en lugar de palabras, por lo que algunas palabras se dividen en fragmentos m谩s peque帽os.

Modelos espec铆ficos de tareas

El paper de BERT muestra varias formas de usar BERT para diferentes tareas.

BERT para extracci贸n de caracter铆sticas

El enfoque de Ajuste Fino no es la 煤nica forma de utilizar BERT. Al igual que ELMo, se puede usar BERT previamente entrenado para crear incrustaciones de palabras contextualizadas. Luego, se puede alimentar estas incrustaciones a un modelo existente, un proceso que el paper muestra que produce resultados no muy lejanos del Ajuste Fino de BERT en tareas como el reconocimiento de entidades.

驴Qu茅 vector funciona mejor como incrustaci贸n contextualizada? Yo creo que depende de la tarea. El documento examina seis opciones (en comparaci贸n con el modelo ajustado que logr贸 una puntuaci贸n de 96,4):

Dale a BERT una vuelta de tuerca

La mejor manera de probar BERT es a trav茅s del cuaderno BERT FineTuning con Cloud TPU alojado en Google Colab. Si nunca ha usado Cloud TPU antes, este tambi茅n es un buen punto de partida, ya que el c贸digo BERT tambi茅n funciona en TPU, CPU y GPU.

El siguiente paso ser铆a mirar el c贸digo en el repositorio BERT :

  • El modelo est谩 construido en modeling.py ( class BertModel) y es pr谩cticamente id茅ntico a un codificador Transformer de Vanilla.
  • run_classifier.py es un ejemplo del proceso de ajuste. Tambi茅n construye la capa de clasificaci贸n para el modelo supervisado. Si deseas construir tu propio clasificador, consulta el m茅todo create_model()en ese archivo.
  • Existen varios modelos preentrenados disponibles para descargar. Incluyen BERT Base y BERT Large, as铆 como idiomas como ingl茅s, chino y un modelo multiling眉e que cubre 102 idiomas entrenados en wikipedia.
  • BERT no entiende las palabras como fichas, sino m谩s bien como WordPieces. tokenization.py es el tokenizador que puede convertir tus palabras en tokens apropiadas para BERT.

Consulta tambi茅n la implementaci贸n PyTorch de BERT. La biblioteca AllenNLP usa esta implementaci贸n para permitir el uso de incrustaciones BERT con cualquier modelo.

Agradecimientos

Gracias a Jacob Devlin , Matt Gardner , Kenton Lee , Mark Neumann y Matthew Peters por brindar sus comentarios sobre los borradores anteriores de esta publicaci贸n.
Escrito el 3 de diciembre de 2018

Valora este art铆culo

Articulos relacionados


Translation into Spanish of an interesting article by Kyle Gallatin, software engineer for machine learning infrastructure and delivery at scale.

Translation into Spanish of an interesting article by Thomas Tracey, an American engineering & product leader focused on enterprise ML, who shows us here how to build a Recurrent Neural Network step by step.

Translation into Spanish of an interesting article by Devi Parikh Associate Professor @Georgia Tech. Research Director @Meta AI. Co-founded Caliper. Generative artist stateoftheheart.ai.