O Dia da Comunidade de ML é dia 9 de novembro! Junte-nos para atualização de TensorFlow, JAX, e mais Saiba mais

Validação de dados do TensorFlow: verificação e análise de seus dados

Uma vez que seus dados estão em um pipeline TFX, você pode usar componentes TFX para analisá-los e transformá-los. Você pode usar essas ferramentas antes mesmo de treinar um modelo.

Existem muitos motivos para analisar e transformar seus dados:

  • Para encontrar problemas em seus dados. Os problemas comuns incluem:
    • Dados ausentes, como recursos com valores vazios.
    • Rótulos tratados como recursos, para que seu modelo veja a resposta certa durante o treinamento.
    • Recursos com valores fora da faixa esperada.
    • Anomalias de dados.
    • O modelo aprendido de transferência possui um pré-processamento que não corresponde aos dados de treinamento.
  • Para projetar conjuntos de recursos mais eficazes. Por exemplo, você pode identificar:
    • Recursos especialmente informativos.
    • Recursos redundantes.
    • Recursos que variam tanto em escala que podem retardar o aprendizado.
    • Recursos com pouca ou nenhuma informação preditiva exclusiva.

As ferramentas TFX podem ajudar a encontrar bugs de dados e ajudar na engenharia de recursos.

Validação de dados do TensorFlow

Visão geral

O TensorFlow Data Validation identifica anomalias no treinamento e serviço de dados e pode criar automaticamente um esquema examinando os dados O componente pode ser configurado para detectar diferentes classes de anomalias nos dados. Pode

  1. Execute verificações de validade comparando estatísticas de dados com um esquema que codifica as expectativas do usuário.
  2. Detecte o desvio de treinamento-exibição comparando exemplos em treinamento e dados de exibição.
  3. Detecte o desvio de dados observando uma série de dados.

Documentamos cada uma dessas funcionalidades de forma independente:

Validação de exemplo baseada em esquema

A validação de dados do TensorFlow identifica quaisquer anomalias nos dados de entrada, comparando as estatísticas de dados com um esquema. O esquema codifica propriedades que se espera que os dados de entrada satisfaçam, como tipos de dados ou valores categóricos, e podem ser modificados ou substituídos pelo usuário.

A validação de dados do Tensorflow é normalmente invocada várias vezes dentro do contexto do pipeline TFX: (i) para cada divisão obtida de ExampleGen, (ii) para todos os dados pré-transformados usados ​​por Transform e (iii) para todos os dados pós-transformação gerados por Transformar. Quando chamado no contexto de Transform (ii-iii), as opções de estatísticas e restrições baseadas em esquema podem ser definidas definindo o stats_options_updater_fn . Isso é particularmente útil ao validar dados não estruturados (por exemplo, recursos de texto). Veja o código do usuário para um exemplo.

Recursos avançados de esquema

Esta seção cobre a configuração de esquema mais avançada que pode ajudar com configurações especiais.

Recursos esparsos

A codificação de recursos esparsos em exemplos geralmente apresenta vários recursos que devem ter a mesma valência para todos os exemplos. Por exemplo, o recurso esparso:


WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
seria codificado usando recursos separados para índice e valor:

WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
com a restrição de que a valência do recurso de índice e valor deve corresponder para todos os exemplos. Esta restrição pode ser explicitada no esquema definindo um sparse_feature:

sparse_feature {
  name: 'WeightedCategories'
  index_feature { name: 'WeightedCategoriesIndex' }
  value_feature { name: 'WeightedCategoriesValue' }
}

A definição de recurso esparso requer um ou mais índice e um recurso de valor que se refere a recursos que existem no esquema. Definir explicitamente os recursos esparsos permite que o TFDV verifique se as valências de todos os recursos referidos correspondem.

Alguns casos de uso introduzem restrições de valência semelhantes entre recursos, mas não necessariamente codificam um recurso esparso. Usar recurso esparso deve desbloquear você, mas não é o ideal.

Ambientes de esquema

Por padrão, as validações assumem que todos os exemplos em um pipeline aderem a um único esquema. Em alguns casos, a introdução de pequenas variações de esquema é necessária, por exemplo, recursos usados ​​como rótulos são necessários durante o treinamento (e devem ser validados), mas estão ausentes durante o serviço. Ambientes podem ser usados ​​para expressar tais requisitos, em particular default_environment() , in_environment() , not_in_environment() .

Por exemplo, suponha que um recurso denominado 'LABEL' seja necessário para o treinamento, mas deve estar ausente na veiculação. Isso pode ser expresso por:

  • Defina dois ambientes distintos no esquema: ["SERVING", "TRAINING"] e associe 'LABEL' apenas ao ambiente "TRAINING".
  • Associe os dados de treinamento ao ambiente "TRAINING" e os dados de serviço ao ambiente "SERVING".
Geração de Esquema

O esquema de dados de entrada é especificado como uma instância do Esquema TensorFlow.

Em vez de construir um esquema manualmente do zero, um desenvolvedor pode contar com a construção automática do esquema do TensorFlow Data Validation. Especificamente, o TensorFlow Data Validation constrói automaticamente um esquema inicial com base nas estatísticas calculadas sobre os dados de treinamento disponíveis no pipeline. Os usuários podem simplesmente revisar esse esquema gerado automaticamente, modificá-lo conforme necessário, registrá-lo em um sistema de controle de versão e colocá-lo explicitamente no pipeline para validação adicional.

TFDV inclui infer_schema() para gerar um esquema automaticamente. Por exemplo:

schema = tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)

Isso aciona uma geração automática de esquema com base nas seguintes regras:

  • Se um esquema já foi gerado automaticamente, ele é usado como está.

  • Caso contrário, o TensorFlow Data Validation examina as estatísticas de dados disponíveis e calcula um esquema adequado para os dados.

Observação: o esquema gerado automaticamente é o melhor esforço e tenta apenas inferir as propriedades básicas dos dados. Espera-se que os usuários o revisem e modifiquem conforme necessário.

Detecção de distorção de treinamento-serviço

Visão geral

A validação de dados do TensorFlow pode detectar distorção na distribuição entre os dados de treinamento e serviço. O enviesamento de distribuição ocorre quando a distribuição de valores de recursos para dados de treinamento é significativamente diferente dos dados de veiculação. Uma das principais causas para a distorção da distribuição é usar um corpus completamente diferente para a geração de dados de treinamento para superar a falta de dados iniciais no corpus desejado. Outro motivo é um mecanismo de amostragem defeituoso que escolhe apenas uma subamostra dos dados de serviço para treinar.

Cenário de Exemplo

Consulte o Guia de primeiros passos para validação de dados do TensorFlow para informações sobre como configurar a detecção de distorção da exibição de treinamento.

Detecção de deriva

A detecção de desvio é suportada entre extensões consecutivas de dados (ou seja, entre extensão N e extensão N + 1), como entre diferentes dias de dados de treinamento. Expressamos a deriva em termos de distância L-infinito para características categóricas e divergência de Jensen-Shannon aproximada para características numéricas. Você pode definir a distância limite para receber avisos quando o desvio for maior do que o aceitável. Definir a distância correta é normalmente um processo iterativo que requer conhecimento de domínio e experimentação.

Consulte o Guia de primeiros passos para validação de dados do TensorFlow para informações sobre como configurar a detecção de deriva.

Usando visualizações para verificar seus dados

O TensorFlow Data Validation fornece ferramentas para visualizar a distribuição de valores de recursos. Ao examinar essas distribuições em um bloco de notas Jupyter usando o Facets, você pode detectar problemas comuns com dados.

Estatísticas de recursos

Identificando Distribuições Suspeitas

Você pode identificar bugs comuns em seus dados usando uma tela Visão geral das facetas para procurar distribuições suspeitas de valores de características.

Dados desequilibrados

Um recurso não balanceado é aquele para o qual predomina um valor. Recursos desequilibrados podem ocorrer naturalmente, mas se um recurso sempre tiver o mesmo valor, você pode ter um bug de dados. Para detectar recursos desequilibrados em uma Visão geral das facetas, escolha "Não uniformidade" na lista suspensa "Classificar por".

Os recursos mais desequilibrados serão listados no topo de cada lista de tipo de recurso. Por exemplo, a captura de tela a seguir mostra um recurso composto apenas de zeros e um segundo altamente desequilibrado no topo da lista "Recursos numéricos":

Visualização de dados não balanceados

Dados Distribuídos Uniformemente

Um recurso uniformemente distribuído é aquele para o qual todos os valores possíveis aparecem com quase a mesma frequência. Assim como ocorre com dados não balanceados, essa distribuição pode ocorrer naturalmente, mas também pode ser produzida por bugs de dados.

Para detectar recursos uniformemente distribuídos em uma Visão geral das facetas, escolha "Não uniformidade" na lista suspensa "Classificar por" e marque a caixa de seleção "Ordem inversa":

Histograma de dados uniformes

Os dados de sequência são representados usando gráficos de barras se houver 20 ou menos valores exclusivos e como um gráfico de distribuição cumulativa se houver mais de 20 valores exclusivos. Portanto, para dados de string, as distribuições uniformes podem aparecer como gráficos de barras planas como o mostrado acima ou linhas retas como o mostrado abaixo:

Gráfico de linha: distribuição cumulativa de dados uniformes

Bugs que podem produzir dados uniformemente distribuídos

Aqui estão alguns bugs comuns que podem produzir dados uniformemente distribuídos:

  • Usando strings para representar tipos de dados não string, como datas. Por exemplo, você terá muitos valores exclusivos para um recurso de data e hora com representações como "2017-03-01-11-45-03". Os valores únicos serão distribuídos uniformemente.

  • Incluindo índices como "número da linha" como recursos. Aqui, novamente, você tem muitos valores exclusivos.

Dados ausentes

Para verificar se um recurso está totalmente ausente de valores:

  1. Escolha "Quantidade ausente / zero" no menu suspenso "Classificar por".
  2. Marque a caixa de seleção "Ordem reversa".
  3. Observe a coluna "ausente" para ver a porcentagem de instâncias com valores ausentes para um recurso.

Um bug de dados também pode causar valores de recursos incompletos. Por exemplo, você pode esperar que a lista de valores de um recurso sempre tenha três elementos e descobrir que às vezes só tem um. Para verificar se há valores incompletos ou outros casos em que as listas de valores de recursos não têm o número esperado de elementos:

  1. Escolha "Comprimento da lista de valores" no menu suspenso "Gráfico para mostrar" à direita.

  2. Observe o gráfico à direita de cada linha de recurso. O gráfico mostra o intervalo de comprimentos da lista de valores para o recurso. Por exemplo, a linha destacada na captura de tela abaixo mostra um recurso que tem algumas listas de valores de comprimento zero:

Visor de visão geral das facetas com recursos com listas de valores de recursos de comprimento zero

Grandes diferenças na escala entre os recursos

Se seus recursos variam muito em escala, o modelo pode ter dificuldades de aprendizagem. Por exemplo, se alguns recursos variam de 0 a 1 e outros variam de 0 a 1.000.000.000, você tem uma grande diferença na escala. Compare as colunas "máx." E "mín." Entre os recursos para encontrar escalas amplamente variadas.

Considere normalizar os valores dos recursos para reduzir essas grandes variações.

Rótulos com rótulos inválidos

Os estimadores do TensorFlow têm restrições quanto ao tipo de dados que aceitam como rótulos. Por exemplo, classificadores binários normalmente funcionam apenas com rótulos {0, 1}.

Revise os valores do rótulo na Visão geral das facetas e certifique-se de que estejam em conformidade com os requisitos dos estimadores .