Para usar explicações baseadas em exemplos, tem de configurar as explicações especificando
um
explanationSpec
quando importa ou carrega o recurso Model
para o Model Registry.
Em seguida, quando pedir explicações online, pode substituir alguns desses valores de configuração especificando um ExplanationSpecOverride
no pedido. Não pode pedir explicações em lote. Estas não são suportadas.
Esta página descreve como configurar e atualizar estas opções.
Configure as explicações quando importar ou carregar o modelo
Antes de começar, certifique-se de que tem o seguinte:
Uma localização do Cloud Storage que contém os artefactos do seu modelo. O seu modelo tem de ser um modelo de rede neural profunda (DNN) em que fornece o nome de uma camada ou uma assinatura cuja saída pode ser usada como o espaço latente, ou pode fornecer um modelo que produz diretamente incorporações (representação do espaço latente). Este espaço latente capta as representações de exemplos que são usadas para gerar explicações.
Uma localização do Cloud Storage que contém as instâncias a serem indexadas para a pesquisa de vizinhos mais próximos aproximada. Para mais informações, consulte os requisitos de dados de entrada.
Consola
Siga o guia para importar um modelo através da Google Cloud consola.
No separador Explicabilidade, selecione Explicação baseada em exemplos e preencha os campos.
Para ver informações sobre cada campo, consulte as sugestões na Google Cloud consola
(mostradas abaixo), bem como a documentação de referência para Example
e ExplanationMetadata
.
CLI gcloud
- Escreva o seguinte
ExplanationMetadata
num ficheiro JSON no seu ambiente local. O nome do ficheiro não é importante, mas, para este exemplo, atribua o nomeexplanation-metadata.json
ao ficheiro:
{
"inputs": {
"my_input": {
"inputTensorName": "INPUT_TENSOR_NAME",
"encoding": "IDENTITY",
},
"id": {
"inputTensorName": "id",
"encoding": "IDENTITY"
}
},
"outputs": {
"embedding": {
"outputTensorName": "OUTPUT_TENSOR_NAME"
}
}
}
- (Opcional) Se estiver a especificar o
NearestNeighborSearchConfig
completo, escreva o seguinte num ficheiro JSON no seu ambiente local. O nome do ficheiro não importa, mas, para este exemplo, atribua o nomesearch_config.json
ao ficheiro:
{
"contentsDeltaUri": "",
"config": {
"dimensions": 50,
"approximateNeighborsCount": 10,
"distanceMeasureType": "SQUARED_L2_DISTANCE",
"featureNormType": "NONE",
"algorithmConfig": {
"treeAhConfig": {
"leafNodeEmbeddingCount": 1000,
"fractionLeafNodesToSearch": 1.0
}
}
}
}
- Execute o seguinte comando para carregar o seu
Model
.
Se estiver a usar uma Preset
configuração de pesquisa--explanation-nearest-neighbor-search-config-file
, remova a flag
--explanation-nearest-neighbor-search-config-file
. Se estiver a especificar NearestNeighborSearchConfig
,
remova os indicadores --explanation-modality
e --explanation-query
.
As denúncias mais pertinentes para as explicações baseadas em exemplos estão em negrito.
gcloud ai models upload \
--region=LOCATION \
--display-name=MODEL_NAME \
--container-image-uri=IMAGE_URI \
--artifact-uri=MODEL_ARTIFACT_URI \
--explanation-method=examples \
--uris=[URI, ...] \
--explanation-neighbor-count=NEIGHBOR_COUNT \
--explanation-metadata-file=explanation-metadata.json \
--explanation-modality=IMAGE|TEXT|TABULAR \
--explanation-query=PRECISE|FAST \
--explanation-nearest-neighbor-search-config-file=search_config.json
Consulte gcloud ai models upload para mais informações.
-
A ação de carregamento devolve um
OPERATION_ID
que pode ser usado para verificar quando a operação estiver concluída. Pode sondar o estado da operação até que a resposta inclua"done": true
. Use o comando gcloud ai operations describe para verificar o estado, por exemplo:gcloud ai operations describe <operation-id>
Não pode pedir explicações até que a operação esteja concluída. Consoante o tamanho do conjunto de dados e a arquitetura do modelo, este passo pode demorar várias horas a criar o índice usado para consultar exemplos.
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PROJECT
- LOCATION
Para saber mais sobre os outros marcadores de posição, consulte Model
, explanationSpec
e Examples
.
Para saber mais sobre o carregamento de modelos, consulte o método upload
e o artigo Importar modelos.
O corpo do pedido JSON abaixo especifica uma configuração de pesquisa Preset
. Em alternativa, pode especificar o nome completoNearestNeighborSearchConfig
.
Método HTTP e URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/models:upload
Corpo JSON do pedido:
{ "model": { "displayName": "my-model", "artifactUri": "gs://your-model-artifact-folder", "containerSpec": { "imageUri": "us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-11:latest", }, "explanationSpec": { "parameters": { "examples": { "gcsSource": { "uris": ["gs://your-examples-folder"] }, "neighborCount": 10, "presets": { "modality": "image" } } }, "metadata": { "outputs": { "embedding": { "output_tensor_name": "embedding" } }, "inputs": { "my_fancy_input": { "input_tensor_name": "input_tensor_name", "encoding": "identity", "modality": "image" }, "id": { "input_tensor_name": "id", "encoding": "identity" } } } } } }
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/models/MODEL_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1.UploadModelOperationMetadata", "genericMetadata": { "createTime": "2022-01-08T01:21:10.147035Z", "updateTime": "2022-01-08T01:21:10.147035Z" } } }
A ação de carregamento devolve um OPERATION_ID
que pode ser usado para verificar quando a operação estiver concluída. Pode sondar o estado da operação até que a resposta inclua "done": true
. Use o comando gcloud ai operations describe para verificar o estado, por exemplo:
gcloud ai operations describe <operation-id>
Não pode pedir explicações até que a operação esteja concluída. Consoante o tamanho do conjunto de dados e a arquitetura do modelo, este passo pode demorar várias horas a criar o índice usado para consultar exemplos.
Python
Consulte a secção Carregue o modelo no bloco de notas de explicações baseadas em exemplos de classificação de imagens.
NearestNeighborSearchConfig
O corpo do pedido JSON seguinte demonstra como especificar o elemento completo
NearestNeighborSearchConfig
(em vez de predefinições) num pedido
upload
.
{
"model": {
"displayName": displayname,
"artifactUri": model_path_to_deploy,
"containerSpec": {
"imageUri": DEPLOY_IMAGE,
},
"explanationSpec": {
"parameters": {
"examples": {
"gcsSource": {
"uris": [DATASET_PATH]
},
"neighborCount": 5,
"nearest_neighbor_search_config": {
"contentsDeltaUri": "",
"config": {
"dimensions": dimensions,
"approximateNeighborsCount": 10,
"distanceMeasureType": "SQUARED_L2_DISTANCE",
"featureNormType": "NONE",
"algorithmConfig": {
"treeAhConfig": {
"leafNodeEmbeddingCount": 1000,
"fractionLeafNodesToSearch": 1.0
}
}
}
}
}
},
"metadata": { ... }
}
}
}
Estas tabelas listam os campos para NearestNeighborSearchConfig
.
Campos | |
---|---|
dimensions |
Obrigatório. O número de dimensões dos vetores de entrada. Usado apenas para incorporações densas. |
approximateNeighborsCount |
Obrigatório se for usado o algoritmo tree-AH. O número predefinido de vizinhos a encontrar através da pesquisa aproximada antes de ser realizada a reordenação exata. A reordenação exata é um procedimento em que os resultados devolvidos por um algoritmo de pesquisa aproximado são reordenados através de um cálculo de distância mais dispendioso. |
ShardSize |
ShardSize
O tamanho de cada fragmento. Quando um índice é grande, é dividido em partições com base no tamanho da partição especificado. Durante a publicação, cada fragmento é publicado num nó separado e é dimensionado de forma independente. |
distanceMeasureType |
A medida de distância usada na pesquisa de vizinho mais próximo. |
featureNormType |
Tipo de normalização a realizar em cada vetor. |
algorithmConfig |
oneOf:
A configuração dos algoritmos que a pesquisa vetorial usa para uma pesquisa eficiente. Usado apenas para incorporações densas.
|
DistanceMeasureType
Enumerações | |
---|---|
SQUARED_L2_DISTANCE |
Distância euclidiana (L2) |
L1_DISTANCE |
Distância de Manhattan (L1) |
DOT_PRODUCT_DISTANCE |
Valor predefinido. Definida como o negativo do produto escalar. |
COSINE_DISTANCE |
Distância do cosseno. Recomendamos vivamente que use DOT_PRODUCT_DISTANCE + UNIT_L2_NORM em vez da distância COSINE. Os nossos algoritmos foram mais otimizados para a distância DOT_PRODUCT e, quando combinados com UNIT_L2_NORM, oferecem a mesma classificação e equivalência matemática que a distância COSINE. |
FeatureNormType
Enumerações | |
---|---|
UNIT_L2_NORM |
Tipo de normalização da unidade L2. |
NONE |
Valor predefinido. Não foi especificado nenhum tipo de normalização. |
TreeAhConfig
Estes são os campos a selecionar para o algoritmo tree-AH (Shallow tree + Asymmetric Hashing).
Campos | |
---|---|
fractionLeafNodesToSearch |
double |
A fração predefinida de nós folha que qualquer consulta pode pesquisar. Tem de estar no intervalo 0,0 a 1,0, exclusivo. O valor predefinido é 0,05 se não estiver definido. | |
leafNodeEmbeddingCount |
int32 |
Número de incorporações em cada nó folha. O valor predefinido é 1000 se não estiver definido. | |
leafNodesToSearchPercent |
int32 |
Descontinuado, use fractionLeafNodesToSearch .A percentagem predefinida de nós folha que qualquer consulta pode pesquisar. Tem de estar no intervalo de 1 a 100, inclusive. O valor predefinido é 10 (o que significa 10%) se não estiver definido. |
BruteForceConfig
Esta opção implementa a pesquisa linear padrão na base de dados para cada consulta. Não existem campos para configurar para uma pesquisa de força bruta. Para selecionar este algoritmo, transmita um objeto vazio para BruteForceConfig
para algorithmConfig
.
Requisitos de dados de entrada
Carregue o conjunto de dados para uma localização do Cloud Storage. Certifique-se de que os ficheiros estão no formato JSON Lines.
Os ficheiros têm de estar no formato JSON Lines. O exemplo seguinte é do bloco de notas de explicações baseadas em exemplos de classificação de imagens:
{"id": "0", "bytes_inputs": {"b64": "..."}}
{"id": "1", "bytes_inputs": {"b64": "..."}}
{"id": "2", "bytes_inputs": {"b64": "..."}}
Atualize o índice ou a configuração
O Vertex AI permite-lhe atualizar o índice do vizinho mais próximo de um modelo ou a configuração de Example
. Isto é útil se quiser atualizar o modelo sem reindexar o respetivo conjunto de dados. Por exemplo, se o índice do seu modelo contiver 1000 instâncias e quiser adicionar mais 500 instâncias, pode chamar UpdateExplanationDataset
para adicionar ao índice sem voltar a processar as 1000 instâncias originais.
Para atualizar o conjunto de dados de explicações:
Python
def update_explanation_dataset(model_id, new_examples):
response = clients["model"].update_explanation_dataset(model=model_id, examples=new_examples)
update_dataset_response = response.result()
return update_dataset_response
PRESET_CONFIG = {
"modality": "TEXT",
"query": "FAST"
}
NEW_DATASET_FILE_PATH = "new_dataset_path"
NUM_NEIGHBORS_TO_RETURN = 10
EXAMPLES = aiplatform.Examples(presets=PRESET_CONFIG,
gcs_source=aiplatform.types.io.GcsSource(uris=[NEW_DATASET_FILE_PATH]),
neighbor_count=NUM_NEIGHBORS_TO_RETURN)
MODEL_ID = 'model_id'
update_dataset_response = update_explanation_dataset(MODEL_ID, EXAMPLES)
Notas de utilização:
O
model_id
permanece inalterado após a operaçãoUpdateExplanationDataset
.A operação
UpdateExplanationDataset
afeta apenas o recursoModel
; não atualiza nenhumDeployedModel
associado. Isto significa que o índice de umdeployedModel
contém o conjunto de dados no momento em que foi implementado. Para atualizar o índice de umdeployedModel
, tem de voltar a implementar o modelo atualizado num ponto final.
Substitua a configuração quando receber explicações online
Quando pede uma explicação, pode substituir alguns dos parâmetros em tempo real especificando o campo ExplanationSpecOverride
.
Consoante a aplicação, algumas restrições podem ser desejáveis no tipo de explicações devolvidas. Por exemplo, para garantir a diversidade das explicações, um utilizador pode especificar um parâmetro de agrupamento que determina que nenhum tipo de exemplos está excessivamente representado nas explicações. Concretamente, se um utilizador estiver a tentar compreender por que motivo um pássaro foi etiquetado como um avião pelo respetivo modelo, pode não ter interesse em ver demasiados exemplos de pássaros como explicações para investigar melhor a causa principal.
A tabela seguinte resume os parâmetros que podem ser substituídos para um pedido de explicação baseado em exemplos:
Nome da propriedade | Valor da propriedade | Descrição |
---|---|---|
neighborCount | int32 |
O número de exemplos a devolver como explicação |
crowdingCount | int32 |
Número máximo de exemplos a devolver com a mesma etiqueta de sobreposição |
permitir | String Array |
As etiquetas permitidas para as explicações |
recusar | String Array |
As etiquetas que não são permitidas para as explicações |
A Filtragem de pesquisa vetorial descreve estes parâmetros mais detalhadamente.
Segue-se um exemplo de um corpo de pedido JSON com substituições:
{
"instances":[
{
"id": data[0]["id"],
"bytes_inputs": {"b64": bytes},
"restricts": "",
"crowding_tag": ""
}
],
"explanation_spec_override": {
"examples_override": {
"neighbor_count": 5,
"crowding_count": 2,
"restrictions": [
{
"namespace_name": "label",
"allow": ["Papilloma", "Rift_Valley", "TBE", "Influenza", "Ebol"]
}
]
}
}
}
O que se segue?
Segue-se um exemplo da resposta de um pedido explain
baseado em exemplos:
[
{
"neighbors":[
{
"neighborId":"311",
"neighborDistance":383.8
},
{
"neighborId":"286",
"neighborDistance":431.4
}
],
"input":"0"
},
{
"neighbors":[
{
"neighborId":"223",
"neighborDistance":471.6
},
{
"neighborId":"55",
"neighborDistance":392.7
}
],
"input":"1"
}
]
Preços
Consulte a secção sobre explicações baseadas em exemplos na página de preços.