Filtrare con la comprensione del linguaggio naturale

In questa pagina viene spiegato come applicare la comprensione del linguaggio naturale per creare automaticamente filtri per le query di ricerca e, di conseguenza, migliorare la qualità dei risultati restituiti.

Puoi utilizzare questa funzionalità con le app di ricerca connesse ai datastore di dati strutturati.

Informazioni sulla comprensione delle query in linguaggio naturale

Se hai un'app di ricerca personalizzata con dati strutturati, le query in linguaggio naturale dei tuoi utenti possono essere riformattate come query filtrate queries. In questo modo, i risultati di ricerca possono essere di qualità migliore rispetto alla ricerca di parole nella stringa di query.

Ad esempio, una query in linguaggio naturale come "Find a coffee shop serving banana bread" potrebbe essere riformulata come una query e un filtro: "query": "banana bread", "filter": "type": ANY(\"cafe\").

L'utilizzo della comprensione delle query in linguaggio naturale è più semplice e flessibile rispetto alla scrittura delle espressioni di filtro. Per informazioni sulla scrittura delle espressioni di filtro, consulta Filtrare la ricerca personalizzata per dati strutturati o non strutturati.

Filtri hard e soft

Esistono due tipi di filtri che puoi applicare per la comprensione delle query in linguaggio naturale: hard e soft.

  • Hard. Per impostazione predefinita, i filtri estratti vengono applicati come criteri obbligatori che un risultato deve soddisfare per essere restituito.

    Il comportamento è simile al campo filter nel SearchRequest messaggio.

  • Soft. Un'alternativa al filtro hard è applicare un boost ai risultati di ricerca. È più probabile che vengano restituiti i risultati con boost, ma possono essere restituiti anche i risultati che non soddisfano il criterio di boost.

    Il comportamento è simile al campo boost_spec nel SearchRequest messaggio.

Puoi sperimentare entrambi i tipi di filtri. Se le ricerche non restituiscono risultati sufficienti, prova a utilizzare il filtro soft anziché quello hard.

Per informazioni dettagliate su come applicare un filtro soft, consulta la sezione Cercare con il filtro soft di seguito.

Esempi

Questa funzionalità è più facile da spiegare con gli esempi:

Esempio: estrazione di campi dalle query (filtro hard)

Questa funzionalità di comprensione delle query in linguaggio naturale viene spiegata tramite l'esempio della ricerca di un hotel.

Prendi in considerazione la seguente query eseguita su un datastore di dati strutturati per un sito di hotel: "Find me a family-friendly hotel with at least four stars that costs less than 300 a night, lets me bring my dog, and has free Wi-Fi."

Senza la comprensione delle query in linguaggio naturale, l'app di ricerca cerca i documenti che contengono le parole nella query.

Con la comprensione delle query in linguaggio naturale e i dati strutturati in modo appropriato, la ricerca diventa più efficace sostituendo parte del linguaggio naturale nella query con i filtri. Se i dati strutturati hanno campi per star_rating (numeri), price (numeri) e amenities (stringhe), la query può essere formulata in modo da includere i seguenti filtri:

   {
       "star_rating": >=4,
       "price": <=300,
       "amenities": "Wifi", "Pets Allowed"
   }

Esempio: con un filtro di geolocalizzazione (filtro hard)

Questo esempio è simile al precedente, tranne per il fatto che include un filtro di geolocalizzazione, che è un tipo speciale di filtro estratto. Vertex AI Search è in grado di riconoscere le località in una query e creare filtri di prossimità per le località.

Prendi in considerazione la seguente query eseguita su un sito di attività a livello statale: "Find me a chic and stylish hotel with at least 4 stars that is in San Francisco."

Con la comprensione delle query in linguaggio naturale e il filtro di geolocalizzazione, la ricerca viene riformulata in modo da includere il seguente filtro per un hotel con una valutazione di almeno 4 stelle e in un raggio di 10 km da San Francisco:

   {
       "star_rating": >=4,
       "location": GEO_DISTANCE(\"San Francisco, CA\", 10000)
   }

In questo esempio, GEO_DISTANCE è un indirizzo, ma in altre query potrebbe essere scritto come latitudine e longitudine, anche se la query originale conteneva un indirizzo.

Esempio: estrazione di campi dalle query (filtro soft)

Questa funzionalità di comprensione delle query in linguaggio naturale viene spiegata tramite l'esempio della ricerca di un hotel, ma mostrando alcuni risultati che non soddisfano tutti i criteri.

Prendi in considerazione la seguente query eseguita su un sito di viaggi: "Find me a family-friendly hotel with at least four stars that costs less than 300 a night, and lets me bring my dog."

Con la comprensione delle query in linguaggio naturale e i dati strutturati in modo appropriato, la ricerca diventa più efficace sostituendo parte del linguaggio naturale nella query con i filtri soft. Se i dati strutturati hanno campi per star_rating (numeri), price (numeri) e amenities (stringhe), la query può essere riscritta come il seguente boost:

Condizione di boost estratta dalla query in linguaggio naturale:

{
  "boostSpec": {
    "conditionBoostSpecs": {
      "condition": "(star_rating >= 4.5) AND (price < 200) AND ANY(amenities, \"Pets Allowed\")",
      "boost": 0.7
    }
  }
}

In questo caso, potrebbero essere restituiti alcuni hotel con una valutazione inferiore o hotel che non accettano animali domestici.

La forza del boost dipende dal numero di filtri strutturati a cui corrisponde un documento. Se vengono estratte tre condizioni e il documento corrisponde a una sola di queste, il documento riceve un piccolo boost. In alternativa, se il documento corrisponde a tutte e tre le condizioni, riceve un boost elevato.

Limitazioni

Le seguenti limitazioni si applicano alla comprensione delle query in linguaggio naturale:

  • La comprensione delle query in linguaggio naturale non può essere applicata alle app di ricerca combinate. Se provi a utilizzare la comprensione delle query in linguaggio naturale con un'app di ricerca combinata, viene visualizzato un errore.

  • La comprensione delle query in linguaggio naturale funziona solo per le app di ricerca personalizzate che utilizzano datastore di dati strutturati.

  • L'utilizzo della comprensione delle query in linguaggio naturale aumenta la latenza, quindi potresti scegliere di non utilizzarla se la latenza è un problema.

  • Per la geolocalizzazione, la località deve essere descritta in modo esplicito. Non puoi utilizzare località come "vicino a me" o "casa".

  • Il raggio per la geolocalizzazione è di 10 km e non è configurabile.

  • I campi booleani non possono essere utilizzati nei filtri. Ad esempio, se la query è "Find me a non-smoking hotel room", un campo booleano come "non_smoking": true non è utile, ma un campo stringa come "non_smoking": "YES" può far parte del filtro.

Prima di iniziare

Prima di iniziare a utilizzare la comprensione delle query in linguaggio naturale, devi attivarla per i datastore di dati strutturati connessi alle app che intendi utilizzare.

Per attivare la comprensione delle query in linguaggio naturale:

REST

  1. Trova l'ID del datastore. Se hai già l'ID del datastore, vai al passaggio successivo.

    1. Nella Google Cloud console, vai alla pagina AI Applications e nel menu di navigazione fai clic su Datastore.

      Vai alla pagina Datastore

    2. Fai clic sul nome del tuo datastore.

    3. Nella pagina Dati del datastore, recupera l'ID del datastore.

  2. Esegui il seguente comando curl:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID?update_mask=natural_language_query_understanding_config.mode" \
    -d '{
          "naturalLanguageQueryUnderstandingConfig": {
            "mode": "ENABLED"
          }
        }'
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo Google Cloud progetto.
    • DATA_STORE_ID: l'ID del datastore di Vertex AI Search.
  3. Ripeti i passaggi 1 e 2 per ogni datastore.

  4. Attendi circa 24 ore.

    Se provi a utilizzare la comprensione delle query in linguaggio naturale prima che il datastore sia pronto, la risposta che ricevi è la stessa di se filterExtractionCondition fosse impostato su DISABLED.

Cercare, convertendo le query in linguaggio naturale in filtri

Per cercare una query in linguaggio naturale e ottenere risultati ottimizzati per le query in linguaggio naturale:

REST

  1. Esegui il seguente comando curl, che chiama il search metodo:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
            "query": "QUERY",
            "naturalLanguageQueryUnderstandingSpec": {
              "filterExtractionCondition": "ENABLED"
            }
          }'
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo Google Cloud progetto.
    • APP_ID: l'ID dell'app di Vertex AI Search su cui vuoi eseguire la query. L'app deve essere connessa a un datastore contenente dati strutturati. L'app non può essere un'app di ricerca combinata.
    • QUERY: la query scritta in linguaggio naturale.

Cercare, convertendo le località nelle query in filtri di geolocalizzazione

Per cercare una query in linguaggio naturale e ottenere risultati ottimizzati per le query in linguaggio naturale, inclusa la prossimità alle località:

REST

  1. Esegui il seguente comando curl, che chiama il search metodo:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
            "query": "QUERY",
            "naturalLanguageQueryUnderstandingSpec": {
              "filterExtractionCondition": "ENABLED",
              "geoSearchQueryDetectionFieldNames": ["GEO_FIELD_NAME_1", "GEO_FIELD_NAME_N"]"
            }
          }'
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo Google Cloud progetto.
    • APP_ID: l'ID dell'app di Vertex AI Search su cui vuoi eseguire la query. L'app deve essere connessa a un datastore contenente dati strutturati. L'app non può essere un'app di ricerca combinata.
    • QUERY: la query scritta in linguaggio naturale.
    • GEO_FIELD_NAME_1, GEO_FIELD_NAME_N: un elenco di valori di tipo geolocation. Se il tipo di valore non è geolocation, questo campo viene ignorato.

Cercare con il filtro soft

Per applicare un filtro soft:

REST

  1. Trova l'ID dell'app. Se hai già l'ID dell'app, vai al passaggio successivo.

    1. Nella Google Cloud console, vai alla pagina AI Applications.

      Vai alle app

    2. Nella pagina App, trova il nome dell'app e recupera l'ID dell'app da lla colonna ID.

  2. Esegui il seguente comando curl, che chiama il search metodo:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
            "query": "QUERY",
            "naturalLanguageQueryUnderstandingSpec": {
              "filterExtractionCondition": "ENABLED",
              "extractedFilterBehavior": "SOFT_BOOST"
            }
          }'
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo Google Cloud progetto.
    • APP_ID: l'ID dell'app di ricerca. L'app deve essere connessa a un datastore contenente dati strutturati. L'app non può essere un'app di ricerca combinata.
    • QUERY: la query in linguaggio naturale.

Specificare i campi per le query in linguaggio naturale

Affinché un campo possa essere utilizzato come filtro nella comprensione delle query in linguaggio naturale, deve essere contrassegnato come indicizzabile nello schema. (Per informazioni generali sulla visualizzazione e la modifica di uno schema, consulta Aggiornare uno schema.)

Vertex AI Search determina quali dei campi indicizzabili nello schema hanno senso da utilizzare nei filtri di comprensione delle query in linguaggio naturale. Tuttavia, se sono inclusi campi che non vuoi, devi creare una lista consentita per specificare quali campi possono essere utilizzati.

Considera un sito di prenotazione di hotel, in cui sono presenti campi come amenities, id, price_per_night, rating, e room_types. Di questi, se il id è una stringa di caratteri e numeri, è probabile che Vertex AI Search lo escluda dai campi utilizzati per la comprensione delle query in linguaggio naturale.

Tuttavia, se noti che Vertex AI Search restituisce risultati di query di scarsa qualità perché non esclude i campi che dovrebbe, devi specificare quali campi possono essere utilizzati. Ad esempio, se lo schema dell'hotel ha un campo per renovation_status che non è utile per i clienti e potrebbe essere imbarazzante per la catena di hotel, puoi escluderlo dall'elenco dei campi consentiti.

Esempio di record dal datastore di dati strutturati dei dati dell'hotel.

{
  "title": "Miller-Jones",
  "rating": 1.7,
  "price_per_night": 115.16,
  "id": 2902,
    
  ],
  "amenities": [
    "Spa",
    "Parking",
    "Restaurant"
    
  ],
  "renovation_status": "Restaurant and spa renovation planned for 2027"
}

Una lista consentita appropriata per i campi in questo esempio sarebbe ["amenities", "price_per_night", "rating", "title"]. Manca renovation_status dall'elenco.

Per specificare una lista consentita di campi che possono essere utilizzati in una comprensione delle query in linguaggio naturale in una ricerca:

REST

  1. Trova l'ID dell'app. Se hai già l'ID dell'app, vai al passaggio successivo.

    1. Nella Google Cloud console, vai alla pagina AI Applications.

      Vai alle app

    2. Nella pagina App, trova il nome dell'app e recupera l'ID dell'app da lla colonna ID.

  2. Esegui il seguente comando curl, che chiama il search metodo:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
            "query": "QUERY",
            "naturalLanguageQueryUnderstandingSpec": {
              "allowedFieldNames": ["FIELD_1", "FIELD_2"],
        }
      }'
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo Google Cloud progetto.
    • APP_ID: l'ID dell'app di ricerca. L'app deve essere connessa a un datastore contenente dati strutturati. L'app non può essere un'app di ricerca combinata.
    • QUERY: la query in linguaggio naturale.
    • FIELD_N: un campo indicizzabile nello schema che può essere utilizzato per la comprensione delle query in linguaggio naturale.