Amazon Kendra Classement intelligent pour l'autogestion OpenSearch - Amazon Kendra

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Amazon Kendra Classement intelligent pour l'autogestion OpenSearch

Vous pouvez tirer Amazon Kendra parti des fonctionnalités de recherche sémantique du service de OpenSearchrecherche open source autogéré basé sur la licence Apache 2.0 pour améliorer les résultats de recherche. Le plugin Amazon Kendra Intelligent Ranking reclasse sémantiquement les résultats en utilisant OpenSearch. Amazon Kendra Pour ce faire, il comprend le sens et le contexte d'une requête de recherche à l'aide de champs spécifiques, tels que le corps ou le titre du document, à partir des résultats de OpenSearch recherche par défaut.

Prenons, par exemple, cette requête : « adresse principale du keynote ». Étant donné que le terme « adresse » a plusieurs significations, Amazon Kendra vous pouvez déduire le sens de la requête pour renvoyer des informations pertinentes conformes à la signification prévue. Dans ce contexte, il s'agit d'un discours liminaire de conférence. Un service de recherche plus simple risque de ne pas prendre en compte l'intention et de renvoyer des résultats pour une adresse postale sur Main Street, par exemple.

Le plugin Intelligent Ranking pour OpenSearch est disponible pour les versions OpenSearch (autogérées) 2.4.0 et ultérieures. Vous pouvez installer le plugin à l'aide d'un script Bash de démarrage rapide pour créer une nouvelle image Docker OpenSearch avec le plugin Intelligent Ranking inclus. Voir Configuration du plugin de recherche intelligent : il s'agit d'un exemple de configuration pour vous permettre d'être rapidement opérationnel.

Comment fonctionne le plugin de recherche intelligent

Le processus global du plugin Intelligent Ranking pour OpenSearch (autogéré) est le suivant :

  1. Un OpenSearch utilisateur émet une requête et OpenSearch fournit une réponse à la requête ou une liste de documents pertinents pour la requête.

  2. Le plugin Intelligent Ranking prend la réponse à la requête et extrait les informations des documents.

  3. Le plugin Intelligent Ranking fait appel à l'API Rescore d' Amazon Kendra Intelligent Ranking.

  4. L'RescoreAPI prend les informations extraites des documents et reclasse sémantiquement les résultats de recherche.

  5. L'RescoreAPI renvoie les résultats de recherche reclassés au plugin. Le plugin réorganise les résultats de recherche dans la réponse de OpenSearch recherche pour refléter le nouveau classement sémantique.

Le plugin Intelligent Ranking reclasse les résultats en utilisant les champs « corps » et « titre ». Ces champs du plugin peuvent être mappés aux champs de votre OpenSearch index qui correspondent le mieux à la définition du corps et du titre d'un document. Par exemple, si votre index contient des chapitres d'un livre avec des champs tels que « chapter_heading » et « chapter_contents », vous pouvez associer le premier au « title » et le second à « body » pour obtenir les meilleurs résultats.

Configuration du plugin de recherche intelligent

Ce qui suit explique comment configurer rapidement OpenSearch (autogéré) le plugin Intelligent Ranking.

Configuration OpenSearch (autogérée) avec le plugin Intelligent Ranking (configuration rapide)

Si vous utilisez déjà l'image Dockeropensearch:2.4.0, vous pouvez utiliser ce Dockerfile pour créer une nouvelle image de la version OpenSearch 2.4.0 avec le plugin Intelligent Ranking. Vous incluez un conteneur pour la nouvelle image dans votre fichier docker-compose.yml ou opensearch.yml. Vous devez également inclure l'ID du plan d'exécution de la renotation généré lors de la création d'un plan d'exécution de la renotation, ainsi que les informations relatives à votre région et à votre point de terminaison. Consultez l'étape 2 pour créer un plan d'exécution de la renotation.

Si vous avez déjà téléchargé une version de l'image opensearch Docker antérieure à la version 2.4.0, vous devez utiliser l'image Docker opensearch:2.4.0 ou une version ultérieure et créer une nouvelle image avec le plugin Intelligent Ranking inclus.

  1. Téléchargez et installez Docker Desktop pour votre système d'exploitation. Docker Desktop inclut Docker Compose et Docker Engine. Il est recommandé de vérifier si votre ordinateur répond à la configuration système requise mentionnée dans les détails d'installation de Docker.

    Vous pouvez également augmenter vos besoins en matière d'utilisation de la mémoire dans les paramètres de votre Docker Desktop. Vous êtes responsable des exigences d'utilisation de Docker en dehors des limites d'utilisation disponibles gratuitement pour les services Docker. Consultez la section Abonnements Docker.

    Vérifiez que l'état de Docker Desktop est « en cours d'exécution ».

  2. Provisionnez Amazon Kendra un classement intelligent et vos exigences en matière de capacité. Une fois que vous avez configuré Amazon Kendra Intelligent Ranking, vous êtes facturé à l'heure en fonction des unités de capacité définies. Consultez le niveau gratuit et les informations tarifaires.

    Vous utilisez l'CreateRescoreExecutionPlanAPI pour approvisionner leRescore API. Si vous n'avez pas besoin de plus d'unités de capacité que le nombre d'unités par défaut, n'ajoutez pas d'unités supplémentaires et donnez uniquement un nom à votre plan d'exécution de la nouvelle notation. Vous pouvez également mettre à jour vos exigences de capacité à l'aide de l'UpdateRescoreExecutionPlanAPI. Pour plus d'informations, consultez la section Classement sémantique des résultats d'un service de recherche.

    Vous pouvez éventuellement passer à l'étape 3 pour créer un plan d'exécution de la renotation par défaut lorsque vous exécutez le script Bash de démarrage rapide.

    Notez pour l'étape 4 l'ID du plan d'exécution de la renotation inclus dans la réponse.

    CLI
    aws kendra-ranking create-rescore-execution-plan \ --name MyRescoreExecutionPlan \ --capacity-units '{"RescoreCapacityUnits":<integer number of additional capacity units>}' Response: { "Id": "<rescore execution plan ID>", "Arn": "arn:aws:kendra-ranking:<region>:<account-id>:rescore-execution-plan/<rescore-execution-plan-id>" }
    Python
    import boto3 from botocore.exceptions import ClientError import pprint import time kendra_ranking = boto3.client("kendra-ranking") print("Create a rescore execution plan.") # Provide a name for the rescore execution plan name = "MyRescoreExecutionPlan" # Set your required additional capacity units # Don't set capacity units if you don't require more than 1 unit given by default capacity_units = 1 try: rescore_execution_plan_response = kendra_ranking.create_rescore_execution_plan( Name = name, CapacityUnits = {"RescoreCapacityUnits":capacity_units} ) pprint.pprint(rescore_execution_plan_response) rescore_execution_plan_id = rescore_execution_plan_response["Id"] print("Wait for Amazon Kendra to create the rescore execution plan.") while True: # Get the details of the rescore execution plan, such as the status rescore_execution_plan_description = kendra_ranking.describe_rescore_execution_plan( Id = rescore_execution_plan_id ) # When status is not CREATING quit. status = rescore_execution_plan_description["Status"] print(" Creating rescore execution plan. Status: "+status) time.sleep(60) if status != "CREATING": break except ClientError as e: print("%s" % e) print("Program ends.")
  3. Téléchargez le script Bash de démarrage rapide correspondant GitHub à votre version de en OpenSearch sélectionnant la branche de version dans le menu déroulant des branches principales.

    Ce script utilise des images Docker OpenSearch et des OpenSearch tableaux de bord utilisant la version que vous avez sélectionnée dans le GitHub référentiel pour le script. Il télécharge un fichier zip pour le plugin Intelligent Ranking et génère une image Docker Dockerfile pour créer une nouvelle image Docker OpenSearch incluant le plugin. Il crée également un fichier docker-compose.yml qui inclut des conteneurs pour le plugin Intelligent Ranking et les tableaux OpenSearch de bord. OpenSearch Le script ajoute l'ID de votre plan d'exécution de la renotation, les informations de région et le point de terminaison (utilise la région) au fichier docker-compose.yml. Le script s'exécute ensuite docker-compose up pour démarrer les conteneurs OpenSearch avec Intelligent Ranking inclus et les OpenSearch tableaux de bord. Pour arrêter les récipients sans les retirer, courezdocker-compose stop. Pour retirer les conteneurs, exécutezdocker-compose down.

  4. Ouvrez votre terminal et dans le répertoire du script Bash, exécutez la commande suivante.

    bash search_processing_kendra_quickstart.sh -p <execution-plan-id> -r <region>

    Lorsque vous exécutez cette commande, vous fournissez l'ID du plan d'exécution de la renotation que vous avez noté à l'étape 2 lorsque vous avez configuré Amazon Kendra Intelligent Ranking, ainsi que les informations de votre région. Vous pouvez éventuellement configurer le classement Amazon Kendra intelligent à l'aide de --create-execution-plan cette option. Cela crée un plan d'exécution de la nouvelle notation avec un nom et une capacité par défaut.

    Pour ne pas perdre votre index lorsque le conteneur éphémère par défaut est supprimé, vous pouvez conserver votre index d'une exécution à l'autre en fournissant le nom du volume de données à l'aide de l'--volume-nameoption. Si vous avez déjà créé un index, vous pouvez spécifier le volume dans votre fichier docker-compose.yml ou opensearch.yml. Pour conserver vos volumes intacts, ne les exécutez pasdocker-compose down -v.

    Le script Bash de démarrage rapide configure vos AWS informations d'identification dans le OpenSearch keystore pour vous connecter à Amazon Kendra Intelligent Ranking. Pour fournir vos AWS informations d'identification au script, utilisez l'--profileoption permettant de spécifier le AWS profil. Si l'--profileoption n'est pas spécifiée, le script Bash de démarrage rapide tente de lire les AWS informations d'identification (clé d'accès/clé secrète, jeton de session facultatif) à partir des variables d'environnement, puis à partir du profil par défaut. AWS Si l'--profileoption n'est pas spécifiée et qu'aucune information d'identification n'est trouvée, le script ne transmettra pas d'informations d'identification au OpenSearch keystore. Si aucune information d'identification n'est spécifiée dans le OpenSearch keystore, le plugin vérifie toujours les informations d'identification dans la chaîne de fournisseurs d'informations d'identification par défaut, y compris les informations d'identification du Amazon ECS conteneur ou les informations d'identification du profil d'instance fournies via le service de Amazon EC2 métadonnées.

    Assurez-vous d'avoir créé un IAM rôle doté des autorisations nécessaires pour invoquer Amazon Kendra Intelligent Ranking. Voici un exemple de IAM politique accordant l'autorisation d'utiliser l'RescoreAPI pour un plan d'exécution de la renotation spécifique :

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kendra-ranking:Rescore", "Resource": "arn:aws:kendra-ranking:${Region}:${Account}:rescore-execution-plan/${RescoreExecutionPlanId}" } ] }

Exemple de docker-compose.yml

Exemple de fichier docker-compose.yml utilisant la OpenSearch version 2.4.0 ou ultérieure avec le plugin Intelligent Ranking et Dashboards 2.4.0 ou version ultérieure. OpenSearch

version: '3' networks: opensearch-net: volumes: <volume-name>: services: opensearch-node: image: <Docker image tag name of OpenSearch with Intelligent Ranking plugin> container_name: opensearch-node environment: - cluster.name=opensearch-cluster - node.name=opensearch-node - discovery.type=single-node - kendra_intelligent_ranking.service.endpoint=https://kendra-ranking.<region>.api.aws - kendra_intelligent_ranking.service.region=<region> - kendra_intelligent_ranking.service.execution_plan_id=<rescore-execution-plan-id> ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 ports: - 9200:9200 - 9600:9600 networks: - opensearch-net volumes: <docker-volume-name>:/usr/share/opensearch/data opensearch-dashboard: image: opensearchproject/opensearch-dashboards:<your-version> container_name: opensearch-dashboards ports: - 5601:5601 environment: OPENSEARCH_HOSTS: '["https://opensearch-node:9200"]' networks: - opensearch-net

Exemple de Dockerfile et de création d'une image

Exemple d'utilisation de la OpenSearch version 2.4.0 ou ultérieure avec le plugin Intelligent Ranking. Dockerfile

FROM opensearchproject/opensearch:<your-version> RUN /usr/share/opensearch/bin/opensearch-plugin install --batch https://github.com/opensearch-project/search-processor/releases/download/<your-version>/search-processor.zip

Création d'une image Docker pour OpenSearch avec le plugin Intelligent Ranking.

docker build --tag=<Docker image tag name of OpenSearch with Intelligent Ranking plugin>

Interaction avec le plugin de recherche intelligent

Une fois que vous avez configuré OpenSearch (autogéré) le plugin Intelligent Ranking, vous pouvez interagir avec le plugin à l'aide de commandes curl ou de bibliothèques OpenSearch clientes. Les informations d'identification par défaut pour accéder OpenSearch au plugin Intelligent Ranking sont le nom d'utilisateur « admin » et le mot de passe « admin ».

Pour appliquer les paramètres du plugin Intelligent Ranking à un OpenSearch index :

Curl
curl -XPUT "https://localhost:9200/<your-docs-index>/_settings" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d' { "index": { "plugin" : { "searchrelevance" : { "result_transformer" : { "kendra_intelligent_ranking": { "order": 1, "properties": { "title_field": "title_field_name_here", "body_field": "body_field_name_here" } } } } } } } '
Python
pip install opensearch-py from opensearchpy import OpenSearch host = 'localhost' port = 9200 auth = ('admin', 'admin') client = OpenSearch( hosts = [{'host': host, 'port': port}], http_compress = True, # enables gzip compression for request bodies http_auth = auth, # client_cert = client_cert_path, # client_key = client_key_path, use_ssl = True, verify_certs = False, ssl_assert_hostname = False, ssl_show_warn = False, ca_certs = ca_certs_path ) setting_body = { "index": { "plugin" : { "searchrelevance" : { "result_transformer" : { "kendra_intelligent_ranking": { "order": 1, "properties": { "title_field": "title_field_name_here", "body_field": "body_field_name_here" } } } } } } } response = client.indices.put_settings(index_name, body=setting_body)

Vous devez inclure le nom du champ de texte principal que vous souhaitez utiliser pour le reclassement, tel qu'un corps de document ou un champ de contenu de document. Vous pouvez également inclure d'autres champs de texte, tels que le titre du document ou le résumé du document.

Vous pouvez désormais émettre n'importe quelle requête et les résultats sont classés à l'aide du plugin Intelligent Ranking.

Curl
curl -XGET "https://localhost:9200/<your-docs-index>/_search?pretty" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d' { "query" : { "match" : { "body_field_name_here": "intelligent systems" } } } '
Python
from opensearchpy import OpenSearch host = 'localhost' port = 9200 auth = ('admin', 'admin') client = OpenSearch( hosts = [{'host': host, 'port': port}], http_compress = True, # enables gzip compression for request bodies http_auth = auth, # client_cert = client_cert_path, # client_key = client_key_path, use_ssl = True, verify_certs = False, ssl_assert_hostname = False, ssl_show_warn = False, ca_certs = ca_certs_path ) query = { 'size': 10, "query" : { "match" : { "body_field_name_here": "intelligent systems" } } } response = client.search( body = query, index = index_name ) print('\nSearch results:') print(response)

Pour supprimer les paramètres du plugin Intelligent Ranking pour un OpenSearch index :

Curl
curl -XPUT "http://localhost:9200/<your-docs-index>/_settings" -H 'Content-Type: application/json' -d' { "index": { "plugin": { "searchrelevance": { "result_transformer": { "kendra_intelligent_ranking.*": null } } } } } '
Python
from opensearchpy import OpenSearch host = 'localhost' port = 9200 auth = ('admin', 'admin') client = OpenSearch( hosts = [{'host': host, 'port': port}], http_compress = True, # enables gzip compression for request bodies http_auth = auth, # client_cert = client_cert_path, # client_key = client_key_path, use_ssl = True, verify_certs = False, ssl_assert_hostname = False, ssl_show_warn = False, ca_certs = ca_certs_path ) setting_body = { "index": { "plugin": { "searchrelevance": { "result_transformer": { "kendra_intelligent_ranking.*": null } } } } } response = client.indices.put_settings(index_name, body=setting_body)

Pour tester le plugin Intelligent Ranking sur une certaine requête ou pour tester sur certains champs du corps et du titre :

Curl
curl -XGET "https://localhost:9200/<your-docs-index>/_search?pretty" -u 'admin:admin' --insecure -H 'Content-Type: application/json' -d' { "query": { "multi-match": { "query": "intelligent systems", "fields": ["body_field_name_here", "title_field_name_here"] } }, "size": 25, "ext": { "search_configuration": { "result_transformer": { "kendra_intelligent_ranking": { "order": 1, "properties": { "title_field": "title_field_name_here", "body_field": "body_field_name_here" } } } } } } '
Python
from opensearchpy import OpenSearch host = 'localhost' port = 9200 auth = ('admin', 'admin') client = OpenSearch( hosts = [{'host': host, 'port': port}], http_compress = True, # enables gzip compression for request bodies http_auth = auth, # client_cert = client_cert_path, # client_key = client_key_path, use_ssl = True, verify_certs = False, ssl_assert_hostname = False, ssl_show_warn = False, ca_certs = ca_certs_path ) # Index settings null for kendra_intelligent_ranking query = { "query": { "multi_match": { "query": "intelligent systems", "fields": ["body_field_name_here", "title_field_name_here"] } }, "size": 25, "ext": { "search_configuration": { "result_transformer": { "kendra_intelligent_ranking": { "order": 1, "properties": { "title_field": "title_field_name_here", "body_field": "body_field_name_here" } } } } } } response = client.search( body = query, index = index_name ) print('\nSearch results:') print(response)

Comparaison des OpenSearch résultats avec les Amazon Kendra résultats

Vous pouvez comparer les résultats classés side-by-side OpenSearch (autogérés) aux Amazon Kendra résultats reclassés. OpenSearch Les versions 2.4.0 et ultérieures de Dashboards offrent des side-by-side résultats qui vous permettent de comparer le OpenSearch classement des documents à la manière Amazon Kendra dont le plugin classe les documents pour une requête de recherche.

Avant de pouvoir comparer les résultats OpenSearch classés aux résultats Amazon Kendra reclassés, assurez-vous que vos OpenSearch tableaux de bord sont sauvegardés par un OpenSearch serveur doté du plugin Intelligent Ranking. Vous pouvez le configurer à l'aide de Docker et d'un script Bash de démarrage rapide. veuillez consulter Configuration du plugin de recherche intelligent.

Ce qui suit explique comment comparer OpenSearch et Amazon Kendra rechercher des résultats dans les OpenSearch tableaux de bord. Pour plus d'informations, consultez la OpenSearchdocumentation.

Comparaison des résultats de recherche dans les OpenSearch tableaux de bord
  1. Ouvrez http://localhost:5601 et connectez-vous à OpenSearch Dashboards. Les informations d'identification par défaut sont le nom d'utilisateur « admin » et le mot de passe « admin ».

  2. Sélectionnez Search Relevance dans les OpenSearch plugins du menu de navigation.

  3. Entrez le texte de recherche dans la barre de recherche.

  4. Sélectionnez votre index pour la requête 1 et entrez une requête dans le OpenSearch Query DSL. Vous pouvez utiliser la %SearchText% variable pour faire référence au texte de recherche que vous avez saisi dans la barre de recherche. Pour un exemple de cette requête, consultez OpenSearch la documentation. Les résultats renvoyés pour cette requête sont les OpenSearch résultats obtenus sans utiliser le plugin Intelligent Ranking.

  5. Sélectionnez le même index pour la requête 2 et entrez la même requête dans le OpenSearch Query DSL. En outre, incluez l'extension kendra_intelligent_ranking et spécifiez l'extension obligatoire sur laquelle le classement doit body_field être effectué. Vous pouvez également spécifier le champ de titre, mais le champ de corps est obligatoire. Pour un exemple de cette requête, consultez OpenSearch la documentation. Les résultats renvoyés pour cette requête sont les résultats Amazon Kendra reclassés à l'aide du plugin Intelligent Ranking. Le plugin classe jusqu'à 25 résultats.

  6. Sélectionnez Rechercher pour retourner et comparer les résultats.