Embeddings
Los embeddings de texto son representaciones numéricas del texto que permiten medir la similitud semántica. Esta guía presenta los embeddings, sus aplicaciones y cómo usar modelos de embeddings para tareas como búsqueda, recomendaciones y detección de anomalías.
Antes de implementar embeddings
Al seleccionar un proveedor de "embeddings" (incrustaciones), hay varios factores que puedes considerar según tus necesidades y preferencias:
- Tamaño del conjunto de datos y especificidad del dominio: tamaño del conjunto de datos de entrenamiento del modelo y su relevancia para el dominio que deseas incrustar. Datos más grandes o más específicos del dominio generalmente producen mejores embeddings dentro del dominio
- Rendimiento de inferencia: velocidad de búsqueda de embeddings y "latency" (latencia) de extremo a extremo. Esta es una consideración particularmente importante para despliegues de producción a gran escala
- Personalización: opciones para continuar el entrenamiento con datos privados, o especialización de modelos para dominios muy específicos. Esto puede mejorar el rendimiento en vocabularios únicos
Cómo obtener embeddings con Anthropic
Anthropic no ofrece su propio modelo de embeddings. Un proveedor de embeddings con una amplia variedad de modelos y capacidades es Voyage AI de MongoDB.
Voyage AI crea modelos de embeddings y "rerankers" (reordenadores). Sus modelos de embeddings incluyen modelos de propósito general, multimodales, contextualizados y específicos de dominio.
El resto de esta guía es para Voyage AI, pero deberías evaluar una variedad de proveedores de embeddings para encontrar el que mejor se adapte a tu caso de uso específico.
Modelos disponibles
Voyage AI ofrece los siguientes modelos de embeddings de texto:
Última generación
| Modelo | Longitud de contexto | Dimensión del embedding | Descripción |
|---|---|---|---|
voyage-4-large | 32,000 | 1024 (predeterminado), 256, 512, 2048 | La mejor calidad de recuperación de propósito general y multilingüe. Consulta la publicación del blog de Voyage 4 para más detalles. |
voyage-4 | 32,000 | 1024 (predeterminado), 256, 512, 2048 | Optimizado para calidad de recuperación de propósito general y multilingüe. Equilibra calidad y eficiencia. Consulta la publicación del blog de Voyage 4 para más detalles. |
voyage-4-lite | 32,000 | 1024 (predeterminado), 256, 512, 2048 | Optimizado para latencia y costo. Consulta la publicación del blog de Voyage 4 para más detalles. |
voyage-code-4 | 32,000 | 1024 (predeterminado), 256, 512, 2048 | Optimizado para la recuperación de código y aplicaciones de programación agéntica. Consulta la publicación del blog de voyage-code-4 para obtener más detalles. |
voyage-4-nano | 32,000 | 2048 (predeterminado), 256, 512, 1024 | Modelo de pesos abiertos (licencia Apache 2.0) que descargas desde Hugging Face y ejecutas tú mismo. No está disponible a través de la Atlas Embedding and Reranking API. Consulta la publicación del blog de Voyage 4 para obtener más detalles. |
Generación anterior
Para conocer el estado del ciclo de vida de cada modelo y su reemplazo recomendado, consulta Model deprecations, lifecycle states, and support en la documentación de MongoDB.
| Modelo | Longitud de contexto | Dimensión del embedding | Descripción |
|---|---|---|---|
voyage-3-large | 32,000 | 1024 (predeterminado), 256, 512, 2048 | Generación anterior de voyage-4-large. Consulta la publicación del blog de voyage-3-large para obtener más detalles. |
voyage-3.5 | 32,000 | 1024 (predeterminado), 256, 512, 2048 | Generación anterior de voyage-4. Consulta la publicación del blog de voyage-3.5 para obtener más detalles. |
voyage-3.5-lite | 32,000 | 1024 (predeterminado), 256, 512, 2048 | Generación anterior de voyage-4-lite. Consulta la publicación del blog de voyage-3.5 para obtener más detalles. |
voyage-code-3 | 32,000 | 1024 (predeterminado), 256, 512, 2048 | Generación anterior de voyage-code-4. Consulta la publicación del blog de voyage-code-3 para obtener más detalles. |
voyage-finance-2 | 32,000 | 1024 | Optimizado para la recuperación en finanzas y "retrieval-augmented generation" (generación aumentada por recuperación), o RAG. Consulta la publicación del blog de voyage-finance-2 para obtener más detalles. |
voyage-law-2 | 16,000 | 1024 | Optimizado para la recuperación legal y RAG. Consulta la publicación del blog de voyage-law-2 para obtener más detalles. |
Además, Voyage AI ofrece los siguientes modelos de embeddings multimodales. Llama a estos modelos con multimodal_embed() en lugar de embed():
| Modelo | Longitud de contexto | Dimensión del embedding | Descripción |
|---|---|---|---|
voyage-multimodal-3.5 | 32,000 | 1024 (predeterminado), 256, 512, 2048 | Modelo de embeddings multimodal enriquecido que puede vectorizar texto, imágenes y videos intercalados. Incluye compatibilidad con video como el primer modelo de embeddings de video de nivel de producción. Consulta la publicación del blog de voyage-multimodal-3.5 para obtener más detalles. |
voyage-multimodal-3 | 32,000 | 1024 | Generación anterior de voyage-multimodal-3.5. Vectoriza texto intercalado e imágenes ricas en contenido, como capturas de pantalla de PDF, diapositivas, tablas, figuras y más. Consulta la publicación del blog de voyage-multimodal-3 para obtener más detalles. |
Los siguientes modelos de embeddings de fragmentos contextualizados producen vectores a nivel de fragmento que capturan el contexto completo del documento sin aumento manual de metadatos. Llama a estos modelos con contextualized_embed() en lugar de embed():
| Modelo | Longitud de contexto | Dimensión del embedding | Descripción |
|---|---|---|---|
voyage-context-4 | 120,000 | 1024 (predeterminado), 256, 512, 2048 | Embeddings de fragmentos contextualizados optimizados para la calidad de recuperación de propósito general y multilingüe. Consulta la publicación del blog de voyage-context-4 para obtener más detalles. |
voyage-context-3 | 120,000 | 1024 (predeterminado), 256, 512, 2048 | Generación anterior de voyage-context-4. Consulta la publicación del blog de voyage-context-3 para obtener más detalles. |
El límite de 120,000 tokens se aplica cuando estableces enable_auto_chunking en true. De lo contrario, el número total de tokens entre todas las entradas no puede superar los 32,000.
Voyage AI también ofrece "rerankers" (reordenadores), que toman una consulta y una lista de documentos y los devuelven ordenados por relevancia respecto a la consulta. Llama a estos modelos con rerank():
| Modelo | Longitud de contexto | Descripción |
|---|---|---|
rerank-3 | 32,000 | La mayor precisión. Recomendado para la mayoría de las aplicaciones. Consulta la publicación del blog de rerank-3 para obtener más detalles. |
rerank-3-lite | 32,000 | Optimizado para latencia y costo. Consulta la publicación del blog de rerank-3 para obtener más detalles. |
rerank-2.5 | 32,000 | Generación anterior de rerank-3. Consulta la publicación del blog de rerank-2.5 para obtener más detalles. |
rerank-2.5-lite | 32,000 | Generación anterior de rerank-3-lite. Consulta la publicación del blog de rerank-2.5 para obtener más detalles. |
¿Necesitas ayuda para decidir qué modelo usar? Consulta Voyage AI embedding and reranking models overview en la documentación de MongoDB.
Primeros pasos con Voyage AI
Para acceder a los modelos de Voyage AI, crea una clave de API de modelo en MongoDB Atlas:
- Regístrate para obtener una cuenta de MongoDB Atlas o inicia sesión.
- En tu proyecto de Atlas, selecciona AI Model APIs en la barra de navegación, haz clic en Create model API key, asigna un nombre a la clave y haz clic en Create.
- Por comodidad, establece la clave de API como una variable de entorno:
export VOYAGE_API_KEY="<your model API key>"Para obtener más detalles, consulta Voyage AI quick start en la documentación de MongoDB.
Puedes obtener los embeddings usando el paquete oficial de Python voyageai o mediante solicitudes HTTP, como se describe en las siguientes secciones. Voyage AI también tiene un cliente oficial de TypeScript. Para usarlo con una clave de API de modelo de Atlas, establece su opción environment en https://ai.mongodb.com/v1, como se describe en TypeScript client en la documentación de MongoDB.
Biblioteca de Python de Voyage AI
Instala el paquete voyageai con el siguiente comando. Para usar una clave de API de modelo de Atlas, necesitas la versión 0.3.7 o posterior.
pip install -U voyageaiLuego, puedes crear un objeto cliente y comenzar a usarlo para incrustar tus textos:
import voyageai
vo = voyageai.Client()
# Esto usará automáticamente la variable de entorno VOYAGE_API_KEY.
# Como alternativa, puedes usar vo = voyageai.Client(api_key="<your model API key>")
texts = ["Sample text 1", "Sample text 2"]
result = vo.embed(texts, model="voyage-4", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])result.embeddings es una lista de dos vectores de embeddings, cada uno con 1024 números de punto flotante. Después de ejecutar el código anterior, los dos embeddings se imprimen en la pantalla:
[-0.013131560757756233, 0.019828535616397858, ...] # embedding for "Sample text 1"
[-0.0069352793507277966, 0.020878976210951805, ...] # embedding for "Sample text 2"Al crear los embeddings, puedes especificar algunos otros argumentos para la función embed().
Para obtener más información sobre el paquete de Python, consulta Accessing Voyage AI models en la documentación de MongoDB.
API HTTP de Voyage AI
También puedes obtener embeddings enviando solicitudes HTTP a la Atlas Embedding and Reranking API. Por ejemplo, puedes enviar una solicitud HTTP mediante el comando curl en una terminal:
curl https://ai.mongodb.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $VOYAGE_API_KEY" \
-d '{
"input": ["Sample text 1", "Sample text 2"],
"model": "voyage-4",
"input_type": "document"
}'La respuesta que obtendrías es un objeto JSON que contiene los embeddings y el uso de tokens:
{
"object": "list",
"data": [
{
"object": "embedding",
"embedding": [-0.013131560757756233, 0.019828535616397858 /* ... */],
"index": 0
},
{
"object": "embedding",
"embedding": [-0.0069352793507277966, 0.020878976210951805 /* ... */],
"index": 1
}
],
"model": "voyage-4",
"usage": {
"total_tokens": 10
}
}Las claves de API de modelo de Atlas funcionan con ai.mongodb.com, excepto las claves limitadas a una geografía, que usan el endpoint de esa geografía. Si en cambio tienes una clave de API de la plataforma de Voyage AI, consulta Migrate your applications to use the Atlas Embedding and Reranking API en la documentación de MongoDB.
Para ver la referencia completa de solicitudes y respuestas, consulta Create text embeddings en la documentación de la Atlas Embedding and Reranking API.
AWS Marketplace
Los modelos de Voyage AI también están disponibles en AWS Marketplace a través del perfil de vendedor de MongoDB. Para obtener instrucciones, consulta Deploy Voyage AI models using AWS Marketplace en la documentación de MongoDB.
Ejemplo de inicio rápido
El siguiente ejemplo breve muestra cómo usar embeddings.
Supón que tienes un pequeño corpus de seis documentos de los cuales recuperar
documents = [
"The Mediterranean diet emphasizes fish, olive oil, and vegetables, believed to reduce chronic diseases.",
"Photosynthesis in plants converts light energy into glucose and produces essential oxygen.",
"20th-century innovations, from radios to smartphones, centered on electronic advancements.",
"Rivers provide water, irrigation, and habitat for aquatic species, vital for ecosystems.",
"Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.",
"Shakespeare's works, like 'Hamlet' and 'A Midsummer Night's Dream,' endure in literature.",
]Primero, usa Voyage AI para convertir cada documento en un vector de embedding.
import voyageai
vo = voyageai.Client()
# Genera los embeddings de los documentos
doc_embds = vo.embed(documents, model="voyage-4", input_type="document").embeddingsLos embeddings te permiten hacer búsqueda / recuperación semántica en el espacio vectorial. Dada una consulta de ejemplo,
query = "When is Apple's conference call scheduled?"A continuación, conviértela en un embedding y realiza una búsqueda del vecino más cercano para encontrar el documento más relevante según la distancia en el espacio de embeddings.
import numpy as np
# Genera el embedding de la consulta
query_embd = vo.embed([query], model="voyage-4", input_type="query").embeddings[0]
# Calcula la similitud
# Los embeddings de Voyage AI están normalizados a longitud 1, así que el producto punto
# y la similitud coseno son lo mismo.
similarities = np.dot(doc_embds, query_embd)
retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])Ten en cuenta que input_type="document" e input_type="query" se usan para incrustar el documento y la consulta, respectivamente. Para obtener más información sobre input_type, consulta ¿Cuándo y cómo debería usar el parámetro input_type? en las preguntas frecuentes.
La salida es el quinto documento, que efectivamente es el más relevante para la consulta:
Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.Si buscas un conjunto detallado de recetas sobre cómo hacer RAG con embeddings, incluidas bases de datos vectoriales, consulta la receta de RAG.
Preguntas frecuentes
Los modelos de embeddings se basan en potentes redes neuronales para capturar y comprimir el contexto semántico, de forma similar a los modelos generativos. El equipo de investigadores de IA experimentados de Voyage AI optimiza cada componente del proceso de embedding, incluidos:
- Arquitectura del modelo
- Recopilación de datos
- Funciones de pérdida
- Selección del optimizador
Obtén más información sobre el enfoque técnico de Voyage AI en el blog de Voyage AI.
Para embeddings de propósito general, los modelos recomendados son:
voyage-4-large: Mejor calidadvoyage-4-lite: Menor latencia y costovoyage-4: Rendimiento equilibrado
Para recuperación, usa el parámetro input_type para especificar si el texto es de tipo consulta o documento.
Modelos específicos de dominio:
- Tareas legales:
voyage-law-2 - Recuperación de código y programación agéntica:
voyage-code-4 - Tareas relacionadas con finanzas:
voyage-finance-2
Para la recuperación a nivel de fragmento y a nivel de documento: voyage-context-4
Para texto, imágenes y video: voyage-multimodal-3.5
Puedes usar los embeddings de Voyage AI con similitud de producto punto, similitud de coseno o distancia euclidiana. Para obtener una explicación sobre la similitud de embeddings, consulta esta guía de similitud vectorial.
Los embeddings de Voyage AI están normalizados a longitud 1, lo que significa que:
- La similitud coseno es equivalente a la similitud de producto punto, mientras que esta última puede calcularse más rápidamente.
- La similitud coseno y la distancia euclidiana producen clasificaciones idénticas.
Consulta Tokenization en la documentación de MongoDB.
Para todas las tareas y casos de uso de recuperación (por ejemplo, RAG), usa el parámetro input_type para especificar si el texto de entrada es una consulta o un documento. No omitas input_type ni establezcas input_type=None. Especificar si el texto de entrada es una consulta o un documento puede crear mejores representaciones vectoriales densas para la recuperación, lo que puede conducir a una mejor calidad de recuperación.
Al usar el parámetro input_type, se anteponen prompts especiales al texto de entrada antes del embedding. Específicamente:
📘 Prompts asociados con
input_type
- Para una consulta, el prompt es
"Represent the query for retrieving supporting documents: ".- Para un documento, el prompt es
"Represent the document for retrieval: ".- Ejemplo
- Cuando
input_type="query", una consulta como "When is Apple's conference call scheduled?" se convertirá en "Represent the query for retrieving supporting documents: When is Apple's conference call scheduled?"- Cuando
input_type="document", un documento como "Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET." se convertirá en "Represent the document for retrieval: Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET."
La "quantization" (cuantización) en los embeddings convierte valores de alta precisión, como números de punto flotante de precisión simple de 32 bits, a formatos de menor precisión, como enteros de 8 bits o valores binarios de 1 bit, lo que reduce el almacenamiento, la memoria y los costos en 4x y 32x, respectivamente. Los modelos de Voyage AI compatibles permiten la cuantización especificando el tipo de datos de salida con el parámetro output_dtype:
float: Cada embedding devuelto es una lista de números de punto flotante de precisión simple de 32 bits (4 bytes). Este es el valor predeterminado y proporciona la mayor precisión / exactitud de recuperación.int8yuint8: Cada embedding devuelto es una lista de enteros de 8 bits (1 byte) que van de -128 a 127 y de 0 a 255, respectivamente.binaryyubinary: Cada embedding devuelto es una lista de enteros de 8 bits que representan valores de embedding cuantizados de un solo bit empaquetados en bits:int8parabinaryyuint8paraubinary. La longitud de la lista de enteros devuelta es 1/8 de la dimensión real del embedding. El tipo binario usa el método de binario desplazado, como muestra el siguiente ejemplo.
Ejemplo de cuantización binaria
Considera los siguientes ocho valores de embedding: -0.03955078, 0.006214142, -0.07446289, -0.039001465, 0.0046463013, 0.00030612946, -0.08496094 y 0.03994751. Con la cuantización binaria, los valores menores o iguales a cero se cuantizarán a un cero binario, y los valores positivos a un uno binario, lo que da como resultado la siguiente secuencia binaria: 0, 1, 0, 0, 1, 1, 0, 1. Estos ocho bits se empaquetan luego en un único entero de 8 bits, 01001101 (con el bit más a la izquierda como el bit más significativo).
ubinary: La secuencia binaria se convierte directamente y se representa como el entero sin signo (uint8) 77.binary: La secuencia binaria se representa como el entero con signo (int8) -51, calculado mediante el método de binario desplazado (77 - 128 = -51).
Para conocer los modelos que admiten cada tipo de datos, consulta Create text embeddings en la documentación de la Atlas Embedding and Reranking API.
El aprendizaje Matryoshka crea embeddings con representaciones de lo general a lo detallado dentro de un único vector. Los modelos de Voyage AI que admiten múltiples dimensiones de salida, como voyage-code-4, generan este tipo de embeddings Matryoshka. Para obtener vectores más cortos desde la API, pasa output_dimension (por ejemplo, output_dimension=256). Para acortar vectores que ya almacenaste, trúncalos conservando el subconjunto inicial de dimensiones y luego vuelve a normalizarlos. Por ejemplo, el siguiente código de Python muestra cómo truncar vectores de 1024 dimensiones a 256 dimensiones:
import voyageai
import numpy as np
def embd_normalize(v: np.ndarray) -> np.ndarray:
"""
Normalize the rows of a 2D numpy array to unit vectors by dividing each row by its Euclidean
norm. Raises a ValueError if any row has a norm of zero to prevent division by zero.
"""
row_norms = np.linalg.norm(v, axis=1, keepdims=True)
if np.any(row_norms == 0):
raise ValueError("Cannot normalize rows with a norm of zero.")
return v / row_norms
vo = voyageai.Client()
# Genera vectores voyage-code-4, que por defecto son números de punto flotante de 1024 dimensiones
embd = vo.embed(["Sample text 1", "Sample text 2"], model="voyage-code-4").embeddings
# Establece una dimensión más corta
short_dim = 256
# Redimensiona y normaliza los vectores a la dimensión más corta
resized_embd = embd_normalize(np.array(embd)[:, :short_dim]).tolist()Precios
Para obtener los detalles de precios más actualizados, consulta Model pricing en la documentación de MongoDB.
Was this page helpful?