1. Présentation
Dans différents secteurs, la recherche sur les brevets est un outil essentiel pour comprendre l'environnement concurrentiel, identifier les opportunités de licence ou d'acquisition potentielles et éviter d'enfreindre les brevets existants.
La recherche sur les brevets est vaste et complexe. Trier d'innombrables résumés techniques pour trouver des innovations pertinentes est une tâche ardue. Les recherches traditionnelles basées sur des mots clés sont souvent inexactes et chronophages. Les résumés sont longs et techniques, ce qui rend difficile la compréhension rapide de l'idée principale. Cela peut entraîner des recherches qui ne trouvent pas de brevets clés ou qui perdent du temps sur des résultats non pertinents.
Objectif
Dans cet atelier de programmation, nous allons nous efforcer de rendre la recherche de brevets plus rapide, plus intuitive et incroyablement précise en exploitant Spanner, ainsi que Gemini 1.0 Pro, les représentations vectorielles continues et la recherche vectorielle.
Ce que vous allez faire
Au cours de cet atelier, vous allez:
- Créer une instance Spanner
- Charger un ensemble de données publics Google Brevets
- Créer un modèle distant pour les représentations vectorielles continues de texte avec le modèle Gemini 1.0 Pro
- Créer des insights génératifs à partir de l'ensemble de données chargé
- Générer des embeddings à partir des insights
- Émettre des requêtes de recherche de similarité sur l'ensemble de données
Le diagramme suivant représente le flux de données et les étapes impliquées dans l'implémentation.
Conditions requises
2. Avant de commencer
Créer un projet
- Dans la console Google Cloud, sur la page du sélecteur de projet, sélectionnez ou créez un projet Google Cloud.
- Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet .
- Vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud et fourni avec bq. Cliquez sur "Activer Cloud Shell" en haut de la console Google Cloud.
- Une fois connecté à Cloud Shell, vérifiez que vous êtes déjà authentifié et que le projet est défini avec votre ID de projet à l'aide de la commande suivante:
gcloud auth list
- Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud connaît votre projet.
gcloud config list project
- Si votre projet n'est pas défini, utilisez la commande suivante pour le définir :
gcloud config set project <YOUR_PROJECT_ID>
- Assurez-vous que les API Vertex AI et Spanner sont activées en les recherchant dans la console. Vous pouvez également utiliser la commande suivante dans le terminal Cloud Shell:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>
Vous pouvez également utiliser ce lien.
Consultez la documentation pour connaître les commandes gcloud ainsi que leur utilisation.
3. Préparer votre base de données Spanner
Créons une instance, une base de données et une table Spanner dans lesquelles l'ensemble de données sur les brevets sera chargé.
Créer une instance Spanner
- Créez une instance Spanner nommée
spanner-vertex
.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
Créer une base de données
- Dans la console Google Cloud, ouvrez la page Spanner.
- Sélectionnez l'instance
spanner-vertex
dans la liste. - Sous "Bases de données", cliquez sur Créer une base de données.
- Définissez le nom de la base de données sur "brevets".
- Cliquez sur Créer pour créer la base de données.
Créer une table
- Dans la console Google Cloud, ouvrez la page Spanner.
- Sélectionnez l'instance
spanner-vertex
dans la liste. - Sélectionnez la base de données
patents
. - Dans l'onglet Tables, cliquez sur Créer une table. La page Spanner Studio s'ouvre.
- Ouvrez un nouvel onglet en cliquant sur Nouvel onglet de l'éditeur SQL.
- Exécutez la requête suivante :
CREATE TABLE patents_data (
id string(25), type string(25), number string(20), country string(2), date string(20), abstract string(300000), title string(100000),kind string(5), num_claims numeric, filename string(100), withdrawn numeric,
) PRIMARY KEY (id);
4. Charger les données des brevets dans la base de données
Nous utiliserons les ensembles de données publics sur les brevets Google dans BigQuery comme ensemble de données. Nous utiliserons Spanner Studio pour exécuter nos requêtes. Le dépôt spanner-gemini-search inclut le script insert_into_patents_data.sql
que nous allons exécuter pour charger les données sur les brevets.
- Dans la console Google Cloud, ouvrez la page Spanner.
- Sélectionnez l'instance
spanner-vertex
dans la liste. - Sélectionnez la base de données
patents
. - Dans le menu de navigation, cliquez sur Spanner Studio. Le volet Explorateur affiche la liste des objets de votre base de données.
- Ouvrez un nouvel onglet en cliquant sur Nouvel onglet de l'éditeur SQL.
- Copiez l'instruction de requête
insert
à partir du scriptinsert_into_patents_data.sql
dans l'éditeur. Vous pouvez copier 50 à 100 instructions d'insertion pour une démonstration rapide de ce cas d'utilisation. - Cliquez sur Exécuter. Les résultats de votre requête s'affichent dans la table Résultats.
5. Créer un modèle distant pour Gemini 1.0 Pro
Une fois les données des brevets chargées dans la base de données, nous allons créer un modèle distant qui utilise le modèle Vertex AI Gemini 1.0 Pro pour générer un ensemble récapitulatif de titres et de mots clés.
Exécutez la commande DDL suivante dans l'éditeur Spanner Studio:
- Dans le menu de navigation, cliquez sur Spanner Studio. Le volet Explorateur affiche la liste des objets de votre base de données.
- Ouvrez un nouvel onglet en cliquant sur Nouvel onglet de l'éditeur SQL.
- Exécutez la requête suivante :
CREATE MODEL gemini_pro_model INPUT(
prompt STRING(MAX),
) OUTPUT(
content STRING(MAX),
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/gemini-pro',
default_batch_size = 1
);
- Cliquez sur Exécuter. Les résultats de votre requête s'affichent dans la table Résultats.
6. Créer un modèle distant pour les embeddings textuels
Le résultat de l'étape précédente comprend un résumé consolidé composé d'un titre et de mots clés. Nous allons convertir cette réponse en représentations vectorielles continues qui nous aideront à générer des correspondances appropriées lorsque nous exécuterons une requête. Nous allons utiliser l'Text Embedding Gecko 003 model
de Vertex AI à distance depuis Spanner.
- Dans le menu de navigation, cliquez sur Spanner Studio. Le volet Explorateur affiche la liste des objets de votre base de données.
- Ouvrez un nouvel onglet en cliquant sur Nouvel onglet de l'éditeur SQL.
- Exécutez la requête suivante :
CREATE MODEL text_embeddings INPUT(content STRING(MAX))
OUTPUT(
embeddings
STRUCT<
statistics STRUCT<truncated BOOL, token_count FLOAT64>,
values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/textembedding-gecko@003');
- Cliquez sur Exécuter. Les résultats de votre requête s'affichent dans la table Résultats.
7. Créer des insights génératifs à partir de résumés de brevets
Nous allons créer une table patents_data_gemini
pour stocker les insights génératifs que nous allons générer à l'aide du modèle Gemini 1.5 Pro que nous avons créé précédemment.
Créer la table
- Dans le menu de navigation, cliquez sur Spanner Studio. Le volet Explorateur affiche la liste des objets de votre base de données.
- Ouvrez un nouvel onglet en cliquant sur Nouvel onglet de l'éditeur SQL.
- Exécutez la requête suivante :
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- Cliquez sur Exécuter. Les résultats de votre requête s'affichent dans la table Résultats.
Générer des insights
Pour renseigner la table avec des insights génératifs, nous vous recommandons d'utiliser une application qui utilise la méthode d'écriture par lot ou de mutation. Pour cet atelier de programmation, nous allons exécuter la requête DDL suivante jusqu'à quatre fois pour renseigner la table.
INSERT INTO patents_data_gemini (id, gemini_response)
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b where id not in (select id from patents_data_gemini) limit 50
));
Remarque:Si une erreur "Quota dépassé" s'affiche à cette étape (ce qui est possible en cas de crédit sans frais limité), essayez d'ignorer l'insertion et d'exécuter uniquement la requête de sélection dans la section "Solution de contournement" ci-dessous.
Section "Solution" :
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))
Observer les insights
Le tableau inclut les insights générés pour l'invite 'Identify the areas of work or keywords in this abstract',
dans la requête.
Remarque:Si vous avez exécuté la requête de la section "Solution de contournement" ci-dessus au lieu de la DDL INSERT, ignorez cette partie et exécutez plutôt la dernière requête SELECT de cette page.
Exécutons la requête suivante pour vérifier les résultats des insights:
select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;
Les résultats suivants s'affichent:
Remarque:Si vous avez exécuté la requête de la section "Solution de contournement", remplacez le nom de la table dans la requête de sélection ci-dessus par la requête de la section "Solution de contournement". Vous devez donc exécuter la commande suivante:
select title, abstract, gemini_response from patents_data a inner join (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))) b
on a.id = b.id;
Le résultat doit être identique à celui de la capture d'écran ci-dessus.
8. Générer des embeddings pour les insights générés
Après avoir renseigné les insights dans notre tableau, nous pouvons maintenant les utiliser pour générer des représentations vectorielles continues. Ces représentations vectorielles continues nous permettent de ne pas nous fier aux correspondances exactes de mots clés, mais de générer des résultats en fonction des similitudes conceptuelles.
Remarque:Si vous avez exécuté la requête de la section de solution de contournement à l'étape précédente, vous pouvez l'ignorer et passer à la requête de la section de solution de contournement à cette étape.
Exécutez la requête suivante pour générer des embeddings:
- Dans le menu de navigation, cliquez sur Spanner Studio. Le volet Explorateur affiche la liste des objets de votre base de données.
- Ouvrez un nouvel onglet en cliquant sur Nouvel onglet de l'éditeur SQL.
- Exécutez la requête suivante pour créer la table
patents_data_embeddings
.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- Cliquez sur Exécuter. Les résultats de votre requête s'affichent dans la table Résultats.
- Exécutez la requête suivante pour générer des embeddings.
INSERT INTO patents_data_embeddings (id, patents_embeddings)
SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM patents_data_gemini));
- Cliquez sur Exécuter. Les résultats de votre requête s'affichent dans la table Résultats.
Observer les résultats
Le tableau comprend les embeddings générés pour le titre et le texte condensé.
Exécutons la requête suivante pour vérifier les résultats:
select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;
Les résultats suivants s'affichent:
Section "Solution":
Utilisez cette requête si vous avez suivi la section de solution de contournement dans d'autres étapes:
select title, abstract, b.patents_embeddings from patents_data a inner join
(SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
)))))) b
on a.id = b.id;
Vous devriez obtenir les mêmes résultats que ceux affichés dans la capture d'écran ci-dessus.
9. Se préparer à la recherche vectorielle
Maintenant que nous avons généré des représentations vectorielles continues de texte, nous pouvons préparer notre application Web à effectuer des recherches vectorielles de similarité. Dans cet atelier de programmation, nous allons créer une application Web qui inclut la logique permettant d'obtenir des résultats de recherche en fonction de la fonctionnalité de recherche de similarité K-Nearest Neighbors. Vous pouvez utiliser cet ensemble de données préparé avec une application de recherche pour visualiser l'affichage des résultats de recherche.
Pour cet atelier de programmation, nous allons exécuter un exemple de requête qui recherche une invite, génère des résultats en fonction du contexte et limite les résultats à 10 entrées.
Exécutez la requête suivante :
- Dans le menu de navigation, cliquez sur Spanner Studio. Le volet Explorateur affiche la liste des objets de votre base de données.
- Ouvrez un nouvel onglet en cliquant sur Nouvel onglet de l'éditeur SQL.
- Exécutez la requête suivante pour créer la table
patents_data_embeddings
.
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join patents_data_gemini b on a.id = b.id
inner join patents_data_embeddings c on a.id = c.id
ORDER BY distance
LIMIT 10;
- Cliquez sur Exécuter. Les résultats de votre requête s'affichent dans la table Résultats.
Remarque:Si vous avez utilisé les requêtes de la section "Solution de contournement" en raison d'erreurs de quota dans l'une des premières instructions d'insertion, vous pouvez ignorer toutes les autres étapes et exécuter directement la requête ci-dessous pour observer les résultats de la recherche du voisin le plus proche sur les représentations vectorielles continues dans la base de données Spanner:
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join (SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b
)))))) c on a.id = c.id
ORDER BY distance
LIMIT 2;
Observer les résultats
La requête précédente utilise la méthode COSINE_DISTANCE
pour trouver les 10 correspondances les plus proches de notre requête.
Les résultats suivants s'affichent:
Les résultats générés sont assez proches du contexte de l'invite qui faisait partie de la requête.
10. Effectuer un nettoyage
Pour éviter que les ressources utilisées dans cet article soient facturées sur votre compte Google Cloud, procédez comme suit:
- Dans la console Google Cloud, 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. Si vous ne souhaitez pas supprimer le projet, supprimez simplement l'instance que vous avez créée dans Spanner.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
11. Félicitations
Félicitations ! Vous avez effectué une recherche de similarité à l'aide de la recherche vectorielle intégrée de Spanner. Vous avez également vu à quel point il est facile de travailler avec des modèles d'embedding et de LLM pour fournir des fonctionnalités d'IA générative directement à l'aide de SQL.
Étape suivante
Pour en savoir plus sur la fonctionnalité de voisin le plus proche exacte (recherche vectorielle KNN) de Spanner, consultez https://cloud.google.com/spanner/docs/find-k-nearest-neighbors.
Pour en savoir plus sur l'exécution de prédictions en ligne avec SQL à l'aide de l'intégration Vertex AI de Spanner, consultez la page https://cloud.google.com/spanner/docs/ml.