27  Fundamentos de los LLM

27.1 Conceptos clave

  • Tokenización: Proceso de dividir texto en partes más pequeñas (tokens), como palabras o subpalabras, para su análisis.

  • Vectorización: Asignación de vectores a cada token, permitiendo que las palabras se representen numéricamente.

  • Embeddings: Técnica que organiza los vectores en un espacio vectorial, capturando relaciones semánticas. Permite realizar operaciones matemáticas entre palabras, como sumar o restar vectores.

  • Transformers: Arquitectura utilizada en los LLMs que facilita el procesamiento de texto mediante atención y paralelismo.

27.1.1 Ejemplos prácticos utilizando python

  1. Librería transformers
Note

La librería transformers es un paquete de Python desarrollado por Hugging Face que facilita el uso de modelos de lenguaje avanzados (como BERT, GPT, T5, etc.) para tareas de procesamiento de lenguaje natural (NLP).

Posee compatibilidad con PyTorch y TensorFlow. Además, posee funciones eficientes de tokenización.

pip install transformers
Requirement already satisfied: transformers in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (4.53.2)

Requirement already satisfied: filelock in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from transformers) (3.18.0)

Requirement already satisfied: huggingface-hub<1.0,>=0.30.0 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from transformers) (0.33.4)

Requirement already satisfied: numpy>=1.17 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from transformers) (2.3.1)

Requirement already satisfied: packaging>=20.0 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from transformers) (25.0)

Requirement already satisfied: pyyaml>=5.1 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from transformers) (6.0.2)

Requirement already satisfied: regex!=2019.12.17 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from transformers) (2024.11.6)

Requirement already satisfied: requests in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from transformers) (2.32.3)

Requirement already satisfied: tokenizers<0.22,>=0.21 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from transformers) (0.21.2)

Requirement already satisfied: safetensors>=0.4.3 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from transformers) (0.5.3)

Requirement already satisfied: tqdm>=4.27 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from transformers) (4.67.1)

Requirement already satisfied: fsspec>=2023.5.0 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from huggingface-hub<1.0,>=0.30.0->transformers) (2025.7.0)

Requirement already satisfied: typing-extensions>=3.7.4.3 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from huggingface-hub<1.0,>=0.30.0->transformers) (4.13.2)

Requirement already satisfied: hf-xet<2.0.0,>=1.1.2 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from huggingface-hub<1.0,>=0.30.0->transformers) (1.1.5)

Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from requests->transformers) (3.4.2)

Requirement already satisfied: idna<4,>=2.5 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from requests->transformers) (3.10)

Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from requests->transformers) (2.4.0)

Requirement already satisfied: certifi>=2017.4.17 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from requests->transformers) (2025.4.26)



[notice] A new release of pip is available: 25.1.1 -> 25.2

[notice] To update, run: pip install --upgrade pip

Note: you may need to restart the kernel to use updated packages.
  1. Tokenizador
# LLamamos a la clase BertTokenizer
from transformers import BertTokenizer

# Definimos un modelo para tokenizar
# Debe descargar el modelo: tokeniza por subpalabras
tokenizador = BertTokenizer.from_pretrained("bert-base-uncased")
  1. Aplicación de tokenizador
# Aplicar tokenizador
token = tokenizador.tokenize("Hola, ¿cómo estás?")
print(f'La frase tokenizada es: {token}')
La frase tokenizada es: ['ho', '##la', ',', '¿', 'como', 'est', '##as', '?']
  1. Embeddings

Para crear los embeddings usaremos la librería PyTorch, que es una biblioteca de Python de código abierto desarrollada por Facebook para el cálculo numérico y el aprendizaje profundo (deep learning).

Esta nos permite crear y entrenar redes neuronales de manera flexible y eficiente.

pip install torch
Requirement already satisfied: torch in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (2.7.1)

Requirement already satisfied: filelock in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from torch) (3.18.0)

Requirement already satisfied: typing-extensions>=4.10.0 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from torch) (4.13.2)

Requirement already satisfied: setuptools in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from torch) (80.8.0)

Requirement already satisfied: sympy>=1.13.3 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from torch) (1.14.0)

Requirement already satisfied: networkx in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from torch) (3.5)

Requirement already satisfied: jinja2 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from torch) (3.1.6)

Requirement already satisfied: fsspec in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from torch) (2025.7.0)

Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from sympy>=1.13.3->torch) (1.3.0)

Requirement already satisfied: MarkupSafe>=2.0 in /Users/jona/Github/book-cursos/.venv/lib/python3.13/site-packages (from jinja2->torch) (3.0.2)



[notice] A new release of pip is available: 25.1.1 -> 25.2

[notice] To update, run: pip install --upgrade pip

Note: you may need to restart the kernel to use updated packages.
# Importamos torch
import torch

# Importamos el modelo Bert desde transformers
from transformers import BertModel

Utilizaremos un modelo pre entrenado para el ejemplo (se va a descargae). Este modelo descarga safetensors, que es un formato de archivo desarrollado por Hugging Face para almacenar y cargar los pesos (parámetros) de modelos de machine learning de forma más segura y eficiente que el formato tradicional .pt o .bin de PyTorch.

model = BertModel.from_pretrained("bert-base-uncased")

Cuando ya tenemos nuestro modelo, podemos crear nuestros token y transformarlos en vectores, para luego crear los embbeddings.

# Convertir palabras a ids
#  - El resultado es una lista, así que obtenemos el primer elemento (0)
#    para recuperar el resultado
king_token_id = tokenizador.convert_tokens_to_ids(["king"])[0]
man_token_id = tokenizador.convert_tokens_to_ids(["man"])[0]
woman_token_id = tokenizador.convert_tokens_to_ids(["woman"])[0]
queen_token_id = tokenizador.convert_tokens_to_ids(["queen"])[0]

# Creamos los embeddings usando el modelo descargado.
# - Sera un embedding de palabras (se define porque tambien puede ser
#   de audio o de imagenes) utilizando el metodo `word_embeddings`
# - Ademas, usamos la funcion `tensor()` para convertir el vector a 
#   un tensor
king_embedding = model.embeddings.word_embeddings(torch.tensor(king_token_id))
man_embedding = model.embeddings.word_embeddings(torch.tensor([king_token_id]))
woman_embedding = model. embeddings.word_embeddings(torch.tensor([king_token_id]))
queen_embedding = model. embeddings.word_embeddings(torch. tensor([queen_token_id]))

Una vez que construimos los embeddings, podemos comenzar a realizar operaciones matemáticas con ellos, como por ejemplo, obtener la similitud entre embeddigs: utilizaremos torch y la funcion coseno

Los resultados de la función coseno van del -1 al 1, donde, mientas más cerca de 1, significa que los vectores son similares, y si están más cerca de -1 es que son más diferentes entre sí

# Definimos la funcion coseno en una variable
cos = torch.nn.CosineSimilarity()

cos(king_embedding, queen_embedding)
tensor([0.6469], grad_fn=<SumBackward1>)