Predecir la siguiente palabra
¿Cómo puede escribir un ensayo algo que solo predice palabras?
Lección completa
Si quieres:
Escribe «el cielo es» y detente. ¿Qué palabra sigue? Seguro pensaste en «azul». Tal vez en «gris».
Sin voz: la lección avanza sola con subtítulos.
La voz de esta lección está en preparación: por ahora avanza sola con subtítulos.
Modo revisiónComentar este pasoTerminé la lección
Qué lograrás
- Explicar cómo escribe un modelo de lenguaje: da una probabilidad a cada palabra que puede seguir, elige una, la agrega al contexto y repite.
- Calcular probabilidades a partir de cuentas y con softmax, y predecir qué hacen la temperatura, top-k y top-p con ellas.
- Responder con honestidad a «¿cómo escribe un ensayo algo que solo predice?», incluido lo que esa respuesta no garantiza.
Ideas clave
- Un modelo de lenguaje da, para un contexto, una probabilidad a cada palabra (o pieza) que puede seguir.
- El modelo más simple cuenta: probabilidad = cuenta ÷ total. Las redes neuronales dan puntajes, y softmax los convierte en probabilidades que suman uno.
- Escribe en bucle: elige una palabra, la agrega al contexto y vuelve a calcular. Eso es autorregresión.
- Elegir siempre la más probable (voraz) cae en repeticiones; sortear da textos distintos en cada corrida. La temperatura afila (baja) o aplana (alta) las probabilidades; top-k y top-p recortan las palabras raras.
- Predecir bien exige capturar mucho, pero la meta es lo probable, no lo verdadero. De GPT-1 a GPT-3 el objetivo es el mismo; cambia la escala.
Lo que mucha gente cree
Creencia común Como solo predice la siguiente palabra, un modelo de lenguaje es un autocompletar que copia frases que ya vio.
Lo correcto Calcula una distribución nueva para cada contexto y puede escribir frases que nunca leyó (hasta nuestro modelo de ocho frases lo hace). Acertar a gran escala exige capturar gramática, datos y patrones de razonamiento. Eso sí: optimiza lo probable, no lo verdadero.
Compruébalo
Cuatro preguntas. Sin nota ni cuenta: sirven para ver si la idea quedó.
Por dentroPara quien quiere las fórmulas y el código. No hace falta para seguir el curso.
El objetivo: predecir la siguiente pieza
Por la regla de la cadena, la probabilidad de un texto se descompone en predicciones de la siguiente pieza:
Un modelo de lenguaje es cualquier modelo de . GPT-1 se entrena maximizando sobre un corpus, el «objetivo estándar de modelado de lenguaje» (ecuación 1 del artículo), donde es el tamaño de la ventana de contexto. Equivale a minimizar la entropía cruzada . Generar es el camino inverso: , una pieza a la vez (autorregresión).
Contar: el modelo de n-gramas
Con una ventana de piezas, la estimación de máxima verosimilitud es la frecuencia relativa:
donde cuenta cuántas veces siguió al contexto . En la lección (, bigramas), «es» aparece veces y , así que . Shannon (1948) ya generaba texto así: su «aproximación de segundo orden por palabras» elige cada palabra según las frecuencias de transición desde la anterior. El límite es la dispersión: con un vocabulario de tamaño hay hasta contextos, casi todos raros o nunca vistos, y la tabla no generaliza. Bengio et al. (2003) propusieron cambiarla por una red que aprende un vector por palabra: si «perro» y «gato» tienen vectores parecidos, lo aprendido de una frase se extiende a la otra.
Softmax y temperatura
Una red produce un puntaje (en inglés, logit) por cada pieza del vocabulario. La probabilidad es
Con es el softmax de siempre. Sumar la misma constante a todos los puntajes no cambia nada; por eso los puntajes de la lección, (cuentas ; en pantalla, redondeados: ), dan exactamente cuenta ÷ total. En general, con queda : con , azul vale ; con , ; con , . Si toda la masa va a la pieza de mayor puntaje (voraz); si la distribución tiende a la uniforme. El nombre viene de la física estadística: la distribución de Boltzmann tiene esta misma forma, con la temperatura dividiendo. Con este papel aparece, por ejemplo, en la destilación de conocimiento (Hinton et al., 2015).
Top-k y top-p
Tras el softmax se puede recortar. Top-k (Fan et al., 2018, que muestrean entre las más probables) conserva las piezas más probables. Top-p, o muestreo de núcleo (Holtzman et al., 2020), conserva el conjunto más pequeño cuya probabilidad suma al menos :
Luego se reparte de nuevo, , y se sortea con . Holtzman et al. observaron que los métodos que maximizan la probabilidad al generar producen texto «soso, incoherente o atrapado en ciclos repetitivos» (el ciclo voraz de la lección), y que recortar la cola poco fiable, sin llegar a lo voraz, da texto más parecido al humano.
En código
El modelo de la lección: contar pares, softmax con temperatura, top-p y escritura voraz, con la salida que imprime:
import math
from collections import Counter, defaultdict
texto = ("el cielo es azul . el mar es azul . el cielo es gris . el sol es grande . "
"de noche el cielo es oscuro . el cielo es azul y el sol brilla . "
"el mar es gris . hoy el cielo es azul .")
piezas = texto.split()
# 1. Contar qué pieza sigue a cada pieza (un modelo de bigramas)
tabla = defaultdict(Counter)
for a, b in zip(piezas, piezas[1:]):
tabla[a][b] += 1
def softmax(puntajes, T=1.0):
z = [s / T for s in puntajes]
m = max(z)
e = [math.exp(v - m) for v in z] # restar el máximo no cambia el resultado
return [v / sum(e) for v in e]
def distribucion(contexto, T=1.0, top_p=1.0):
palabras = [w for w, _ in tabla[contexto].most_common()]
puntajes = [math.log(c) for _, c in tabla[contexto].most_common()] # puntaje = ln(cuenta)
p = softmax(puntajes, T)
nucleo, acum = [], 0.0 # top-p: las más probables hasta juntar top_p
for w, q in zip(palabras, p):
nucleo.append((w, q)); acum += q
if acum >= top_p - 1e-9: break
total = sum(q for _, q in nucleo)
return [(w, round(q / total, 3)) for w, q in nucleo] # repartir de nuevo
print(dict(tabla["es"]))
for T in (1.0, 0.5, 2.0):
print(T, distribucion("es", T))
print(distribucion("es", top_p=0.7))
# 2. Escribir: tomar siempre la más probable (voraz) y repetir
escrito = ["el", "cielo", "es"]
for _ in range(9):
escrito.append(tabla[escrito[-1]].most_common(1)[0][0])
print(" ".join(escrito))
# {'azul': 4, 'gris': 2, 'grande': 1, 'oscuro': 1}
# 1.0 [('azul', 0.5), ('gris', 0.25), ('grande', 0.125), ('oscuro', 0.125)]
# 0.5 [('azul', 0.727), ('gris', 0.182), ('grande', 0.045), ('oscuro', 0.045)]
# 2.0 [('azul', 0.369), ('gris', 0.261), ('grande', 0.185), ('oscuro', 0.185)]
# [('azul', 0.667), ('gris', 0.333)]
# el cielo es azul . el cielo es azul . el cielo
El texto es propio de la lección y sus versiones en español e inglés son paralelas palabra por palabra, así que las cuentas coinciden en los dos idiomas. La escena usa este mismo modelo (lm.ts) y lo comprueba verify-data.ts, ambos en la carpeta de la lección.
Escala: GPT-1, GPT-2 y GPT-3
Los tres son transformers de solo decodificador entrenados con el objetivo de arriba. GPT-1 (2018) leyó BooksCorpus, más de 7 000 libros inéditos; su tamaño, 117 millones de parámetros, figura en la tabla 2 del artículo de GPT-2 («el modelo más pequeño equivale al GPT original»). GPT-2 (2019) llegó a 1 542 millones y leyó WebText, algo más de 8 millones de documentos (40 GB de texto). GPT-3 (2020) tiene 175 000 millones. Un dato curioso: el artículo de GPT-3 cuenta 125 millones para un modelo con la misma forma que GPT-1 (12 capas de 768). La diferencia cuadra con la tabla de embeddings, que crece con el vocabulario: GPT-1 usó 40 000 fusiones de BPE y GPT-2 amplió el vocabulario a 50 257 piezas.
Lo que viene
Dijimos «palabras», pero el modelo trabaja con piezas: los tokens (lección 20). La probabilidad la calcula una red que mira todo el contexto con atención (lecciones 21 y 22), y qué significa entrenarla con casi todo internet se ve en la lección 23.
Lente de decisión
Qué significa esta idea si tu trabajo es decidir, no programar.
- La salida es probabilística: la misma pregunta puede dar respuestas distintas. Para tareas con una respuesta correcta (extraer datos, clasificar) busca poca variación; para ideas y borradores, la variación ayuda.
- Bajar la temperatura vuelve la respuesta más repetible, no más veraz: un error probable sigue siendo probable. Ningún parámetro sustituye verificar contra las fuentes.
- Pregunta qué parámetros de muestreo (temperatura, top-p) usa tu aplicación y si puedes fijarlos; no todos los productos los muestran.
- Una prueba con una sola corrida no es evidencia. Repite cada caso varias veces con la configuración real y mide cuánto varía antes de decidir.
Términos de la lección
- Modelo de lenguaje Modelo que, dado un texto (el contexto), da una probabilidad a cada palabra o pieza que puede seguir. Escribe agregando una pieza a la vez.
- Autorregresión Escribir una pieza a la vez usando como entrada lo ya escrito: cada palabra producida pasa a formar parte del contexto de la siguiente.
- Softmax Función que convierte puntajes cualesquiera en probabilidades positivas que suman uno: aplica la exponencial a cada puntaje y divide entre la suma.
- Temperatura Número que divide los puntajes antes del softmax. Baja afila la distribución (hacia la elección voraz); alta la aplana (hacia el azar).
- Top-p (muestreo de núcleo) Sortear solo entre el grupo más pequeño de palabras más probables cuya probabilidad suma al menos p. Top-k hace lo mismo con un número fijo, k, de palabras.
- Muestrear Sacar un dato nuevo siguiendo una distribución: lo común sale a menudo y lo raro pocas veces. Es como genera un modelo generativo. (No confundir con las muestras de audio de la lección 2.)
- Distribución La forma en que se reparten los datos: qué valores (o combinaciones de valores) son comunes, cuáles raros y cuáles no aparecen nunca. En dos medidas se ve como una nube de puntos.
- Embedding Vector de números, aprendido de los datos, que representa algo (una palabra, una frase, una imagen) de modo que lo parecido quede cerca. Cada palabra tiene una fila en una tabla de embeddings.
- Parámetro Cada uno de los números que un modelo ajusta al entrenarse y en los que guarda lo aprendido.
- Modelo Una forma de regla con números ajustables. Una vez entrenado, es la regla aprendida.
- Token Pieza de texto (una palabra, un trozo de palabra, un signo o un código básico) tomada del vocabulario. Es la unidad que el modelo lee y genera, y por la que se cobra.
Transcripción completa
Fuentes
- Shannon, C. E. (1948). A Mathematical Theory of Communication
- Bengio, Y., Ducharme, R., Vincent, P., Jauvin, C. (2003). A Neural Probabilistic Language Model
- Radford, A., Narasimhan, K., Salimans, T., Sutskever, I. (2018). Improving Language Understanding by Generative Pre-Training (GPT-1)
- Radford, A., Wu, J., Child, R., Luan, D., Amodei, D., Sutskever, I. (2019). Language Models are Unsupervised Multitask Learners (GPT-2; tabla 2: 117M y 1542M parámetros)
- Brown, T. B., et al. (2020). Language Models are Few-Shot Learners (GPT-3)
- OpenAI (2023). GPT-4 Technical Report («pre-trained to predict the next token in a document»)
- Ouyang, L., et al. (2022). Training language models to follow instructions with human feedback (InstructGPT)
- Hinton, G., Vinyals, O., Dean, J. (2015). Distilling the Knowledge in a Neural Network
- Fan, A., Lewis, M., Dauphin, Y. (2018). Hierarchical Neural Story Generation
- Holtzman, A., Buys, J., Du, L., Forbes, M., Choi, Y. (2020). The Curious Case of Neural Text Degeneration
ComentariosConversación pública de esta lección: dudas, datos por revisar, ideas.
Los comentarios viven en GitHub Discussions, en el repositorio público del curso; para escribir se necesita una cuenta de GitHub. Se cargan desde giscus.app al abrir esta sección. Las personas que revisan el curso los leen, y si un cambio se acepta, se aplica en los dos idiomas. Abrir el hilo en GitHub