Avant d’implémenter les plongements

Lors de la sélection d’un fournisseur de plongements, il y a plusieurs facteurs à considérer selon vos besoins et préférences :

  • Taille du jeu de données et spécificité du domaine : taille du jeu de données d’entraînement du modèle et sa pertinence pour le domaine que vous souhaitez encoder. Des données plus volumineuses ou plus spécifiques au domaine produisent généralement de meilleurs plongements dans le domaine
  • Performance d’inférence : vitesse de recherche des plongements et latence de bout en bout. C’est une considération particulièrement importante pour les déploiements à grande échelle en production
  • Personnalisation : options pour poursuivre l’entraînement sur des données privées, ou spécialisation des modèles pour des domaines très spécifiques. Cela peut améliorer les performances sur des vocabulaires uniques

Comment obtenir des plongements avec Anthropic

Anthropic ne propose pas son propre modèle de plongement. Un fournisseur de plongements qui offre une grande variété d’options et de capacités englobant toutes les considérations ci-dessus est Voyage AI.

Voyage AI crée des modèles de plongement à la pointe de la technologie et propose des modèles personnalisés pour des domaines industriels spécifiques comme la finance et la santé, ou des modèles affinés sur mesure pour des clients individuels.

Le reste de ce guide concerne Voyage AI, mais nous vous encourageons à évaluer différents fournisseurs de plongements pour trouver celui qui correspond le mieux à votre cas d’utilisation spécifique.


Démarrer avec Voyage AI

Consultez notre carnet de notes sur les plongements pour voir un exemple d’implémentation de Voyage AI.

Pour accéder aux plongements Voyage :

  1. Inscrivez-vous sur le site web de Voyage AI
  2. Obtenez une clé API
  3. Définissez la clé API comme variable d’environnement pour plus de commodité :
Python
export VOYAGE_API_KEY="<votre clé secrète>"

Vous pouvez exécuter les plongements soit en utilisant le package Python voyageai officiel, soit via des requêtes HTTP, comme décrit ci-dessous.

Package Python Voyage

Le package voyageai peut être installé en utilisant la commande suivante :

Python
pip install -U voyageai

Ensuite, vous pouvez créer un objet client et commencer à l’utiliser pour encoder vos textes :

Python
import voyageai

vo = voyageai.Client()
# Ceci utilisera automatiquement la variable d'environnement VOYAGE_API_KEY.
# Alternativement, vous pouvez utiliser vo = voyageai.Client(api_key="<votre clé secrète>")

texts = ["Exemple de texte 1", "Exemple de texte 2"]

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

result.embeddings sera une liste de deux vecteurs de plongement, chacun contenant 1024 nombres à virgule flottante.

Après avoir exécuté le code ci-dessus, les deux plongements seront affichés à l’écran :

Python
[0.02012746, 0.01957859, ...]  # plongement pour "Exemple de texte 1"
[0.01429677, 0.03077182, ...]  # plongement pour "Exemple de texte 2"

Lors de la création des plongements, vous pouvez spécifier quelques autres arguments pour la fonction embed(). Voici la spécification :

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

  • texts (List[str]) - Une liste de textes sous forme de liste de chaînes, comme ["J'aime les chats", "J'aime aussi les chiens"]. Actuellement, la longueur maximale de la liste est de 128, et le nombre total de tokens dans la liste est au maximum de 320K pour voyage-2 et 120K pour voyage-large-2/voyage-code-2.
  • model (str) - Nom du modèle. Options recommandées : voyage-2, voyage-large-2, voyage-code-2.
  • input_type (str, optionnel, par défaut None) - Type du texte d’entrée. Par défaut None. Autres options : query, document
    • Lorsque input_type est défini à None, le texte d’entrée sera directement encodé par le modèle de plongement de Voyage. Alternativement, lorsque les entrées sont des documents ou des requêtes, les utilisateurs peuvent spécifier input_type comme query ou document, respectivement. Dans ces cas, Voyage ajoutera un prompt spécial au texte d’entrée et enverra les entrées étendues au modèle de plongement
    • Pour les cas d’utilisation de recherche/récupération, nous recommandons de spécifier cet argument lors de l’encodage des requêtes ou des documents pour améliorer la qualité de la récupération. Les plongements générés avec et sans l’argument input_type sont compatibles
  • truncation (bool, optionnel, par défaut None) - Indique s’il faut tronquer les textes d’entrée pour qu’ils tiennent dans la longueur de contexte.
    • Si True, les textes d’entrée trop longs seront tronqués pour tenir dans la longueur de contexte, avant d’être vectorisés par le modèle de plongement
    • Si False, une erreur sera levée si un texte donné dépasse la longueur de contexte
    • Si non spécifié (par défaut None), Voyage tronquera le texte d’entrée avant de l’envoyer au modèle de plongement s’il dépasse légèrement la longueur de la fenêtre de contexte. S’il dépasse significativement la longueur de la fenêtre de contexte, une erreur sera levée

API HTTP Voyage

Vous pouvez également obtenir des plongements en interrogeant l’API HTTP de Voyage. Par exemple, vous pouvez envoyer une requête HTTP via la commande curl dans un terminal :

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

La réponse que vous obtiendrez est un objet JSON contenant les plongements et l’utilisation des 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
  }
}

Le point de terminaison des plongements de Voyage AI est https://api.voyageai.com/v1/embeddings (POST). L’en-tête de la requête doit contenir la clé API. Le corps de la requête est un objet JSON contenant les arguments suivants :

  • input (str, List[str]) - Une chaîne de texte unique, ou une liste de textes sous forme de liste de chaînes. Actuellement, la longueur maximale de la liste est de 128, et le nombre total de tokens dans la liste est au maximum de 320K pour voyage-2 et 120K pour voyage-large-2/voyage-code-2.
  • model (str) - Nom du modèle. Options recommandées : voyage-2, voyage-large-2, voyage-code-2.
  • input_type (str, optionnel, par défaut None) - Type du texte d’entrée. Par défaut None. Autres options : query, document
  • truncation (bool, optionnel, par défaut None) - Indique s’il faut tronquer les textes d’entrée pour qu’ils tiennent dans la longueur de contexte
    • Si True, les textes d’entrée trop longs seront tronqués pour tenir dans la longueur de contexte avant d’être vectorisés par le modèle de plongement
    • Si False, une erreur sera levée si un texte donné dépasse la longueur de contexte
    • Si non spécifié (par défaut None), Voyage tronquera le texte d’entrée avant de l’envoyer au modèle de plongement s’il dépasse légèrement la longueur de la fenêtre de contexte. S’il dépasse significativement la longueur de la fenêtre de contexte, une erreur sera levée
  • encoding_format (str, optionnel, par défaut None) - Format dans lequel les plongements sont encodés. Voyage prend actuellement en charge deux options :
    • Si non spécifié (par défaut None) : les plongements sont représentés sous forme de listes de nombres à virgule flottante
    • "base64" : les plongements sont compressés en encodages Base64

Exemple de plongement Voyage

Maintenant que nous savons comment obtenir des plongements avec Voyage, voyons cela en action avec un bref exemple.

Supposons que nous ayons un petit corpus de six documents à partir desquels effectuer une recherche

Python
documents = [
    "Le régime méditerranéen met l'accent sur le poisson, l'huile d'olive et les légumes, censés réduire les maladies chroniques.",
    "La photosynthèse dans les plantes convertit l'énergie lumineuse en glucose et produit l'oxygène essentiel.",
    "Les innovations du 20e siècle, des radios aux smartphones, étaient centrées sur les avancées électroniques.",
    "Les rivières fournissent eau, irrigation et habitat pour les espèces aquatiques, vitales pour les écosystèmes.",
    "La conférence téléphonique d'Apple pour discuter des résultats du quatrième trimestre fiscal et des mises à jour commerciales est prévue pour le jeudi 2 novembre 2023 à 14h00 PT / 17h00 ET.",
    "Les œuvres de Shakespeare, comme 'Hamlet' et 'Le Songe d'une nuit d'été', perdurent dans la littérature."
]

Nous allons d’abord utiliser Voyage pour convertir chacun d’eux en un vecteur de plongement

Python
import voyageai

vo = voyageai.Client()

# Plonger les documents
doc_embds = vo.embed(
    documents, model="voyage-2", input_type="document"
).embeddings

Les plongements nous permettront de faire une recherche sémantique / récupération dans l’espace vectoriel. Nous pouvons ensuite convertir une requête exemple,

Python
query = "Quand est prévue la conférence téléphonique d'Apple ?"

en un plongement, puis effectuer une recherche des plus proches voisins pour trouver le document le plus pertinent basé sur la distance dans l’espace des plongements.

Python
import numpy as np

# Plonger la requête
query_embd = vo.embed(
    [query], model="voyage-2", input_type="query"
).embeddings[0]

# Calculer la similarité
# Les plongements Voyage sont normalisés à la longueur 1, donc le produit scalaire
# et la similarité cosinus sont identiques.
similarities = np.dot(doc_embds, query_embd)

retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])

Notez que nous utilisons input_type="document" et input_type="query" pour plonger respectivement le document et la requête. Plus de spécifications peuvent être trouvées ici.

La sortie serait le 5e document, qui est en effet le plus pertinent pour la requête :

La conférence téléphonique d'Apple pour discuter des résultats du quatrième trimestre fiscal et des mises à jour commerciales est prévue pour le jeudi 2 novembre 2023 à 14h00 PT / 17h00 ET.

Modèles Voyage disponibles

Voyage recommande d’utiliser les modèles de plongement suivants :

ModèleLongueur de contexteDimension du plongementDescription
voyage-large-2160001536Le modèle de plongement généraliste le plus puissant de Voyage AI.
voyage-code-2160001536Optimisé pour la récupération de code (17% meilleur que les alternatives), et également SoTA sur les corpus à usage général. Voir ce billet de blog de Voyage pour plus de détails.
voyage-240001024Modèle de plongement généraliste de base optimisé pour la latence et la qualité.
voyage-lite-02-instruct40001024Affiné par instructions pour les tâches de classification, de clustering et de similarité textuelle entre phrases, qui sont les seuls cas d’utilisation recommandés pour ce modèle.

voyage-2 et voyage-large-2 sont des modèles de plongement généralistes, qui atteignent des performances de pointe dans tous les domaines tout en maintenant une haute efficacité. voyage-code-2 est optimisé pour le domaine du code, offrant 4 fois la longueur de contexte pour une utilisation plus flexible, bien qu’avec une latence relativement plus élevée.

Voyage développe activement des modèles plus avancés et spécialisés, et propose également des services d’affinage pour personnaliser des modèles sur mesure pour des clients individuels. Envoyez un email à votre responsable de compte Anthropic ou contactez le support Anthropic pour plus d’informations sur les modèles sur mesure.

  • voyage-finance-2 : bientôt disponible
  • voyage-law-2 : bientôt disponible
  • voyage-multilingual-2 : bientôt disponible
  • voyage-healthcare-2 : bientôt disponible

Voyage sur AWS Marketplace

Les plongements Voyage sont également disponibles sur AWS Marketplace. Voici les instructions pour accéder à Voyage sur AWS :

  1. S’abonner au package de modèle
    1. Naviguez vers la page de liste du package de modèle et sélectionnez le modèle à déployer
    2. Cliquez sur le bouton Continue to subscribe
    3. Examinez attentivement les détails sur la page Subscribe to this software. Si vous acceptez le Contrat de Licence Utilisateur Final (CLUF) standard, les prix et les conditions de support, cliquez sur “Accept Offer”
    4. Après avoir sélectionné Continue to configuration et choisi une région, vous recevrez un Product Arn. C’est l’ARN du package de modèle requis pour créer un modèle déployable en utilisant Boto3
      1. Copiez l’ARN qui correspond à votre région sélectionnée et utilisez-le dans la cellule suivante
  2. Déployer le package de modèle

À partir de là, créez un espace JupyterLab dans Sagemaker Studio, téléchargez le carnet de notes de Voyage, et suivez les instructions qu’il contient.


FAQ


Tarification

Visitez la page de tarification de Voyage pour les détails de prix les plus à jour.