Filtra con comprensión del lenguaje natural

En esta página, se explica cómo aplicar la comprensión del lenguaje natural para crear filtros automáticamente para las búsquedas y, de este modo, mejorar la calidad de los resultados que se muestran.

Puedes usar esta función con las apps de búsqueda que están conectadas a almacenes de datos estructurados.

Acerca de la comprensión de consultas en lenguaje natural

Si tienes una app de búsqueda personalizada con datos estructurados, las consultas en lenguaje natural de tus usuarios se pueden reformatear como consultas filtradas. Esto puede generar resultados de búsqueda de mejor calidad que la búsqueda de palabras en la cadena de búsqueda.

Por ejemplo, una búsqueda en lenguaje natural como "Find a coffee shop serving banana bread" podría reformularse como una búsqueda y un filtro: "query": "banana bread", "filter": "type": ANY(\"cafe\").

Usar la comprensión de consultas en lenguaje natural es más fácil y flexible que escribir tus propias expresiones de filtro. Para obtener información sobre cómo escribir expresiones de filtro, consulta Cómo filtrar la Búsqueda personalizada para datos estructurados o no estructurados.

Filtros suaves y duros

Existen dos tipos de filtros que puedes aplicar para la comprensión de consultas en lenguaje natural: rígidos y flexibles.

  • Difícil. De forma predeterminada, los filtros extraídos se aplican como criterios obligatorios que un resultado debe satisfacer para devolverse.

    El comportamiento es similar al del campo filter en el mensaje SearchRequest.

  • Suave. Una alternativa al filtro estricto es aplicar un aumento a los resultados de la búsqueda. Es más probable que se muestren los resultados potenciados, pero también se pueden mostrar los resultados que no cumplen con el criterio de potenciación.

    El comportamiento es similar al del campo boost_spec en el mensaje SearchRequest.

Puedes experimentar con ambos tipos de filtros. Si las búsquedas no devuelven suficientes resultados, prueba el filtro flexible en lugar del filtro estricto.

Para obtener detalles sobre cómo aplicar un filtro flexible, consulta Cómo realizar búsquedas con el filtro flexible a continuación.

Ejemplos

Esta función se explica mejor con ejemplos:

Ejemplo: Extracción de campos de búsquedas (filtro estricto)

Esta función de comprensión de consultas en lenguaje natural se explica a través del ejemplo de la búsqueda de un hotel.

Toma la siguiente búsqueda realizada en un almacén de datos estructurados para un sitio de hoteles: "Búscame un hotel apto para familias con al menos cuatro estrellas que cueste menos de USD 300 por noche, me permita llevar a mi perro y tenga Wi-Fi gratis".

Sin la comprensión de consultas en lenguaje natural, la app de búsqueda busca documentos que contengan las palabras de la consulta.

Con la comprensión de consultas en lenguaje natural y los datos estructurados de forma adecuada, la búsqueda se vuelve más eficaz, ya que se reemplaza parte del lenguaje natural de la consulta por filtros. Si los datos estructurados tienen campos para star_rating (números), price (números) y amenities (cadenas), la búsqueda se puede formular para incluir los siguientes filtros:

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

Ejemplo: Con un filtro de ubicación geográfica (filtro estricto)

Este ejemplo es similar al anterior, excepto que incluye un filtro de ubicación geográfica, que es un tipo especial de filtro extraído. Vertex AI Search puede reconocer ubicaciones en una búsqueda y crear filtros de proximidad para ellas.

Considera la siguiente búsqueda realizada en un sitio de empresas a nivel estatal: "Encuentra un hotel elegante y con estilo de al menos 4 estrellas en San Francisco".

Con la comprensión de preguntas en lenguaje natural y el filtro de ubicación geográfica, la búsqueda se reformula para incluir el siguiente filtro de un hotel con al menos una calificación de 4 estrellas y dentro de un radio de 10 km de San Francisco:

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

En este ejemplo, GEO_DISTANCE es una dirección, pero en otras búsquedas, podría escribirse como una latitud y una longitud, aunque la búsqueda original contenga una dirección.

Ejemplo: Extracción de campos de búsquedas (filtro flexible)

Esta función de comprensión de consultas en lenguaje natural se explica a través del ejemplo de la búsqueda de un hotel, pero se muestran algunos resultados que no cumplen con todos los criterios.

Toma la siguiente búsqueda realizada en un sitio de viajes: "Encuéntrame un hotel apto para familias con al menos cuatro estrellas que cueste menos de USD 300 por noche y que me permita llevar a mi perro".

Con la comprensión de consultas en lenguaje natural y los datos estructurados de forma adecuada, la búsqueda se vuelve más eficaz, ya que se reemplaza parte del lenguaje natural de la consulta por filtros flexibles. Si los datos estructurados tienen campos para star_rating (números), price (números) y amenities (cadenas), la consulta se puede reescribir como el siguiente refuerzo:

Condición de aumento extraída de la búsqueda en lenguaje natural:

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

En este caso, es posible que se muestren algunos hoteles con calificaciones más bajas o que no admitan mascotas.

Limitaciones

Las siguientes limitaciones se aplican a la comprensión de preguntas en lenguaje natural:

  • La comprensión de consultas en lenguaje natural no se puede aplicar a las apps de búsqueda combinada. Recibirás un error si intentas usar la comprensión de consultas en lenguaje natural con una app de búsqueda combinada.

  • La comprensión de consultas en lenguaje natural solo funciona para las apps de búsqueda personalizadas que usan almacenes de datos estructurados.

  • Usar la comprensión de preguntas en lenguaje natural aumenta la latencia, por lo que es posible que decidas no usarla si la latencia es un problema.

  • En el caso de la geolocalización, la ubicación debe describirse de forma explícita. No puedes usar ubicaciones como "cerca de mí" o "casa".

  • El radio de la ubicación geográfica es de 10 km y no se puede configurar.

  • Los campos booleanos no se pueden usar en los filtros. Por ejemplo, si la búsqueda es "Encuentra una habitación de hotel para no fumadores", un campo booleano como "non_smoking": true no es útil, pero un campo de cadena como "non_smoking": "YES" puede formar parte del filtro.

Antes de comenzar

Antes de comenzar a usar la comprensión de consultas en lenguaje natural, debes habilitarla para los almacenes de datos estructurados conectados a las apps que planeas usar.

Para habilitar la comprensión de consultas en lenguaje natural, sigue estos pasos:

REST

  1. Busca el ID de tu almacén de datos. Si ya tienes el ID de tu almacén de datos, ve al siguiente paso.

    1. En la consola de Google Cloud , ve a la página Aplicaciones basadas en IA y, en el menú de navegación, haz clic en Almacenes de datos.

      Ir a la página Almacenes de datos.

    2. Haz clic en el nombre de tu almacén de datos.

    3. En la página Datos de tu almacén de datos, obtén el ID del almacén de datos.

  2. Ejecuta el siguiente comando de 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"
          }
        }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • DATA_STORE_ID: Es el ID del almacén de datos de Vertex AI Search.
  3. Repite los pasos 1 y 2 para cada almacén de datos.

  4. Espera aproximadamente 24 horas.

    Si intentas usar la comprensión de consultas en lenguaje natural antes de que el almacén de datos esté listo, la respuesta que obtendrás será la misma que si filterExtractionCondition se hubiera establecido en DISABLED.

Búsqueda, que convierte las consultas en lenguaje natural en filtros

Para buscar una consulta en lenguaje natural y obtener resultados optimizados para consultas en lenguaje natural, haz lo siguiente:

REST

  1. Ejecuta el siguiente comando de curl, que llama al método 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"
            }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Vertex AI Search que deseas consultar. La app debe estar conectada a un almacén de datos que contenga datos estructurados. La app no puede ser una app de búsqueda combinada.
    • QUERY: Es la búsqueda escrita en lenguaje natural.

Búsqueda, que convierte las ubicaciones de las búsquedas en filtros de ubicación geográfica

Para buscar una consulta en lenguaje natural y obtener resultados optimizados para consultas en lenguaje natural, incluida la proximidad a ubicaciones, haz lo siguiente:

REST

  1. Ejecuta el siguiente comando de curl, que llama al método 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"]"
            }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app de Vertex AI Search que deseas consultar. La app debe estar conectada a un almacén de datos que contenga datos estructurados. La app no puede ser una app de búsqueda combinada.
    • QUERY: Es la búsqueda escrita en lenguaje natural.
    • GEO_FIELD_NAME_1, GEO_FIELD_NAME_N: Es una lista de valores de tipo geolocation. Si el tipo de valor no es geolocation, se ignora este campo.

Cómo buscar con el filtro suave

Para aplicar un filtro suave, haz lo siguiente:

REST

  1. Busca el ID de tu app. Si ya tienes el ID de tu app, ve al siguiente paso.

    1. En la consola de Google Cloud , ve a la página AI Applications.

      Ve a Apps.

    2. En la página Apps, busca el nombre de tu app y obtén su ID en la columna ID.

  2. Ejecuta el siguiente comando de curl, que llama al método 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"
            }
          }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de tu app de búsqueda. La app debe estar conectada a un almacén de datos que contenga datos estructurados. La app no puede ser una app de búsqueda combinada.
    • QUERY: Es tu búsqueda en lenguaje natural.

Especifica campos para las consultas en lenguaje natural

Para que un campo se use como filtro en la comprensión de consultas en lenguaje natural, debe marcarse como indexable en el esquema. (Para obtener información general sobre cómo ver y editar un esquema, consulta Actualiza un esquema).

Vertex AI Search determina cuáles de los campos indexables del esquema tienen sentido usar en los filtros de comprensión de consultas en lenguaje natural. Sin embargo, si se incluyen campos que no deseas, debes crear una lista de entidades permitidas para especificar qué campos se pueden usar.

Considera un sitio de reservas de hoteles en el que hay campos como amenities, id, price_per_night, rating y room_types. De estos, si id es una cadena de caracteres y números, es probable que Vertex AI Search lo excluya de los campos que se usan para la comprensión de consultas en lenguaje natural.

Sin embargo, si observas que Vertex AI Search devuelve resultados de búsqueda de baja calidad porque no excluye los campos que debería, debes especificar qué campos se pueden usar. Por ejemplo, si el esquema del hotel tiene un campo para renovation_status que no es útil para los clientes y podría ser vergonzoso para la cadena hotelera, puedes excluirlo de la lista de campos permitidos.

Ejemplo de un registro del almacén de datos estructurados de datos de hoteles.

{
  "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 de entidades permitidas adecuada para los campos de este ejemplo sería ["amenities", "price_per_night", "rating", "title"]. En la lista, falta renovation_status.

Para especificar una lista de entidades permitidas de campos que se pueden usar en la comprensión de consultas en lenguaje natural en una búsqueda, haz lo siguiente:

REST

  1. Busca el ID de tu app. Si ya tienes el ID de tu app, ve al siguiente paso.

    1. En la consola de Google Cloud , ve a la página AI Applications.

      Ve a Apps.

    2. En la página Apps, busca el nombre de tu app y obtén su ID en la columna ID.

  2. Ejecuta el siguiente comando de curl, que llama al método 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"],
        }
      }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de tu app de búsqueda. La app debe estar conectada a un almacén de datos que contenga datos estructurados. La app no puede ser una app de búsqueda combinada.
    • QUERY: Es tu búsqueda en lenguaje natural.
    • FIELD_N: Es un campo indexable en el esquema que se puede usar para la comprensión de consultas en lenguaje natural.