La capa de codificación posicional del transformador en Keras, parte 2

Última actualización el 25 de septiembre de 2022

En la parte 1: Una breve introducción a la codificación posicional en modelos de transformadores, discutimos la capa de codificación posicional del modelo de transformadores. También mostramos cómo puede implementar esta capa y sus funciones usted mismo en Python. En este tutorial, implementaremos la capa de codificación posicional en Keras y Tensorflow. A continuación, puede utilizar esta capa en un modelo de transformador completo.

Después de completar este tutorial, sabrás:

  • Vectorización de texto en Keras
  • Capa de incrustación en Keras
  • Cómo subclasificar la capa de incrustación y escribir su propia capa de codificación posicional.

Empecemos.

La capa de codificacion posicional del transformador en Keras parte

La capa de codificación posicional del transformador en Keras, parte 2.
Foto de Ijaz Rafi. algunos derechos reservados

Descripción general del tutorial

Este tutorial se divide en 3 partes; están:

  1. Vectorización de texto y capa de incrustación en Keras
  2. Escribiendo tu propia capa de codificación posicional en Keras
    1. Embebidos aleatoriamente inicializados y sintonizables
    2. Embebidos de peso fijo desde La atención es todo lo que necesitas
  3. Vista gráfica de la salida de la capa de codificación posicional

Primero, escribamos la sección para importar todas las bibliotecas requeridas:

Comenzaremos con un conjunto de frases en inglés, que ya están preprocesadas y limpiadas. La capa de vectorización de texto crea un diccionario de palabras y reemplaza cada palabra por su índice correspondiente en el diccionario. Veamos cómo podemos mapear estas dos oraciones usando la capa de vectorización de texto:

  1. Soy un robot
  2. tú también robot

Tenga en cuenta que ya convertimos el texto a minúsculas y eliminamos todos los signos de puntuación y el ruido en el texto. Convertiremos estas dos frases en vectores de una longitud fija 5. El TextVectorization capa de Keras requiere un tamaño de vocabulario máximo y la longitud necesaria de la secuencia de salida para la inicialización. La salida de la capa es un tensor de forma:

(number of sentences, output sequence length)

El siguiente fragmento de código utiliza el adapt método para generar un vocabulario. A continuación, crea una representación vectorizada de texto.

Las Keras Embedding capa convierte números enteros en vectores densos. Esta capa asigna estos enteros a números aleatorios, que luego se ajustan durante la fase de entrenamiento. Sin embargo, también tiene la opción de establecer el mapeo en algunos valores de peso predefinidos (que se muestran más adelante). Para inicializar esta capa, necesitamos especificar el valor máximo de un número entero para mapear, junto con la longitud de la secuencia de salida.

Las incrustaciones de palabras

Veamos cómo la capa convierte nuestra vectorized_text a los tensores.

He anotado el resultado con mis comentarios como se muestra a continuación. Tenga en cuenta que verá un resultado diferente cada vez que ejecute este código porque los pesos se inicializaron aleatoriamente.

Incrustaciones de palabras.

Incrustaciones de palabras. Esta salida será diferente cada vez que ejecute el código debido a los números aleatorios involucrados.

También necesitamos las incrustaciones para las posiciones correspondientes. Las posiciones máximas corresponden a la longitud de la secuencia de salida del TextVectorization capa.

La salida se muestra a continuación:

Incrustación de índices de posición.

Incrustación de índices de posición.

En un modelo de transformador, la salida final es la suma de las incrustaciones de palabras y las incrustaciones de posición. Por lo tanto, cuando configura ambas capas incrustadas, debe asegurarse de que el output_length es el mismo para ambos.

El resultado se muestra a continuación, anotado con mis comentarios. Nuevamente, esto será diferente de su ejecución del código debido al peso aleatorio inicialización

1664528500 541 La capa de codificacion posicional del transformador en Keras parte

El resultado final después de agregar la incrustación de palabras y la incrustación de posición

Al implementar un modelo de transformador, deberá escribir su propia capa de codificación de posición. Esto es bastante simple ya que la funcionalidad básica ya se proporciona para usted. Este Ejemplo de Keras muestra cómo puede subclasificar el Embedding capa para implementar su propia funcionalidad. Puede agregarle más métodos según lo requiera.

Ejecutemos esta capa.

Codificación posicional en transformadores: todo lo que necesita es atención

Tenga en cuenta que la clase anterior crea una capa de incrustación que tiene pesos entrenables. Por lo tanto, los pesos se inicializan aleatoriamente y se ajustan en la fase de entrenamiento.

los autores de La atención es todo lo que necesitas han especificado un esquema de codificación posicional como se muestra a continuación. Puedes leer los detalles completos en la parte 1 de este tutorial:

begin
P(k, 2i) &=& sinGrande(fracGrande)\
P(k, 2i+1) &=& cosGrande(fracGrande)
end

Si desea utilizar el mismo esquema de codificación posicional, puede especificar su propia matriz de incrustación como se explica en la parte 1, que muestra cómo crear sus propias incrustaciones en NumPy. Al especificar el Embedding capa, debe proporcionar la matriz de codificación posicional como pesos junto con trainable=False. Vamos a crear otra clase de incrustación posicional que haga exactamente esto.

A continuación, configuramos todo para ejecutar esta capa.

Para visualizar las incrustaciones, tomemos dos oraciones más grandes, una técnica y la otra solo una cita. Configuraremos el TextVectorization capa junto con la capa de codificación posicional y vea cómo se ve el resultado final.

Ahora veamos cómo se ven las incrustaciones aleatorias para ambas frases.

incrustaciones aleatorias

Incrustaciones aleatorias

La incrustación de la capa de pesos fijos se visualiza a continuación.

Incrustación mediante codificación posicional sinusoidal

Incrustación mediante codificación posicional sinusoidal

Podemos ver que la capa de incrustación inicializada usando el parámetro predeterminado genera valores aleatorios. Por otro lado, los pesos fijos generados usando sinusoides crean una firma única para cada frase con información sobre cada posición de palabra codificada dentro de ella.

Puede experimentar con implementaciones ajustables o de peso fijo para su aplicación en particular.

Esta sección proporciona más recursos sobre el tema si desea profundizar más.

Libros

Documentos

Artículos

Resumen

En este tutorial, descubrió la implementación de la capa de codificación posicional en Keras.

Específicamente, aprendiste:

  • Capa de vectorización de texto en Keras
  • Capa de codificación posicional en Keras
  • Crear tu propia clase para la codificación posicional
  • Configuración de sus propios pesos para la capa de codificación posicional en Keras

¿Tiene alguna pregunta sobre la codificación posicional discutida en esta publicación? Haga sus preguntas en los comentarios a continuación y haré todo lo posible para responder.

Fuente del artículo

Deja un comentario