Effectuer une recherche sémantique et une génération augmentée de récupération
Ce tutoriel vous guide tout au long du processus de création et d'utilisation de représentations vectorielles continues de texte pour la recherche sémantique et la génération augmentée de récupération (RAG).
Ce tutoriel couvre les tâches suivantes :
- Créer un modèle distant BigQuery ML sur un modèle de représentations vectorielles continues Vertex AI
- Utiliser le modèle distant avec la
AI.GENERATE_EMBEDDINGfonction pour générer des représentations vectorielles continues à partir de texte dans une table BigQuery. - Créer un index vectoriel pour indexer les représentations vectorielles continues afin d'améliorer les performances de recherche.
- Utiliser la
VECTOR_SEARCHfonction avec les représentations vectorielles continues pour rechercher du texte similaire. - Effectuer une RAG en générant du texte avec la
AI.GENERATE_TEXTfonction, et en utilisant les résultats de recherche vectorielle pour augmenter la saisie de la requête et améliorer les résultats.
Ce tutoriel utilise la table publique BigQuery patents-public-data.google_patents_research.publications.
Rôles requis
Pour exécuter ce tutoriel, vous devez disposer des rôles Identity and Access Management (IAM) suivants :
- Créer et utiliser des ensembles de données, des connexions et des modèles BigQuery : administrateur BigQuery (
roles/bigquery.admin) - Accorder des autorisations au compte de service de la connexion : administrateur IAM du projet (
roles/resourcemanager.projectIamAdmin)
Ces rôles prédéfinis contiennent les autorisations requises pour effectuer les tâches décrites dans ce document. Pour afficher les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
- Créer un ensemble de données :
bigquery.datasets.create - Créer, déléguer et utiliser une connexion :
bigquery.connections.* - Définir la connexion par défaut :
bigquery.config.* - Définir les autorisations du compte de service :
resourcemanager.projects.getIamPolicyetresourcemanager.projects.setIamPolicy - Créer un modèle et exécuter l'inférence :
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateDatabigquery.models.updateMetadata
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Coûts
Dans ce tutoriel, vous utilisez les composants facturables de suivants Google Cloud:
- BigQuery ML: You incur costs for the data that you process in BigQuery.
- Vertex AI: You incur costs for calls to the Vertex AI service that's represented by the remote model.
Obtenez une estimation des coûts en fonction de votre utilisation prévue,
utilisez le simulateur de coût.
Pour en savoir plus sur les tarifs de BigQuery, consultez la page Tarifs de BigQuery dans la documentation BigQuery.
Pour en savoir plus sur les tarifs de Vertex AI, consultez la page Tarifs de Vertex AI.
Avant de commencer
-
Dans la Google Cloud console, sur la page de sélection du projet, sélectionnez ou créez un Google Cloud projet.
Rôles requis pour sélectionner ou créer un projet
- Sélectionner un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
-
Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet
(
roles/resourcemanager.projectCreator), qui contient l'autorisationresourcemanager.projects.create. Découvrez comment attribuer des rôles.
-
Vérifiez que la facturation est activée pour votre Google Cloud projet.
-
Activez les API BigQuery, BigQuery Connection et Vertex AI.
Rôles requis pour activer les API
Pour activer les API, vous devez disposer du rôle IAM Administrateur d'utilisation du service (
roles/serviceusage.serviceUsageAdmin), qui contient l'autorisationserviceusage.services.enable. Découvrez comment attribuer des rôles.
Créer un ensemble de données
Créez un ensemble de données BigQuery pour stocker votre modèle de ML.
Console
Dans la Google Cloud console, accédez à la page BigQuery.
Dans le volet Explorateur, cliquez sur le nom de votre projet.
Cliquez sur Afficher les actions > Créer un ensemble de données
Sur la page Créer un ensemble de données, procédez comme suit :
Dans le champ ID de l'ensemble de données, saisissez
bqml_tutorial.Pour Type d'emplacement, sélectionnez Multirégional, puis sélectionnez US.
Conservez les autres paramètres par défaut, puis cliquez sur Créer un ensemble de données.
bq
Pour créer un ensemble de données, utilisez la
bq mk --dataset commande.
Créez un ensemble de données nommé
bqml_tutorialavec l'emplacement des données défini surUS.bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Vérifiez que l'ensemble de données a été créé :
bq ls
API
Appelez la datasets.insert
méthode avec une ressource d'ensemble de données définie.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Créer le modèle distant pour la génération de représentations vectorielles continues de texte
Créez un modèle distant représentant un modèle de génération de représentations vectorielles continues de texte Vertex AI hébergé :
Dans la Google Cloud console, accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction suivante :
CREATE OR REPLACE MODEL `bqml_tutorial.embedding_model` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT = 'text-embedding-005');
L'exécution de la requête prend plusieurs secondes. Le modèle
embedding_modelest ensuite accessible via le volet Explorateur. Étant donné que la requête utilise une instructionCREATE MODELpour créer un modèle, il n'y a aucun résultat de requête.
Générer des embeddings textuels
Générez des représentations vectorielles continues de texte à partir d'extraits de brevets à l'aide de la
AI.GENERATE_EMBEDDING fonction,
puis écrivez-les dans une table BigQuery afin de pouvoir les
rechercher.
Dans la Google Cloud console, accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction suivante :
CREATE OR REPLACE TABLE `bqml_tutorial.embeddings` AS SELECT * FROM AI.GENERATE_EMBEDDING( MODEL `bqml_tutorial.embedding_model`, ( SELECT *, abstract AS content FROM `patents-public-data.google_patents_research.publications` WHERE LENGTH(abstract) > 0 AND LENGTH(title) > 0 AND country = 'Singapore' ) ) WHERE LENGTH(status) = 0;
L'exécution de cette requête prend environ cinq minutes.
La génération de représentations vectorielles continues à l'aide de la
AI.GENERATE_EMBEDDING fonction
peut échouer en raison des quotas de LLM Vertex AI ou
de l'indisponibilité du service. Les détails de l'erreur sont renvoyés dans la colonne status. Une colonne status vide indique que la génération de représentations vectorielles continues a réussi.
Pour découvrir d'autres méthodes de génération de représentations vectorielles continues de texte dans BigQuery, consultez le tutoriel Générer des représentations vectorielles continues de texte avec des modèles TensorFlow pré-entraînés.
Créer un index vectoriel
Si vous créez un index vectoriel sur une colonne d'embedding, une recherche vectorielle effectuée sur cette colonne utilise la technique de recherche approximative du voisin le plus proche. Cette technique améliore les performances de la recherche vectorielle, avec le compromis consistant à réduire le rappel et ainsi renvoyer des résultats plus approximatifs.
Pour créer un index vectoriel, utilisez l'
CREATE VECTOR INDEX
instruction LDD (langage de définition de données) :
Accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction SQL suivante :
CREATE OR REPLACE VECTOR INDEX my_index ON `bqml_tutorial.embeddings`(embedding) OPTIONS(index_type = 'IVF', distance_type = 'COSINE', ivf_options = '{"num_lists":500}')
La création d'un index vectoriel ne prend généralement que quelques secondes. Il faut encore deux ou trois minutes pour que l'index vectoriel soit renseigné et prêt à être utilisé.
Vérifier que l'index vectoriel est prêt
L'index vectoriel est renseigné de manière asynchrone. Vous pouvez vérifier si l'index est prêt à être utilisé en interrogeant la vue INFORMATION_SCHEMA.VECTOR_INDEXES et en vérifiant que la valeur de la colonne coverage_percentage est supérieure à 0 et la valeur de la colonne last_refresh_time n'est pas NULL.
Accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction SQL suivante :
SELECT table_name, index_name, index_status, coverage_percentage, last_refresh_time, disable_reason FROM `PROJECT_ID.bqml_tutorial.INFORMATION_SCHEMA.VECTOR_INDEXES`
Remplacez
PROJECT_IDpar l'ID du projet.
Effectuer une recherche de similarité textuelle à l'aide de l'index vectoriel
Utilisez la
VECTOR_SEARCH fonction
pour rechercher les brevets pertinents correspondant aux représentations vectorielles continues générées à partir d'une
requête de texte.
L'argument top_k détermine le nombre de correspondances à renvoyer, dans ce cas cinq. L'option fraction_lists_to_search détermine le pourcentage de listes d'index vectoriel à rechercher.
L'index vectoriel que vous avez créé comporte 500 listes.
La valeur fraction_lists_to_search de .01 indique donc que cette recherche vectorielle
analyse cinq de ces listes. Une valeur fraction_lists_to_search inférieure, comme indiqué ici
, offre un rappel
plus faible et des performances plus rapides. Pour en savoir plus sur les listes d'index vectoriel, consultez
l'num_lists
option d'index vectoriel.
Le modèle que vous utilisez pour générer les représentations vectorielles continues dans cette requête doit être le même que celui utilisé pour générer les représentations vectorielles continues dans la table à comparer, sinon les résultats de la recherche ne seront pas précis.
Accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction SQL suivante :
SELECT query.query, base.publication_number, base.title, base.abstract FROM VECTOR_SEARCH( TABLE `bqml_tutorial.embeddings`, 'embedding', ( SELECT embedding, content AS query FROM AI.GENERATE_EMBEDDING( MODEL `bqml_tutorial.embedding_model`, (SELECT 'improving password security' AS content)) ), top_k => 5, options => '{"fraction_lists_to_search": 0.01}')
Le résultat ressemble à ce qui suit :
+-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+ | query | publication_number | title | abstract | +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+ | improving password security | SG-120868-A1 | Data storage device security method and a... | Methods for improving security in data stora... | | improving password security | SG-10201610585W-A | Passsword management system and process... | PASSSWORD MANAGEMENT SYSTEM AND PROCESS ... | | improving password security | SG-148888-A1 | Improved system and method for... | IMPROVED SYSTEM AND METHOD FOR RANDOM... | | improving password security | SG-194267-A1 | Method and system for protecting a password... | A system for providing security for a... | | improving password security | SG-120868-A1 | Data storage device security... | Methods for improving security in data... | +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
Créer le modèle distant pour la génération de texte
Créez un modèle distant représentant un modèle de génération de texte Vertex AI hébergé :
Dans la Google Cloud console, accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction suivante :
CREATE OR REPLACE MODEL `bqml_tutorial.text_model` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT = 'gemini-2.0-flash-001');
L'exécution de la requête prend plusieurs secondes. Le modèle
text_modelest ensuite accessible via le volet Explorateur. Étant donné que la requête utilise une instructionCREATE MODELpour créer un modèle, il n'y a aucun résultat de requête.
Générer du texte augmenté par les résultats de recherche vectorielle
Transmettez les résultats de recherche sous forme de requêtes pour générer du texte à l'aide de la
AI.GENERATE_TEXT fonction
Dans la Google Cloud console, accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction suivante :
SELECT result AS generated, prompt FROM AI.GENERATE_TEXT( MODEL `bqml_tutorial.text_model`, ( SELECT CONCAT( 'Propose some project ideas to improve user password security using the context below: ', STRING_AGG( FORMAT("patent title: %s, patent abstract: %s", base.title, base.abstract), ',\n') ) AS prompt, FROM VECTOR_SEARCH( TABLE `bqml_tutorial.embeddings`, 'embedding', ( SELECT embedding, content AS query FROM AI.GENERATE_EMBEDDING( MODEL `bqml_tutorial.embedding_model`, (SELECT 'improving password security' AS content) ) ), top_k => 5, options => '{"fraction_lists_to_search": 0.01}') ), STRUCT(600 AS max_output_tokens));
Le résultat ressemble à ce qui suit :
+------------------------------------------------+------------------------------------------------------------+ | generated | prompt | +------------------------------------------------+------------------------------------------------------------+ | These patents suggest several project ideas to | Propose some project ideas to improve user password | | improve user password security. Here are | security using the context below: patent title: Active | | some, categorized by the patent they build | new password entry dialog with compact visual indication | | upon: | of adherence to password policy, patent abstract: | | | An active new password entry dialog provides a compact | | **I. Projects based on "Active new password | visual indication of adherence to password policies. A | | entry dialog with compact visual indication of | visual indication of progress towards meeting all | | adherence to password policy":** | applicable password policies is included in the display | | | and updated as new password characters are being... | +------------------------------------------------+------------------------------------------------------------+
Effectuer un nettoyage
- Dans la Google Cloud console, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez Arrêter pour supprimer le projet.
Étape suivante
- Essayez le tutoriel Analyser des PDF dans un pipeline de génération augmentée par récupération pour découvrir comment créer un pipeline de RAG basé sur le contenu PDF analysé.