Elastic Search : mise en place d'une expérience de recherche sémantique
Aperçu
Présentation d'Elastic Search
Familiarisez-vous avec Elasticsearch et apprenez à ingérer, puis à visualiser vos données grâce à Elastic Cloud.
À mesure que vous montez en puissance avec Elastic et vous lancez avec la recherche vectorielle, n'oubliez pas qu'il en existe deux types, à savoir "dense" (aussi appelée "recherche vectorielle des k plus proches voisins") et "éparse", comme Elastic Learned Sparse Encoder (ELSER).
Elastic met à votre disposition un éventail de techniques de recherche, à commencer par l'algorithme BM25, la norme du secteur pour la recherche textuelle. Celui-ci vous offre une correspondance précise pour les recherches spécifiques, met en correspondance les mots-clés exacts et s'améliore au fur et à mesure des réglages.
Elastic met également à votre disposition le modèle Learned Sparse Encoder prêt à l'emploi pour la recherche sémantique. Ce modèle fournit les meilleures performances par rapport à un éventail d'ensembles de données, notamment les données financières, les records météorologiques et les questions-réponses. Il est conçu pour garantir une pertinence exceptionnelle dans les domaines, sans nécessiter de réglage supplémentaire.
Regardez cette démo interactive afin de comprendre pourquoi les résultats de recherche sont plus pertinents lorsque vous testez le modèle Learned Sparse Encoder d'Elastic avec l'algorithme BM25 textuel d'Elastic.
En outre, Elastic prend en charge les vecteurs denses afin de mettre en œuvre la recherche de similarités pour les données non structurées autres que les textes, comme les vidéos, les images et les fichiers audio.
Avantage conféré par les recherches sémantique et vectorielle, ces technologies permettent à la clientèle d'utiliser un langage intuitif dans ses requêtes. Par exemple, si vous voulez obtenir les lignes directrices d'une entreprise concernant un revenu secondaire, vous pourriez chercher "activité parallèle", soit une expression peu susceptible d'apparaître dans un document formel du service des ressources humaines.
Dans ce guide, nous vous expliquons comment créer un compte Elastic Cloud, ingérer des données à l'aide du robot d'indexation d'Elastic et mettre en œuvre la recherche sémantique en quelques clics seulement.
Intégration de vos données
Création d'un compte Elastic Cloud
Commencez un essai de 14 jours. Une fois que vous avez accédé à cloud.elastic.co et créé votre compte, suivez les étapes décrites ci-dessous pour découvrir comment lancer votre première suite Elastic dans l'une des régions (plus de 50) prises en charge dans le monde.
Si vous cliquez sur Edit settings (Modifier les paramètres), vous pouvez sélectionner un fournisseur cloud, comme AWS, Microsoft Azure ou Google Cloud. Ensuite, vous pouvez désigner la région de votre choix. Vous pouvez également modifier le profil matériel afin de mieux personnaliser le déploiement en fonction de vos besoins. Enfin, la dernière version d'Elastic est présélectionnée par défaut.
À la création de votre déploiement, un nom d'utilisateur et un mot de passe vous seront donnés. Veillez bien à copier ou à télécharger ces informations, car vous en aurez besoin lors de l'installation de vos intégrations.
Ingestion de données avec le robot d'indexation d'Elastic
Maintenant que vous avez créé votre déploiement, vous pouvez commencer à intégrer des données dans Elastic. Pour ce faire, utilisons le robot d'indexation d'Elastic. Tout d'abord, sélectionnez Build a semantic search experience (Mettre en place une expérience de recherche sémantique).
Ensuite, pour configurer la recherche sémantique, une page s'affiche où vous pouvez vous lancer à l'aide d'une des méthodes suivantes :
- Elastic Learned Sparse Encoder ;
- recherche vectorielle ;
- enrichissement du traitement du langage naturel.
Toutes ces fonctionnalités font partie de l'éventail proposé par Elasticsearch Relevance Engine (ESRE).
Dans le cadre de ce guide, nous vous expliquons comment configurer la recherche sémantique à l'aide des deux méthodes, à savoir Elastic Learned Sparse Encoder et la recherche vectorielle.
REMARQUE : Si vous souhaitez vous lancer avec la recherche sémantique et chercher du texte, vous devriez essayer de suivre les instructions pour Elastic Learned Sparse Encoder en premier. La recherche vectorielle des k plus proches voisins peut être plus adaptée aux utilisateurs qui remplissent certains des critères suivants :
- posséder des compétences en Data Science ou avoir accès à ces connaissances ;
- avoir déterminé que le modèle de recherche sémantique intégrée d'Elastic Learned Sparse Encoder ne couvre pas leurs cas d'utilisation ;
- avoir de l'expérience dans la comparaison des modèles de plongement et, éventuellement, dans le réglage des modèles de Machine Learning ;
- savoir que la recherche rapide des k plus proches voisins peut nécessiter d'importantes ressources de la RAM.
Si vous pensez posséder les dispositions requises pour vous lancer, sélectionnez votre méthode de prédilection afin de développer une application propulsée par la recherche basée sur l'intelligence artificielle.
Avec les deux méthodes, commencez par sélectionner Create an index (Créer un index). Ensuite, sélectionnez Web crawler (Robot d'indexation) afin de lancer l'ingestion de vos données.
Pour configurer le robot d'indexation, consultez cette visite guidée ou suivez les instructions ci-dessous.
À présent, créez un index. Dans le cadre de ce guide, nous allons ingérer des articles de blog sur le site elastic.co/fr.
Après avoir donné un nom à votre index, cliquez sur Create index (Créer l'index). Ensuite, cliquez sur Validate Domain (Valider le domaine), puis sur Add domain (Ajouter le domaine).
Après avoir ajouté le domaine, en bas à droite de la page, cliquez sur Edit (Modifier) afin d'ajouter un sous-domaine, le cas échéant.
Ensuite, sélectionnez Crawl rules (Règles d'exploration), puis ajoutez vos règles comme expliqué ci-dessous.*
Ensuite, quand vous sélectionnez votre champ ultérieurement, certains champs dépassent la limite de 512 tokens, comme body_content. Vous devriez tirer parti de la section Extraction rules (Règles d'extraction) pour filtrer uniquement les éléments pertinents des articles de blog.
Lorsque vous sélectionnez Extraction rules, cliquez sur Add content extraction rule (Ajouter une règle d'extraction de contenu).
Ensuite, sous Rule description (Description de règle), donnez un nom qui permettra à autrui de connaître le type de données extraites par la règle. Dans le cadre de ce guide, nous l'appelons "main" (principale).
À présent, sélectionnez Apply to all URLs (Appliquer à toutes les URL), puis Add content fields (Ajouter des champs de contenu). Un panneau contextuel s'affiche. Renseignez et sélectionnez les critères ci-dessous dans ce panneau.
- "Document field" (Champ du document) :
- "Field name" (Nom du champ) : "main" (principal)
- Source :
- "Extract content from" (Extraction de content depuis) : "HTML element" (élément HTML)
- "CSS selector or XPath expression" (Sélecteur CSS ou expression XPath) : "main" (principal·e)
- "Content" (Contenu) :
- "Use content from" (Utilisation de content depuis) : "Extracted Value" (valeur extraite)
- "Store extracted content as" (Stockage du contenu extrait en tant que) : "A string" (une chaîne)
Après avoir renseigné ces critères, cliquez sur Save (Enregistrer), puis sur Save rule (Enregistrer la règle).
Fonctionnement d'Elasticsearch et d'ESRE
Ingestion et recherche de vos données à l'aide d'Elastic Learned Sparse Encoder
Après avoir passé en revue les recommandations de critères ci-dessus avant de vous lancer avec la recherche vectorielle et après avoir identifié votre méthode de prédilection, accédez à la section Search your data using kNN vector search (Rechercher vos données avec la recherche vectorielle des k plus proches voisins) sur la gauche de l'écran, puis suivez les instructions qui s'affichent.
Si vous préférez utiliser Elastic Learned Sparse Encoder, le modèle de recherche sémantique d'Elastic prêt à l'emploi, suivez les instructions ci-dessous.
Pour ce faire, cliquez sur Pipelines, puis sur Unlock your custom pipelines (Déverrouiller vos pipelines personnalisés) en sélectionnant Copy and customize (Copier et personnaliser) en haut de l'écran. Ensuite, sous Machine Learning Inference Pipelines (Pipelines d'inférence du Machine Learning), sélectionnez Deploy (Déployer) afin de télécharger le modèle, puis de l'installer dans votre déploiement Elasticsearch.
Une fois déployé, sélectionnez Start single-threaded (Commencer avec un seul thread), puis + Add inference Pipeline (Ajouter un pipeline d'inférence). Ensuite, procédez comme suit :
- Sélectionnez un pipeline nouveau ou existant.
- Nommez-le.
- Enfin, dans le menu "Select trained ML Model" (Sélectionner le modèle de Machine Learning entraîné), sélectionnez ELSER Text Expansion (Expansion de texte d'ELSER), puis cliquez sur Continue (Continuer).
À présent, vous devez sélectionner les champs où appliquer le modèle ELSER Text Expansion. Sous "Source fields" (Champs sources), sélectionnez "title" (titre) et "main" (principal), puis cliquez sur Add (Ajouter).
Ensuite, cliquez sur Continue (Continuer).
Ignorez l'étape Test your pipeline results (Tester les résultats de votre pipeline) en cliquant sur Continue (Continuer), puis cliquez sur Create pipeline (Créer le pipeline).
Maintenant que vous avez créé votre pipeline, sélectionnez Crawl (Indexer) en haut à droite de l'écran, puis Crawl all domains on this index (Indexer tous les domaines de cet index).
Maintenant, vous pouvez chercher les informations qui vous intéressent. Pour ce faire, optez pour l'une des deux méthodes recommandées ci-dessous :
- utilisation des outils de développement ;
- utilisation de la fonctionnalité Search Application (Application de recherche) comme point de terminaison pour votre application.
Pour savoir quelle méthode utiliser, suivez les instructions ci-dessous :
- Si vous êtes développeur et souhaitez mettre en œuvre la recherche (pour votre application web), vous devriez utiliser les outils de développement afin de tester et d'affiner les résultats de recherche provenant de vos données indexées.
- Si vous souhaitez créer un point de terminaison de recherche auquel vous pouvez envoyer des requêtes de recherche à partir de votre propre application où vous pouvez obtenir des résultats de recherche, vous devriez utiliser la fonctionnalité Search Application.
Regardez les deux courtes vidéos ci-dessous qui vous expliquent comment utiliser les outils de développement et la fonctionnalité Search Application. Vous pouvez également consulter cette visite guidée.
Ingestion et recherche de vos données à l'aide de la recherche vectorielle des k plus proches voisins
Quand vous faites appel à Elastic, vous pouvez bénéficier de la recherche vectorielle des k plus proches voisins dans votre environnement. Comme expliqué ci-dessus, cette fonctionnalité vous permet de mener des recherches dans des données autres que des textes, comme des images ou des fichiers audio.
Après avoir ingéré des données à l'aide du robot d'indexation, vous devez charger un modèle de plongement dans Elasticsearch afin de générer des vecteurs pour vos données. Regardez la vidéo ci-dessous pour savoir comment faire.
Pour ce faire, cliquez sur Pipelines, puis sur Unlock your custom pipelines (Déverrouiller vos pipelines personnalisés) en sélectionnant Copy and customize (Copier et personnaliser) en haut de l'écran. Ensuite, sous Machine Learning Inference Pipelines (Pipelines d'inférence du Machine Learning), sélectionnez Deploy (Déployer) afin de télécharger le modèle, puis de l'installer dans votre déploiement Elasticsearch.
Une fois déployé, sélectionnez Start single-threaded (Commencer avec un seul thread), puis + Add inference Pipeline (Ajouter un pipeline d'inférence). Ensuite, procédez comme suit :
- Sélectionnez un pipeline nouveau ou existant.
- Nommez-le.
- Enfin, dans le menu "Select trained ML Model" (Sélectionner le modèle de Machine Learning entraîné), sélectionnez Dense Vector Text Embedding (Plongement textuel du vecteur dense), puis cliquez sur Continue (Continuer).
À présent, vous devez sélectionner les champs où appliquer l'extension du vecteur dense. Étant donné que vous utilisez le robot d'indexation, vous pouvez sélectionner des champs par défaut. Dans le cadre de ce guide, sélectionnez title (titre) pour créer un champ, puis cliquez sur Continue (Continuer).
Ensuite, sélectionnez Continue (Continuer), puis cliquez sur Create pipeline (Créer le pipeline).
À présent, vous devez mettre à jour le mapping pour le champ dense_vector. (Remarque : Avec la version 8.8+ d'Elasticsearch, cette étape devrait être automatique.)
- Dans le menu de navigation, cliquez sur Dev Tools (Outils de développement). Si vous ouvrez les outils de développement pour la première fois, vous devrez peut-être cliquer sur Dismiss (Rejeter) dans le panneau qui s'affiche.
- Sous Dev Tools (Outils de développement) dans l'onglet Console, mettez à jour le mapping pour notre champ cible du vecteur des k plus proches voisins à l'aide du code ci-dessous. Pour ce faire, il vous suffit de copier le code et de le coller dans l'espace réservé à cet effet, puis de cliquer sur la petite flèche à droite de la première ligne.
POST search-blogs/_mapping
{
"properties": {
"title-vector": {
"type": "dense_vector",
"dims": 768,
"index": true,
"similarity": "dot_product"
}
}
}
Pensez bien à remplacer "search-blogs" par le nom de votre index. En outre, "title-vector" est le nom du champ où les vecteurs seront stockés.
Maintenant que vous avez créé votre pipeline, sélectionnez Crawl (Indexer) en haut à droite de l'écran, puis Crawl all domains on this index (Indexer tous les domaines de cet index).
Enfin, il est temps d'exécuter une recherche vectorielle des k plus proches voisins afin de trouver les informations dont vous avez besoin. Dans ce cas, vous devriez utiliser les outils de développement. Regardez la vidéo ci-dessous pour savoir comment faire.
Étapes suivantes
Merci d'avoir pris le temps de configurer la recherche sémantique pour vos données à l'aide d'Elastic Cloud. Lorsque vous commencerez avec Elastic, vous comprendrez certains éléments opérationnels, de sécurité et de données que vous devrez gérer en tant qu'utilisateur lors du déploiement dans votre environnement.