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 consultas de búsqueda y, por lo tanto, mejorar la calidad de los resultados que se muestran.

Puedes usar esta función con 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 buscar palabras en la cadena de consulta.

Por ejemplo, una consulta en lenguaje natural como "Find a coffee shop serving banana bread" se puede reformular como una consulta 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 Filtra la búsqueda personalizada para datos estructurados o no estructurados.

Filtros estrictos y flexibles

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

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

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

  • Flexibles. 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 aumentados, pero también se pueden mostrar los resultados que no cumplen con el criterio de aumento.

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

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

Para obtener detalles sobre cómo aplicar un filtro flexible, consulta Busca con el filtro flexible a continuación.

Ejemplos

La mejor manera de explicar esta función es con ejemplos:

Ejemplo: Extracción de campos de consultas (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.

Considera la siguiente consulta realizada a un almacén de datos estructurados para un sitio de hoteles: "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."

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 consulta se puede formular para incluir los siguientes filtros:

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

Ejemplo: Con un filtro de geolocalización (filtro estricto)

Este ejemplo es similar al anterior, excepto que incluye un filtro de geolocalización, que es un tipo especial de filtro extraído. Vertex AI Search tiene la capacidad de reconocer ubicaciones en una consulta y crear filtros de proximidad para las ubicaciones.

Considera la siguiente consulta realizada a un sitio comercial estatal: "Find me a chic and stylish hotel with at least 4 stars that is in San Francisco."

Con la comprensión de consultas en lenguaje natural y el filtro de geolocalización, la búsqueda se reformula para incluir el siguiente filtro para 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 consultas, se puede escribir como latitud y longitud, aunque la consulta original contenga una dirección.

Ejemplo: Extracción de campos de consultas (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 mostrando algunos resultados que no cumplen con todos los criterios.

Considera la siguiente consulta realizada a un sitio de viajes: "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 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 aumento:

Condición de aumento extraída de la consulta 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 una calificación más baja o que no admitan mascotas.

La intensidad del aumento depende de la cantidad de filtros estructurados con los que coincide un documento. Si se extraen tres condiciones y el documento coincide solo con una de ellas, el documento recibe un pequeño aumento. Como alternativa, si el documento coincide con las tres condiciones, se le otorga un aumento fuerte.

Limitaciones

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

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

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

  • El uso de la comprensión de consultas en lenguaje natural aumenta la latencia, por lo que puedes optar por no usarla si la latencia es un problema.

  • Para 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 geolocalización es de 10 km y no se puede configurar.

  • Los campos booleanos no se pueden usar en los filtros. Por ejemplo, si la consulta es "Find me a non-smoking hotel room", 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 del almacén de datos. Si ya tienes el ID del almacén de datos, avanza 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/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"
          }
        }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu Google Cloud proyecto.
    • DATA_STORE_ID: 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 configurara como DISABLED.

Búsqueda, conversión de 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 search método:

    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: el ID de tu Google Cloud proyecto.
    • APP_ID: 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: la consulta escrita en lenguaje natural.

Búsqueda, conversión de ubicaciones en consultas a filtros de geolocalización

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

REST

  1. Ejecuta el siguiente comando de curl, que llama al search método:

    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: el ID de tu Google Cloud proyecto.
    • APP_ID: 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: la consulta escrita en lenguaje natural.
    • GEO_FIELD_NAME_1, GEO_FIELD_NAME_N: una lista de valores de tipo geolocation. Si el tipo de valor no es geolocation, se ignora este campo.

Busca con el filtro flexible

Para aplicar un filtro flexible, haz lo siguiente:

REST

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

    1. En la Google Cloud consola de, 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 de la columna ID.

  2. Ejecuta el siguiente comando de curl, que llama al search método:

    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: el ID de tu Google Cloud proyecto.
    • APP_ID: 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: tu consulta en lenguaje natural.

Especifica campos para 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 el 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 muestra resultados de consultas 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"]. Falta renovation_status en la lista.

Para especificar una lista de entidades permitidas de campos que se pueden usar en una 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, avanza al siguiente paso.

    1. En la Google Cloud consola de, 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 de la columna ID.

  2. Ejecuta el siguiente comando de curl, que llama al search método:

    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: el ID de tu Google Cloud proyecto.
    • APP_ID: 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: tu consulta en lenguaje natural.
    • FIELD_N: un campo indexable en el esquema que se puede usar para la comprensión de consultas en lenguaje natural.