Effectuer une recherche sémantique et une génération augmentée de récupération
Pour envoyer des commentaires ou demander de l'aide concernant cette fonctionnalité, envoyez un e-mail à l'adresse bq-vector-search@google.com.
Ce tutoriel vous guide tout au long du processus de création et d'utilisation de représentations vectorielles continues de texte, y compris d'utilisation d'index vectoriels pour améliorer les performances de recherche.
Ce tutoriel couvre les tâches suivantes :
- Créer un modèle distant BigQuery ML sur un grand modèle de langage (LLM) Vertex AI.
- Utilisation du modèle distant avec la fonction
ML.GENERATE_EMBEDDING
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.
- Utiliser la fonction
VECTOR_SEARCH
avec les représentations vectorielles continues pour rechercher du texte similaire. - Effectuer une génération augmentée de récupération (RAG) en générant du texte avec la fonction
ML.GENERATE_TEXT
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 et autorisations requis
Pour créer une connexion, vous devez disposer du rôle IAM (Identity and Access Management) suivant :
roles/bigquery.connectionAdmin
Pour accorder des autorisations au compte de service de la connexion, vous devez disposer de l'autorisation suivante :
resourcemanager.projects.setIamPolicy
Les autorisations IAM requises dans ce tutoriel pour les opérations BigQuery restantes sont incluses dans les deux rôles suivants :
- Éditeur de données BigQuery (
roles/bigquery.dataEditor
) pour créer des modèles, des tables et des index. - Utilisateur BigQuery (
roles/bigquery.user
) pour exécuter des tâches BigQuery.
- Éditeur de données BigQuery (
Coûts
Dans ce document, vous utilisez les composants facturables suivants de 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 à l'aide du 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
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
Créer un ensemble de données
Vous allez créer un ensemble de données BigQuery pour stocker votre modèle de ML :
Dans la console Google Cloud, 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 (plusieurs régions aux États-Unis).
Les ensembles de données publics sont stockés dans l'emplacement multirégional
US
. Par souci de simplicité, stockez votre ensemble de données dans le même emplacement.Conservez les autres paramètres par défaut, puis cliquez sur Créer un ensemble de données.
Créer une connexion
Créez une connexion de ressource cloud et obtenez le compte de service de la connexion. Créez la connexion dans le même emplacement que l'ensemble de données que vous avez créé à l'étape précédente.
Sélectionnez l'une des options suivantes :
Console
Accédez à la page BigQuery.
Pour créer une connexion, cliquez sur
Ajouter, puis sur Connexions aux sources de données externes.Dans la liste Type de connexion, sélectionnez Modèles distants Vertex AI, fonctions distantes et BigLake (ressource Cloud).
Dans le champ ID de connexion, saisissez un nom pour votre connexion.
Cliquez sur Créer une connexion.
Cliquez sur Accéder à la connexion.
Dans le volet Informations de connexion, copiez l'ID du compte de service à utiliser à l'étape suivante.
bq
Dans un environnement de ligne de commande, créez une connexion :
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
Le paramètre
--project_id
remplace le projet par défaut.Remplacez les éléments suivants :
REGION
: votre région de connexionPROJECT_ID
: ID de votre projet Google CloudCONNECTION_ID
: ID de votre connexion
Lorsque vous créez une ressource de connexion, BigQuery crée un compte de service système unique et l'associe à la connexion.
Dépannage : Si vous obtenez l'erreur de connexion suivante, mettez à jour le Google Cloud SDK :
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
Récupérez et copiez l'ID du compte de service pour l'utiliser lors d'une prochaine étape :
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
Le résultat ressemble à ce qui suit :
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
Ajoutez la section suivante à votre fichier main.tf
.
## This creates a cloud resource connection. ## Note: The cloud resource nested object has only one output only field - serviceAccountId. resource "google_bigquery_connection" "connection" { connection_id = "CONNECTION_ID" project = "PROJECT_ID" location = "REGION" cloud_resource {} }Remplacez les éléments suivants :
CONNECTION_ID
: ID de votre connexionPROJECT_ID
: ID de votre projet Google CloudREGION
: votre région de connexion
Accorder l'accès au compte de service
Pour attribuer au compte de service de la connexion un rôle approprié permettant d'accéder au service Vertex AI, procédez comme suit :
Accédez à la page IAM et administration.
Cliquez sur
Accorder l'accès.Dans le champ Nouveaux comptes principaux, saisissez l'ID du compte de service que vous avez copié précédemment.
Dans le champ Sélectionner un rôle, sélectionnez Vertex AI, puis le rôle Utilisateur Vertex AI.
Cliquez sur Enregistrer.
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 console Google Cloud, 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 `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT = 'textembedding-gecko@003');
Remplacez les éléments suivants :
LOCATION
: emplacement de la connexionCONNECTION_ID
: ID de votre connexion BigQuery.Lorsque vous affichez les détails de la connexion dans la console Google Cloud,
CONNECTION_ID
correspond à la valeur de la dernière section de l'ID de connexion complet affiché dans ID de connexion (par exemple,projects/myproject/locations/connection_location/connections/myconnection
).
L'exécution de la requête prend plusieurs secondes, après quoi le modèle
embedding_model
apparaît dans l'ensemble de donnéesbqml_tutorial
dans le volet Explorateur. Étant donné que la requête utilise une instructionCREATE MODEL
pour créer un modèle, il n'y a aucun résultat de requête.
Générer des représentations vectorielles continues de texte
Générer des représentations vectorielles continues de texte à partir d'extraits de brevets à l'aide de la fonction ML.GENERATE_EMBEDDING
, puis les écrire dans une table BigQuery afin de pouvoir les rechercher.
Dans la console Google Cloud, 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 ML.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(ml_generate_embedding_status) = 0;
La génération de représentations vectorielles continues à l'aide de la fonction ML.GENERATE_EMBEDDING
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 ml_generate_embedding_status
. Une colonne ml_generate_embedding_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
Pour créer un index vectoriel, utilisez l'instruction LDD (langage de définition de données) CREATE VECTOR INDEX
:
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`(ml_generate_embedding_result) OPTIONS(index_type = 'IVF', distance_type = 'COSINE', ivf_options = '{"num_lists":500}')
Vérifier la création de l'index vectoriel
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_ID
par l'ID du projet.
Effectuer une recherche de similarité textuelle à l'aide de l'index vectoriel
Utilisez la fonction VECTOR_SEARCH
pour rechercher les cinq brevets les plus pertinents correspondant à des représentations vectorielles continues générées à partir d'une requête de texte. 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`, 'ml_generate_embedding_result', ( SELECT ml_generate_embedding_result, content AS query FROM ML.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-10201901821S-A | Method and apparatus for unlocking user... | METHOD AND APPARATUS FOR UNLOCKING USER... | | improving password security | SG-10201902412Q-A | Password protection question setting method... | PASSWORD PROTECTION QUESTION SETTING METHOD... | | improving password security | SG-194509-A1 | System and method for web-based... | A security authentication method comprises... | +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
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 console Google Cloud, 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 `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT = 'text-bison-32k');
Remplacez les éléments suivants :
LOCATION
: emplacement de la connexionCONNECTION_ID
: ID de votre connexion BigQuery.Lorsque vous affichez les détails de la connexion dans la console Google Cloud,
CONNECTION_ID
correspond à la valeur de la dernière section de l'ID de connexion complet affiché dans ID de connexion (par exemple,projects/myproject/locations/connection_location/connections/myconnection
).
L'exécution de la requête prend plusieurs secondes, après quoi le modèle
text_model
apparaît dans l'ensemble de donnéesbqml_tutorial
dans le volet Explorateur. Étant donné que la requête utilise une instructionCREATE MODEL
pour 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 fonction ML.GENERATE_TEXT
.
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, exécutez l'instruction suivante :
SELECT ml_generate_text_llm_result AS generated, prompt FROM ML.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`, 'ml_generate_embedding_result', ( SELECT ml_generate_embedding_result, content AS query FROM ML.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, TRUE AS flatten_json_output));
Le résultat ressemble à ce qui suit :
+------------------------------------------------+------------------------------------------------------------+ | generated | prompt | +------------------------------------------------+------------------------------------------------------------+ | **Project Ideas to Improve User Password | Propose some project ideas to improve user password | | Security** | security using the context below: patent title: Data | | | storage device security method and apparatus, patent | | 1. **Develop a password manager that uses a | abstract: Methods for improving security in data storage | | synchronization method to keep encrypted | devices are disclosed. The methods include a ..., | | passwords changing at each transmission... | patent title: Active new password entry dialog with | | 2. **Create a new password entry dialog that | compact visual indication of adherence to password policy, | | provides a compact visual indication of | patent abstract: An active new password entry dialog..., | | adherence to password policies.** ... | patent title: Method and system for protecting a password | | 3. **Develop a system for protecting a | during an authentication process, patent abstract: A system| | password during an authentication process by | for providing security for a personal password during an | | using representative characters to disguise... | authenticationprocess. The system combines the use of... | +------------------------------------------------+------------------------------------------------------------+
Effectuer un nettoyage
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.