El Papel de los Vectores K y V en la Inferencia de Modelos de Lenguaje

Cuando trabajamos con modelos de lenguaje privados como Gemini, GPT-4, Llama 3, Mistral u Open source como los disponibles en Hugging Face, solo por nombrar algunos, internamente usan una arquitectura llamada Transformers, donde ocurre el mecanismo de atención (self-attention).

En este mecanismo, los vectores K (Key) y V (Value) juegan un papel fundamental para que el modelo pueda decidir qué información es relevante en cada paso de la inferencia.

Primero hagamos un refresh sobre el concepto de inferencia:

¿Qué es la inferencia en Machine Learning?

La inferencia en machine learning es el proceso de tomar un modelo previamente entrenado y utilizarlo para hacer predicciones o generar respuestas basadas en nuevos datos.

En nuestro caso, cuando usamos Gemini o cualquier otro modelo de lenguaje, la inferencia es el momento en el que el modelo recibe un texto y genera una respuesta.

Ejemplo:

  1. Entrenamiento: Se entrena un modelo en grandes cantidades de datos (esto ya lo hizo Google con Gemini por ejemplo).
  2. Inferencia: Enviamos un texto y el modelo genera una respuesta sin necesidad de volver a entrenarlo.

📌 Importante:

  • La inferencia puede hacerse en la nube (usando APIs) o en servidores propios (con modelos open-source).
  • La rapidez y eficiencia de la inferencia dependen de cómo está optimizado el modelo y del hardware utilizado (GPU, CPU, RAM).

Dicho esto volvamos a lo nuestro:

¿Qué son los vectores K y V?

Los modelos basados en Transformers procesan cada palabra o token en una oración utilizando tres tipos de vectores:

🔹 Q (Query): Representa la palabra o token que se está analizando en un momento dado.

🔹 K (Key): Representa la información que cada palabra/token tiene disponible para que otros puedan consultarla.

🔹 V (Value): Contiene la información final que se usará para generar la salida del modelo.

👉 Cada palabra en el texto de entrada tiene su propio vector Q, K y V.

Ejemplo: Si procesamos la frase “El gato duerme en la cama”, el modelo asignará un conjunto de Q, K y V a cada palabra.

¿Cómo funcionan K y V en la inferencia?

Cuando el modelo recibe un nuevo token de entrada (ejemplo: “El”), debe decidir qué tan relevante es cada palabra previa para predecir la siguiente.

1️⃣ El vector Q del token actual (“El”) se compara con los vectores K de todas las palabras anteriores.

  • Esto permite calcular qué palabras pasadas son importantes para el contexto.

2️⃣ Se calcula una ponderación (peso de atención) para cada palabra anterior.

  • Si “gato” es altamente relevante, recibirá un peso mayor.

3️⃣ Se usa la combinación de pesos y vectores V para generar el nuevo token.

  • El modelo combina los valores V de las palabras importantes para producir una salida coherente.

🔹 Ejemplo gráfico de atención (simplificado):

   Palabras:  ["El", "gato", "duerme", "en", "la", "cama"]
   K:          (info de cada palabra)
   V:          (contenido útil para predicción)
   Q:  "duerme" → se compara con K de "El", "gato", "duerme"...
   Atención:  "duerme" se conecta más con "gato" que con "cama".

📌 Resultado: El modelo sabe que “duerme” está más relacionado con “gato”, por lo que es probable que las siguientes palabras estén relacionadas con el sueño o descanso.

¿Por qué es importante esto en la inferencia?

Cuando un modelo genera texto, tiene que recordar cuál fue la información relevante de los tokens previos sin recalcular todo desde cero.

Aquí es donde los vectores K y V son cruciales:

Permiten reusar información previa sin volver a procesarla en cada paso.

Reducen el costo computacional de la inferencia en textos largos.

Mejoran la velocidad de generación de palabras en el modelo.

💡 En modelos optimizados como vLLM, se usan “Key-Value Caches” para almacenar los vectores K y V. Esto evita repetir cálculos innecesarios y hace que el modelo genere respuestas más rápido.

Scroll al inicio