Capa de Embedding en Keras: Conceptos y Parámetros Detallados

Una capa de embedding transforma índices enteros positivos en vectores densos de tamaño fijo. En esencia, el embedding es un mapeo desde el espacio semántico de las palabras hacia un espacio vectorial continuo, donde cada palabra se representa como un vector de dimensión constante. La propiedad clave es que palabras con significados cercanos producen vectores similares entre sí.

Para ilustrar el proceso, consideremos la frase: "Could have done better"

  1. Codificación por índices: Se asigna un identificador numérico único a cada palabra del vocabulario. La frase se convierte en una secuencia de enteros:
122  8  114  12
  1. Construcción de la matriz de embedding: Se define cuántas dimensiones tendrá cada vector. Si elegimos 5 dimensiones, cada índice se mapea a un vector de 5 valores continuos. Por ejemplo:
Índice 122: [0.019, -0.044, 0.039, 0.046, -0.021]
Índice 8:   [0.014, -0.000, 0.017, -0.037, 0.049]
Índice 114: [-0.046, 0.041, 0.026, -0.002, 0.034]
Índice 12:  [-0.031, 0.034, 0.032, 0.039, 0.017]

¿Por qué los vectores capturan similitudes semánticas?

Durante el entrenamiento de modelos de lenguaje no supervisados, se utiliza una ventana deslizante: se predicen palabras basándose en las n palabras prceedentes. Las palabras que aparecen dentro de la misma ventana reciben actualizaciones de pesos similares, y estas se acumulan a lo largo del entrenamiento. Palabras con patrones de uso parecidos —es decir, intercambiables en ciertos contextos— acumulan ajustes similares, generando vectores cercanos.

Por ejemplo, si dos caracteres casi siempre aparecen juntos, sus gradientes se actualizan de forma prácticamente idéntica, por lo que sus embeddings resultan casi iguales. Sin embargo, si los vectores se entrenan para una tarea específica como análisis de sentimiento, palabras como "gustar" y "odiar" pueden tener vectores muy distinots pese a compartir contextos gramaticales.

Parámetros de la capa Embedding en Keras

from tensorflow.keras.layers import Embedding

capa_embedding = Embedding(
    input_dim=vocab_size,          # Tamaño del vocabulario (cantidad de palabras)
    output_dim=dim_vector,         # Dimensionalidad de los vectores resultantes
    embeddings_initializer='uniform',  # Método de inicialización de la matriz
    embeddings_regularizer=None,       # Regularización aplicada a la matriz
    activity_regularizer=None,
    embeddings_constraint=None,        # Restricciones sobre la matriz
    mask_zero=False,               # Si True, el índice 0 se trata como padding
    input_length=seq_len           # Longitud fija de las secuencias de entrada
)

Tensor de entrada

La capa recibe un tensor 2D con forma (batch_size, seq_len), donde batch_size es la cantidad de muestras en el lote y seq_len es la longitud de cada secuencia tras el padding (cada elemento es el índice entero de una palabra).

Tensor de salida

La capa produce un tensor 3D con forma (batch_size, seq_len, dim_vector). Cada índice entero se reemplaza por su vector correspondiente de la matriz de embedding. Por ejemplo, si dim_vector=3, la palabra codificada como índice 5 podría mapearse al vector [0.21, -0.87, 0.44].

Detalle sobre mask_zero

Cuando se establece mask_zero=True, el valor 0 se interpreta como padding y la capa genera una máscara que propagan las capas posteriores. En este caso, los índices del vocabulario deben comenzar desde 1, ya que el 0 está reservado para el relleno. Esto implica que input_dim debe ser vocab_size + 1 para incluir el índice 0.

Etiquetas: keras embedding nlp TensorFlow word-embedding

Publicado el 6-30 02:40