Large Language Model (LLM) from scratch. Large Language Models.

En esta entrada introduciremos los LLMs. Al igual que el resto de las publicaciones relacionadas con este tópico, seguiremos fielmente el libro de Jurafsky y Martin (2026), puesto que es extremadamente ilustrativo. En esta línea, partiremos la presente entrada definiendo los LLM’s tal y como lo hacen estos autores en el capítulo 7. En particular, los definen como agentes que pueden interactuar conversacionalmente con gente.

Naturalmente, para que esos agentes sean funcionales, no sólo hay que tener una estrategia estadística, si no también, conjuntos de dato especiales. En esta publicación, veremos dicha estrategia y el tipo de datos necesario para que este agente sea funcional.

La estructura de esta publicación es la siguiente. Primero definiremos algunos conceptos básicos detrás de la construcción de un LLM; luego veremos cuáles son las arquitecturas estándar utilizadas para construir uno; después introduciremos el concepto de prompting; y finalmente uniremos todas las piezas para entender el flujo habitual de entrenamiento de un LLM.

1) Introduciendo conceptos…

¿Qué es un LLM?

Un Large Language Model (LLM) es sólo un modelo de lenguaje en una escala relativamente más grande. En este sentido, vale la pena recordar qué es un modelo de lenguaje. En pocas palabras, es un sistema computacional que predice la siguiente palabra dada palabras previas, o contexto. Para llevar a cabo esta predicción, se realiza una etapa de preentrenamiento.

Preentrenamiento

Preentrenamiento es la primera gran etapa de entrenamiento de un LLM. Consiste en tomar una cantidad enorme de texto y entrenar al modelo para predecir el siguiente token/palabra dado el contexto anterior. La idea clave es que, al hacer esto millones o billones de veces, el modelo aprende patrones de lenguaje, gramática, semántica, hechos del mundo, asociaciones entre conceptos y regularidades del discurso. En la siguiente sección veremos esto con mayor detalle.

¿Qué pueden aprender los LLM de la predicción del siguiente token?

Como sabemos, LLM como Claude, ChatGPT o Gemini son capaces de responder preguntas de matemáticas, geografía, gramática, etc. Esto es posible en gran medida gracias a la etapa de preentrenamiento. ¿Por qué? Imaginemos que el corpus sobre el que estamos trabajando contiene repetidamente las siguientes oraciones:

  • Dos más dos es cuatro.
  • La capital de Chile es Santiago.

Luego, después del preentrenamiento, si queremos calcular cuál es el token que tiene la probabilidad más alta condicional a la cadena »Dos más dos es », es decir,

maxxiX\max_{x_{i} \in X}P(xix_{i} | »Dos más dos es »)

donde XX es el conjunto de todas las palabras de nuestro vocabulario, es de esperar que xi=“cuatro”x_{i} = \text{«cuatro»} sea el token que maximice esa expresión. Este mismo ejercicio se puede repetir con la siguiente frase:

maxxiX\max_{x_{i} \in X}P(xix_{i} | »La capital de Chile es »)

En este caso, “Santiago” sería la opción esperable. Y así sucesivamente. Por tanto, mediante esta estrategia el sistema puede aprender relaciones estadísticas y semánticas presentes en el lenguaje, lo que le permite responder preguntas sobre matemáticas, geografía, gramática, entre muchos otros temas.

Generación de texto

En el apartado anterior vimos que un modelo de lenguaje puede predecir la siguiente palabra. Empleando esta misma estrategia, también es posible generar cadenas de texto. En particular, la generación se lleva a cabo mediante muestreo desde la distribución de probabilidad de la siguiente palabra. Esta idea es uno de los fundamentos de la IA generativa.

Habiendo explicado en grandes rasgos lo que es un LLM y cómo funciona, en el resto de la entrada veremos sus principios computacionales.

2) Arquitectura para modelos de lenguaje

Las tres arquitecturas más comunes en los modelos de lenguaje modernos son encoder, decoder y encoder-decoder.

Decoder

Un decodificador toma como entrada una serie de tokens y, de manera iterativa, predice el siguiente token de la secuencia. Un ejemplo de modelo con una arquitectura decoder-only es GPT-2.

La siguiente imagen resume su arquitectura:

A pesar de que en las próximas publicaciones veremos con mayor profundidad cómo trabaja un decoder, podemos adelantar brevemente qué ocurre en una capa de GPT-2. Antes de entrar a la pila de decoders, el texto de entrada se convierte primero en una secuencia de tokens. Luego, cada token se transforma en un embedding, es decir, en una representación vectorial. Por tanto, si el input contiene tres tokens, el modelo trabajará inicialmente con tres vectores. En el caso de GPT-2 small, la dimensionalidad del modelo es 768, por lo que cada uno de esos vectores contiene 768 valores numéricos.

Una vez dentro de la capa decoder, estos vectores son modificados mediante mecanismos como la masked self-attention y una red feedforward. El resultado son representaciones más ricas y dependientes del contexto. A estas representaciones podemos llamarlas vectores contextualizados: son versiones actualizadas de los vectores iniciales, ajustadas según el lugar que cada token ocupa dentro de la secuencia. En otras palabras, el modelo ya no representa cada token de forma aislada, sino en función del contexto disponible. Para más información sobre los modelos GPT puedes consultar esta web.

Encoder

Un encoder toma como input una secuencia de tokens, y genera como output una representación vectorial de cada uno. La diferencia clave con GPT-2 es que el encoder no genera el siguiente token de izquierda a derecha. En cambio, procesa la secuencia completa y produce una representación enriquecida de cada token. En otras palabras, un encoder transforma cada token en una representación ajustada por el contexto completo. Es decir, el modelo no representa cada token de manera aislada, sino considerando cómo se relaciona con los demás tokens de la secuencia.

Los modelos BERT son conocidos por usar esta arquitectura. Si quieres saber más sobre ellos, puedes consultar esta web.

Encoder-decoder

Finalmente, un encoder-decoder toma como entrada una secuencia de tokens y como salida múltiples tokens. Esta arquitectura se usa especialmente cuando el input y el output pueden ser secuencias distintas: por ejemplo, traducción automática, resumen, o reconocimiento de voz. Un ejemplo de un modelo encoder-decoder es el BART. En esta web puedes encontrar información sobre él.

3) Generación condicional de texto

La generación condicional de texto consiste en darle al modelo una secuencia inicial, llamada prompt, y pedirle que continúe generando texto a partir de ella. En otras palabras, el modelo no genera texto »desde cero», sino condicionado por los tokens que ya recibió como entrada.

La idea básica es la siguiente. Dado un prompt, el modelo calcula una distribución de probabilidad para el siguiente token. Luego selecciona uno de esos tokens y lo agrega al texto. Después repite el mismo procedimiento: vuelve a calcular la distribución del siguiente token, ahora considerando tanto el prompt original como el token que acaba de generar. Así, el texto se produce paso a paso, token por token.

Por ejemplo, si entregamos al modelo el siguiente prompt (ejemplo sacado de Jurafsky y Martin (2026)):

The sentiment of the sentence “I like Jackie Chan” is:

el modelo debería generar como continuación algo como:

positive

¿Por qué? Porque, dado ese contexto, es esperable que el token »positive» tenga una probabilidad mayor que alternativas como »negative». En términos simples, el modelo compara cuál continuación es más probable bajo el contexto entregado:

P(»positive»∣prompt)>P(»negative»∣prompt)

Esta misma lógica puede utilizarse para responder preguntas. Por ejemplo, si escribimos:

Q: Who wrote the book “The Origin of Species”?
A:

el modelo interpretará que debe completar la respuesta después de A:. En ese caso, una continuación probable sería:

Charles Darwin

Por tanto, la generación condicional permite transformar una gran variedad de tareas —clasificación, traducción, resumen o respuesta a preguntas— en un mismo problema general: dado un contexto, predecir una continuación probable. En la siguiente sección veremos cómo esta idea se puede perfeccionar mediante mejores estrategias de prompting.

4) Prompting

ChatGPT, Claude y otros LLM modernos, además de predecir texto, están entrenados para responder preguntas y seguir instrucciones. Una de las técnicas más importantes para lograr este comportamiento es el instruction-tuning.

Instruction-tuning

Después de entrenar un modelo de lenguaje para predecir el siguiente token, es posible continuar su entrenamiento utilizando un conjunto de datos compuesto por pares instrucción-respuesta. Este proceso suele llamarse instruction-tuning.

La idea es exponer al modelo a ejemplos donde una instrucción dada por un usuario va acompañada de una respuesta esperada. De esta forma, el modelo aprende patrones sobre cómo responder preguntas, seguir órdenes, resumir textos, traducir contenido, entre muchas otras tareas.

Un ejemplo práctico de esta idea puede encontrarse en el proyecto Latam-GPT. En la siguiente página publican algunas de las instrucciones utilizadas para entrenar el modelo. Una instrucción que podemos encontrar en esta web viene dada por la siguiente:

[ { «content»: «Necesito ideas para una acción comunitaria visual que muestre el impacto del abandono rural en los territorios de montaña, que pueda organizar con vecinos en una localidad de Castilla-La Mancha esta semana.», «role»: «user» }, { «content»: «¡Qué hermosa iniciativa! El abandono rural en zonas de montaña de Castilla-La Mancha —como en los municipios de la Sierra de Alcaraz, la Serranía de Cuenca, o las sierras de Toledo— es un tema profundamente humano y visualmente potente. Aquí tienes una propuesta de **acción comunitaria visual** que puedes organizar esta semana con vecinos, sencilla de implementar, con gran impacto emocional y simbólico, y que puede convertirse en un \»documento visual\» del territorio:\n\n—\n\n### 🎨 **Acción Comunitaria Visual: \»El Silencio que Habla\»**\n\n#### 📌 **Concepto central:**\nCrear una **instalación artística en espacios públicos** (plaza, camino, escuela, iglesia) que muestre el abandono rural a través de **imágenes y objetos del pasado** que han sido dejados atrás, pero que aún \»hablan\» del territorio.\n\n—\n\n### ✅ **Cómo hacerlo (pasos prácticos para esta semana):**\n\n#### 1. **Recolectar objetos simbólicos (antes del sábado):**\n- Invita a vecinos a traer **objetos de sus casas, granjas, escuelas o almacenes abandonados** que representen la vida rural: \n – Una puerta de madera con herrajes oxidados. \n – Una silla de madera desvencijada. \n – Un sillín de caballo. \n – Una campana de ganado. \n – Un libro escolar viejo. \n – Una maquinaria agrícola pequeña (si está en buen estado). \n – Láminas de revistas antiguas con publicidad de productos rurales.\n\n> 📌 **Importante:** No se trata de \»tirar\» objetos, sino de rescatarlos y darles nuevo sentido.\n\n#### 2. **Crear una \»Casa abandonada en el pueblo\» (instalación visual):**\n- Elige un espacio público (plaza, jardín, camino de acceso principal).\n- Construye una **estructura de madera o cartón** con forma de casa pequeña, como si fuera una casita de muñecas, pero desvencijada: puerta torcida, ventanas rotas, techo medio caído.\n- Coloca los objetos recolectados **dentro y alrededor** de la casa.\n- Añade **fotografías enmarcadas** de personas del pueblo en sus trabajos (labores agrícolas, escuela, fiestas, mercado).\n- Puedes iluminarla con luces de bajo consumo para que se vea de noche.\n\n#### 3. **Incorpora una \»voz\» del abandono:**\n- Pide a personas mayores o antiguos vecinos que **graben un audio** (en 1 minuto) contando:\n – Una memoria del pueblo.\n – Una reflexión sobre el cambio.\n – Una pregunta: *\»¿Dónde está el niño que jugaba aquí?\»*\n- Coloca un **altavoz con sonido ambiental** (viento, palomas, silencio) y reproduzca el audio en bucle.\n\n#### 4. **Involucra a los más jóvenes:**\n- Organiza un **taller de dibujo o pintura** con niños y jóvenes: que dibujen **\»el pueblo que quisieran tener\» o \»el pueblo que se fue\»**.\n- Expón los dibujos en una pared o en carteles alrededor de la instalación.\n\n#### 5. **Llamado al pueblo (difusión):**\n- Crea un **cartel con el título: \»El Silencio que Habla\»** y el mensaje: \n > *\»Este pueblo no se ha ido. Está aquí, en lo que dejó. ¿Qué hacemos con esto?\»* \n- Colócalo en la entrada del pueblo, redes sociales, y en la web del ayuntamiento (si hay).\n\n—\n\n### 📸 **¿Qué se ve? (Impacto visual):**\n- Una casa vacía que grita con objetos.\n- Fotos que recuerdan.\n- Voces que susurran el pasado.\n- Dibujos que imaginen el futuro.\n\n👉 Es una **instalación efímera** (para que dure solo 7 días), pero que deja huella.\n\n—\n\n### 🌱 **Posibles seguimientos (una vez terminada la acción):**\n- Publicar una **galería fotográfica** del proyecto en redes o en el periódico local.\n- Proponer al ayuntamiento una **\»Ruta del Abandono y la Memoria\»** con puntos como este.\n- Iniciar un **archivo oral** de historias del pueblo.\n\n—\n\n### 💬 Frase clave para usar:\n> *\»No es que el pueblo se haya ido. Es que lo que queda es lo que más importa.\»*\n\n—\n\n### ✅ Beneficios de esta acción:\n- Fácil de organizar con pocos recursos. \n- Incluye a todas las edades. \n- Genera diálogo sobre el futuro del territorio. \n- Se puede hacer en una finca, en el centro del pueblo o en un camino de montaña.\n\n—\n\n¿Te gustaría que te ayude a crear el cartel, el cartel de invitación, o el guion para el audio? Puedo hacerlo ahora mismo. ¡Tu iniciativa puede inspirar a otros pueblos de Castilla-La Mancha! 💚🌄», «role»: «assistant» } ]

Este ejemplo tiene exactamente la estructura típica de un dato usado para instruction tuning: un usuario formula una instrucción y el asistente entrega una respuesta considerada adecuada. Al entrenar con muchos ejemplos de este tipo, el modelo aprende no sólo a continuar texto, como en el pretraining, sino a comportarse como un asistente: interpretar solicitudes, organizar respuestas, seguir instrucciones y adoptar un formato conversacional.

Una vez que el modelo ha sido entrenado con esta base de datos, puede ser debidamente prompteado.

Prompt

Es una cadena de texto que envía el usuario a un modelo de lenguaje para producir alguna respuesta útil. Si bien el objetivo principal de los prompts es generar texto, también cumplen el rol de entender si el modelo ha aprendido correctamente, es por esto, que este concepto será especialmente importante para este proyecto.

En el contexto del prompting, también aparece el concepto de in-context learning, que es el tipo de »aprendizaje» que ocurre cuando el modelo mejora su comportamiento gracias a la información contenida en el prompt, pero sin actualizar sus parámetros. Es decir, el modelo parece adaptarse a una nueva tarea porque el prompt le dio suficientes pistas, pero internamente sus pesos no cambiaron.

Por último, también está el concepto de system-prompt, que es un prompt normalmente invisible para el usuario, que define el rol general del modelo, su tono y sus instrucciones de comportamiento. Por ejemplo, puede decirle al modelo que actúe como asistente útil, que responda de forma clara, que mantenga cierto tono o que siga ciertas restricciones. Ese system prompt se antepone al mensaje del usuario, de modo que el modelo genera su respuesta condicionado por ambos: primero las instrucciones del sistema y luego el mensaje del usuario.

Generación y sampleo

En la sección sobre generación condicional de texto vimos que la estrategia estándar para generar el siguiente token viene dada por una probabilidad condicional, es decir, si tenemos un conjunto X de palabras candidatas para ser la próxima en nuestro proceso de generación:

X = {»solución», »imagen»,»respuesta»,»idea»},

un criterio natural para elegir la siguiente palabra que viene después de la cadena »Hoy vamos a crear una », es mediante el siguiente cálculo

P(x | »Hoy vamos a crear una »),

que se puede ilustrar como

En este punto, necesitamos una estrategia de elección. Evidentemente, el criterio más intuitivo es elegir la/el palabra/token que tiene la probabilidad más alta de seguir en la secuencia, es decir, en este caso sería »solución», con un 41%. Este criterio se llama greedy decoding. En la siguiente sección lo veremos en detalle.

Greedy decoding

Formalmente, en este método elegimos el token con la probabilidad más alta en cada iteración. Si bien dicha estrategia parece ser la correcta -dada la tendencia que tenemos de elegir óptimos locales-, lo cierto es que este método no es muy usado en LLMs. ¿La razón? Produce salidas extremadamente deterministas, y los textos que produce parecen genéricos. Por este motivo, se suelen implementar otros métodos, como random sampling, que explicaremos en la siguiente sección.

Random sampling

Este procedimiento implica seleccionar el próximo token sampleando la distribución sobre la próxima palabra. En términos concretos, ilustramos este principio en la siguiente imagen:

Como podemos ver, primero debemos tener cada token/palabra con su respectiva probabilidad. En este punto, las probabilidades suman 1, puesto que la softmax ya fue aplicada sobre el vector logit (si no entendiste nada de esto, revisa la sección «Estructura de una red neuronal» de esta entrada). Luego, tomamos un número aleatorio de una distribución uniforme con soporte [0,1], y vemos en qué punto de la cdf cayó. Dependiendo de la región, será la próxima palabra que elegiremos.

A pesar de que este método añade novedad a las respuestas, tampoco funciona muy bien, puesto que los textos que produce son algunas veces demasiado aleatorios. El principio de esta idea se muestra en la siguiente imagen:

Como podemos ver, después de la distribución inicial, si el número que salió de la distribución uniforme es consistente con la palabra »solución», entonces ahora el nuevo contexto es »Hoy vamos a crear una solución ». Luego, si queremos generar la palabra siguiente, la distribución parece más idónea, o al menos, las palabras siguientes son relativamente idóneas comparadas al caso 2B. En este caso, si por algún motivo el número que sale de la distribución uniforme favorece a la palabra »idea», las palabras siguientes generan una oración menos elocuente. En la siguiente sección veremos una solución intermedia: temperature sampling.

Temperature sampling

Este método cambia la forma de la distribución de probabilidad, por tanto, según un parámetro que usualmente es τ\tau, podemos aumentar la probabilidad de las palabras/tokens con probabilidad alta, y disminuir la probabilidad de las palabras con probabilidad baja. Esto, se hace mediante la siguiente transformación (nuevamente, si no entiendes esto, debes leer esta entrada)

y=softmax(uτ)y = softmax(\frac{u}{\tau})

Luego, en la siguiente lámina mostramos como quedaría la distribución de probabilidad para distintos valores de τ\tau:

Como podemos ver, un valor alto de τ\tau (en nuestro ejemplo, τ=2.0\tau=2.0), aplana la distribución, haciéndola similar a la uniforme, mientras que valores bajos hacen que el extremo superior acumule más masa, y el inferior menos. Esto es muy útil, puesto que el modelo ahora tendrá espacio para generar cadenas de texto relativamente más creativas que greedy decoding (para τ<1\tau <1), pero más elocuentes que random sampling.

5) Entrenando LLM’s

Hasta ahora, hemos descrito conceptos clave para entender qué es un LLM. En esta sección veremos cómo algunas de esas partes se organizan, para conformar el proceso de entrenamiento de este.

Según nuestra referencia, Jurafsky y Martin (2026), existen tres grandes etapas, pretraining, instruction tuning y alignment. A continuación explicaremos cada una de ellas.

5.1) Pretraining

Esta es la primera etapa del entrenamiento, y consta de entrenar al modelo para predecir la siguiente palabra sobre un corpus de texto gigante. En términos estadísticos, en esta etapa se usan las herramientas vistas en esta entrada, es decir, para llevarla a cabo es preciso entender ideas como neural networks, cross-entropy loss, etc. Con respecto al volumen de datos, es enorme. Para que te hagas una idea, GPT-3 fue entrenado con 300 billones de tokens (ver footnote de la tabla 2.1), es decir, si aproximamos 1 token como 4 caracteres, y 1 carácter como 1 byte, llegamos a una cifra estimativa de 1200GB de texto plano (debes ser cauteloso con esta cifra, es una aproximación, y como tal, puede variar).

5.2) Instruction tuning (o Supervised finetuning)

En esta etapa el modelo es entrenado nuevamente, pero esta vez para seguir instrucciones tales como escribir código, traducir oraciones, etc. Como vimos anteriormente, es entrenado en un corpus especial, similar al que mostramos en la sección instruction-tuning.

5.3) Alignment

Como lo expresa su palabra en inglés, esta etapa alinea el modelo para evitar que sea dañino, y mejorar su utilidad. En este punto, los investigadores usan un conjunto de datos que consiste en un contexto y dos potenciales continuaciones, una continuación aceptada y otra rechazada, cuya continuación es generalmente curada por seres humanos. Entonces, el modelo es entrenado para seguir la aceptada, y no la rechazada.

En conjunto, estas tres etapas permiten construir los LLM modernos. Durante el pretraining, el modelo aprende regularidades estadísticas, sintácticas y semánticas del lenguaje a partir de enormes cantidades de texto. Luego, mediante instruction tuning, aprende a responder instrucciones de forma más útil para los usuarios. Finalmente, en la etapa de alignment, el modelo es ajustado para generar respuestas más seguras, útiles y alineadas con preferencias humanas.

A pesar de toda esta complejidad, la idea fundamental sigue siendo sorprendentemente simple: en cada paso, el modelo intenta predecir cuál es el siguiente token más probable dado el contexto disponible. Sin embargo, cuando esta estrategia se escala a corpus gigantescos, redes neuronales profundas y grandes capacidades computacionales, emergen habilidades que hacen posible sistemas como ChatGPT, Claude o Gemini.

Notas finales, y próxima entrada…

En esta entrada vimos los componentes básicos de un LLM, y en qué consiste su entrenamiento. Todos estos conceptos serán vistos en detalle en las próximas entradas, no obstante, antes de abordarlos era preciso tener una imagen panorámica de cómo se interconectan. Stay Tuned!!

José Miguel Muñoz Urra – jmunozu@pulki.es