Usar incorporações personalizadas

Se você já criou suas próprias embeddings vetoriais personalizadas para seus dados, é possível fazer upload delas para a Vertex AI Search e usá-las ao fazer consultas com a Vertex AI Search.

Esse recurso está disponível para repositórios de dados com dados estruturados genéricos ou não estruturados com metadados. Esse recurso não está disponível para mídias e na pesquisa em saúde.

Por padrão, a Vertex AI para Pesquisa gera automaticamente embeddings vetoriais sem necessidade de configuração. Se você não sabe criar o Google recomenda que a Vertex AI para Pesquisa crie e use os embeddings para você. No entanto, se você criou suas próprias embeddings para seus dados, é melhor usá-las em vez das geradas pela pesquisa da Vertex AI, principalmente se as embeddings personalizadas contiverem mais contexto que pode enriquecer a recuperação e a classificação da pesquisa. Exemplo:

  • Seus embeddings foram treinados com palavras personalizadas, como termos internos cujos similaridades semânticas não seriam capturadas pelo treinamento com dados públicos, por exemplo, termos específicos da organização que aparecem apenas em documentos particulares.
  • Você criou embeddings para perfis de usuário e quer usá-los para criar uma classificação de documentos personalizada e semanticamente relevante. Você pode usar o embeddings para ter uma classificação baseada em personalização, que pode aumentar Incorporações de documentos do Google para classificação com base na relevância.

Para usar seus próprios embeddings:

  1. Antes de começar: verifique se os embeddings atendem a todos os requisitos
  2. Ingerir dados com embeddings: ingerir seus documentos com os embeddings
  3. Atualizar o esquema: atualize o esquema com os campos de propriedade chave e as especificações de dimensão.
  4. Especificar o embedding: especifique o embedding. globalmente ou por solicitação de pesquisa.

Antes de começar

Antes de começar, verifique se as inclusões atendem aos seguintes requisitos:

  • Os embeddings são compatíveis com dados estruturados e não estruturados com o metadados
  • As incorporações precisam ser fornecidas como matrizes unidimensionais
  • A dimensionalidade de embedding precisa estar entre 1 e 768, inclusive
  • Os embeddings são compatíveis com texto e imagens. Vídeos não são aceitos
  • Até dois campos podem ser marcados como campos de propriedade de chave de incorporação. Você pode usar Dois campos para casos como teste A/B para seus embeddings
  • No momento, as designações de propriedade de chave de campo de incorporação não podem ser removidas depois de serem definidas.

Ingerir dados com incorporações

É possível processar as incorporações de um documento em um ou dois campos incluídos como parte dos dados ou metadados do documento durante a ingestão.

Para transferir dados com embeddings:

  1. Prepare seus dados para ingestão dependendo do seu tipo de dados:

    • Dados estruturados: ao preparar seus dados, inclua cada os embeddings do documento como matrizes unidimensionais em um ou dois campos na documento. É possível fornecer até dois embeddings (por exemplo, se teste A/B entre embeddings). Cada incorporação precisa ser fornecida no próprio campo do documento, por exemplo: "example_embedding_vector": [0.1, 0.2, 0.3 ...]

      Siga as orientações para preparar dados estruturados na Preparação dos dados para ingestão.

    • Dados não estruturados com metadados: ao preparar seus dados, inclua a incorporação de cada documento como uma matriz unidimensional em um campo nos metadados do documento. Você pode fornecer até duas incorporações (por exemplo, quando o teste A/B é feito entre elas). Cada embedding deve ser fornecidos em seu próprio campo nos metadados do documento, por exemplo: "example_embedding_vector": [0.1, 0.2, 0.3 ...]

      Siga as orientações para preparar dados não estruturados com metadados para seu método de ingestão (Cloud Storage ou BigQuery) na documentação Preparar dados para ingestão.

  2. Siga as instruções para seu tipo de dado em Criar um mecanismo e ingerir dados com a Vertex AI para Pesquisa para ingerir seus documentos com embeddings.

Em seguida, atualize o esquema para usar os campos de embedding corretos.

Atualizar o esquema

Atualize o esquema com mapeamentos e dimensões de propriedades importantes para seus campos de incorporação usando o console do Google Cloud ou a API.

Console

Para atualizar seu esquema usando o console do Google Cloud, siga estas etapas:

  1. No Console do Google Cloud, acesse a página Criador de agentes.

    Agent Builder.

  2. No menu de navegação, clique em Repositórios de dados.

  3. Na coluna Nome, clique no armazenamento de dados com o esquema que você quer atualizar.

  4. Clique na guia Esquema para conferir o esquema dos seus dados.

  5. Clique no botão Editar.

  6. Encontre o campo de embedding no esquema e em Propriedades principais. selecione embedding_vector como a propriedade da chave para esse campo.

    Se você tiver um segundo campo de incorporação, repita esta etapa para ele.

  7. Na coluna Dimensão, insira o número de dimensões de embedding.

    Se você tiver um segundo campo de incorporação, repita essa etapa para ele.

  8. Clique em Salvar para aplicar as alterações no esquema.

    Depois de atualizar o esquema, pode levar até 24 horas para reindexar, dependendo do tamanho do repositório de dados.

REST

Para atualizar o esquema usando a API, siga estas etapas:

  1. Seguindo as instruções do REST em Atualizar um esquema, especifique o mapeamento da propriedade chave e o número de dimensões para cada campo de incorporação:

    • "keyPropertyMapping": "embedding_vector"
    • "dimension": NUMBER_OF_DIMENSIONS

    Por exemplo, este é um esquema JSON formatado com 768 dimensões para o campo. example_embedding_vector:

      {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "example_embedding_vector": {
            "type": "array",
            "keyPropertyMapping": 'embedding_vector',
            "dimension": 768,
            "items": {
              "type": "number"
            }
          }
        }
      }
    

    Em uma solicitação de esquema de atualização, o JSON formatado acima seria incluído como uma string JSON:

      "jsonSchema": "{\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"type\":\"object\",\"properties\":{\"example_embedding_vector\":{\"type\":\"array\",\"keyPropertyMapping\":\"embedding_vector\",\"dimension\":768,\"items\":{\"type\":\"number\"}}}}"
    

    Após a atualização do esquema, a reindexação pode levar até 24 horas dependendo do tamanho do seu repositório de dados.

Em seguida, especifique o embedding.

Especificar o embedding

Depois que a indexação da atualização do esquema for concluída, será possível enviar solicitações de pesquisa que incluam uma especificação de embedding.

Há duas maneiras de especificar um embedding:

Especificar um embedding globalmente

É possível especificar o mesmo embedding para todas as solicitações de pesquisa usando o método o console do Google Cloud ou a API.

Console

Para fornecer a mesma especificação de embedding a todas as solicitações de pesquisa, atualize as configurações de veiculação com uma especificação de embedding.

  1. No Console do Google Cloud, acesse a página Criador de agentes.

    Agent Builder.

  2. Clique em Visualizar no armazenamento de dados com o esquema que você quer atualizar.

  3. Acesse a página Configurações e clique na guia Exibição.

  4. Em Caminho do campo de embedding, insira o nome do campo que você tem. mapeada para a propriedade da chave de incorporação.

  5. Em Expressão de classificação, insira uma ou mais funções para controlar a classificação dos resultados. As variáveis são ponderadas de acordo com a expressão que você digita. A expressão de classificação é uma ou várias funções que são unidas por + no formato function, { " + ", function }.

    As funções compatíveis são estas:

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    As seguintes variáveis são aceitas:

    • relevance_score: uma variável predefinida fornecida pelo Vertex AI para Pesquisa para medir a relevância de um documento. A pontuação varia de 0 a 1,0, incluindo os limites.
    • dotProduct(): uma função predefinida fornecida pelo Vertex AI para Pesquisa. Você precisa fornecer o mesmo nome de campo para essa função como você fez para embeddingVector.fieldPath.

    Exemplo:

    • 0.3 * relevance_score
    • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)

REST

Para fornecer a mesma especificação de embedding a todas as solicitações de pesquisa, Atualize a servingConfig com a embeddingConfig.

  1. Corrija a entidade servingConfig com os campos que você que deseja atualizar. Especifique os campos que você está atualizando com updateMask.

    No exemplo abaixo, embeddingConfig usa embeddings no campo example_embedding_field e fornece um peso de 0,5 a relevance_score.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d '{
          "name": "projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search",
          "embeddingConfig": {
            "fieldPath": "example_embedding_field"
          },
          "ranking_expression": "0.5 * relevance_score"
        }' \
    'https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search?updateMask=embeddingConfig,rankingExpression'
    
    • fieldPath: o nome do campo que você mapeou para o embedding key.
    • ranking_expression: controla a classificação dos resultados. As variáveis são ponderados de acordo com a expressão inserida. A expressão de classificação é uma única função ou várias funções unidas por + no formato function, { " + ", function }.

    As funções compatíveis são estas:

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    As seguintes variáveis são aceitas:

    • relevance_score: uma variável predefinida fornecida pelo Vertex AI para Pesquisa.
    • dotProduct(): uma função predefinida fornecida pelo Vertex AI para Pesquisa. O produto escalar está normalizado. É necessário fornecer o mesmo nome de campo para essa função que você fez para embeddingVector.fieldPath.

    Exemplo:

    • 0.3 * relevance_score
    • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
  2. Quando você envia solicitações de pesquisa, o servingConfig.embeddingConfig é incluído automaticamente.

    Se você enviar uma solicitação de pesquisa que inclua explicitamente um embeddingSpec diferente, ele vai substituir servingConfig.embeddingConfig. Consulte a Instruções por solicitação sobre como fornecer especificações de embedding para solicitações de pesquisa única.

Especificar um embedding por solicitação de pesquisa

É possível fornecer uma especificação de incorporação para uma única solicitação de pesquisa usando a API. Uma especificação de embedding por solicitação substitui qualquer embedding global especificação.

  1. Envie uma solicitação de pesquisa que inclua embeddingSpec.

    O exemplo de embeddingSpec a seguir usa embeddings no campo example_embedding_field, especifica "Exemplo de consulta". como vetor de entrada, e dá um peso de 0,5 a relevance_score e 0,3 a example_embedding_field ao calcular a classificação.

      "embeddingSpec": {
        "embeddingVectors": [{
          "fieldPath": "example_embedding_field",
          "vector": [
            0.96241474,
            -0.45999944,
            0.108588696
          ]
        }]
      },
      "ranking_expression": "0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)"
    
    • fieldPath: o nome do campo que você mapeou para o embedding key.
    • vector: o vetor de entrada fornecido como uma matriz.
    • ranking_expression: controla a classificação dos resultados. As variáveis são ponderados de acordo com a expressão inserida. A expressão de classificação é uma única função ou várias funções que são unidas por + no formato function, { " + ", function }.

      As funções compatíveis são estas:

      • DOUBLE * relevance_score
      • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

      As seguintes variáveis são aceitas:

      • relevance_score: uma variável predefinida fornecida pelo a Vertex AI para Pesquisa para medir a relevância documento. A pontuação varia de 0 a 1,0, incluindo os limites.
      • dotProduct(): uma função predefinida fornecida pela Vertex AI Search. Forneça o mesmo nome de campo para essa função que você fez para embeddingVector.fieldPath.

      Exemplo:

      • 0.3 * relevance_score
      • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
  2. Receber resultados na resposta da pesquisa. Cada resultado de pesquisa inclui sua relevância score e valores do produto escalar. Exemplo:

    "modelScores": {
      "dotProduct(example_embedding_field)": [0.02150772698223591],
      "relevance_score": [ 0.8828125 ]
    }
    
    • dotProduct(): o produto interno calculado para o documento de resultado da pesquisa.
    • relevance_score: a pontuação de relevância calculada para o documento de resultado da pesquisa.

A seguir