Cómo los LLMs procesan palabras mediante tokenización y embeddings

Clase 3 de 4Curso de Fundamentos de LLMs

Resumen

En la actualidad, los modelos de lenguaje extenso (Large Language Models o LLMs) como Chat GPT tienen la capacidad de entender desde textos sencillos hasta audio e imágenes, pero ¿cómo logran comprender nuestro lenguaje e incluso nuestros mensajes de chat? Todo inicia con tres procesos fundamentales: tokenización, vectorización y embedding, que son esenciales para traducir nuestras palabras en una comprensión matemática del mundo.

¿Qué es y cómo funciona la tokenización?

La tokenización consiste en dividir nuestras frases en unidades más pequeñas llamadas tokens. Un ejemplo sencillo sería la frase "hola, ¿cómo estás?", que puede dividirse en los tokens "hola", "cómo" y "estás". Existen varios métodos para realizar esta división:

  • Tokenización por palabra.
  • Tokenización por subpalabras (utilizado en modelos como BERT).

Cada método depende del tipo de modelo y el propósito específico, siendo el de subpalabras particularmente eficaz para capturar detalles del lenguaje.

¿En qué consiste la vectorización?

Los modelos no entienden directamente nuestras palabras. Para lograrlo realizan una transformación conocida como vectorización, asignando un vector numérico (un arreglo de números) de forma aleatoria inicialmente a cada token.

Por ejemplo, estos podrían ser vectores:

  • "hola" → [1, 2]
  • "cómo" → [1, 3]
  • "estás" → [3, 4]

Estos vectores se posicionan en un plano matemático donde podemos efectuar operaciones numéricas entre ellos, permitiendo medir similitudes y diferencias entre palabras o conceptos.

¿Qué es y para qué sirven los embeddings?

El embedding es un paso adicional que optimiza estos vectores mediante un pequeño entrenamiento, redistribuyendo y agrupando palabras relacionadas en regiones definidas de un espacio matemático. Así, palabras similares o relacionadas, como por ejemplo saludos ("hola", "qué tal"), terminan ubicadas cerca entre sí.

Un ejemplo más avanzado es la relación matemática entre conceptos como "rey", "reina" y "hombre":

  • rey - hombre + mujer = reina

Con esta operación matemática podemos aproximar conceptos y entender relaciones abstractas más complejas.

¿Cómo implementar tokenización y embeddings con Python?

Para llevar esta teoría a la práctica utilizamos la librería Transformers de Hugging Face, específicamente el tokenizador BERT para tokenizar palabras, trabajando generalmente con subpalabras.

La creación del embedding involucra PyTorch, librería que optimiza y convierte esos tokens a vectores utilizables por modelos de aprendizaje profundo. Aquí una visión simplificada del procedimiento:

  • Instalamos Transformers:
!pip install transformers
  • Usamos modelos y tokenizadores de Hugging Face:
from transformers import BertTokenizer

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
tokens = tokenizer.tokenize("hola, ¿cómo estás?")
  • Creación de embeddings mediante PyTorch:
import torch
from transformers import BertModel

modelo = BertModel.from_pretrained('bert-base-uncased')
king_embedding = modelo.embeddings.word_embeddings(torch.tensor([tokenizer.convert_tokens_to_ids('king')]))
  • Calcular similitudes usando cosine similarity:
cos = torch.nn.CosineSimilarity(dim=0)
similitud = cos(king_embedding, queen_embedding)

Debido al entrenamiento en millones de datos, vectores relativos suelen tener una similitud alta, ilustrando cómo estos modelos capturan relaciones lingüísticas amplias.

¿Te atreves a explorar aún más? Completa el reto propuesto encontrando relaciones animales usando embeddings y ¡cuéntanos tus resultados en comentarios!