Filtrare con la comprensione del linguaggio naturale

Questa pagina spiega 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 a 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. In questo modo, i risultati di ricerca possono essere di qualità superiore 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 query e filtro: "query": "banana bread", "filter": "type": ANY(\"cafe\").

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

Filtri rigidi e flessibili

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

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

    Il comportamento è simile a quello del campo filter nel messaggio SearchRequest.

  • Morbido. Un'alternativa al filtro rigido è applicare un boost ai risultati di ricerca. È più probabile che vengano restituiti risultati potenziati, ma possono essere restituiti anche risultati che non soddisfano il criterio di potenziamento.

    Il comportamento è simile a quello del campo boost_spec nel messaggio SearchRequest.

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

Per informazioni dettagliate su come applicare un filtro soft, vedi Ricerca con il filtro soft di seguito.

Esempi

Questa funzionalità è spiegata al meglio attraverso esempi:

Esempio: estrazione di campi dalle query (filtro rigido)

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

Prendi in considerazione la seguente query inviata a un datastore strutturati per un sito di hotel: "Trovami un hotel adatto alle famiglie con almeno quattro stelle che costi meno di 300 a notte, che mi permetta di portare il mio cane e che abbia il Wi-Fi gratuito".

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

Grazie alla comprensione delle query in linguaggio naturale e ai dati strutturati in modo appropriato, la ricerca è più efficace perché parte del linguaggio naturale nella query viene sostituito con 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 rigido)

Questo esempio è simile a quello 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 effettuata su un sito di attività a livello statale: "Trova un hotel chic ed elegante con almeno 4 stelle a San Francisco".

Grazie alla comprensione delle query in linguaggio naturale e al filtro di geolocalizzazione, la ricerca viene riformulata per includere il seguente filtro per un hotel con 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 è spiegata attraverso l'esempio della ricerca di un hotel, ma vengono mostrati alcuni risultati che non soddisfano tutti i criteri.

Prendi in considerazione la seguente query inviata a un sito di viaggi: "Trovami un hotel adatto alle famiglie con almeno quattro stelle che costi meno di 300 € a notte e che mi permetta di portare il mio cane".

Grazie alla comprensione delle query in linguaggio naturale e ai dati strutturati in modo appropriato, la ricerca è più efficace perché sostituisce parte del linguaggio naturale nella query con 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 hotel con una valutazione inferiore o che non accettano animali domestici.

Limitazioni

Si applicano le seguenti limitazioni alla comprensione delle query in linguaggio naturale:

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

  • La comprensione delle query in linguaggio naturale funziona solo per le app di ricerca personalizzate che utilizzano datastore 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 posizione deve essere descritta in modo esplicito. Non puoi utilizzare posizioni 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 è "Trova una camera d'albergo per non fumatori", 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 gli archivi di dati strutturati collegati alle app che prevedi di utilizzare.

Per attivare la comprensione delle query in linguaggio naturale:

REST

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

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

      Vai alla pagina Datastore

    2. Fai clic sul nome del tuo datastore.

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

  2. Esegui questo 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/v1beta/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 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 l'datastore sia pronto, la risposta che ricevi è la stessa di quando filterExtractionCondition è impostato su DISABLED.

Cerca, convertendo le query in linguaggio naturale in filtri

Per eseguire una ricerca su una query in linguaggio naturale e ottenere risultati ottimizzati per le query in linguaggio naturale, segui questi passaggi:

REST

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

    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 Vertex AI Search che vuoi interrogare. L'app deve essere collegata a un datastore che contiene dati strutturati. L'app non può essere un'app di ricerca combinata.
    • QUERY: la query scritta in linguaggio naturale.

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

Per eseguire una ricerca su una query in linguaggio naturale e ottenere risultati ottimizzati per le query in linguaggio naturale, inclusa la vicinanza alle località, procedi nel seguente modo:

REST

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

    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 Vertex AI Search che vuoi interrogare. L'app deve essere collegata a un datastore che contiene 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.

Ricerca con il filtro soft

Per applicare un filtro soft:

REST

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

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

      Vai ad App

    2. Nella pagina App, trova il nome della tua app e recupera il relativo ID dalla colonna ID.

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

    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 che contiene dati strutturati. L'app non può essere un'app di ricerca combinata.
    • QUERY: la tua 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 la sezione Aggiornare uno schema.

Vertex AI Search determina quali 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.

Prendi in considerazione un sito di prenotazione di hotel, in cui sono presenti campi come amenities, id, price_per_night, rating e room_types. Di questi, se 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 ai clienti e potrebbe essere imbarazzante per la catena alberghiera, puoi escluderlo dall'elenco dei campi consentiti.

Esempio di record dell'datastore strutturati dei dati degli 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"
}

Un elenco consentito appropriato per i campi in questo esempio sarebbe ["amenities", "price_per_night", "rating", "title"]. renovation_status non è presente nell'elenco.

Per specificare una lista consentita di campi che possono essere utilizzati in una query in linguaggio naturale in una ricerca, procedi nel seguente modo:

REST

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

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

      Vai ad App

    2. Nella pagina App, trova il nome della tua app e recupera il relativo ID dalla colonna ID.

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

    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 che contiene dati strutturati. L'app non può essere un'app di ricerca combinata.
    • QUERY: la tua query in linguaggio naturale.
    • FIELD_N: Un campo indicizzabile nello schema che può essere utilizzato per la comprensione delle query in linguaggio naturale.