Vérifier la qualité des données pour les recommandations multimédias

Cette page explique comment savoir si les différentes métriques de vos données multimédias respectent leurs seuils d'exigence.

À propos de la vérification de la qualité des données multimédias

Étant donné que les événements utilisateur récents sont très importants pour les recommandations multimédias, vous devez vérifier régulièrement la qualité de vos données ingérées et de vos événements utilisateur. Pour ce faire, consultez l'onglet Optimisation de votre application de recommandations de contenus multimédias afin de déterminer les améliorations que vous pouvez apporter à vos données afin d'optimiser les recommandations de meilleure qualité.

Si le seuil d'une métrique n'est pas atteint, elle est associée à un état d'avertissement. Vous devez ensuite examiner la métrique et sa description pour déterminer l'action à entreprendre pour améliorer la qualité de vos contenus multimédias.

Tous les modèles et objectifs doivent atteindre les seuils de la métrique Qualité générale. Certains modèles et objectifs présentent des métriques et des seuils de qualité spécifiques à l'application supplémentaires. Les métriques de qualité générales sont les mêmes pour toutes les applications utilisant le même datastore, mais les métriques de qualité spécifiques à l'application varient en fonction du modèle et des objectifs de l'application.

Pour en savoir plus sur les modèles et les objectifs de recommandation, consultez la section À propos des types de recommandations pour les applications multimédias.

Vérifier la qualité des données

Pour vérifier la qualité des données de vos recommandations multimédias, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page Agent Builder.

    Agent Builder

  2. Cliquez sur le nom de l'application de recommandations multimédias pour laquelle vous souhaitez vérifier la qualité des données.

  3. Dans le menu de navigation, cliquez sur Qualité des données, puis sur l'onglet Optimisation. Cette page indique l'état de différentes métriques pour les données associées à votre application.

  4. Consultez les états Qualité générale et Qualité spécifique à l'application en haut de la page. L'état récapitulatif en haut de la page s'affiche sous forme d'avertissement si une ou plusieurs métriques ont dépassé leur seuil.

    Les deux tableaux de métriques (Qualité générale et Qualité spécifique à l'application) listent les métriques individuelles.

    L'onglet "Optimisation" affiche une métrique d'avertissement pour la qualité générale (doc_with_same_title_percentage)

  5. Dans les tableaux des métriques, cliquez sur Afficher les détails pour en savoir plus sur les métriques en état d'avertissement.

  6. Facultatif: Si vous souhaitez afficher le seuil d'une métrique conforme, cliquez sur Afficher les détails. Les seuils des métriques conformes ne sont pas affichés dans le tableau des métriques.

Utilisez la méthode requirements:checkRequirement pour vérifier la qualité de vos données de recommandations multimédias, comme illustré.

Pour vérifier la qualité à partir de la ligne de commande, procédez comme suit:

  1. Recherchez l'ID de votre data store. Si vous disposez déjà de l'ID de votre data store, passez à l'étape suivante.

    1. Dans la console Google Cloud, accédez à la page Agent Builder et cliquez sur Data Stores dans le menu de navigation.

      Accéder à la page "Datastores"

    2. Cliquez sur le nom de votre data store.

    3. Sur la page Données de votre data store, obtenez l'ID du data store.

  2. Exécutez la commande curl suivante pour savoir si vos recommandations multimédias respectent les seuils des métriques générales:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-GFE-SSL: yes" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/requirements:checkRequirement" \
    -d '{
          "location": "projects/PROJECT_ID/locations/global",
          "requirementType": "discoveryengine.googleapis.com/media_recs/general/all/warning",
          "resources": [
            {
              "labels": {
                "branch_id": "0",
                "collection_id": "default_collection",
                "datastore_id": "DATA_STORE_ID",
                "location_id": "global",
                "project_number": "PROJECT_ID"
              },
              "type": "discoveryengine.googleapis.com/Branch"
            },
            {
              "labels": {
                "collection_id": "default_collection",
                "datastore_id": "DATA_STORE_ID",
                "location_id": "global",
                "project_number": "PROJECT_ID"
              },
              "type": "discoveryengine.googleapis.com/DataStore"
            }
          ]
        }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID: ID de votre Google Cloud projet.
    • DATA_STORE_ID: ID du data store Vertex AI Search.
    curl -X POST
    -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    -H "X-GFE-SSL: yes"
    -H "X-Goog-User-Project: my-project-123"
    "https://discoveryengine.googleapis.com/v1alpha/projects/my-project-123/locations/global/requirements:checkRequirement"
    -d '{
      "location": "projects/123456/locations/global",
      "requirementType": "discoveryengine.googleapis.com/media_recs/general/all/warning",
      "resources": [
        {
          "labels": {
            "branch_id": "0",
            "collection_id": "default_collection",
            "datastore_id": "my-data-store",
            "location_id": "global",
            "project_number": "123456"
          },
          "type": "discoveryengine.googleapis.com/Branch"
        },
        {
          "labels": {
            "collection_id": "default_collection",
            "datastore_id": "my-data-store",
            "location_id": "global",
            "project_number": "123456"
          },
          "type": "discoveryengine.googleapis.com/DataStore"
        }
      ]
    }'
        
    { "requirement": { "type": "discoveryengine.googleapis.com/media_recs/general/all/warning", "displayName": "Warning level requirements for all models and all business objectives.", "description": "Requirements for the media recommendations model that will result in performance issue if not met for all media recommendations models and all business objectives.", "condition": { "expression": "doc_with_same_title_percentage \u003c doc_with_same_title_percentage_threshold && most_common_visitor_id_percentage \u003c most_common_visitor_id_percentage_threshold && short_term_unjoined_events_percentage \u003c short_term_unjoined_events_percentage_threshold && long_term_unjoined_events_percentage \u003c long_term_unjoined_events_percentage_threshold" }, "metricBindings": [ { "variableId": "doc_with_same_title_percentage", "resourceType": "discoveryengine.googleapis.com/Branch", "metricFilter": "metric.type = 'discoveryengine.googleapis.com/branch/documents/items_with_same_title' AND metric.labels.is_percentage = 'True' AND resource.labels.project_number = '123456' AND resource.labels.branch_id = '0' AND resource.labels.datastore_id = 'my-data-store' AND resource.labels.location_id = 'global' AND resource.labels.collection_id = 'default_collection'", "description": "The percentage of the documents with the same title in a branch.", "category": "Document" }, { "variableId": "most_common_visitor_id_percentage", "resourceType": "discoveryengine.googleapis.com/DataStore", "metricFilter": "metric.type = 'discoveryengine.googleapis.com/branch/datastore/user_events/most_used_visitor_id_events' AND metric.labels.is_percentage = 'True' AND resource.labels.datastore_id = 'my-data-store' AND resource.labels.project_number = '123456' AND resource.labels.location_id = 'global' AND resource.labels.collection_id = 'default_collection'", "description": "The percentage of the events with the same visitor id.", "category": "DataStore" }, { "variableId": "short_term_unjoined_events_percentage", "resourceType": "discoveryengine.googleapis.com/DataStore", "metricFilter": "metric.type = 'discoveryengine.googleapis.com/datastore/user_events/unjoined_events_for_document_ids' AND metric.labels.is_percentage = 'True' AND metric.conditions.time_range = 'WEEK' AND resource.labels.datastore_id = 'my-data-store' AND resource.labels.project_number = '123456' AND resource.labels.location_id = 'global' AND resource.labels.collection_id = 'default_collection'", "description": "The percentage of events refers to a document id that is not in the catalog in the last 7 days.", "category": "DataStore" }, { "variableId": "long_term_unjoined_events_percentage", "resourceType": "discoveryengine.googleapis.com/DataStore", "metricFilter": "metric.type = 'discoveryengine.googleapis.com/datastore/user_events/unjoined_events_for_document_ids' AND metric.labels.is_percentage = 'True' AND metric.conditions.time_range = 'NINETY_DAYS' AND resource.labels.datastore_id = 'my-data-store' AND resource.labels.project_number = '123456' AND resource.labels.location_id = 'global' AND resource.labels.collection_id = 'default_collection'", "description": "The percentage of events refers to a document id that is not in the catalog in the last 90 days.", "category": "DataStore" } ], "thresholdBindings": [ { "variableId": "doc_with_same_title_percentage_threshold", "threshold_values": { "severity": "WARNING", "value": 1.0 } "description": "The threshold for the percentage of the documents with the same title in a branch." }, { "variableId": "most_common_visitor_id_percentage_threshold", "threshold_values": { "severity": "WARNING", "value": 5.0 } "description": "The threshold for the percentage of the events with the same visitor id." }, { "variableId": "short_term_unjoined_events_percentage_threshold", "threshold_values": { "severity": "WARNING", "value": 5.0 } "description": "The threshold for the percentage of the events refers to a document id that is not in the catalog in the last 7 days." }, { "variableId": "long_term_unjoined_events_percentage_threshold", "threshold_values": { "severity": "WARNING", "value": 2.0 } "description": "The threshold for the percentage of the events refers to a document id that is not in the catalog in the last 90 days" } ] }, "result": "WARNING", "requirementCondition": { "expression": "doc_with_same_title_percentage \u003c doc_with_same_title_percentage_threshold && most_common_visitor_id_percentage \u003c most_common_visitor_id_percentage_threshold && short_term_unjoined_events_percentage \u003c short_term_unjoined_events_percentage_threshold && long_term_unjoined_events_percentage \u003c long_term_unjoined_events_percentage_threshold" }, "metricResults": [ { "name": "short_term_unjoined_events_percentage", "value": { "doubleValue": 0 }, "timestamp": "2024-06-06T03:03:13.416900898Z", "unit": "%", "metricType": "discoveryengine.googleapis.com/datastore/user_events/unjoined_events_for_document_ids" }, { "name": "long_term_unjoined_events_percentage", "value": { "doubleValue": 0 }, "timestamp": "2024-06-06T03:03:13.417962744Z", "unit": "%", "metricType": "discoveryengine.googleapis.com/datastore/user_events/unjoined_events_for_document_ids" }, { "name": "most_common_visitor_id_percentage", "value": { "doubleValue": 0.8 }, "timestamp": "2024-06-06T03:03:16.090037135Z", "unit": "%", "metricType": "discoveryengine.googleapis.com/datastore/user_events/most_used_visitor_id_events" }, { "name": "doc_with_same_title_percentage", "value": { "doubleValue": 30.47 }, "timestamp": "2024-06-06T03:03:17.599458357Z", "unit": "%", "metricType": "discoveryengine.googleapis.com/documents/items_with_same_title" } ], "oldestMetricTimestamp": "2024-06-06T03:03:13.416900898Z" }
  3. Examinez le résultat:

    1. Recherchez la valeur de result:

      • Si la valeur est SUCCESS, vos données répondent aux exigences générales. Passez à l'étape 4.

      • Si la valeur est WARNING, passez à l'étape b.

      • Si result ne s'affiche pas dans la sortie, plusieurs raisons peuvent expliquer cela:

        • L'PROJECT_ID ou l'DATA_STORE_ID dans la requête est incorrect.

        • Certaines valeurs de métrique ne sont pas disponibles. Réessayez dans six heures ou contactez un ingénieur client pour obtenir de l'aide.

    2. Recherchez l'expression (requirement.Condition.Expression): si cette expression renvoie la valeur "false", un problème est survenu avec vos données.

      La valeur des métriques se trouve dans le champ requirementCondition.metricResults.value. Les valeurs du seuil d'avertissement se trouvent dans les champs thresholdBindings.thresholdValues. Les champs description peuvent vous aider à comprendre l'objectif de la métrique.

      Par exemple, la valeur de doc_with_same_title_percentage est 30.47 et le seuil d'avertissement pour doc_with_same_title_percentage_threshold est 1. Il existe un problème de données, car de nombreux titres du datastore sont identiques. Cela doit être étudié.

  4. Si la combinaison de modèle et d'objectif utilisée pour votre application de recommandations apparaît dans ce tableau, vous devez également appeler la méthode de vérification des exigences, mise à jour avec les valeurs de votre modèle et de votre objectif:

    Modèle Objectif MODEL_OBJ
    Autres articles susceptibles de vous intéresser Taux de conversion oyml/cvr
    Recommandées pour vous Taux de conversion rfy/cvr
    Résultats similaires Taux de conversion mlt/cvr
    Les plus populaires Taux de conversion mp/cvr
    Autres articles susceptibles de vous intéresser Durée de visionnage par session oyml/wdps
    Recommandées pour vous Durée de visionnage par session rfy/wdps
    Résultats similaires Durée de visionnage par session mlt/wdps

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-GFE-SSL: yes" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/requirements:checkRequirement" \
    -d '{
          "location": "projects/PROJECT_ID/locations/global",
          "requirementType": "discoveryengine.googleapis.com/media_recs/MODEL_OBJ/warning",
          "resources": [
            {
              "labels": {
                "branch_id": "0",
                "collection_id": "default_collection",
                "datastore_id": "DATA_STORE_ID",
                "location_id": "global",
                "project_number": "PROJECT_ID"
              },
              "type": "discoveryengine.googleapis.com/Branch"
            },
            {
              "labels": {
                "collection_id": "default_collection",
                "datastore_id": "DATA_STORE_ID",
                "location_id": "global",
                "project_number": "PROJECT_ID"
              },
              "type": "discoveryengine.googleapis.com/DataStore"
            }
          ]
        }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID: ID de votre Google Cloud projet.
    • DATA_STORE_ID: ID du data store Vertex AI Search.
    • MODEL_OBJ: consultez le tableau précédent pour choisir la valeur appropriée pour votre application de recommandations.

    Cet exemple concerne le modèle "Plus de contenus similaires" et l'objectif "Durée de visionnage" :

    curl -X POST
    -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    -H "X-GFE-SSL: yes"
    -H "X-Goog-User-Project: my-project-123"
    "https://discoveryengine.googleapis.com/v1alpha/projects/my-project-123/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/requirements:checkRequirement"
    -d '{
      "location": "projects/my-project-123/locations/global",
      "requirementType": "discoveryengine.googleapis.com/media_recs/mlt/wdps/warning",
      "resources": [
        {
          "labels": {
            "branch_id": "0",
            "collection_id": "default_collection",
            "datastore_id": "my-data-store",
            "location_id": "global",
            "project_number": "my-project-123"
          },
          "type": "discoveryengine.googleapis.com/Branch"
        },
        {
          "labels": {
            "collection_id": "default_collection",
            "datastore_id": "my-data-store",
            "location_id": "global",
            "project_number": "my-project-123"
          },
          "type": "discoveryengine.googleapis.com/DataStore"
        }
      ]
    }'
        
    { "requirement": { "type": "discoveryengine.googleapis.com/media_recs/mlt/wdps/warning", "displayName": "Warning level requirements for 'More Like This' models and 'Watch duration per session' business objectives.", "description": "Requirements for the media recommendations model that will result in performance issue if not met for the 'More Like This' model and the 'Watch duration per session' business objective.", "condition": { "expression": "invalid_sequence_percentage \u003c= invalid_sequence_percentage_threshold" }, "metricBindings": [ { "variableId": "invalid_sequence_percentage", "resourceType": "discoveryengine.googleapis.com/DataStore", "metricFilter": "metric.type = 'discoveryengine.googleapis.com/datastore/user_events/invalid_sequences_media_play_media_complete' AND metric.labels.is_percentage = 'True' AND resource.labels.location_id = 'global' AND resource.labels.collection_id = 'default_collection' AND resource.labels.project_number = '123456' AND resource.labels.datastore_id = 'my-data-store'", "description": "The percentage of invalid sequences for media play and media complete events sampled by randomly selected visitor ids.", "category": "DataStore" } ], "thresholdBindings": [ { "variableId": "invalid_sequence_percentage_threshold", "thresholdValues": [ { "severity": "WARNING", "value": 50 } ], "description": "The threshold for the percentage of invalid sequences sampled among all media play and media complete events." } ] }, "result": "SUCCESS", "requirementCondition": { "expression": "invalid_sequence_percentage \u003c= invalid_sequence_percentage_threshold" }, "metricResults": [ { "name": "invalid_sequence_percentage", "value": { "doubleValue": 0 }, "timestamp": "2024-06-06T02:32:00.460056386Z", "unit": "%", "metricType": "discoveryengine.googleapis.com/datastore/user_events/invalid_sequences_media_play_media_complete" } ], "oldestMetricTimestamp": "2024-06-06T02:32:00.460056386Z" }
  5. Examinez le résultat:

    1. Recherchez la valeur de result:

      • Si la valeur est SUCCESS, vos données sont acceptables.

      • Si la valeur est WARNING, passez à l'étape b.

      • Si result ne s'affiche pas dans la sortie, plusieurs raisons peuvent expliquer cela:

        • L'PROJECT_ID ou l'DATA_STORE_ID dans la requête est incorrect.

        • Certaines valeurs de métrique ne sont pas disponibles. Réessayez dans six heures ou contactez un ingénieur client pour obtenir de l'aide.

    2. Examinez l'expression (requirement.Condition.Expression). Si cette expression renvoie la valeur "false", un problème est survenu avec vos données.

      La valeur des métriques se trouve dans le champ requirementCondition.metricResults.value, et les valeurs du seuil d'avertissement dans les champs thresholdBindings.thresholdValues. Les champs description peuvent vous aider à comprendre l'objectif de la métrique.