Si vous avez déjà créé vos propres embeddings vectoriels personnalisés pour vos données, vous pouvez les importer dans Vertex AI Search et les utiliser lorsque vous effectuez des requêtes avec Vertex AI Search.
Cette fonctionnalité est disponible pour les data stores contenant des données structurées personnalisées ou des données non structurées avec des métadonnées. Cette fonctionnalité n'est pas disponible pour la recherche de contenus multimédias et de soins de santé.
Par défaut, Vertex AI Search génère automatiquement des embeddings vectoriels sans aucune configuration requise. Si vous ne savez pas comment créer des embeddings, Google vous recommande de laisser Vertex AI Search les créer et les utiliser pour vous. Toutefois, si vous avez créé vos propres embeddings pour vos données, vous préférerez peut-être les utiliser plutôt que ceux générés par Vertex AI Search, en particulier si vos embeddings personnalisés contiennent un contexte supplémentaire qui peut enrichir la récupération et le classement de vos recherches. Exemple :
- Vos embeddings ont été entraînés sur des mots personnalisés, tels que des termes internes dont la similarité sémantique ne serait pas capturée par l'entraînement sur des données publiques (par exemple, des termes spécifiques à l'organisation qui n'apparaissent que dans des documents privés).
- Vous avez créé des embeddings pour les profils utilisateur et vous souhaitez les utiliser pour créer un classement de documents personnalisé et pertinent sémantiquement. Vous pouvez utiliser vos embeddings pour obtenir un classement basé sur la personnalisation, ce qui peut augmenter les embeddings de documents de Google pour un classement basé sur la pertinence.
Pour utiliser vos propres embeddings :
- Avant de commencer : vérifiez que vos embeddings répondent à toutes les exigences.
- Ingérer des données avec des embeddings : ingérez vos documents avec leurs embeddings.
- Mettez à jour votre schéma : mettez à jour votre schéma avec les champs de propriété clés et les spécifications de dimension.
- Spécifiez votre intégration : spécifiez votre intégration au niveau mondial ou pour chaque demande de recherche.
Avant de commencer
Avant de commencer, assurez-vous que vos embeddings répondent aux exigences suivantes :
- Les embeddings sont compatibles avec les données structurées et les données non structurées avec métadonnées.
- Les embeddings doivent être fournis sous forme de tableaux unidimensionnels.
- La dimensionnalité de l'embedding doit être comprise entre 1 et 768, inclus
- Les embeddings sont acceptés pour le texte et les images. Les vidéos ne sont pas acceptées
- Vous pouvez taguer jusqu'à deux champs comme champs de propriété de clé d'intégration. Vous pouvez utiliser deux champs pour des cas comme les tests A/B pour vos embeddings.
- Il n'est actuellement pas possible de supprimer les désignations de propriété de clé de champ d'intégration une fois qu'elles ont été définies.
Ingérer des données avec des embeddings
Vous pouvez ingérer les embeddings d'un document dans un ou deux champs inclus dans les données ou les métadonnées de ce document lors de l'ingestion.
Pour ingérer des données avec des embeddings :
Préparez vos données pour l'ingestion en fonction de leur type :
Données structurées : lorsque vous préparez vos données, incluez les embeddings de chaque document sous forme de tableaux unidimensionnels dans un ou deux champs du document. Vous pouvez fournir jusqu'à deux embeddings (par exemple, si vous effectuez un test A/B entre des embeddings). Chaque intégration doit être fournie dans son propre champ du document, par exemple :
"example_embedding_vector": [0.1, 0.2, 0.3 ...]
Suivez les instructions de la documentation Préparer les données pour l'ingestion pour préparer les données structurées.
Données non structurées avec métadonnées : lorsque vous préparez vos données, incluez l'embedding de chaque document sous forme de tableau unidimensionnel dans un champ des métadonnées du document. Vous pouvez fournir jusqu'à deux embeddings (par exemple, lors d'un test A/B entre des embeddings). Chaque intégration doit être fournie dans son propre champ des métadonnées du document, par exemple :
"example_embedding_vector": [0.1, 0.2, 0.3 ...]
Suivez les instructions pour préparer les données non structurées avec des métadonnées pour votre méthode d'ingestion (Cloud Storage ou BigQuery) dans la documentation Préparer les données pour l'ingestion.
Suivez les instructions correspondant à votre type de données dans Créer un data store de recherche pour ingérer vos documents avec des embeddings.
Ensuite, mettez à jour votre schéma pour utiliser les champs d'intégration appropriés.
Mettre à jour votre schéma
Mettez à jour votre schéma avec les mappages de propriétés clés et les dimensions de vos champs d'intégration à l'aide de la console Google Cloud ou de l'API.
Console
Pour mettre à jour votre schéma à l'aide de la console Google Cloud , procédez comme suit :
Dans la console Google Cloud , accédez à la page AI Applications.
Dans le menu de navigation, cliquez sur Data Stores (Magasins de données).
Dans la colonne Nom, cliquez sur le data store dont vous souhaitez mettre à jour le schéma.
Cliquez sur l'onglet Schéma pour afficher le schéma de vos données.
Cliquez sur le bouton Modifier.
Recherchez votre champ d'intégration dans le schéma et, dans la colonne Propriétés clés, sélectionnez embedding_vector comme propriété clé pour ce champ.
Si vous avez un deuxième champ d'intégration, répétez cette étape pour ce champ.
Dans la colonne Dimension, saisissez le nombre de dimensions pour ce champ d'embedding.
Si vous avez un deuxième champ d'intégration, répétez cette étape pour ce champ.
Cliquez sur Enregistrer pour appliquer les modifications apportées au schéma.
Après avoir mis à jour votre schéma, la réindexation peut prendre jusqu'à 24 heures, selon la taille de votre data store.
REST
Pour mettre à jour votre schéma à l'aide de l'API, procédez comme suit :
En suivant les instructions REST de la section Mettre à jour un schéma, spécifiez le mappage des propriétés clés et le nombre de dimensions pour chaque champ d'intégration :
"keyPropertyMapping": "embedding_vector"
"dimension": NUMBER_OF_DIMENSIONS
Par exemple, voici un schéma JSON mis en forme avec 768 dimensions pour le champ
example_embedding_vector
:{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "example_embedding_vector": { "type": "array", "keyPropertyMapping": 'embedding_vector', "dimension": 768, "items": { "type": "number" } } } }
Dans une requête de schéma de mise à jour, le JSON formaté ci-dessus serait inclus en tant que chaîne JSON :
"jsonSchema": "{\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"type\":\"object\",\"properties\":{\"example_embedding_vector\":{\"type\":\"array\",\"keyPropertyMapping\":\"embedding_vector\",\"dimension\":768,\"items\":{\"type\":\"number\"}}}}"
Après avoir mis à jour votre schéma, la réindexation peut prendre jusqu'à 24 heures, selon la taille de votre data store.
Ensuite, spécifiez votre intégration.
Spécifier votre embedding
Une fois l'indexation à partir de la mise à jour de votre schéma terminée, vous pouvez envoyer des requêtes de recherche incluant une spécification d'embedding.
Il existe deux façons de spécifier un embedding :
- Spécifier un embedding globalement : pour spécifier le même embedding pour toutes les requêtes de recherche, mettez à jour vos paramètres de diffusion afin d'inclure une spécification d'embedding à l'aide de la console Google Cloud ou de l'API.
- Spécifier un embedding par requête de recherche : envoyez
embeddingSpec
dans chaque requête de recherche à l'aide de l'API. Ce paramètre remplace le paramètre global, s'il est défini.
Spécifier un embedding globalement
Vous pouvez spécifier le même embedding pour toutes les requêtes de recherche à l'aide de la consoleGoogle Cloud ou de l'API.
Console
Pour fournir la même spécification d'embedding à toutes les requêtes de recherche, mettez à jour vos paramètres de diffusion avec une spécification d'embedding.
Dans la console Google Cloud , accédez à la page AI Applications.
Cliquez sur Afficher pour le data store dont vous souhaitez mettre à jour le schéma.
Accédez à la page Configurations, puis cliquez sur l'onglet Diffusion.
Pour Chemin du champ d'intégration, saisissez le nom du champ que vous avez mappé à la propriété de clé d'intégration.
Pour Expression de classement, saisissez une ou plusieurs fonctions permettant de contrôler le classement des résultats. Les variables sont pondérées en fonction de l'expression que vous saisissez. L'expression de classement est une fonction unique ou plusieurs fonctions jointes par
+
au formatfunction, { " + ", function }
.Les fonctions compatibles sont les suivantes :
DOUBLE * relevance_score
DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)
Les variables suivantes sont acceptées :
relevance_score
: variable prédéfinie fournie par Vertex AI Search pour mesurer la pertinence d'un document. Le score est compris entre 0 et 1, bornes incluses.dotProduct()
: fonction prédéfinie fournie par Vertex AI Search. Vous devez fournir le même nom de champ à cette fonction que celui que vous avez utilisé pourembeddingVector.fieldPath
.
Exemple :
0.3 * relevance_score
0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
REST
Pour fournir la même spécification d'embedding à toutes les requêtes de recherche, mettez à jour servingConfig
avec embeddingConfig
.
Corrigez l'entité
servingConfig
avec les champs que vous souhaitez mettre à jour. Spécifiez les champs que vous mettez à jour avecupdateMask
.Dans l'exemple suivant,
embeddingConfig
utilise des embeddings dans le champexample_embedding_field
et attribue un poids de 0,5 àrelevance_score
.curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "name": "projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search", "embeddingConfig": { "fieldPath": "example_embedding_field" }, "ranking_expression": "0.5 * relevance_score" }' \ 'https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search?updateMask=embeddingConfig,rankingExpression'
fieldPath
: nom du champ que vous avez mappé à la propriété de clé d'embedding.ranking_expression
: contrôle le classement des résultats. Les variables sont pondérées en fonction de l'expression que vous saisissez. L'expression de classement est une fonction unique ou plusieurs fonctions jointes par+
au formatfunction, { " + ", function }
.
Les fonctions compatibles sont les suivantes :
DOUBLE * relevance_score
DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)
Les variables suivantes sont acceptées :
relevance_score
: variable prédéfinie fournie par Vertex AI Search.dotProduct()
: fonction prédéfinie fournie par Vertex AI Search. Le produit scalaire est normalisé. Vous devez fournir le même nom de champ à cette fonction que celui que vous avez fourni pourembeddingVector.fieldPath
.
Exemple :
0.3 * relevance_score
0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
Lorsque vous envoyez des requêtes de recherche,
servingConfig.embeddingConfig
est automatiquement inclus.Si vous envoyez une requête de recherche qui inclut explicitement un autre
embeddingSpec
, il remplaceservingConfig.embeddingConfig
. Consultez les instructions Par requête pour savoir comment fournir des spécifications d'intégration pour les requêtes de recherche individuelles.
Spécifier un embedding par requête de recherche
Vous pouvez fournir une spécification d'embedding pour une seule requête de recherche à l'aide de l'API. Une spécification d'embedding par requête remplace toute spécification d'embedding globale.
Envoyez une requête de recherche incluant
embeddingSpec
.L'exemple suivant de
embeddingSpec
utilise des embeddings dans le champexample_embedding_field
, spécifie "Exemple de requête" comme vecteur d'entrée et attribue un coefficient de 0,5 àrelevance_score
et de 0,3 àexample_embedding_field
lors du calcul du classement."embeddingSpec": { "embeddingVectors": [{ "fieldPath": "example_embedding_field", "vector": [ 0.96241474, -0.45999944, 0.108588696 ] }] }, "ranking_expression": "0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)"
fieldPath
: nom du champ que vous avez mappé à la propriété de clé d'embedding.vector
: vecteur d'entrée fourni sous forme de tableau.ranking_expression
: contrôle le classement des résultats. Les variables sont pondérées en fonction de l'expression que vous saisissez. L'expression de classement est une ou plusieurs fonctions jointes par+
au formatfunction, { " + ", function }
.Les fonctions compatibles sont les suivantes :
DOUBLE * relevance_score
DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)
Les variables suivantes sont acceptées :
relevance_score
: variable prédéfinie fournie par Vertex AI Search pour mesurer la pertinence d'un document. Le score est compris entre 0 et 1, bornes incluses.dotProduct()
: fonction prédéfinie fournie par Vertex AI Search. Vous devez fournir le même nom de champ à cette fonction que pourembeddingVector.fieldPath
.
Exemple :
0.3 * relevance_score
0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
Obtenez les résultats dans la réponse de recherche. Chaque résultat de recherche inclut son score de pertinence et les valeurs du produit scalaire. Exemple :
"modelScores": { "dotProduct(example_embedding_field)": [0.02150772698223591], "relevance_score": [ 0.8828125 ] }
dotProduct()
: produit scalaire calculé pour le document de résultat de recherche.relevance_score
: score de pertinence calculé pour le document de résultat de recherche.
Étapes suivantes
- Préparer les données pour l'ingestion
- Mettez à jour un schéma.
- Prévisualisez les résultats de recherche.
- Pour comprendre l'impact des embeddings personnalisés sur la qualité de la recherche d'une application de recherche personnalisée, évaluez la qualité de la recherche. Pour en savoir plus, consultez Évaluer la qualité de la recherche.