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 que tiene una amplia variedad de opciones y capacidades que abarcan todas las consideraciones anteriores es Voyage AI.
Voyage AI crea modelos de embeddings de última generación y ofrece modelos personalizados para dominios industriales específicos como finanzas y salud, o modelos con "fine-tuning" (ajuste fino) a medida para clientes individuales.
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 recomienda usar los siguientes modelos de embeddings de texto:
Voyage 4 (ú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-4-nano | 32,000 | 1024 (predeterminado), 256, 512, 2048 | Modelo de pesos abiertos (licencia Apache 2.0) disponible en Hugging Face. Consulta la publicación del blog de Voyage 4 para más detalles. |
Generación anterior
| Modelo | Longitud de contexto | Dimensión del embedding | Descripción |
|---|---|---|---|
voyage-3-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-3-large para más detalles. |
voyage-3.5 | 32,000 | 1024 (predeterminado), 256, 512, 2048 | Optimizado para calidad de recuperación de propósito general y multilingüe. Consulta la publicación del blog de voyage-3.5 para más detalles. |
voyage-3.5-lite | 32,000 | 1024 (predeterminado), 256, 512, 2048 | Optimizado para latencia y costo. Consulta la publicación del blog de voyage-3.5 para más detalles. |
voyage-code-3 | 32,000 | 1024 (predeterminado), 256, 512, 2048 | Optimizado para recuperación de código. Consulta la publicación del blog de voyage-code-3 para más detalles. |
voyage-finance-2 | 32,000 | 1024 | Optimizado para recuperación y RAG de finanzas. Consulta la publicación del blog de voyage-finance-2 para más detalles. |
voyage-law-2 | 16,000 | 1024 | Optimizado para recuperación y RAG legal y de contexto largo. También mejoró el rendimiento en todos los dominios. Consulta la publicación del blog de voyage-law-2 para más detalles. |
Además, Voyage recomienda los siguientes modelos de embeddings multimodales:
| 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 soporte de 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 más detalles. |
voyage-multimodal-3 | 32,000 | 1024 | Modelo de embeddings multimodal enriquecido que puede vectorizar texto intercalado e imágenes ricas en contenido, como capturas de pantalla de PDFs, diapositivas, tablas, figuras y más. Consulta la publicación del blog de voyage-multimodal-3 para 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 calidad de recuperación de propósito general y multilingüe. Consulta la publicación del blog de voyage-context-4 para más detalles. |
voyage-context-3 | 120,000 | 1024 (predeterminado), 256, 512, 2048 | Embeddings de fragmentos contextualizados optimizados para calidad de recuperación de propósito general y multilingüe. Consulta la publicación del blog de voyage-context-3 para más detalles. |
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-2.5 | 32,000 | La mayor precisión. Recomendado para la mayoría de las aplicaciones. Consulta la publicación del blog de rerank-2.5 para más detalles. |
rerank-2.5-lite | 32,000 | Optimizado para latencia y costo. Consulta la publicación del blog de rerank-2.5 para más detalles. |
¿Necesitas ayuda para decidir qué modelo de embeddings de texto usar? Consulta las preguntas frecuentes de Voyage AI.
Primeros pasos con Voyage AI
Para acceder a los embeddings de Voyage:
- Regístrate en el sitio web de Voyage AI.
- Obtén una clave de API.
- Configura la clave de API como una variable de entorno para mayor comodidad:
export VOYAGE_API_KEY="<your secret key>"Puedes obtener los embeddings usando el paquete oficial de Python voyageai o mediante solicitudes HTTP, como se describe en las siguientes secciones.
Biblioteca Python de Voyage
Instala el paquete voyageai usando el siguiente comando:
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.
# Alternativamente, puedes usar vo = voyageai.Client(api_key="<tu clave secreta>")
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 más información sobre el paquete Python de Voyage, consulta la documentación del paquete Python de Voyage.
API HTTP de Voyage
También puedes obtener embeddings haciendo solicitudes a la API HTTP de Voyage. Por ejemplo, puedes enviar una solicitud HTTP mediante el comando curl en una terminal:
curl https://api.voyageai.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"
}'La respuesta que obtendrías es un objeto JSON que contiene los embeddings y el uso de tokens:
{
"object": "list",
"data": [
{
"embedding": [-0.013131560757756233, 0.019828535616397858 /* ... */],
"index": 0
},
{
"embedding": [-0.0069352793507277966, 0.020878976210951805 /* ... */],
"index": 1
}
],
"model": "voyage-4",
"usage": {
"total_tokens": 10
}
}Para más información sobre la API HTTP de Voyage, consulta la documentación de la API HTTP de Voyage.
AWS Marketplace
Los embeddings de Voyage están disponibles en AWS Marketplace. Las instrucciones para acceder a Voyage en AWS están disponibles en la documentación de Voyage en AWS Marketplace.
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 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
# Incrusta la consulta
query_embd = vo.embed([query], model="voyage-4", input_type="query").embeddings[0]
# Calcula la similitud
# Los embeddings de Voyage están normalizados a longitud 1, por lo tanto 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. Puedes encontrar más especificaciones en Biblioteca Python de Voyage.
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 dependen de potentes redes neuronales para capturar y comprimir el contexto semántico, de manera similar a los modelos generativos. El equipo de investigadores de IA experimentados de Voyage optimiza cada componente del proceso de embedding, incluyendo:
- 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 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 - Código y documentación de programación:
voyage-code-3 - Tareas relacionadas con finanzas:
voyage-finance-2
Para recuperación a nivel de fragmento y a nivel de documento: voyage-context-4
Puedes usar los embeddings de Voyage con similitud de producto punto, similitud coseno o distancia euclidiana. Para 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 la guía de tokenización de Voyage.
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", una consulta 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."
voyage-large-2-instruct, como su nombre sugiere, está entrenado para responder a instrucciones adicionales que se anteponen al texto de entrada. Para clasificación, agrupamiento u otras subtareas de MTEB, usa las instrucciones de voyage-large-2-instruct.
La cuantización en 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, reduciendo el almacenamiento, la memoria y los costos en 4x y 32x, respectivamente. Los modelos de Voyage compatibles permiten la cuantización especificando el tipo de dato 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 de un solo bit, cuantizados y 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 (offset binary), sobre el cual puedes aprender más en las preguntas frecuentes de embeddings.
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 usando el método de binario desplazado (77 - 128 = -51).
El aprendizaje Matryoshka crea embeddings con representaciones de grueso a fino dentro de un único vector. Los modelos de Voyage, como voyage-code-3, que admiten múltiples dimensiones de salida generan este tipo de embeddings Matryoshka. Puedes truncar estos vectores conservando el subconjunto inicial de dimensiones. Por ejemplo, el siguiente código Python demuestra 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-3, que por defecto son números de punto flotante de 1024 dimensiones
embd = vo.embed(["Sample text 1", "Sample text 2"], model="voyage-code-3").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
Visita la página de precios de Voyage para obtener los detalles de precios más actualizados.
Was this page helpful?