Contenido del curso

Introducción a LangChain

Chats y memoria con LangChain

Embeddings open source con LangChain y Hugging Face

Resumen

Trabajar con embeddings open source en LangChain te permite generar representaciones vectoriales de texto sin depender de APIs externas como OpenAI. Aprenderás a cargar modelos desde Hugging Face, comparar sus dimensiones y elegir el tamaño de token adecuado para tus documentos.

¿Cómo cargar Sentence Transformers en LangChain?

Los Sentence Transformers son de los modelos de embeddings más potentes y populares de la comunidad open source. LangChain los integra mediante una clase específica que facilita su uso local.

El flujo parte importando SentenceTransformerEmbeddings desde la librería de embeddings y creando una instancia con el nombre del modelo que descargarás del hub de Hugging Face. Un buen punto de partida es paraphrase-multilingual-miniLM-L12-v2, un modelo multilingüe que sí soporta español, algo poco común entre los embeddings disponibles [0:50].

¿Qué es un sentence transformer? Es un modelo que convierte oraciones completas en vectores numéricos, capturando el significado semántico para tareas como búsqueda y similitud.

¿Cómo generar incrustaciones con embed_documents?

Una vez cargado el modelo, llamas al método embed_documents y le pasas una lista de textos. El resultado es una lista de vectores, uno por cada documento ingresado.

En la demo se procesan cinco textos y cada incrustación tiene una longitud de 384 números. Ese es el tamaño del embedding del modelo mini, llamado así precisamente porque genera vectores compactos comparados con otros modelos más grandes [2:30].

Si solo quieres vectorizar un texto puntual, usa embed_query y pásale un único string. El vector resultante mantiene la misma dimensionalidad de 384 elementos.

¿Qué son los Instructor Embeddings y por qué importan?

Los Instructor Embeddings son una generación reciente de modelos de embeddings de alto rendimiento. La integración en LangChain se hace con HuggingFaceInstructEmbeddings, e instalas además las librerías InstructorEmbedding y sentence-transformers.

Uno de los modelos más reconocidos es Instructor Large, desarrollado por la Universidad de Hong Kong, una institución que está innovando fuertemente en este espacio. La advertencia importante: hoy no existe un Instructor Embedding que maneje español de forma nativa [3:50].

¿Cómo configurar GPU con model_kwargs?

Estos modelos tienden a ser pesados, así que conviene aprovechar el hardware disponible. Al instanciar el modelo puedes pasar el argumento model_kwargs indicando el dispositivo:

  • device: cuda si cuentas con GPU.
  • device: cpu si trabajas sin aceleración por hardware.

Después generas las incrustaciones igual que antes, con embed_documents para listas o embed_query para un solo texto. La diferencia clave está en el tamaño del vector resultante: 768 números por documento, el doble que el modelo mini de Sentence Transformers.

¿Cuál es la diferencia entre embed_documents y embed_query? embed_documents recibe una lista de textos y devuelve varios vectores. embed_query recibe un solo texto y devuelve un único vector, ideal para búsquedas individuales.

¿Cómo saber el tamaño máximo de tokens que acepta un embedding?

El tamaño del texto de entrada es una variable crítica al elegir un modelo de embeddings. Si superas el límite de tokens, el modelo corta el texto y pierdes información valiosa al convertirlo en números.

Para los modelos descargados de Hugging Face puedes inspeccionar el atributo client de tu instancia y ver el límite directamente. En la práctica:

  • Instructor Large acepta hasta 512 tokens como máximo.
  • paraphrase-multilingual-miniLM-L12-v2 acepta hasta 128 tokens, por ser un modelo mini.
  • El modelo de embeddings de OpenAI llega hasta 8000 tokens, un rango muy amplio.
  • Cohere recomienda un óptimo de 500 tokens según su documentación.

La regla práctica que se recomienda hoy es trabajar con fragmentos de hasta 500 tokens, equivalentes aproximadamente a 500 caracteres. Ese rango da suficiente contexto sin arriesgar truncamiento [8:40].

¿Qué pasa si un texto excede el límite de tokens del embedding? El modelo corta el texto en el límite máximo y descarta el resto, así que la parte sobrante no se representa en el vector final.

¿Por qué partir documentos antes de generar embeddings?

Dividir los documentos en fragmentos del tamaño exacto que tolera el modelo asegura que cada porción se procese íntegra. Esto es especialmente relevante en pipelines de búsqueda semántica y RAG, donde perder fragmentos por truncamiento degrada la calidad de las respuestas.

Cuando trabajas con proveedores cerrados como OpenAI o Cohere, la única vía es revisar la documentación oficial y los blogs del proveedor, ya que no siempre el límite es evidente desde el código.

Cuéntanos en los comentarios qué modelo de embeddings open source vas a probar primero y para qué caso de uso lo piensas aplicar.