Preparación para entrevistas de ML Multimodal

Preguntas de Entrevista para Ingenieros de Aprendizaje Automático Multimodal

15 preguntas seleccionadas de entrevista de aprendizaje automático multimodal, agrupadas por nivel de experiencia. Úselas para repasar los fundamentos, las compensaciones prácticas y el razonamiento de producción a nivel senior.

Iniciar una Entrevista de IA de ML MultimodalNo se requiere tarjeta de crédito. 1 sesión gratuita disponible.
Práctica de entrevistas técnicas en inglésDiseñado para hablantes no nativos que desean practicar entrevistas técnicas en inglés.

Preguntas para Junior

1Explica la idea central del aprendizaje contrastivo para alinear representaciones de imágenes y texto, y por qué un espacio de embedding compartido es útil.

La idea central del aprendizaje contrastivo para la representación de imagen-texto es proyectar las entradas de imagen y texto en un espacio vectorial latente compartido, de modo que los pares semánticamente coincidentes (positivos) se acerquen, mientras que los pares no coincidentes (negativos) se alejen. Al entrenar codificadores de visión y texto separados utilizando objetivos de similitud (como la similitud del coseno), el modelo alinea la semántica de los píxeles visuales continuos con los tokens textuales discretos. Un espacio de embedding compartido es útil porque permite resolver tareas multimodales directamente mediante la búsqueda de similitud vectorial. En este espacio unificado, la recuperación entre modalidades (encontrar imágenes a partir de consultas de texto, o viceversa) y la clasificación de disparo cero (zero-shot classification) (evaluar un embedding de imagen contra embeddings de "prompts" como 'una foto de un perro') se convierten en búsquedas de vecinos más cercanos o de productos escalares simples y altamente eficientes sin requerir "heads" clasificadores específicos de la tarea.

import torch
import torch.nn.functional as F

# image_features: [B, D], text_features: [B, D]
image_norm = F.normalize(image_features, dim=-1)
text_norm = F.normalize(text_features, dim=-1)

# Pairwise cosine similarity matrix: [B, B]
sim_matrix = image_norm @ text_norm.T
# Positive pairs lie on the diagonal; off-diagonals are negatives
Probar responder esta pregunta con un coach de IA

2Explique la arquitectura de codificador dual estilo CLIP y los supuestos que hace sobre la interacción imagen-texto.

La arquitectura de codificador dual estilo CLIP consta de dos redes neuronales separadas y desacopladas: un codificador visual (p. ej., Vision Transformer o ResNet) que procesa imágenes en vectores de características visuales, y un codificador de texto (p. ej., Transformer) que procesa texto en vectores de características de texto. Ambas representaciones se proyectan en una dimensión de incrustación común, donde la alineación se mide utilizando una métrica de similitud simple (como la similitud coseno normalizada o el producto escalar). El supuesto arquitectónico fundamental es la fusión tardía (o interacción intermodal factorizada): las modalidades de imagen y texto no interactúan en capas intermedias a través de la atención cruzada o interacciones a nivel de token. En cambio, se asume que la semántica completa de cada modalidad es compresible en un único resumen de vector denso, y se asume que la interacción intermodal es totalmente descomponible en un producto interno. Esta compensación prioriza una eficiencia de recuperación extrema (permitiendo el pre-cálculo offline de incrustaciones de imágenes para la búsqueda vectorial a escala de miles de millones) sobre un razonamiento intermodal de grano fino (como el anclaje de token a región o relaciones espaciales composicionales complejas).

import torch
import torch.nn as nn
import torch.nn.functional as F

class CLIPDualEncoder(nn.Module):
    def __init__(self, visual_encoder, text_encoder, img_dim, txt_dim, embed_dim):
        super().__init__()
        self.visual_encoder = visual_encoder
        self.text_encoder = text_encoder
        self.img_proj = nn.Linear(img_dim, embed_dim, bias=False)
        self.txt_proj = nn.Linear(txt_dim, embed_dim, bias=False)
        self.logit_scale = nn.Parameter(torch.ones([]) * 2.659)

    def forward(self, images, text_tokens):
        # Independent uncoupled encoding
        v_feat = self.img_proj(self.visual_encoder(images))
        t_feat = self.txt_proj(self.text_encoder(text_tokens))
        # L2 normalize
        v_norm = F.normalize(v_feat, p=2, dim=-1)
        t_norm = F.normalize(t_feat, p=2, dim=-1)
        # Late interaction via dot product
        return torch.matmul(v_norm, t_norm.T) * self.logit_scale.exp()
Probar responder esta pregunta con un coach de IA

3Describe la intuición detrás de proyectar características de imagen y texto en un espacio normalizado común y optimizar la similitud del coseno.

Proyectar características de imagen y texto en un espacio normalizado común (típicamente en una hiperesfera unitaria a través de la normalización L2) y optimizar la similitud del coseno desacopla la dirección semántica de una incrustación de la magnitud de su vector. Sin normalización, un producto escalar sin restricciones permite que el modelo minimice la pérdida de entrenamiento inflando trivialmente las normas de las características para muestras fáciles o frecuentes, en lugar de alinear sus direcciones semánticas. Normalizar vectores en la hiperesfera unitaria acota los valores de similitud estrictamente dentro de [-1, 1], asegurando que la distancia corresponda puramente a la separación angular. Esto estabiliza los gradientes de optimización, previene la explosión o el colapso de la representación, y asegura que cada muestra en un lote contribuya equitativamente a la pérdida, independientemente de las discrepancias de escala específicas de la modalidad. Cuando se combina con un parámetro de temperatura aprendible, controla la nitidez de la distribución de probabilidad sobre la hiperesfera para equilibrar la alineación de pares verdaderos con la dispersión uniforme de pares negativos.

import torch
import torch.nn.functional as F

# Unnormalized embeddings with extreme norm differences
v = torch.tensor([[10.0, 0.0], [0.1, 0.0]])
t = torch.tensor([[5.0, 0.0], [0.1, 0.0]])

# Raw dot products: heavily distorted by magnitude (50.0 vs 0.01)
raw_dot = v @ t.T

# L2 Normalized:
v_norm = F.normalize(v, p=2, dim=-1)
t_norm = F.normalize(t, p=2, dim=-1)
cosine_sim = v_norm @ t_norm.T
print('Cosine similarity matrix:\n', cosine_sim)
Probar responder esta pregunta con un coach de IA

4Explica el anclaje visual (`visual grounding`) y la comprensión de expresiones referenciales (`referring expression comprehension`) como localización condicionada por el lenguaje, y cómo difieren de la similitud a nivel de imagen.

El anclaje visual (`visual grounding`) (a menudo operacionalizado como Comprensión de Expresiones Referenciales, o REC (Referring Expression Comprehension)) es la tarea de localizar una región visual específica, una caja delimitadora (`bounding box`) o una máscara de segmentación dentro de una imagen basándose en una expresión referencial en lenguaje natural (por ejemplo, 'el hombre con una chaqueta azul junto a la lámpara'). Trata la localización como condicionada por el lenguaje, lo que requiere que el modelo resuelva relaciones espaciales lingüísticas, atributos e identidades de objetos hasta las coordenadas de píxel o espaciales. Esto difiere fundamentalmente de la similitud a nivel de imagen, que calcula un único puntaje de afinidad semántica holística entre una imagen completa y una cadena de texto (por ejemplo, determinar si una imagen coincide con la descripción 'un hombre en un parque'). La similitud a nivel de imagen no produce coordenadas espaciales, puede coincidir con imágenes donde el objeto referenciado no está localizado de forma única y a menudo falla en la resolución de desambiguación referencial de grano fino entre múltiples objetos similares en la misma escena.

# Image-level similarity:
# Input: Image I, Text T ("black dog sitting on the left")
# Output: scalar score s in [0, 1] or dot product
similarity_score = image_text_model(image, text)

# Referring Expression Comprehension (Visual Grounding):
# Input: Image I, Text T ("black dog sitting on the left")
# Output: Bounding box coordinates [x_min, y_min, x_max, y_max]
bbox = grounding_model.predict_box(image, text)
Probar responder esta pregunta con un coach de IA

5Explica la atención cruzada como un mecanismo de fusión entre tokens visuales y tokens de texto en transformadores multimodales.

En los transformadores multimodales, la atención cruzada actúa como un mecanismo de fusión asimétrico donde una modalidad dirige las consultas (Q) para atender a las claves (K) y los valores (V) extraídos de otra modalidad. Por ejemplo, cuando los tokens visuales actúan como consultas y los tokens de texto actúan como claves y valores, cada token visual calcula una suma ponderada por atención sobre las representaciones de texto, condicionando dinámicamente las características visuales en el contexto textual (y viceversa cuando el texto consulta los tokens visuales). Matemáticamente, dadas una secuencia visual X_v y una secuencia de texto X_t, la atención cruzada calcula: CrossAttention(Q_v, K_t, V_t) = softmax((Q_v * K_t^T) / sqrt(d)) * V_t donde Q_v = X_v * W_Q, K_t = X_t * W_K y V_t = X_t * W_V. Este mecanismo permite al modelo realizar una alineación semántica token a token de grano fino entre modalidades, independientemente de las diferencias en las longitudes de secuencia o en los espacios de características iniciales. La fusión bidireccional se puede lograr utilizando dos capas de atención cruzada simétricas (por ejemplo, de visión a lenguaje y de lenguaje a visión) o alternando bloques de atención cruzada.

import torch
import torch.nn as nn

class MultimodalCrossAttention(nn.Module):
    def __init__(self, d_model, n_heads):
        super().__init__()
        self.mha = nn.MultiheadAttention(embed_dim=d_model, num_heads=n_heads, batch_first=True)
        self.norm = nn.LayerNorm(d_model)

    def forward(self, visual_query_tokens, text_kv_tokens):
        # visual_query_tokens: [B, N_v, D], text_kv_tokens: [B, N_t, D]
        attn_out, _ = self.mha(
            query=visual_query_tokens, 
            key=text_kv_tokens, 
            value=text_kv_tokens
        )
        # Residual connection and normalization
        output = self.norm(visual_query_tokens + attn_out)
        return output
Probar responder esta pregunta con un coach de IA

6Explica cómo los aumentos de imagen, como el recorte, la vibración de color (color jitter) y la compresión, pueden ayudar o perjudicar la alineación contrastiva imagen-texto.

En el aprendizaje contrastivo multimodal (como CLIP), los aumentos de imagen tienen un propósito diferente que en el aprendizaje auto-supervisado unimodal (como SimCLR). Debido a que las imágenes se contrastan con pies de imagen emparejados en lugar de con otra vista aumentada de la misma imagen, los aumentos de datos pueden tanto beneficiar como corromper el aprendizaje de representaciones. Cómo Ayudan los Aumentos de Datos: 1. Prevención del aprendizaje por atajos: Los aumentos de datos suaves (como el recorte aleatorio, los volteos horizontales suaves y la vibración de color moderada) evitan que el codificador de visión dependa de artefactos visuales triviales de bajo nivel (por ejemplo, distribuciones de color de fondo, marcas de agua en las esquinas o sesgos de posición espacial). 2. Invariancia de punto de vista y escala: El escalado y recorte moderados animan al modelo a identificar objetos semánticos a través de diferentes distancias focales y perspectivas, asegurando una generalización robusta de 'zero-shot'. Cómo los Aumentos de Datos Pueden Ser Perjudiciales (Desalineación Semántica): 1. Recorte Aleatorio Agresivo: Si un pie de imagen describe un objeto específico ('un pájaro posado en una rama') y un recorte agresivo elimina completamente el pájaro, el recorte restante (solo hojas/cielo) se ve obligado a alinearse con el pie de imagen del pájaro. Esto introduce ruido de supervisión falso y degrada la precisión de recuperación. 2. Fuerte Vibración de Color (Color Jitter) / Inversión de Tono: Muchos pies de imagen describen explícitamente atributos de color ('un taxi amarillo', 'una manzana roja'). Los cambios fuertes de color transforman el taxi en azul o la manzana en verde, causando una contradicción semántica directa entre la entrada visual y el pie de imagen. 3. Desenfoque y Compresión Intensos: El submuestreo espacial agresivo, la compresión JPEG o el desenfoque gaussiano destruyen las pistas textuales de grano fino (texto OCR en señales, logotipos, texturas finas) que se describen explícitamente en los pies de imagen emparejados. Regla Práctica: El entrenamiento contrastivo multimodal requiere aumentos de datos significativamente más conservadores (por ejemplo, `Random Resized Crop` con un rango de escala `[0.5, 1.0]` y volteo suave) que el aprendizaje auto-supervisado unimodal.

from torchvision import transforms

# Multimodal contrastive transform: conservative to preserve caption semantics
clip_transforms = transforms.Compose([
    transforms.RandomResizedCrop(224, scale=(0.5, 1.0)),  # Conservative crop avoids dropping described entities
    transforms.RandomHorizontalFlip(p=0.5),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.481, 0.457, 0.408], std=[0.268, 0.261, 0.275])
])

# Unimodal self-supervised transform: aggressive, risks breaking image-text alignment
simclr_heavy_transforms = transforms.Compose([
    transforms.RandomResizedCrop(224, scale=(0.08, 1.0)), # Extreme crop can remove captioned subjects
    transforms.RandomApply([transforms.ColorJitter(0.8, 0.8, 0.8, 0.2)], p=0.8), # Alters color adjectives
    transforms.RandomGrayscale(p=0.2),
    transforms.GaussianBlur(kernel_size=23, sigma=(0.1, 2.0)), # Destroys fine OCR/textures
    transforms.ToTensor()
])
Probar responder esta pregunta con un coach de IA

7Explicar la recuperación de imagen-texto como una tarea y la diferencia entre la coincidencia de conjunto cerrado y la recuperación en mundo abierto sobre grandes corpus.

La recuperación de imagen-texto es la tarea de encontrar datos correspondientes entre modalidades, dada una consulta en una modalidad (texto a imagen o imagen a texto), lo que se logra típicamente mapeando tanto imágenes como textos a un espacio de representación compartido donde la similitud se correlaciona con la relevancia. La coincidencia de conjunto cerrado asume un conjunto de candidatos fijo y predefinido con pares de verdad fundamental conocidos (como los benchmarks estándar Flickr30k o MS-COCO), permitiendo el cálculo exhaustivo de similitud por pares o la atención cruzada de todos con todos. La recuperación en mundo abierto opera sobre corpus masivos, dinámicos y sin curar (por ejemplo, de millones a miles de millones de elementos web o de catálogo) donde los conjuntos de candidatos no están restringidos, los distractores y los falsos negativos son prevalentes, y se requieren índices de búsqueda escalables de vecinos más cercanos aproximados (ANN) (por ejemplo, Faiss, HNSW) porque la atención cruzada exhaustiva sobre todos los pares es computacionalmente intratable.

import torch
import torch.nn.functional as F

# Closed-set matching: full pairwise similarity matrix over fixed evaluation set
image_embeds = F.normalize(torch.randn(1000, 512), dim=-1)
text_embeds = F.normalize(torch.randn(1000, 512), dim=-1)
sim_matrix = torch.matmul(text_embeds, image_embeds.T)  # (1000, 1000)

# Open-world retrieval: query vector queried against an indexed corpus using ANN
# index = faiss.IndexHNSWFlat(512, 32)
# distances, indices = index.search(query_embed, k=10)
Probar responder esta pregunta con un coach de IA

Preguntas para Intermedio

8Comparar las funciones de pérdida contrastivas softmax estilo InfoNCE con las funciones de pérdida sigmoide por pares para el aprendizaje de incrustaciones de imagen-texto.

Las funciones de pérdida contrastivas estilo InfoNCE (como las de CLIP) tratan la alineación como un problema de clasificación multicategoría. Para cada muestra, calcula una distribución softmax sobre todos los pares negativos candidatos en el lote, normalizando las similitudes en todo el pool de lotes. En contraste, las funciones de pérdida sigmoide por pares (como las de SigLIP) tratan cada entrada en la matriz de similitud imagen-texto como una tarea de clasificación binaria independiente, aplicando una función sigmoide y una pérdida de entropía cruzada binaria por cada par (los pares positivos apuntan a +1, los pares negativos apuntan a -1). Las diferencias clave son: 1. Acoplamiento vs. Desacoplamiento: InfoNCE acopla todos los negativos a través del denominador de la partición softmax global, lo que provoca una competencia donde los negativos más difíciles dominan los gradientes. SigLIP desacopla todos los pares, evaluando cada uno de forma independiente. 2. Escalabilidad y Eficiencia Distribuida: InfoNCE requiere la recolección de matrices de similitud a través de GPUs para la normalización global (cuello de botella de comunicación all-gather). La pérdida por pares independiente de SigLIP puede calcularse localmente sin una normalización softmax global entre GPUs, mejorando la eficiencia de escalado y manteniéndose estable tanto en lotes pequeños como muy grandes.

import torch
import torch.nn.functional as F

def siglip_loss(sim_matrix, temperature, bias):
    # sim_matrix: [B, B] dot product of normalized embeddings
    # targets: 1 on diagonal (positive), -1 on off-diagonals (negative)
    B = sim_matrix.size(0)
    targets = 2 * torch.eye(B, device=sim_matrix.device) - 1.0
    logits = sim_matrix * temperature + bias
    # Pairwise binary cross entropy with log-sigmoid
    return -torch.mean(F.logsigmoid(targets * logits))
Probar responder esta pregunta con un coach de IA

9Explique cómo los negativos difíciles y los falsos negativos afectan el aprendizaje contrastivo imagen-texto.

Los negativos difíciles (`hard negatives`) y los falsos negativos (`false negatives`) tienen efectos contrastantes en el aprendizaje contrastivo imagen-texto: 1. **Negativos difíciles**: Son pares no coincidentes que son semántica o visualmente muy cercanos al ancla (por ejemplo, una imagen de un husky siberiano emparejada con la descripción 'un malamute de Alaska'). Los negativos difíciles proporcionan señales de gradiente informativas y de alta magnitud. Obligan al modelo a ir más allá de las características de categoría gruesas y a aprender detalles visuales-lingüísticos de grano fino y límites de decisión nítidos. 2. **Falsos negativos**: Ocurren cuando los pares 'negativos' muestreados aleatoriamente en el lote son en realidad coincidencias semánticas válidas (por ejemplo, dos fotos distintas de golden retrievers donde una se empareja como negativa contra 'un lindo golden retriever en un parque'). Los falsos negativos penalizan las alineaciones semánticas correctas al forzar al modelo a separar representaciones válidas coincidentes. Esto corrompe los gradientes, degrada la calidad de la representación y suprime la sinonimia legítima y la varianza visual. Las estrategias de mitigación para los falsos negativos incluyen objetivos contrastivos de suavizado de etiquetas/suave, aprendizaje contrastivo des-sesgado, deduplicación del conjunto de datos y coincidencia multipositiva.

import torch
import torch.nn.functional as F

# Image 0 and Image 1 both depict 'a red sports car'
# Text 0: 'a red sports car', Text 1: 'a fast red car'
# In standard InfoNCE, Text 1 is treated as a negative for Image 0.
sim = torch.tensor([[0.95, 0.90],   # Image 0 similarities
                    [0.88, 0.94]])  # Image 1 similarities

loss_img0 = -F.log_softmax(sim / 0.07, dim=-1)[0, 0]
print(f'InfoNCE loss for Image 0: {loss_img0.item():.4f}')
# High similarity to false negative Text 1 (0.90) heavily penalizes the model
Probar responder esta pregunta con un coach de IA

10Compare la alineación global imagen-texto con los objetivos de alineación a nivel de región-palabra o token.

La alineación global imagen-texto mapea una imagen completa y una secuencia de texto completa en vectores de incrustación (embedding) holísticos únicos (por ejemplo, a través de características agrupadas en CLIP) y los alinea utilizando un objetivo contrastivo como InfoNCE. Esto proporciona excelentes propiedades de escalado, representaciones indexables rápidas para la recuperación y un fuerte agrupamiento semántico. Sin embargo, adolece de una granularidad espacial gruesa, tiene dificultades con los detalles visuales de grano fino, la composicionalidad, el conteo y las relaciones espaciales, y con frecuencia exhibe problemas de enlace de atributos. En contraste, la alineación a nivel de región-palabra o token opera en granularidades de sub-imagen de grano fino (por ejemplo, tokens de parche, características de cajas delimitadoras de objetos) y de sub-frase (por ejemplo, tokens de palabra o subpalabra). Métodos como FILIP, GLIP o VinVL alinean tokens a través de pérdidas contrastivas de grano fino (como `token-wise max-sim` o `Chamfer similarity`) o mediante transporte óptimo / alineación por atención cruzada. Esto preserva explícitamente los detalles composicionales espaciales y lingüísticos, lo que permite la detección de objetos, el anclaje visual (visual grounding) y un enlace de atributos preciso, pero a costa de una mayor complejidad computacional y de memoria, una mayor latencia de inferencia y señales de alineación más ruidosas.

import torch
import torch.nn.functional as F

# visual_tokens: [B, N_v, D], text_tokens: [B, N_t, D]
def token_level_maxsim_similarity(visual_tokens, text_tokens):
    v_norm = F.normalize(visual_tokens, dim=-1)
    t_norm = F.normalize(text_tokens, dim=-1)
    # Compute similarity matrix between all visual and text tokens: [B, N_t, N_v]
    sim_matrix = torch.bmm(t_norm, v_norm.transpose(1, 2))
    # Text-to-image: For each word token, find maximum visual token similarity and average
    t2i_sim = sim_matrix.max(dim=-1).values.mean(dim=-1) # [B]
    return t2i_sim
Probar responder esta pregunta con un coach de IA

11Compare la fusión temprana, la fusión tardía, la fusión intermedia, la fusión por atención cruzada, la fusión con compuertas y la concatenación para modelos multimodales.

Las estrategias de fusión multimodal integran señales de visión y lenguaje a diferentes profundidades y configuraciones estructurales: 1. **Fusión Temprana**: Las características crudas o de bajo nivel (por ejemplo, incrustaciones de parches de imagen e incrustaciones de _tokens_ de palabras) se fusionan en la etapa de entrada y se alimentan a un único _backbone_ compartido. Esto permite interacciones intermodales profundas desde la capa cero, pero es computacionalmente costoso y dificulta la reutilización del preentrenamiento unimodal. 2. **Fusión Tardía**: Las modalidades se procesan independientemente mediante _backbones_ unimodales profundos en vectores de representación globales, que se combinan solo al final mediante una agregación simple (por ejemplo, producto punto, similitud de coseno o una MLP (Perceptrón Multicapa) superficial). Esto es extremadamente eficiente e ideal para la recuperación indexable, pero no puede capturar interacciones intermodales de grano fino. 3. **Fusión Intermedia**: Los _backbones_ unimodales procesan las entradas durante varias capas, y la fusión ocurre en etapas intermedias a través de capas compartidas o conexiones laterales, logrando un equilibrio entre la especialización unimodal y la interacción multimodal. 4. **Fusión por Atención Cruzada**: Utiliza atención multi-cabeza (_multi-head attention_) donde una modalidad proporciona las _queries_ y la otra las _keys/values_. Ofrece una alta capacidad representativa con condicionamiento _token_ a _token_, acomodando longitudes de secuencia heterogéneas. 5. **Fusión con Compuertas**: Utiliza mecanismos de compuerta aprendidos (por ejemplo, compuertas sigmoides o tanh) para ponderar dinámicamente la contribución de cada modalidad o capa de fusión basándose en la confianza contextual, evitando que una modalidad domine o corrompa los pesos preentrenados. 6. **Concatenación**: Fusiona vectores de características o secuencias de _tokens_ a lo largo de la dimensión de características (concatenación de características) o la dimensión de longitud de secuencia (concatenación de _tokens_ antes de un transformador unificado). Es simple y no paramétrico, pero la concatenación de características requiere dimensiones espaciales/temporales alineadas, mientras que la concatenación de _tokens_ escala cuadráticamente con la longitud total de la secuencia en la autoatención (_self-attention_).

import torch
import torch.nn as nn
import torch.nn.functional as F

# 1. Concatenation along feature dimension
z_concat = torch.cat([img_feat, txt_feat], dim=-1) # [B, D_img + D_txt]

# 2. Gated Fusion
gate = torch.sigmoid(gate_layer(z_concat)) # [B, D]
z_gated = gate * img_proj + (1 - gate) * txt_proj

# 3. Late Fusion (Score level)
similarity = torch.sum(F.normalize(img_feat, dim=-1) * F.normalize(txt_feat, dim=-1), dim=-1)
Probar responder esta pregunta con un coach de IA

12Compara los modelos de recuperación de codificador dual con los rerankers de codificador cruzado para la coincidencia imagen-texto en términos de capacidad de interacción, precisión y latencia.

Los modelos de codificador dual (bi-codificador) y los rerankers de codificador cruzado representan dos paradigmas distintos para la coincidencia imagen-texto, presentando compensaciones fundamentales entre capacidad de interacción, precisión y latencia: 1. Capacidad de Interacción: - Codificadores Duales (por ejemplo, CLIP): Procesan la imagen y el texto a través de backbones (arquitecturas) separadas y desacopladas. La interacción multimodal es estrictamente tardía y superficial, limitada a un solo producto escalar o similitud de coseno entre vectores agrupados globalmente. Carecen de interacciones intermodales a nivel de token. - Codificadores Cruzados (por ejemplo, UNITER, ViLT, rama multimodal ALBEF): Concatenan tokens visuales y de texto en un transformador compartido o usan capas de atención cruzada. Cada token visual puede interactuar con cada token de texto a través de múltiples capas, lo que permite un razonamiento intermodal profundo. 2. Precisión: - Los codificadores duales logran una menor precisión en consultas composicionales complejas, relaciones espaciales, negación y coincidencia de atributos de grano fino debido al cuello de botella de las representaciones de vector único. - Los codificadores cruzados logran una precisión significativamente mayor en tareas complejas, de grano fino y composicionales de coincidencia imagen-texto. 3. Latencia y Escalabilidad: - Los codificadores duales permiten precomputar e indexar incrustaciones de imágenes fuera de línea en una base de datos vectorial (por ejemplo, Milvus, FAISS). En tiempo de inferencia, solo se codifica la consulta de texto, y la búsqueda sobre millones de candidatos requiere solo productos escalares de vecinos más cercanos aproximados (ANN) ligeros (latencia de submilisegundos). - Los codificadores cruzados requieren ejecutar la red neuronal conjunta completa para cada par candidato (imagen, texto) en tiempo de consulta (O(N) pasadas hacia adelante para N candidatos), lo que resulta en una latencia órdenes de magnitud mayor y los hace computacionalmente prohibitivos para la recuperación de primera etapa sobre grandes corpus. En sistemas de producción prácticos, un pipeline de dos etapas es estándar: un codificador dual recupera los K candidatos principales (por ejemplo, K=100) con baja latencia, seguido por un codificador cruzado que los reordena para una alta precisión.

# Stage 1: Dual-Encoder First-Stage Retrieval (Fast, Vector Index)
query_emb = text_encoder(query_text) # [1, D]
# Cosine similarity over pre-indexed image embeddings [N, D]
scores = query_emb @ precomputed_image_embeddings.T # [1, N]
top_k_indices = torch.topk(scores, k=100).indices[0]

# Stage 2: Cross-Encoder Reranker (Accurate, Token Interaction)
candidate_images = [load_image(idx) for idx in top_k_indices]
rerank_scores = cross_encoder(candidate_images, [query_text] * 100) # Full cross-attention
final_ranking = top_k_indices[torch.argsort(rerank_scores, descending=True)]
Probar responder esta pregunta con un coach de IA

Preguntas para Senior

13¿Cómo diseñaría un sistema RAG (Generación Aumentada por Recuperación) multimodal sobre PDFs o manuales que contengan texto, tablas, gráficos, capturas de pantalla, diagramas e imágenes incrustadas?

Un sistema RAG (Generación Aumentada por Recuperación) multimodal de extremo a extremo para documentos visuales complejos (PDFs, manuales, informes) abarca cuatro etapas arquitectónicas principales: 1. **Ingesta y Análisis Consciente del Diseño**: Las páginas PDF se procesan mediante modelos de documentos conscientes del diseño (p. ej., LayoutLM, DocTR) o pipelines de análisis de visión para segmentar el contenido en bloques estructurados: pasajes de texto, tablas estructuradas (convertidas a HTML/Markdown con extensiones de celdas), imágenes de gráficos renderizadas con series de datos, y diagramas o capturas de pantalla independientes con cuadros delimitadores espaciales. 2. **Indexación Multimodal y Representación Dual**: * **Activos Visuales (Gráficos, Capturas de Pantalla, Diagramas)**: Almacenados como recortes de imágenes con embeddings multimodales densos (p. ej., SigLIP, CLIP o tokens de parche visual de ColPali) junto con resúmenes textuales sintéticos y texto OCR (Reconocimiento Óptico de Caracteres) generado por un VLM (Modelo de Lenguaje Visual), almacenado en un índice de texto denso. * **Tablas**: Almacenadas como Markdown/HTML estructurado en índices de vectores de texto y BM25. * **Texto**: Segmentado por sección semántica e indexado mediante embeddings densos y palabras clave dispersas. 3. **Recuperación Híbrida y Reclasificación Multimodal**: * **Recuperación de Primera Etapa**: Ejecuta una recuperación paralela a través de índices dispersos BM25 (palabras clave, texto OCR, marcado de tabla), vectores de texto densos e índices de embedding visual (búsqueda ANN (vecinos más cercanos aproximados)). * **Fusión y Reclasificación**: Fusiona candidatos (p. ej., mediante Reciprocal Rank Fusion) y puntúa los elementos superiores utilizando un codificador cruzado multimodal o un modelo de interacción tardía visual (puntuando el texto de consulta frente a recortes de imágenes de alta resolución y texto analizado). 4. **Ensamblaje de Contexto Multimodal y Generación Fundamentada**: El contexto multimodal top-k (parches de imágenes renderizados, esquemas de tabla y pasajes de texto con metadatos de documento/página) se pasa a un VLM (Modelo de Lenguaje Visual) ajustado por instrucciones (p. ej., GPT-4o, Claude 3.5 Sonnet o el open-source Qwen2-VL). El prompt de generación exige la procedencia de la fuente requiriendo citas explícitas (números de página, números de figura o cuadros delimitadores).

from dataclasses import dataclass
from typing import Optional, List

@dataclass
class MultimodalChunk:
    chunk_id: str
    document_id: str
    page_number: int
    modality_type: str  # 'text', 'table', 'chart', 'diagram'
    text_payload: str   # Raw text or structured Markdown/HTML
    vlm_caption: Optional[str] = None  # Synthetic summary of visual content
    bbox: Optional[List[float]] = None  # [x0, y0, x1, y1]
    image_crop_path: Optional[str] = None
    dense_embedding: Optional[List[float]] = None

# Indexing strategy: Text search covers text_payload + vlm_caption;
# Multimodal search matches dense_embedding or visual tokens.
Probar responder esta pregunta con un coach de IA

14Explique cómo la evaluación de RAG (Retrieval-Augmented Generation) multimodal debe medir por separado la calidad de recuperación, la utilización de evidencia, la procedencia y la fidelidad de la respuesta final.

La evaluación de RAG multimodal requiere descomponer el sistema en cuatro dimensiones de evaluación desacopladas para determinar si los errores se originan en la recuperación, el consumo de contexto, la precisión de las citas o la generación: 1. **Calidad de Recuperación:** Evalúa si el recuperador identifica los fragmentos visuales y textuales necesarios. Las métricas clave incluyen Recall@K, NDCG@K y MRR multimodales. Para los elementos visuales, esto también incluye IoU Visual / Recall de Bounding Box (si el recorte de imagen recuperado contiene el diagrama/gráfico relevante) y Equilibrio de Recall por Modalidad (asegurando que las modalidades no textuales como tablas y gráficos no se omitan sistemáticamente). 2. **Utilización de Evidencia (Suficiencia y Necesidad):** Mide si el modelo de generación realmente se basa en la evidencia multimodal recuperada en lugar de generar respuestas puramente a partir de la memoria paramétrica. Esto se mide a través de la Relevancia del Contexto (precisión de los tokens visuales/textuales recuperados que apoyan la pregunta), la Necesidad de Evidencia / Pruebas de Ablación (enmascarar o eliminar el gráfico/tabla recuperado para verificar si la respuesta falla), y el análisis de atribución de atención cruzada. 3. **Procedencia y Precisión de Citas:** Mide si las atribuciones de fuente son precisas y verificables. Se evalúa mediante Precisión, Recall y F1 sobre las citas (nombres de documentos, números de página, IDs de figuras o coordenadas de bounding box). Las comprobaciones automatizadas verifican que el bounding box o la página citada realmente contenga la evidencia de verdad fundamental necesaria para responder a la pregunta. 4. **Fidelidad y Corrección de la Respuesta Final:** * **Fidelidad / Fundamentación:** Evalúa si cada afirmación generada está implicada por el contexto multimodal recuperado sin alucinaciones (típicamente evaluado mediante un VLM (Vision-Language Model) como juez que verifica la implicación de la afirmación contra recortes de texto y visuales). * **Corrección Factual:** Evalúa si la respuesta generada coincide con la verdad fundamental. * **Robustez de Rechazo:** Comprueba si el modelo se niega correctamente a responder cuando el contexto recuperado es irrelevante o conflictivo.

# Evaluation record schema for a single Multimodal RAG query:
eval_record = {
    'retrieval_quality': {
        'hit_at_k': True,          # Top-3 chunks contain target diagram
        'visual_bbox_iou': 0.85    # Retrieved crop overlap with true figure region
    },
    'evidence_utilization': {
        'necessity_ablation_passed': True  # Removing chart causes answer to fail
    },
    'provenance': {
        'page_match': True,        # Cited Page 12 (Ground Truth Page 12)
        'figure_id_match': True    # Cited 'Figure 4'
    },
    'faithfulness': {
        'claim_entailment_score': 1.0,  # All claims entailed by context
        'hallucination_detected': False
    }
}
all_passed = all(all(metrics.values()) for metrics in eval_record.values())
print(f'System passes all decoupled checks: {all_passed}')
Probar responder esta pregunta con un coach de IA

15Razone sobre la actualización de modelos de recuperación multimodal en producción cuando los embeddings de la galería y los índices deben ser actualizados a gran escala.

La actualización de un sistema de recuperación multimodal a gran escala presenta un problema de deriva de la representación: los embeddings recién generados residen en un espacio latente geométrico diferente y no se pueden comparar directamente con los embeddings de la galería existentes sin una grave degradación del *recall*. En consecuencia, las actualizaciones sin tiempo de inactividad requieren despliegues *blue/green* de doble índice, aprendizaje de compatibilidad (como entrenamiento compatible con versiones anteriores o adaptadores de transformación), o *pipelines* de reindexación por etapas. En un flujo de trabajo estándar de reindexación *blue/green*, los trabajos por lotes fuera de línea calculan nuevos embeddings en toda la galería y construyen un nuevo índice vectorial (como HNSW o IVF). Mientras se ejecuta la reconstrucción, el tráfico de búsqueda en vivo continúa consultando el índice heredado activo. Los nuevos elementos entrantes se manejan mediante escritura dual o *logs* de captura de datos cambiantes (CDC) en *streaming* para que ambos índices se mantengan actualizados. Una vez que el nuevo índice se valida mediante tráfico en sombra y se carga en memoria, el tráfico cambia atómicamente al nuevo codificador e índice, después de lo cual el índice antiguo se desactiva. Alternativamente, el aprendizaje compatible con versiones anteriores restringe el nuevo codificador de consultas para que se alinee con el espacio de la galería heredado, permitiendo actualizaciones inmediatas del modelo de consulta mientras se rellena asincrónicamente la galería con el tiempo.

class MultimodalRetrievalRouter:
    def __init__(self, v1_service, v2_service, dual_write=True):
        self.v1 = v1_service  # Model v1 + Index v1
        self.v2 = v2_service  # Model v2 + Index v2
        self.active_version = "v1"
        self.dual_write = dual_write

    def search(self, query_multimodal):
        # Route query strictly to the encoder matching the active index
        if self.active_version == "v1":
            return self.v1.search(query_multimodal)
        return self.v2.search(query_multimodal)

    def ingest_new_item(self, item):
        # Dual-write during migration window so the new index is up-to-date at cutover
        self.v1.index_item(item)
        if self.dual_write and self.v2.is_ready_for_ingest:
            self.v2.index_item(item)
Probar responder esta pregunta con un coach de IA