FastEmbed - Generando Embeddings Livianos y Rápidos en Python

Qué son los embeddings, para qué sirven y cómo generarlos de forma local y rápida con FastEmbed, sin depender de APIs externas ni GPU.

Publicado: 1 de julio de 2026
pythonfastembedembeddings
Imagen principal para FastEmbed - Generando Embeddings Livianos y Rápidos en Python

Introducción

Estoy trabajando en mi tesis sobre música indie, y una parte del análisis consiste en explorar clusterizaciones de canciones. Clusterizar, en pocas palabras, es agrupar elementos parecidos entre sí sin decirle de antemano al computador qué grupos existen: uno le entrega los datos y el propio proceso va descubriendo qué canciones se parecen más entre ellas, formando "conjuntos" o clusters. Para poder agrupar canciones de esta forma primero necesitaba una manera de representar cada canción (su letra, sus descripciones, sus reseñas) como un vector numérico que capturara su significado, es decir, necesitaba generar embeddings. La opción "obvia" era usar la API de algún proveedor grande, pero eso significaba mandar mis datos a un servicio externo, pagar por cada llamada y depender de internet para algo que, en el fondo, podía correr en mi propio computador. Ahí fue cuando encontré FastEmbed, una librería de Python que permite generar embeddings de forma local, rápida y sin necesitar una GPU. En este artículo cuento qué son los embeddings, para qué sirven y cómo se usa FastEmbed en la práctica.

¿Qué son los Embeddings?

Los embeddings son representaciones matemáticas de significados. Los seres humanos intercambiamos palabras, distintos idiomas, gestos, expresiones, imágenes, sonidos, etc. para comunicarnos, para entendernos socialmente. Las computadoras modernas que manejamos en nuestros hogares se entienden mucho mejor mediante representaciones matemáticas.

Los embeddings son una de estas formas matemáticas de representar significados.

# Se vería algo así:
[-0.06381926, 0.22967029, -0.1313434, 0.42202282, ... y así sucesivamente]

Normalmente son vectores de números reales en un espacio de alta dimensionalidad (por ejemplo, 768, 1024, 1536, etc. dimensiones).

Los seres humanos, por nuestra parte, habitamos espacios que entendemos en tres dimensiones, o en dos, en el caso de una hoja de papel. Si dibujamos un plano, podemos tratar de ubicar palabras cerca por sus significados o incluso generar diagramas donde posicionamos a personas, películas, o mapas de conceptos como en la siguiente imagen:

Mapa de películas

Las computadoras, como herramientas tecnológicas, pueden realizar cálculos matemáticos complejos a alta velocidad. Con ellos podemos (solo por citar un ejemplo) tomar decenas de miles de libros completos y organizarlos según su contenido en muy poco tiempo. Pero para ello, necesitamos dejar que la computadora "piense" en muchas más dimensiones.

Un libro es un documento por lo general complejo donde no representamos solo palabras aislada, o frases con significados más concretos. En un libro pueden haber situaciones, relaciones entre personajes, argumentos, debates, metáforas, ironías, contenido técnico para algún curso, etc. En pocas palabras, ocupamos embeddings para relacionar nuestra cultura con vectores que las computadoras puedan "entender" y procesar.

Algunos ejemplos de uso de embeddings

Volvamos al ejemplo de los libros. Si tenemos miles de libros, y calculamos un vector de representaciones numéricas para cada uno de ellos, podemos ordenarlos por similitud. Es decir, si un usuario busca algo como "libros de cocina", podemos obtener los libros que estén "cerca" del vector "libros de cocina" en el espacio vectorial. Es decir, no necesitamos que el usuario escriba exactamente las palabras "libros de cocina", sino que el modelo nos devuelva libros que estén relacionados con la cocina, como "recetas", "gastronomía", "cocina peruana", "cocina mexicana", etc. Esto es posible porque el modelo "entiende" el concepto de "cocina" y puede relacionarlo con palabras que significan cosas similares. Este proceso se conoce como búsqueda semántica. En lugar de tomar cada libro, también podemos tomar un libro y hacer un embedding por cada página o sección. De esta manera podemos recuperar páginas e incluso citas particulares dentro del libro relacionadas a nuestra búsqueda ("recetas vaganas", o "¿cómo se cocina un pavo en navidad?").

Otro ejemplo similar sería hacer un marco teórico de una investigación: un investigador puede tomar un tema de investigación y buscar artículos relacionados con el tema. Luego puede intentar buscar referencias a su problema de investigación específico para ver si algún autor ya lo ha abordado o se acerca a su investigación.

En los modelos actuales de inteligencia artificial estos vectores se utilizan para tareas como la traducción automática (el espacio vectorial de una palabra en un idioma puede estar cerca del espacio vectorial de la misma palabra en otro idioma), el análisis de sentimiento en publicaciones de redes sociales (analizar si una publicación es positiva, negativa o neutra), la clasificación de texto en categorías diferenciables y más. Por lo tanto, la generación de estos vectores es una tarea fundamental en el campo del procesamiento del lenguaje natural, aunque también se pueden hacer embeddings de imágenes, audio, video, etc.

Y aquí es donde entra la clusterización que mencioné al principio: si logramos representar cada canción como un embedding, podemos usar un algoritmo de clustering (como K-Means o HDBSCAN) para que agrupe automáticamente las canciones que están más "cerca" entre sí en ese espacio vectorial. El algoritmo no sabe nada de música indie, ni de géneros, ni de década; solo ve números y distancias. Aun así, si los embeddings capturan bien el significado del texto, los grupos que arma suelen coincidir con patrones que sí tienen sentido para nosotros: canciones con temáticas parecidas, letras con un tono emocional similar, o reseñas que hablan de sonoridades cercanas. Para llegar a ese punto, primero hay que resolver el paso anterior: generar los embeddings. Ahí es donde entra FastEmbed.

¿Qué es FastEmbed?

FastEmbed es una librería de Python pensada para generar embeddings de texto de forma rápida y liviana, corriendo en el propio computador, sin depender de una API externa ni necesitar una GPU. Usa modelos ya entrenados y optimizados, lo que la hace bastante más liviana y rápida que cargar un modelo completo por otras vías.

Para instalarla basta con:

pip install fastembed

Y para generar embeddings de un conjunto de textos, el código es bastante directo:

from fastembed import TextEmbedding

# Cargamos un modelo (la primera vez se descarga y se guarda en caché)
modelo = TextEmbedding()

canciones = [
    "Letra sobre la nostalgia de la adolescencia y los veranos que no vuelven",
    "Reseña: sonido lo-fi, guitarras distorsionadas y una batería minimalista",
    "Letra sobre desamor, ciudades grises y la rutina del trabajo"
]

embeddings = list(modelo.embed(canciones))

print(len(embeddings))       # 3, uno por cada texto
print(embeddings[0].shape)   # por ejemplo, (384,)

Cada elemento de embeddings es justo lo que vimos al principio del artículo: un vector de números reales que representa el significado del texto correspondiente. A partir de aquí, esos vectores se pueden guardar, comparar por similitud, o pasar directamente a un algoritmo de clustering.

Un caso de aplicación: agrupar canciones por significado

Para ilustrar la idea sin entrar en todos los detalles de mi tesis (que tiene bastantes más matices y decisiones metodológicas de por medio), pensemos en una versión simplificada del problema. Si tenemos un conjunto de canciones y para cada una contamos con su letra o alguna descripción, podríamos seguir esta lógica general:

  1. Generar un embedding por canción a partir de su letra o descripción, con FastEmbed.
  2. Usar esos vectores como entrada de un algoritmo de clustering, que agrupe las canciones más "cercanas" entre sí.
  3. Revisar qué canciones cayeron en cada grupo y buscar qué tienen en común, para poder interpretar esos grupos con criterios propios del análisis y no solo matemáticos.

Lo interesante de este enfoque es que permite explorar un corpus "desde los datos", encontrando agrupaciones que uno quizás no habría propuesto a priori, para luego contrastarlas con categorías ya existentes y ver dónde calzan y dónde no. Y como todo corre localmente con FastEmbed, se puede iterar el proceso las veces que sea necesario (probar otro modelo, cambiar qué texto se usa, agregar más elementos al corpus) sin preocuparse por costos ni por mandar los datos a un servicio externo.

Cierre

FastEmbed no reemplaza todo lo que se puede hacer con modelos más grandes, pero para tareas como generar embeddings de un corpus propio, indexar documentos para búsqueda semántica o preparar datos para una clusterización, es una herramienta liviana, rápida y que evita depender de servicios externos. Si están trabajando con texto y necesitan representarlo numéricamente sin complicarse con infraestructura, vale la pena tenerla en el radar.