Se você já criou seus próprios embeddings vetoriais personalizados para seus dados, é possível fazer upload deles para a Vertex AI Search e usá-los ao consultar com a Vertex AI Search.
Esse recurso está disponível para repositórios de dados com dados estruturados personalizados ou não estruturados com metadados. Esse recurso não está disponível para pesquisa de mídia e saúde.
Por padrão, a pesquisa da Vertex AI gera automaticamente embeddings de vetor sem necessidade de configuração. Se você não estiver familiarizado com a criação de incorporações, o Google recomenda deixar a Vertex AI para Pesquisa criar e usar incorporações para você. No entanto, se você criou seus próprios embeddings para seus dados, talvez prefira usá-los em vez dos gerados pela Pesquisa do Vertex AI, principalmente se os embeddings personalizados contiverem contexto adicional que possa enriquecer a recuperação e o ranking da pesquisa. Exemplo:
- Seus embeddings foram treinados com palavras personalizadas, como termos internos cuja similaridade semântica não seria capturada com o treinamento em dados públicos. Por exemplo, termos específicos da organização que aparecem apenas em documentos particulares.
- Você criou embeddings para perfis de usuários e quer usá-los para criar uma classificação de documentos personalizada e semanticamente relevante. Você pode usar seus embeddings para receber uma classificação baseada em personalização, que pode aumentar os embeddings de documentos do Google para uma classificação baseada em relevância.
Para trazer seus próprios embeddings:
- Antes de começar: verifique se seus embeddings atendem a todos os requisitos
- Ingerir dados com embeddings: ingira seus documentos com os embeddings deles.
- Atualize seu esquema: atualize o esquema com os campos de propriedade chave e as especificações de dimensão.
- Especifique seu embedding: especifique seu embedding de forma global ou por solicitação de pesquisa.
Antes de começar
Antes de começar, verifique se seus embeddings atendem aos seguintes requisitos:
- Os embeddings são compatíveis com dados estruturados e não estruturados com metadados.
- Os embeddings precisam ser fornecidos como matrizes unidimensionais
- A dimensionalidade do 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
- É possível marcar até dois campos como propriedades principais de incorporação. Você pode usar dois campos para casos como testes A/B para seus embeddings.
- No momento, não é possível remover as designações de propriedade da chave do campo de incorporação depois que elas são definidas.
Ingerir dados com embeddings
É possível ingerir os embeddings de um documento em um ou dois campos incluídos como parte dos dados ou metadados dele durante a ingestão.
Para ingerir dados com embeddings:
Prepare seus dados para ingestão de acordo com o tipo:
Dados estruturados: ao preparar os dados, inclua os embeddings de cada documento como matrizes unidimensionais em um ou dois campos do documento. É possível fornecer até duas incorporações (por exemplo, se você estiver fazendo um teste A/B entre elas). 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 documentação Preparar 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. É possível fornecer até dois embeddings (por exemplo, ao fazer testes A/B entre embeddings). Cada incorporação precisa ser fornecida em um campo próprio 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.
Siga as instruções para seu tipo de dados em Criar um repositório de dados de pesquisa para ingerir seus documentos com incorporações.
Em seguida, atualize seu esquema para usar os campos de incorporação corretos.
Atualizar o esquema
Atualize seu esquema com mapeamentos de propriedades principais e dimensões para seus campos de incorporação usando o console Google Cloud ou a API.
Console
Para atualizar seu esquema usando o Google Cloud console, siga estas etapas:
No console Google Cloud , acesse a página Aplicativos de IA.
No menu de navegação, clique em Repositórios de dados.
Na coluna Nome, clique no repositório de dados com o esquema que você quer atualizar.
Clique na guia Esquema para conferir o esquema dos seus dados.
Clique no botão Editar.
Encontre o campo de incorporação no esquema e, na coluna Propriedades principais, selecione embedding_vector como a propriedade principal desse campo.
Se você tiver um segundo campo de incorporação, repita esta etapa para ele.
Na coluna Dimensão, insira o número de dimensões para esse campo de embedding.
Se você tiver um segundo campo de incorporação, repita esta etapa para ele.
Clique em Salvar para aplicar as mudanças no esquema.
Depois de atualizar o esquema, pode levar até 24 horas para reindexar, dependendo do tamanho do seu repositório de dados.
REST
Para atualizar seu esquema usando a API, siga estas etapas:
Seguindo as instruções REST em Atualizar um esquema, especifique o mapeamento da propriedade da chave e o número de dimensões para cada campo de incorporação:
"keyPropertyMapping": "embedding_vector"
"dimension": NUMBER_OF_DIMENSIONS
Por exemplo, aqui está 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\"}}}}"
Depois de atualizar o esquema, pode levar até 24 horas para reindexar, dependendo do tamanho do seu repositório de dados.
Em seguida, especifique o encadeamento.
Especificar seu embedding
Depois que a indexação da atualização do esquema for concluída, você poderá enviar solicitações de pesquisa que incluam uma especificação de embedding.
Há duas maneiras de especificar uma incorporação:
- Especificar um encadeamento globalmente: para especificar o mesmo encadeamento em todas as solicitações de pesquisa, atualize as configurações de veiculação para incluir uma especificação de encadeamento usando o console Google Cloud ou a API.
- Especificar um encadeamento por solicitação de pesquisa: envie
embeddingSpec
em cada solicitação de pesquisa usando a API. Isso substitui a configuração global, se ela estiver definida.
Especificar um embedding globalmente
É possível especificar o mesmo encadeamento em todas as solicitações de pesquisa usando o consoleGoogle Cloud ou a API.
Console
Para fornecer a mesma especificação de incorporação a todas as solicitações de pesquisa, atualize as configurações de veiculação com uma especificação de incorporação.
No console Google Cloud , acesse a página Aplicativos de IA.
Clique em Visualizar no repositório de dados com o esquema que você quer atualizar.
Acesse a página Configurações e clique na guia Exibição.
Em Caminho do campo de embedding, insira o nome do campo que você mapeou para a propriedade de chave de embedding.
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 inserida. A expressão de classificação é uma única função ou várias funções unidas por
+
no formatofunction, { " + ", 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 pela 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 pela Vertex AI Search. Você precisa fornecer o mesmo nome de campo para essa função que fez paraembeddingVector.fieldPath
.
Exemplo:
0.3 * relevance_score
0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
REST
Para fornecer a mesma especificação de incorporação a todas as solicitações de pesquisa, atualize servingConfig
com embeddingConfig
.
Adicione a entidade
servingConfig
com os campos que você quer atualizar. Especifique os campos que você está atualizando comupdateMask
.No exemplo a seguir,
embeddingConfig
usa embeddings no campoexample_embedding_field
e atribui um peso de 0,5 arelevance_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 a propriedade de chave de embedding.ranking_expression
: controla a classificação dos resultados. As variáveis são ponderadas 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 formatofunction, { " + ", 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 pela Vertex AI Search.dotProduct()
: uma função predefinida fornecida pela Vertex AI Search. O produto escalar é normalizado. Você precisa fornecer o mesmo nome de campo a essa função que fez paraembeddingVector.fieldPath
.
Exemplo:
0.3 * relevance_score
0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
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 substituirservingConfig.embeddingConfig
. Consulte as instruções Por solicitação para saber como fornecer especificações de incorporação para solicitações de pesquisa únicas.
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 incorporação por solicitação substitui qualquer especificação global.
Envie uma solicitação de pesquisa que inclua
embeddingSpec
.O exemplo a seguir de
embeddingSpec
usa embeddings no campoexample_embedding_field
, especifica "Exemplo de consulta" como o vetor de entrada e atribui um peso de 0,5 arelevance_score
e 0,3 aexample_embedding_field
ao calcular o ranking."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 a propriedade de chave de embedding.vector
: o vetor de entrada fornecido como uma matriz.ranking_expression
: controla a classificação dos resultados. As variáveis são ponderadas 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 formatofunction, { " + ", 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 pela 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 pela Vertex AI Search. Forneça o mesmo nome de campo para essa função que você fez paraembeddingVector.fieldPath
.
Exemplo:
0.3 * relevance_score
0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
Receba resultados na resposta da pesquisa. Cada resultado da pesquisa inclui a pontuação de relevância e os valores de produto escalar. Exemplo:
"modelScores": { "dotProduct(example_embedding_field)": [0.02150772698223591], "relevance_score": [ 0.8828125 ] }
dotProduct()
: o produto escalar 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
- Prepare os dados para ingestão.
- Atualizar um esquema.
- Visualizar os resultados da pesquisa.
- Para entender o impacto dos encodings personalizados na qualidade da pesquisa de um app de pesquisa personalizada, avalie a qualidade da pesquisa. Para mais informações, consulte Avaliar a qualidade da pesquisa.