El problema de representar el lenguaje
8 min read
Una red neuronal no puede recibir directamente la palabra hola. En esencia, una red neuronal es una función matemática que opera sobre vectores de números reales. Sus cálculos presuponen que las entradas pertenecen a un espacio donde conceptos como «distancia», «dirección» o «proximidad» están bien definidos. El texto, por sí mismo, no vive en ese tipo de espacio. Entre casa y gato no existe un punto intermedio, ni una dirección que conduzca de una palabra a la otra, ni un paso a medio camino entre ambas.
Y, sin embargo, los modelos de lenguaje funcionan. El reto consiste precisamente en salvar la distancia entre un texto y una función sobre números reales. Resolver ese problema es el objetivo de este bloque, pues las decisiones que se toman aquí determinan todo lo que viene después: la tokenización, el vocabulario, los embeddings y, en última instancia, la propia arquitectura del modelo.
Así que hace falta un traductor: una función que transforme texto en vectores reales, colocada antes de la red, de modo que la red solo procese representaciones numéricas. La parte incómoda es que ese traductor no es neutral. En cuanto colocas palabras en un espacio numérico, ese espacio empieza a hacer afirmaciones sobre ellas: cuáles están cerca, cuáles lejos, cuáles a mitad de camino. No puedes evitar hacer esas afirmaciones, solo puedes elegir hacerlas a propósito o por accidente.
Esto es lo que hace que el problema sea interesante y no un trámite. Un traductor cualquiera —numerar las palabras por orden alfabético, por ejemplo— produce números perfectamente válidos, pero destruye cualquier noción de significado.
Qué le tienes que dar a una red, exactamente
Fijemos el vocabulario, el conjunto de unidades que el modelo reconoce, y llamémoslo . Por ahora «unidad» quiere decir «palabra»; la lección sobre tokenización mostrará que esa decisión es más delicada de lo que parece. Un texto es entonces una secuencia finita de elementos de :
Una red, en cambio, es una función entre espacios de números reales. Podemos escribir su tipo sin saber todavía nada de lo que hace por dentro: recibe un vector de un tamaño fijo y devuelve otro,
donde es la dimensión del espacio de entrada y la del espacio de salida. Qué ocurre entre la entrada y la salida —las capas, los pesos, el entrenamiento— es el tema del siguiente bloque; aquí solo importa que la red necesita recibir vectores de .
El problema aparece de inmediato: el texto es una secuencia de símbolos, lo que pide es un vector de . Nada convierte un elemento de en uno de por sí solo. Necesitas una función que salve esa distancia:
y con ella cada palabra de la secuencia se vuelve un vector, de modo que el texto entero se convierte en una matriz de números, una fila por posición y columnas —los vectores de este curso son columnas, así que al apilarlos cada uno se escribe tumbado, como fila—:
Todo este bloque trata de cómo construir . Antes de proponer ninguna, conviene fijar qué se le va a exigir. Son tres cosas.
Totalidad. tiene que estar definida para cualquier palabra que llegue en producción, no solo para las que viste al construirla. El día que alguien escriba criptomoneda y esa palabra no estuviera en , la función tiene que devolver algo igualmente. Esta es la exigencia que parece burocrática y resulta ser la más cara de las tres: es el problema de las palabras fuera de vocabulario (out-of-vocabulary, OOV), y le dedicamos más adelante una lección entera, la del problema OOV.
Dimensión fija. con la misma para toda . La red se diseña esperando vectores de un tamaño concreto; una representación que a veces devolviera un vector de cinco números y a veces de nueve no encajaría en la puerta de entrada.
Determinismo. La misma palabra produce siempre el mismo vector. Si cambiara entre dos ejecuciones, lo que el modelo aprendió dejaría de corresponderse con lo que recibe.
La representación que parece funcionar y no funciona
Con esas tres condiciones sobre la mesa, la propuesta más corta es ordenar el vocabulario y quedarse con el índice. Con en orden alfabético:
Supongamos por un momento que es cerrado, que no llegará ninguna palabra nueva. Con esa concesión, y solo con ella, es total; además tiene dimensión fija y es determinista. La concesión es grande: en cuanto alguien escriba criptomoneda, no tiene ningún índice que devolver, y esa es exactamente la falla de la que vive la lección sobre el problema OOV. La aparcamos aquí a propósito, porque lo que queremos ver es qué pasa aun cuando las tres condiciones se cumplen. Y lo que pasa es que aun así la representación es mala, porque cumplirlas no era todo lo que hacía falta. Al meter las palabras en heredan su estructura, y esa estructura afirma cosas:
Leído en voz alta: casa se parece más a gato que a perro. Y también que gato está entre las otras dos, y que el punto medio del camino entre casa y perro es exactamente gato. Ninguna de esas tres afirmaciones la has hecho tú. Salen del alfabeto, que es un orden inventado para buscar en un diccionario y que no sabe nada de significados.
Lo importante no es que las afirmaciones sean falsas, sino que la red no tiene forma de saber que lo son. Lo único que recibe son los números; para ella, una geometría inventada tiene exactamente la misma cara que una verdadera, y no puede distinguirlas. Le has dado información falsa disfrazada de buena.
Y el defecto no es de esta representación en particular. Podrías reescalar los índices dividiendo por , y no cambiaría nada: dividir por una constante conserva el orden y conserva las razones entre distancias, así que gato seguiría estando entre casa y perro. Cualquier con arrastra el mismo problema de fondo, porque está totalmente ordenado y las palabras no. Salir de él exige subir de dimensión, y ese es el argumento que lleva a la lección del one-hot.
Cuántas dimensiones hacen falta para no mentir
Pide lo mínimo que se puede pedir: que la representación no afirme nada, que ninguna palabra esté más cerca de otra que del resto. Es decir, que todas las distancias entre pares sean iguales.
En eso es imposible ya con tres palabras. Si , entonces : siempre hay una que queda en medio. En el plano sí se puede —un triángulo equilátero— pero solo con tres. Cuatro puntos equidistantes exigen salir al espacio, y en general puntos mutuamente equidistantes necesitan dimensiones.
Compruébalo tú mismo con una frase en español
Toma la frase el gato bebe leche y el vocabulario ordenado alfabéticamente , con índices a . La frase se convierte en la secuencia , y con la matriz del apartado anterior tiene forma . Ahora responde tres preguntas mirando solo esos números, como los mira la red:
- Según los números, ¿qué dos palabras de la frase se parecen más? Compara y las demás distancias, y no busques una sola ganadora: hay tres parejas empatadas a distancia —bebe y el, el y gato, gato y leche—, y no has contado mal. ¿Coincide ese empate con lo que tú sabes de esas palabras?
- ¿Qué palabra cae en el punto medio entre el y leche ? ¿Significa algo esa pregunta fuera de los números?
- Añade agua al vocabulario. Reordena alfabéticamente y reasigna los índices. ¿Cuántas de las palabras originales cambian de número, pese a que la frase no ha cambiado en absoluto?
La tercera es la más incómoda: una palabra nueva reescribe la representación de palabras que no tienen nada que ver con ella. Un modelo entrenado con la anterior queda inservible. Fíjate en que es un defecto distinto de los dos anteriores: no es la geometría inventada, y tampoco es el problema OOV — agua sí acaba teniendo índice, el vocabulario crece sin dificultad. Lo que falla es que la representación no es estable: depende de todo a la vez, así que tocar una entrada mueve todas las demás. Guarda esa observación, porque es la que hará que en la lección del one-hot, el salto a un espacio mucho más grande parezca razonable a pesar de su coste.
Comprueba tu intuición
Tres preguntas sobre lo que acabamos de enunciar: por qué la red no recibe texto, qué le pasa a un vocabulario numerado por orden, y qué le pedimos exactamente a la función .
¿Cuál es la razón de fondo por la que una red no puede recibir la cadena hola directamente?
Numerar el vocabulario por orden alfabético —casa → 1, gato → 2, perro → 3— es una representación válida, porque asigna a cada palabra un número de forma determinista.
¿Qué propiedades tiene que cumplir una función de representación para poder alimentar a una red? Marca todas las correctas.
Select every correct option. This is graded all-or-nothing: there is no partial credit.
Queda enunciado el problema del que vive el resto del bloque: hace falta una función , total, de dimensión fija y determinista, y además con una geometría que no afirme por accidente cosas falsas sobre las palabras. Sabemos ya que no sirve.
Pero hay una pregunta anterior que hemos dado por resuelta al escribir como si fuera evidente: antes de decidir qué vector le corresponde a dámelo, hay que decidir si dámelo es una unidad del vocabulario, o tres (dá, me, lo), o seis letras. Esa decisión fija el tamaño de , define qué significa que una palabra sea «nueva» y, en última instancia, acota qué puede llegar a aprender el modelo. Es la siguiente lección, sobre tokenización.