Antes de implementar embeddings

Al seleccionar un proveedor de embeddings, 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 embeber. 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 latencia de extremo a extremo. Esta es una consideración particularmente importante para implementaciones de producción a gran escala
  • Personalización: opciones para entrenamiento continuo en 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 state-of-the-art y ofrece modelos personalizados para dominios industriales específicos como finanzas y salud, o modelos ajustados a medida para clientes individuales.

El resto de esta guía es para Voyage AI, pero te animamos a evaluar una variedad de proveedores de embeddings para encontrar el mejor ajuste para tu caso de uso específico.


Comenzando con Voyage AI

Echa un vistazo a nuestro cuaderno de embeddings para ver un ejemplo de implementación de Voyage AI.

Para acceder a los embeddings de Voyage:

  1. Regístrate en el sitio web de Voyage AI
  2. Obtén una clave API
  3. Establece la clave API como una variable de entorno para mayor comodidad:
Python
export VOYAGE_API_KEY="<tu clave secreta>"

Puedes ejecutar los embeddings usando el paquete Python oficial de voyageai o solicitudes HTTP, como se describe a continuación.

Paquete Python de Voyage

El paquete voyageai se puede instalar usando el siguiente comando:

Python
pip install -U voyageai

Luego, puedes crear un objeto cliente y comenzar a usarlo para embeber tus textos:

Python
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 = ["Texto de muestra 1", "Texto de muestra 2"]

result = vo.embed(texts, model="voyage-2", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])

result.embeddings será una lista de dos vectores de embeddings, cada uno conteniendo 1024 números de punto flotante.

Después de ejecutar el código anterior, los dos embeddings se imprimirán en la pantalla:

Python
[0.02012746, 0.01957859, ...]  # embedding para "Texto de muestra 1"
[0.01429677, 0.03077182, ...]  # embedding para "Texto de muestra 2"

Al crear los embeddings, puedes especificar algunos otros argumentos para la función embed(). Aquí está la especificación:

voyageai.Client.embed(texts : List[str], model : str, input_type : Optional[str] = None, truncation : Optional[bool] = None)

  • texts (List[str]) - Una lista de textos como una lista de cadenas, como ["Me gustan los gatos", "También me gustan los perros"]. Actualmente, la longitud máxima de la lista es 128, y el número total de tokens en la lista es como máximo 320K para voyage-2 y 120K para voyage-large-2/voyage-code-2.
  • model (str) - Nombre del modelo. Opciones recomendadas: voyage-2, voyage-large-2, voyage-code-2.
  • input_type (str, opcional, por defecto None) - Tipo del texto de entrada. Por defecto es None. Otras opciones: query, document
    • Cuando input_type se establece en None, el texto de entrada se codificará directamente por el modelo de embeddings de Voyage. Alternativamente, cuando las entradas son documentos o consultas, los usuarios pueden especificar input_type como query o document, respectivamente. En tales casos, Voyage antepondrá un prompt especial al texto de entrada y enviará las entradas extendidas al modelo de embeddings
    • Para casos de uso de recuperación/búsqueda, recomendamos especificar este argumento al codificar consultas o documentos para mejorar la calidad de recuperación. Los embeddings generados con y sin el argumento input_type son compatibles
  • truncation (bool, opcional, por defecto None) - Si se deben truncar los textos de entrada para que se ajusten a la longitud del contexto.
    • Si es True, los textos de entrada demasiado largos se truncarán para ajustarse a la longitud del contexto, antes de ser vectorizados por el modelo de embeddings
    • Si es False, se generará un error si algún texto dado excede la longitud del contexto
    • Si no se especifica (por defecto None), Voyage truncará el texto de entrada antes de enviarlo al modelo de embeddings si excede ligeramente la longitud de la ventana de contexto. Si excede significativamente la longitud de la ventana de contexto, se generará un error

API HTTP de Voyage

También puedes obtener embeddings solicitando la API HTTP de Voyage. Por ejemplo, puedes enviar una solicitud HTTP a través del comando curl en una terminal:

Shell
curl https://api.voyageai.com/v1/embeddings \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $VOYAGE_API_KEY" \
  -d '{
    "input": ["Texto de muestra 1", "Texto de muestra 2"],
    "model": "voyage-2"
  }'

La respuesta que obtendrías es un objeto JSON que contiene los embeddings y el uso de tokens:

Shell
{
  "object": "list",
  "data": [
    {
      "embedding": [0.02012746, 0.01957859, ...],
      "index": 0
    },
    {
      "embedding": [0.01429677, 0.03077182, ...],
      "index": 1
    }
  ],
  "model": "voyage-2",
  "usage": {
    "total_tokens": 10
  }
}

El endpoint de embeddings de Voyage AI es https://api.voyageai.com/v1/embeddings (POST). El encabezado de la solicitud debe contener la clave API. El cuerpo de la solicitud es un objeto JSON que contiene los siguientes argumentos:

  • input (str, List[str]) - Una sola cadena de texto, o una lista de textos como una lista de cadenas. Actualmente, la longitud máxima de la lista es 128, y el número total de tokens en la lista es como máximo 320K para voyage-2 y 120K para voyage-large-2/voyage-code-2.
  • model (str) - Nombre del modelo. Opciones recomendadas: voyage-2, voyage-large-2, voyage-code-2.
  • input_type (str, opcional, por defecto None) - Tipo del texto de entrada. Por defecto es None. Otras opciones: query, document
  • truncation (bool, opcional, por defecto None) - Si se deben truncar los textos de entrada para que se ajusten a la longitud del contexto
    • Si es True, los textos de entrada demasiado largos se truncarán para ajustarse a la longitud del contexto antes de ser vectorizados por el modelo de embeddings
    • Si es False, se generará un error si algún texto dado excede la longitud del contexto
    • Si no se especifica (por defecto None), Voyage truncará el texto de entrada antes de enviarlo al modelo de embeddings si excede ligeramente la longitud de la ventana de contexto. Si excede significativamente la longitud de la ventana de contexto, se generará un error
  • encoding_format (str, opcional, por defecto None) - Formato en el que se codifican los embeddings. Voyage actualmente admite dos opciones:
    • Si no se especifica (por defecto None): los embeddings se representan como listas de números de punto flotante
    • "base64": los embeddings se comprimen en codificaciones Base64

Ejemplo de embedding de Voyage

Ahora que sabemos cómo obtener embeddings con Voyage, veamos un breve ejemplo en acción.

Supongamos que tenemos un pequeño corpus de seis documentos para recuperar

Python
documents = [
    "La dieta mediterránea enfatiza el pescado, el aceite de oliva y las verduras, se cree que reduce las enfermedades crónicas.",
    "La fotosíntesis en las plantas convierte la energía lumínica en glucosa y produce oxígeno esencial.",
    "Las innovaciones del siglo XX, desde radios hasta teléfonos inteligentes, se centraron en avances electrónicos.",
    "Los ríos proporcionan agua, riego y hábitat para especies acuáticas, vitales para los ecosistemas.",
    "La conferencia telefónica de Apple para discutir los resultados del cuarto trimestre fiscal y las actualizaciones comerciales está programada para el jueves 2 de noviembre de 2023 a las 2:00 p.m. PT / 5:00 p.m. ET.",
    "Las obras de Shakespeare, como 'Hamlet' y 'Sueño de una noche de verano', perduran en la literatura."
]

Primero usaremos Voyage para convertir cada uno de ellos en un vector de embedding

Python
import voyageai

vo = voyageai.Client()

# Embeber los documentos
doc_embds = vo.embed(
    documents, model="voyage-2", input_type="document"
).embeddings

Los embeddings nos permitirán hacer búsqueda/recuperación semántica en el espacio vectorial. Luego podemos convertir una consulta de ejemplo,

Python
query = "¿Cuándo está programada la conferencia telefónica de Apple?"

en un embedding, y luego realizar una búsqueda de vecinos más cercanos para encontrar el documento más relevante según la distancia en el espacio de embeddings.

Python
import numpy as np

# Embeber la consulta
query_embd = vo.embed(
    [query], model="voyage-2", input_type="query"
).embeddings[0]

# Calcular la similitud
# Los embeddings de Voyage se normalizan 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 usamos input_type="document" y input_type="query" para embeber el documento y la consulta, respectivamente. Puedes encontrar más especificaciones aquí.

La salida sería el quinto documento, que de hecho es el más relevante para la consulta:

La conferencia telefónica de Apple para discutir los resultados del cuarto trimestre fiscal y las actualizaciones comerciales está programada para el jueves 2 de noviembre de 2023 a las 2:00 p.m. PT / 5:00 p.m. ET.

Modelos de Voyage disponibles

Voyage recomienda usar los siguientes modelos de embeddings:

ModeloLongitud del contextoDimensión del embeddingDescripción
voyage-large-2160001536El modelo de embedding generalista más potente de Voyage AI.
voyage-code-2160001536Optimizado para recuperación de código (17% mejor que las alternativas), y también SoTA en corpus de propósito general. Consulta esta publicación de blog de Voyage para más detalles.
voyage-240001024Modelo de embedding generalista base optimizado tanto para latencia como para calidad.
voyage-lite-02-instruct40001024Ajustado por instrucciones para tareas de clasificación, agrupamiento y similitud textual de oraciones, que son los únicos casos de uso recomendados para este modelo.

voyage-2 y voyage-large-2 son modelos de embeddings generalistas, que logran un rendimiento state-of-the-art en todos los dominios y mantienen una alta eficiencia. voyage-code-2 está optimizado para el campo del código, ofreciendo una longitud de contexto 4 veces mayor para un uso más flexible, aunque con una latencia relativamente más alta.

Voyage está desarrollando activamente modelos más avanzados y especializados, y también ofrece servicios de ajuste fino para personalizar modelos a medida para clientes individuales. Envía un correo electrónico a tu gerente de cuenta de Anthropic o comunícate con el soporte de Anthropic para obtener más información sobre modelos a medida.

  • voyage-finance-2: próximamente
  • voyage-law-2: próximamente
  • voyage-multilingual-2: próximamente
  • voyage-healthcare-2: próximamente

Voyage en AWS Marketplace

Los embeddings de Voyage también están disponibles en AWS Marketplace. Aquí están las instrucciones para acceder a Voyage en AWS:

  1. Suscríbete al paquete del modelo
    1. Navega a la página de listado del paquete del modelo y selecciona el modelo a implementar
    2. Haz clic en el botón Continue to subscribe
    3. Revisa cuidadosamente los detalles en la página Subscribe to this software. Si estás de acuerdo con el Acuerdo de licencia de usuario final (EULA) estándar, los precios y los términos de soporte, haz clic en “Accept Offer”
    4. Después de seleccionar Continue to configuration y elegir una región, se te presentará un Product Arn. Este es el ARN del paquete del modelo requerido para crear un modelo implementable usando Boto3
      1. Copia el ARN que corresponde a tu región seleccionada y úsalo en la celda siguiente
  2. Implementa el paquete del modelo

Desde aquí, crea un espacio JupyterLab en Sagemaker Studio, carga el cuaderno de Voyage y sigue las instrucciones dentro.


Preguntas frecuentes


Precios

Visita la página de precios de Voyage para obtener los detalles de precios más actualizados.