Fundamentos Teóricos
Definición y relación con el aprendizaje profundo
Un LLM es esencialmente un modelo de lenguaje basado en aprendizaje profundo, típicamente una red neuronal con muchísimos parámetros (usualmente miles de millones) entrenada para predecir texto. En otras palabras, es un programa de inteligencia artificial capaz de reconocer, interpretar y generar texto humano. Los LLMs aprenden de grandes conjuntos de datos sin etiquetar mediante aprendizaje autosupervisado, es decir, aprendiendo a predecir partes del texto a partir del contexto del propio texto. Estos modelos se construyen sobre redes neuronales profundas, lo que significa que constan de muchas capas de neuronas artificiales organizadas jerárquicamente, que ajustan sus pesos internos durante el entrenamiento para aprender patrones del lenguaje. Gracias a esto, los LLMs capturan características sintácticas y semánticas del lenguaje humano, relacionando palabras con sus significados y contexto.
Arquitectura Transformer y procesamiento de texto
La arquitectura predominante en LLMs modernos es la del Transformer, introducida en 2017 por el famoso paper "Attention Is All You Need". Un Transformer es un tipo de red neuronal diseñado específicamente para manejar secuencias (como oraciones o párrafos) de manera eficiente. A diferencia de modelos secuenciales anteriores (como RNNs o LSTMs), los Transformers procesan el texto en paralelo y utilizan un mecanismo de auto-atención (self-attention) para modelar las relaciones entre todas las palabras de una secuencia. En la práctica, cuando ingresas un texto, el Transformer puede prestar "atención" a diferentes partes del contexto para cada palabra, determinando cuáles son más relevantes entre sí. Este mecanismo de atención permite capturar dependencias de largo alcance: por ejemplo, entender que el pronombre en una frase hace referencia a una palabra mencionada mucho antes en el texto. En resumen, los Transformers aprenden el contexto: analizan cómo cada palabra de la entrada se relaciona con las demás y asignan pesos que indican la importancia de unas palabras respecto a otras. Esto les permite comprender mejor el lenguaje humano, que es altamente dependiente del contexto, y razonar sobre frases completas (incluso largas) en lugar de palabras aisladas.
Embeddings (representaciones vectoriales)
Para que un modelo de lenguaje procese texto, primero debe convertir las palabras o tokens en números. Aquí entran los embeddings, que son representaciones numéricas (vectores) de palabras o fragmentos de texto en un espacio vectorial de alta dimensión. Un embedding asigna a cada palabra (o sub-palabra) un vector de números de tal forma que palabras con significados similares queden representadas por vectores cercanos entre sí en ese espacio matemático. Por ejemplo, en un buen espacio de embeddings, el vector de "rey" estará cerca del vector de "reina", y ambos estarán lejos del vector de "tomate". Estos embeddings se aprenden durante el entrenamiento del modelo y capturan relaciones semánticas: permiten al modelo entender que ciertas palabras tienen contextos similares o pertenecen a categorías parecidas. Inicialmente, los embeddings pueden ser aleatorios, pero a medida que el modelo entrena con millones o billones de palabras, ajusta estos vectores para reflejar patrones del lenguaje. Además, gracias al mecanismo de atención mencionado, los Transformers transforman esas representaciones "estáticas" de cada palabra en representaciones contextuales – es decir, el significado numérico de una palabra puede cambiar dependiendo de las palabras que la rodean (por ejemplo, la palabra "banco" tendrá una representación distinta si el contexto habla de dinero vs. si habla de sentarse).
Auto-atención y comprensión contextual
El mecanismo de atención es clave en los LLMs. Funciona asignando pesos a cada conexión entre palabras para destacar cuáles son más relevantes al procesar un token específico. Esto permite que el modelo maneje eficientemente frases complejas, ambigüedades y dependencias a larga distancia. Básicamente, la auto-atención le dice al modelo "cuando interpretes la palabra X, fíjate en la palabra Y que aparece mucho más adelante, porque está relacionada". Este enfoque revolucionó el NLP, ya que modelos previos tenían dificultades para recordar información distante en la secuencia. Combinando la atención con los embeddings, el Transformer produce representaciones enriquecidas de cada palabra, incorporando información de otras palabras relevantes en la frase. Gracias a esto, los LLMs pueden entender, en cierto sentido, las conexiones lógicas y semánticas en el lenguaje. Aunque estas redes no "comprenden" el significado como un humano, logran modelar las probabilidades de secuencias de palabras de forma muy sofisticada, reflejando comprensiones similares a las nuestras (por ejemplo, saben que después de "El cielo está " es muy probable que venga "azul" y no "sopa").
Entrenamiento masivo con datos
La razón por la que llamamos "de gran escala" a estos modelos es doble: por un lado, tienen un número enorme de parámetros (decenas o cientos de miles de millones de neuronas ajustables) y, por otro, se entrenan con cantidades gigantescas de datos de texto. Un LLM típico se entrena leyendo literalmente bibliotecas enteras de texto: libros, artículos, páginas web (por ejemplo, Wikipedia), conversaciones, código fuente, etc. De hecho, muchos LLMs usan como base datos públicos como Common Crawl (que es un inmenso volcado de la web), colecciones de libros, Wikipedia, foros, códigos de GitHub, entre otros. Por ejemplo, GPT-3 (con 175 mil millones de parámetros) fue entrenado con un corpus de aprox. 300 mil millones de palabras que incluye texto de internet filtrado (Common Crawl), Wikipedia, miles de libros, y más. Durante este pre-entrenamiento, el modelo aprende a predecir la siguiente palabra en una frase dada su historia (contexto anterior). Este objetivo sencillo (llamado modelado de lenguaje o next token prediction) es sorprendentemente poderoso: al tratar de acertar la próxima palabra en millones de frases, el modelo va internalizando las reglas gramaticales, el significado de las palabras, hechos del mundo, estilos de escritura y mucho más. Es un proceso computacionalmente exigente, pero tras analizar billones de oraciones el modelo puede, por ejemplo, inferir cómo terminar oraciones lógicamente o incluso generar sus propias frases con coherencia.
Funcionamiento Interno de un LLM
Veamos cómo funciona internamente un LLM cuando le damos un texto y le pedimos que genere una continuación. Hay dos aspectos importantes: (a) el proceso paso a paso de generación de texto, y (b) cómo el modelo "interpreta" el lenguaje para hacer predicciones acertadas.
Proceso de generación de texto (paso a paso)
Imaginemos que interactuamos con un modelo (por ejemplo, le hacemos una pregunta en un chatbot). Internamente ocurren los siguientes pasos:
Tokenización del input: El texto de entrada (prompt del usuario) se divide en unidades más pequeñas llamadas tokens. Un token suele ser una palabra, parte de una palabra o incluso un carácter, dependiendo del tokenizador. Por ejemplo, la frase "Hola, ¿cómo estás?" podría convertirse en tokens como
"Hola"
,","
,"¿"
,"como"
,"estás", "?"
. Cada token es convertido a un número (un índice en el vocabulario del modelo).Conversión a embeddings: Cada token numerado pasa por la capa de embedding del modelo, que lo transforma en un vector denso de alta dimensión. Es decir, se convierte ese índice en la representación numérica aprendida que captura el significado aproximado del token. Ahora la frase está representada como una secuencia de vectores.
Procesamiento a través de la red (Transformers): Esos vectores de entrada se alimentan a la red Transformer del LLM. El modelo tiene múltiples capas (decenas o incluso cientos) de neuronas organizadas en bloques Transformer. En cada capa, se aplica el mecanismo de atención: el modelo calcula, para cada par de palabras, un puntaje de relevancia. Usando esos puntajes, cada token mezcla información de los demás tokens (ponderando más la información relevante). También hay estructuras llamadas cabezas de atención múltiples (multi-head attention) que permiten al modelo prestar atención a diferentes aspectos o relaciones simultáneamente. La señal pasa de capa en capa, refinando las representaciones de alto nivel. En la práctica, tras atravesar todas las capas, el modelo ha generado una representación interna del contexto completo del texto de entrada.
Predicción del siguiente token: Una vez procesado el prompt, el LLM produce una distribución de probabilidad sobre el próximo token posible. Es decir, el modelo calcula qué tokens podrían seguir y con qué probabilidad cada uno (por ejemplo, después de "París es la capital de", asigna alta probabilidad al token "Francia"). Esta predicción se basa en todo lo que "ha aprendido" de textos similares durante el entrenamiento. Técnicamente, el modelo devuelve un vector de logits (o probabilidades) del tamaño de su vocabulario, indicando la confianza en cada posible continuación.
Selección y generación del token: Con esa distribución, el sistema elige el siguiente token a generar. Puede hacerse de distintas formas:
Búsqueda voraz (greedy): tomar el token con mayor probabilidad.
Muestreo estocástico: seleccionar aleatoriamente un token siguiendo las probabilidades (posiblemente ajustado por un parámetro de temperatura que controla cuánta aleatoriedad hay).
Búsqueda por haz (beam search) u otros algoritmos para optimizar la coherencia global.
Por ejemplo, si después de "Había una vez un" el modelo asigna 40% a "princesa", 35% a "niño", 5% a "dragón", etc., podría elegir "princesa" si usamos búsqueda voraz, o tal vez "niño" con muestreo aleatorio.
Actualización del contexto: El token elegido ("princesa") se añade al texto generado, y ahora el prompt se extiende incluyendo ese nuevo token. La secuencia de entrada para el siguiente paso será "Había una vez un princesa". Nota: el modelo no retrocede a re-evaluar todo desde cero; más bien continúa el proceso usando su estado interno o simplemente tomando la nueva secuencia completa como input para la siguiente predicción (los Transformers pueden procesar secuencias completas, por lo que se puede volver a alimentar el texto aumentado).
Iteración del proceso (autorregresivo): Los pasos 4-6 se repiten iterativamente. Cada vez, el modelo mira el contexto actualizado y predice el siguiente token. Este proceso autorregresivo continúa generando palabra tras palabra (token tras token) hasta cumplir alguna condición de parada: llegar a un token especial de fin (end-of-sequence), alcanzar un número máximo de tokens, o producir una frase completa si así se programó.
Este método de generación token a token es fundamental en los LLMs. Dado que solo pueden predecir una palabra a la vez, necesitan retroalimentarse con su propia salida para continuar generando texto coherente más largo. En librerías prácticas, esto está implementado en métodos como generate()
de Hugging Face Transformers, que se encarga de hacer estas llamadas recurrentes al modelo para producir textos completos.
Interpretación y predicción del lenguaje humano
En esencia, un LLM interpreta el lenguaje convirtiéndolo a números (embeddings) y luego detectando patrones estadísticos complejos basados en su enorme entrenamiento. Cuando decimos que un modelo "entiende" o "interpreta" el lenguaje, lo que realmente hace es activar neuronas en respuesta a patrones de palabras de forma muy similar a como si hubiera visto antes oraciones parecidas. Por ejemplo, si al modelo se le dice "El perro persiguió al...", internamente activará contextos que ha visto durante el entrenamiento donde aparece esa frase, recordando que comúnmente esa oración termina con "gato" u otro animal. Así, predice que el siguiente token probablemente sea "gato" con alta probabilidad. Su interpretación es estadística: ha aprendido qué secuencias de palabras son típicas y cuáles no, aprendiendo las regularidades del lenguaje natural (sintaxis correcta, sentido común básico, hechos frecuentes, etc.). Por eso, puede continuar una conversación, responder preguntas o traducir frases: no porque entienda como un humano, sino porque su inmensa base de datos interna (los pesos entrenados) le indica qué respuesta es plausible.
Dicho de otro modo, durante la generación el modelo está constantemente respondiendo: "Dada la frase hasta ahora, ¿qué palabra tiende a venir después?". Gracias al entrenamiento masivo, ese después ya no es un simple cálculo de probabilidad de unigramas o bigramas (como en modelos n-gram tradicionales), sino que incorpora matices de significado, contexto global de la conversación, e incluso puede tener en cuenta conocimientos que aparecían en su corpus (por ejemplo, sabe que "París" suele ser seguido por "Francia" si el contexto es capitales de países). Esta capacidad de predicción es lo que hace que los LLMs generen texto que a nuestros ojos parece coherente y contextualizado, casi como si entendieran el tema. Cabe mencionar que no hay un entendimiento consciente: el modelo no razona en el sentido humano, pero la distribución de probabilidad que genera está influenciada por tantísimos ejemplos en sus datos, que a menudo coincide con la respuesta que daría un experto o un ser humano informado sobre ese tema.
Entrenamiento de los LLMs
La creación de un modelo de lenguaje de gran escala es una tarea monumental que involucra datos, poder computacional y técnicas especializadas. Veremos cómo se entrenan: qué datos se usan, cómo se preparan, qué recursos se necesitan y cómo se pueden ajustar luego para tareas específicas o para alinearlos con instrucciones humanas.
Datos de entrenamiento y preprocesamiento
Los LLMs se pre-entrenan en conjuntos masivos de texto, recopilados de diversas fuentes. Entre las fuentes comunes están:
Datos web general: texto obtenido de internet (web crawl). Un ejemplo es Common Crawl, un dataset que acumula páginas web públicas. Estos datos suelen ser ruidosos, así que a veces se filtran para calidad (por ejemplo, eliminando HTML, duplicados, spam, etc.).
Wikipedia: casi todos los modelos incluyen Wikipedia en sus datos, dado que ofrece texto generalmente bien escrito y verificado sobre muchos temas.
Libros electrónicos: colecciones como BooksCorpus, Project Gutenberg u otros lotes de libros digitales proporcionan texto extenso y de alta calidad en diversos géneros.
Publicaciones y artículos: noticias, foros (como Reddit), artículos científicos, etc.
Código fuente: algunos LLMs incluyen repositorios de código (GitHub) para aprender patrones de lenguajes de programación, lo que luego permite generar código.
De hecho, la Wikipedia en español menciona que los textos comúnmente usados incluyen Common Crawl, The Pile, MassiveText, Wikipedia y GitHub, entre otros. En la práctica, OpenAI reveló que GPT-3 usó porciones de CommonCrawl (filtrado), dos conjuntos de libros, Wikipedia y una recopilación llamada WebText2.
Antes de alimentar estos datos al modelo, se realiza un preprocesamiento intensivo:
Limpieza: remover artefactos no textuales (código HTML, JavaScript en páginas web, texto repetido o basura). También se pueden eliminar ciertos contenidos (por ejemplo, lenguaje extremadamente ofensivo, datos personales, etc., dependiendo de las políticas).
Normalización: unificar formatos de texto, manejar mayúsculas/minúsculas, acentos, caracteres especiales.
Tokenización: como se explicó, dividir el texto en tokens según el vocabulario del modelo. Muchos modelos usan esquemas como Byte-Pair Encoding (BPE) o WordPiece, que segmentan palabras raras en sub-palabras más comunes. La tokenización produce la secuencia de IDs que el modelo realmente procesará.
Creación de secuencias de entrenamiento: Los textos largos se trocean en segmentos de longitud fija (por ejemplo, 512 tokens, 1024 tokens, etc., según la capacidad del modelo). Cada segmento se puede utilizar para entrenamiento presentándolo al modelo y pidiéndole que prediga token por token (a veces se agregan tokens especiales de inicio/fin o separadores si necesario).
Mezcla y aleatorización: Los datos provienen de diversas fuentes, se suelen mezclar aleatoriamente para que el modelo no aprenda por ejemplo primero todo Wikipedia y luego todo CommonCrawl en bloque, sino que en cada batch de entrenamiento vea una combinación variada de estilos y contenidos. Esto ayuda a generalizar.
Costo computacional y hardware necesario
Entrenar un LLM grande requiere cantidades enormes de cálculo. Los modelos más potentes se entrenan en supercomputadoras especializadas con decenas o cientos de GPUs o TPUs funcionando en paralelo durante días o semanas. Por ejemplo, entrenar GPT-3 (175B parámetros) fue estimado en unos 3640 petaFLOPs-día, lo que equivale a usar una sola GPU Nvidia V100 durante aproximadamente 20 años, o bien 1 millón de horas de GPU. En la práctica, OpenAI habría usado miles de GPUs en paralelo; estimaciones independientes sitúan el costo de computación de GPT-3 en $4.6 millones de dólares por una sola corrida de entrenamiento. Otro ejemplo: el modelo PaLM de Google (540B parámetros) se entrenó usando 6144 chips TPU v4 en paralelo durante varios días, lo cual da una idea de la escala (un solo TPU v4 es ya muy poderoso, imaginá miles). Este tipo de requerimientos hace que solo empresas grandes con mucho presupuesto logren entrenar from scratch modelos de última generación. En términos de hardware, suelen utilizar GPUs de clase datacenter como NVIDIA A100/H100, o TPUs de Google, en clústeres con interconexiones de alta velocidad (porque entrenar un modelo distribuido significa comunicar gradientes y parámetros entre muchas máquinas constantemente). Además, la memoria es un factor crítico: un modelo de 100B+ parámetros puede requerir decenas de GB de VRAM solo para almacenar los pesos, sin contar el espacio para los activaciones intermedias durante el entrenamiento. Por eso se aplican técnicas de paralelismo (de datos y de modelo) para distribuir la carga.
En resumen, entrenar un LLM implica un costo computacional elevadísimo (energético y económico). No solo el entrenamiento inicial: también la fase de ajuste fino puede requerir recursos considerables (aunque mucho menos que el pre-entrenamiento), y la inferencia misma (usar el modelo ya entrenado para responder) es costosa: un modelo grande consumiendo decenas de gigaflops por token generado multiplicado por millones de usuarios puede significar facturas enormes de GPU en la nube.
Ajuste fino (fine-tuning) de modelos preentrenados
Dado que entrenar desde cero es tan costoso, una práctica común es no entrenar el modelo completamente para cada tarea nueva, sino aprovechar un modelo ya preentrenado y luego afinarlo con datos específicos. El fine-tuning consiste en tomar los pesos de un LLM entrenado genéricamente (por ejemplo, GPT-2 entrenado en texto de internet) y seguir entrenándolo un poco más con un conjunto de datos pequeño y específico para especializarlo en una tarea. Por ejemplo, podríamos tomar un modelo de lenguaje general y hacer fine-tuning con pares de preguntas y respuestas médicas, para obtener un modelo que responda como un asistente médico. Durante el ajuste fino, normalmente se reduce la tasa de aprendizaje y se entrena por pocas épocas con el dataset especializado. Esto ajusta ligeramente los pesos del modelo para mejorar su desempeño en la tarea de interés. Muchas aplicaciones industriales usan este enfoque, ya que es mucho más eficiente: en vez de necesitar billones de palabras y enormes cómputos, quizá con unos pocos miles o millones de palabras relevantes y algunas horas de entrenamiento en GPU se puede adaptar el modelo. Ejemplos: OpenAI entrenó InstructGPT mediante ajuste fino de GPT-3 para que siguiera instrucciones de usuarios de manera más útil; empresas pueden ajustar modelos open-source con sus datos (por ejemplo, afinar un modelo con documentos legales para un asistente jurídico).
Aprendizaje por Refuerzo con Retroalimentación Humana (RLHF)
Es una técnica especial de ajuste que se ha vuelto muy popular para alinear los LLMs con las expectativas humanas. Los LLMs preentrenados a veces dan respuestas que, si bien probables, no son deseables (pueden ser inadecuadas, poco útiles, alucinar datos, etc.). Con RLHF (Reinforcement Learning from Human Feedback), se integra el feedback humano en el proceso de entrenamiento mediante aprendizaje por refuerzo. En resumen, RLHF típicamente involucra tres fases:
Entrenamiento supervisado inicial: se puede empezar por un ajuste fino tradicional donde se muestra al modelo ejemplos de instrucciones y respuestas deseadas (muchas veces redactadas por humanos). Esto crea un modelo base alineado (por ejemplo, los ingenieros de OpenAI hicieron que GPT-3 aprendiera a seguir instrucciones en conversaciones).
Entrenar un modelo de recompensa (reward model): se recogen datos de preferencias humanas. Por ejemplo, se le pide al modelo generar varias respuestas a la misma pregunta y se le muestra a evaluadores humanos, quienes ordenan las respuestas de la mejor a la peor. Con suficientes ejemplos de comparaciones, se entrena un modelo auxiliar que, dada una entrada y una respuesta, predice una puntuación de qué tan buena es la respuesta según criterio humano.
Optimización por refuerzo del LLM: ahora se ajusta el modelo principal usando un algoritmo de refuerzo (como Proximal Policy Optimization, PPO). El LLM genera respuestas, el modelo de recompensa evalúa qué tal están, y esa señal de recompensa se usa para ajustar los pesos del LLM, reforzando las respuestas que los humanos preferirían. En esencia, se retroalimenta al modelo con "esto le gusta al humano, esto no".
El resultado de RLHF es un modelo que no solo predice el siguiente token probable, sino que está afinado para preferir respuestas útiles, veraces y alineadas con valores humanos en casos ambiguos. ChatGPT es el ejemplo más conocido logrado con RLHF: a partir de GPT-3.5, OpenAI aplicó este proceso para que el chatbot aprendiera a seguir instrucciones, negarse a peticiones inapropiadas y dar respuestas más centradas y detalladas. En términos simples, RLHF afina el comportamiento: el modelo aprende de correcciones humanas qué tipo de salidas son deseadas. Esto mejora muchísimo la calidad de las interacciones, pues mitiga problemas de las respuestas crudas de un modelo preentrenado. Es importante notar que RLHF necesita mucha intervención humana (para generar datos de entrenamiento y evaluaciones), lo que agrega un costo y complejidad adicional al desarrollo del modelo.
Aplicaciones Prácticas de los LLMs
Los grandes modelos de lenguaje han abierto la puerta a infinidad de aplicaciones en la industria y la investigación. A continuación, se mencionan algunos de los casos de uso más destacados:
Asistentes virtuales y chatbots conversacionales: Quizá la aplicación más popular. Modelos como ChatGPT de OpenAI, Bard de Google o Claude de Anthropic son LLMs diseñados para mantener conversaciones con usuarios, responder preguntas, dar recomendaciones y ejecutar instrucciones en lenguaje natural. En servicio al cliente, por ejemplo, se usan chatbots basados en LLM para atender consultas frecuentes de manera automática, interpretando las preguntas de los clientes y formulando respuestas útiles. Estos bots pueden manejar desde soporte técnico hasta reservas en lenguaje cotidiano.
Generación de texto y contenido creativo: Los LLMs pueden redactar ensayos, artículos, informes, historias, poesías y más. Dado un prompt, son capaces de producir párrafos continuados sobre un tema, imitar estilos de escritura (formal, coloquial, técnico, literario), resumir documentos largos en versiones cortas, o expandir un esbozo en un texto completo. Por ejemplo, herramientas de ayuda a la escritura sugieren frases o completan oraciones para autores. En marketing, se usan para generar borradores de posts, descripciones de productos o incluso slogans.
Generación de código y asistencia a programadores: Un uso revolucionario es escribir código fuente. Modelos especializados (o LLMs generales entrenados adicionalmente en código, como GitHub Copilot basado en GPT) pueden autocompletar funciones, sugerir bloques de código, o incluso generar un programa completo a partir de una descripción en lenguaje natural. Esto asiste a los desarrolladores acelerando el coding y brindando ejemplos. Por ejemplo, Copilot puede mirar el comentario "
# función que calcula factorial
" y producir la implementación en Python automáticamente. También pueden ayudar a depurar código explicando qué hace un segmento o encontrando posibles errores.Traducción automática y conversión de lenguaje: Si bien modelos clásicos de traducción (como Google Translate) usan sistemas dedicados, los LLMs han demostrado capacidad de traducir idiomas al vuelo gracias a haber entrenado en textos multilingües. Un LLM grande puede traducir entre muchos pares de idiomas sin entrenar explícitamente para cada uno, solo aprovechando las correlaciones aprendidas. Además de traducción, pueden reformular oraciones, convertir texto de un dialecto a otro, simplificar lenguaje complejo, etc.
Análisis de sentimientos y clasificación de texto: Aunque un LLM general no esté específicamente entrenado para clasificar, su comprensión del contexto le permite detectar, por ejemplo, si un comentario es positivo o negativo, o a qué categoría temática pertenece un texto. En aplicaciones prácticas se usa para analizar opiniones (en redes sociales, reseñas de productos), detectar intentos en mensajes de usuarios, o filtrar spam y contenido inadecuado.
Búsqueda semántica y respuesta a preguntas (QA): Los LLMs pueden actuar como motores de búsqueda inteligentes que entienden la pregunta del usuario. Por ejemplo, en lugar de buscar palabras clave, un LLM puede directamente leer documentos y contestar con la información solicitada en lenguaje natural. Ya existen buscadores (como la función de Bing Chat) que incorporan LLMs para consultar la web y generar una respuesta consolidada. Del mismo modo, en entornos corporativos un LLM entrenado con la base de conocimiento de la empresa puede responder preguntas de empleados sobre políticas, manuales, etc. de forma conversacional.
Biología, medicina y ciencias: Sorprendentemente, modelos de lenguaje también se aplican fuera del texto cotidiano. Por ejemplo, se entrenan en secuencias de ADN o proteínas (que pueden representarse con "alfabetos" biológicos) para predecir estructuras o propiedades, similar a cómo predicen lenguaje natural. En medicina, pueden procesar notas de pacientes, generar reportes clínicos, o ayudar a diagnosticar a partir de síntomas descriptivos.
En general, los LLMs son modelos de propósito muy general. Pueden adaptarse a infinidad de tareas de Procesamiento de Lenguaje Natural (PLN/NLP): resumen automático de documentos, generación de respuestas en chat, extracción de información de textos, compilación de reportes, entre otros. Muchos de los avances recientes en asistentes de IA (como asistentes en celulares, altavoces inteligentes, etc.) han incorporado versiones de LLMs para entender mejor instrucciones complejas de los usuarios y mantener contexto en diálogos.
Es importante destacar que para usar estas tecnologías existen herramientas y servicios accesibles:
Bibliotecas open-source (Hugging Face Transformers, etc.): Facilitan cargar modelos preentrenados disponibles públicamente (como GPT-2, GPT-Neo, BLOOM, DeepSeek, etc.) y usarlos con pocas líneas de código en Python. Esto permite a desarrolladores integrar capacidades de NLP avanzadas sin entrenar nada desde cero.
APIs de proveedores (OpenAI, Azure, AI21, Cohere, etc.): Empresas ofrecen acceso a LLMs de última generación a través de APIs web. Por ejemplo, la API de OpenAI permite usar modelos como GPT-4, o1, etc enviando peticiones con texto y recibiendo la respuesta generada, cobrando por cantidad de tokens. Esto ha democratizado su uso, ya que cualquier aplicación puede hacer llamadas a la API para sumar un "cerebro lingüístico" sin lidiar con el modelo internamente.
Implementaciones especializadas: Por ejemplo, hay servicios de chatbot ya listos para ser personalizados (IBM Watson Assistant, Google Dialogflow con LLMs, etc.), plataformas de generación de contenido, traducción asistida por IA, y muchos más, que internamente emplean modelos de lenguaje grandes.
Para concretar, algunos ejemplos reales de LLMs en acción:
ChatGPT de OpenAI ofreciendo tutoría virtual, resolución de dudas, asistencia en redacción de emails y hasta escritura de código.
GitHub Copilot/autocompletar en IDEs, que sugiere líneas de código a los desarrolladores.
Asistentes como Alexa de Amazon o el Asistente de Google, evolucionando para comprender solicitudes complejas gracias a LLMs.
Herramientas de resumen automático, por ejemplo resumir las noticias del día o un documento largo en puntos clave.
Sistemas de recomendación que generan descripciones personalizadas de productos para usuarios específicos.
Plataformas de e-learning que generan explicaciones adicionales o responden preguntas de estudiantes basadas en materiales de texto.
Los LLMs están transformando industrias enteras, incrementando la automatización de tareas cognitivas relacionadas con el lenguaje y mejorando la interacción entre humanos y máquinas a través de lenguaje natural.
(Cabe mencionar que también conllevan desafíos como la veracidad de sus respuestas, sesgos aprendidos de los datos, riesgos de alucinaciones de contenido, y preocupaciones de privacidad, pero esos están fuera del alcance de esta pregunta.)
Ejemplos de Código en Python
A continuación, veremos ejemplos prácticos de cómo usar un LLM con código Python, utilizando tanto la Ollama como la API de OpenAI. También se muestra cómo podríamos entrenar o afinar un modelo con datos personalizados usando herramientas de Hugging Face.
Cargar y usar un LLM preentrenado (Ollama)
La librería Ollama nos permite correr rapidamente modelos subidos a su repositorio, por ejemplo Deepseek R1 (Repo Ollama Deepesek R1):
# Instalamos ollama (si no lo tenemos)
# !pip install ollama
from ollama import chat
from ollama import ChatResponse
response: ChatResponse = chat(model='deepseek-r1:1.5b', messages=[
{
'role': 'user',
'content': 'Why is the sky blue?',
},
])
print(response['message']['content'])
# or access fields directly from the response object
print(response.message.content)
Explicación: En este caso usamos el modelo de 1.5b de parámetros (quizás el más básico) para que nos responda ¿Por qué el cielo es azul), al ser el modelo con menor cantidad de parámetros es probable que no responde adecuadamente y tenga alucinaciones. Podemos probar con mayor cantidad, pero eso requiere aun mas computo.
Usar un LLM vía API (OpenAI)
En muchos casos prácticos, utilizaremos modelos alojados en la nube a través de APIs. OpenAI ofrece acceso a modelos como GPT-4o y o3, etc mediante su paquete openai
. He aquí un ejemplo de cómo hacer una petición usando OpenAI API:
from openai import OpenAI
client = OpenAI("TU_CLAVE_API_AQUI") # Reemplaza con tu clave de API
prompt = "Escribe una breve fábula sobre una tortuga y una liebre que corren una carrera."
respuesta = client.chat.completions.create(
model="gpt-4o-mini"
messages=[
{
"role": "user",
"content": prompt,
}],
max_tokens=100, # máximo de tokens a generar
temperature=0.7, # control de aleatoriedad
)
texto_generado = response.choices[0].message.content
print(texto_generado.strip())
Explicación: Usamos client.chat.completions.create indicando el modelo (motor) a utilizar – en este caso "
gpt-4o-mini"
. Le pasamos el prompt
que en este caso es una instrucción en español pidiendo una fábula. Ajustamos max_tokens
para limitar la longitud de la respuesta y una temperatura de 0.7 para que la respuesta sea creativa pero no demasiado aleatoria. La API devolverá un objeto JSON (aquí capturado en respuesta
), que contiene en 'choices'
las opciones generadas. Tomamos la primera opción y extraemos el 'message.content'
. Finalmente, imprimimos la fábula generada.
(Nota: Para usar esta API necesitas una clave válida de OpenAI y posiblemente instalar el paquete openai
. Además, hay costos asociados según la cantidad de tokens.)
Entrenar o afinar un LLM con datos personalizados
Suponiendo que queremos afinar un modelo con nuestros propios datos (por ejemplo, hemos recopilado 100MB de texto de un dominio específico, o queremos que el modelo responda en un estilo particular). Usaremos Hugging Face Transformers y su utilidad Trainer
para realizar fine-tuning. En la práctica, necesitaríamos preparar un dataset y posiblemente tener hardware con GPU para que no sea muy lento. Aquí daremos un ejemplo conceptual:
from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments
from datasets import load_dataset
# 1. Cargar un modelo preentrenado y tokenizador (por ejemplo, GPT-2 pequeño)
model_name = "gpt2"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 2. Preparar nuestros datos personalizados.
# Supongamos que tenemos un archivo de texto "mis_datos.txt" con muchas frases o párrafos.
dataset = load_dataset('text', data_files={'train': 'mis_datos.txt'})
# Tokenizamos todo el dataset
def tokenize_function(examples):
return tokenizer(examples['text'], truncation=True)
tokenized_dataset = dataset.map(tokenize_function, batched=True, remove_columns=['text'])
# 3. Configurar entrenamiento
training_args = TrainingArguments(
output_dir="modelo-ajustado",
overwrite_output_dir=True,
num_train_epochs=1,
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
learning_rate=5e-5,
fp16=True, # usar precisión mixta si hay GPU para acelerar
logging_steps=50,
save_steps=200,
save_total_limit=2
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset['train']
)
# 4. Iniciar entrenamiento de ajuste fino
trainer.train()
# 5. Guardar el modelo afinado
trainer.save_model("modelo-ajustado")
Explicación paso a paso: Primero cargamos un modelo base (gpt2
) y su tokenizador. Luego usamos datasets
de Hugging Face para leer un archivo de texto (mis_datos.txt
) que contiene nuestro corpus personalizado (puede ser un gran archivo con oraciones separadas por nueva línea, etc., aquí asumimos texto plano simple). Convertimos ese dataset en tokens usando la función de tokenización. Después definimos argumentos de entrenamiento: el directorio de salida, cuántas épocas (veces que pasamos por los datos) queremos (en este ejemplo 1 por simplicidad), tamaño de batch, gradient_accumulation (acumular gradientes de varios batches para efectivamente tener un batch mayor, útil si la GPU tiene poca memoria), tasa de aprendizaje pequeña (5e-5 es común para fine-tuning), uso de fp16
para acelerar en GPU, y configuración de guardado de checkpoints y logs. Luego creamos un Trainer
pasando el modelo, los argumentos y el dataset tokenizado. Finalmente trainer.train()
inicia el proceso de ajuste fino: el modelo irá aprendiendo de nuestros datos. Al terminar, trainer.save_model
guarda los pesos ajustados en la carpeta especificada.
Tras este proceso, tendríamos un nuevo modelo (inicialmente GPT-2, ahora GPT-2 afinado en mis_datos.txt) que podemos cargar y usar igual que en el ejemplo 5.1 pero usando la ruta "modelo-ajustado"
en lugar de 'gpt2'
. Ese modelo estará especializado en los patrones de texto de nuestro archivo.
Por ejemplo, si mis_datos.txt fueran conversaciones de soporte técnico en español, el modelo ajustado probablemente generará respuestas más pertinentes a ese dominio que el GPT-2 original.
Ajuste fino con RLHF: Implementar RLHF completo es más complejo, suele requerir múltiples modelos (el principal, el de recompensa) y usar algoritmos de refuerzo. Librerías avanzadas o repositorios (como TRL – Transformer Reinforcement Learning) de Hugging Face ofrecen implementaciones de PPO para este fin. Un pseudoprototipo sería:
Tener un modelo preentrenado (y quizá ya instrucción-sintonizado).
Recolectar comparaciones humanas para un conjunto de prompts.
Entrenar un
RewardModel
(por ejemplo, una cabeza adicional sobre el modelo para predecir un score).Usar un loop de PPO donde iterativamente generas con el modelo, calculas reward, y ajustas.
Dado lo avanzado del tema, típicamente se usarían frameworks existentes y servidores GPU potentes. Para propósitos ilustrativos, nos enfocamos en el fine-tuning supervisado estándar arriba, que es más al alcance de un desarrollador común con un solo modelo y dataset.
Conclusiones: Los modelos de lenguaje de gran escala combinan conceptos teóricos de redes neuronales profundas (particularmente Transformers con mecanismos de atención) y entrenamiento con enormes volúmenes de datos, para lograr una capacidad sin precedentes de generar y entender texto human. Internamente funcionan prediciendo token a token usando la probabilidad condicionada aprendida, lo que les permite producir frases coherentes y contextualizadas. Entrenarlos desde cero requiere recursos masivos, pero gracias al auge de la investigación abierta y comunidades como Hugging Face, hoy es posible usar estos modelos preentrenados, ajustarlos a tareas específicas mediante fine-tuning, e incluso alinearlos mejor con objetivos humanos con técnicas como RLHF. Sus aplicaciones prácticas abarcan prácticamente cualquier tarea de procesamiento de lenguaje natural, desde asistentes conversacionales hasta análisis de texto, y la integración en productos y servicios es facilitada por bibliotecas y APIs de alto nivel. En resumen, los LLMs representan un hito en IA donde las máquinas pueden trabajar con lenguaje a un nivel antes inimaginable, y saber cómo funcionan nos permite aprovechar su potencial de forma informada y responsable.
Referencias y documentación
LLM - WIkipedia
What is a large language model (LLM) - Cloudflare
Attention Mechanism in LLMs: An Intuitive Explanation
Demystifying Embeddings 101: The Foundation of Large Language Models
OpenAI's GPT-3 Language Model: A Technical Overview
Generation with LLMs - Hugging Face
Estimating 🌴PaLM's training cost
GPT 3 Cost - Reddit
que crack que sos