Validação de dados do TensorFlow: verificando e analisando seus dados

Quando seus dados estiverem em um pipeline do TFX, você poderá usar os componentes do TFX para analisá-los e transformá-los. Você pode usar essas ferramentas antes mesmo de treinar um modelo.

Há muitas razões para analisar e transformar seus dados:

  • Para encontrar problemas em seus dados. 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 do intervalo esperado.
    • Anomalias de dados.
    • O modelo aprendido de transferência tem 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.
    • Funcionalidades 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

A validação de dados do TensorFlow identifica anomalias no treinamento e no fornecimento 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 a distorção de veiculação de treinamento comparando exemplos em dados de treinamento e veiculaçã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 estatísticas de dados com um esquema. O esquema codifica as propriedades que os dados de entrada devem satisfazer, 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 no contexto do pipeline do TFX: (i) para cada divisão obtida do ExampleGen, (ii) para todos os dados pré-transformados usados ​​pelo Transform e (iii) para todos os dados pós-transform gerados pelo Transformar. Quando invocado no contexto de Transform (ii-iii), 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). Consulte o código do usuário para obter um exemplo.

Recursos avançados de esquema

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

Recursos esparsos

Codificar recursos esparsos em Exemplos geralmente introduz 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 a todos os exemplos. Essa 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 recursos de índice e um valor que se referem aos recursos que existem no esquema. A definição explícita de 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 o recurso esparso deve desbloquear você, mas não é o ideal.

Ambientes de esquema

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

Por exemplo, suponha que um recurso chamado 'LABEL' seja necessário para treinamento, mas espera-se que não seja veiculado. 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 atendimento ao ambiente "SERVING".
Geração de esquema

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

Em vez de construir um esquema manualmente do zero, um desenvolvedor pode contar com a construção automática de esquema do TensorFlow Data Validation. Especificamente, a validação de dados do TensorFlow 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, fazer check-in em um sistema de controle de versão e enviá-lo explicitamente para o pipeline para validação adicional.

O 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á tiver sido gerado automaticamente, ele será usado como está.

  • Caso contrário, a validação de dados do TensorFlow 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 apenas tenta inferir propriedades básicas dos dados. Espera-se que os usuários revisem e modifiquem conforme necessário.

Detecção de desvio de serviço de treinamento

Visão geral

A validação de dados do TensorFlow pode detectar desvios de distribuição entre os dados de treinamento e de veiculação. A distorção 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 do desvio de 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 introdução à validação de dados do TensorFlow para obter informações sobre como configurar a detecção de desvio de exibição de treinamento.

Detecção de desvio

A detecção de desvio é suportada entre intervalos consecutivos de dados (ou seja, entre intervalo N e intervalo N+1), como entre diferentes dias de dados de treinamento. Expressamos a deriva em termos de distância L-infinito para feições categóricas e divergência de Jensen-Shannon aproximada para feições 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 é tipicamente um processo iterativo que requer conhecimento de domínio e experimentação.

Consulte o Guia de introdução à validação de dados do TensorFlow para obter informações sobre como configurar a detecção de desvios.

Usando visualizações para verificar seus dados

A validação de dados do TensorFlow fornece ferramentas para visualizar a distribuição de valores de recursos. Ao examinar essas distribuições em um notebook Jupyter usando 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 exibição de Visão geral de facetas para procurar distribuições suspeitas de valores de recursos.

Dados não balanceados

Um recurso desbalanceado é um recurso para o qual um valor predomina. Recursos desbalanceados podem ocorrer naturalmente, mas se um recurso sempre tiver o mesmo valor, você pode ter um erro de dados. Para detectar recursos desbalanceados em uma visão geral de facetas, escolha "Não uniformidade" no menu suspenso "Classificar por".

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

Visualização de dados desbalanceados

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 os dados desbalanceados, essa distribuição pode ocorrer naturalmente, mas também pode ser produzida por bugs de dados.

Para detectar recursos distribuídos uniformemente em uma Visão geral de facetas, escolha "Não uniformidade" no menu suspenso "Classificar por" e marque a caixa de seleção "Ordem reversa":

Histograma de dados uniformes

Os dados de string 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, distribuições uniformes podem aparecer como gráficos de barras planas, como o acima, ou linhas retas, como o abaixo:

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

Bugs que podem produzir dados distribuídos uniformemente

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

  • 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 únicos.

Dados ausentes

Para verificar se um recurso está com valores totalmente ausentes:

  1. Escolha "Valor ausente/zero" no menu suspenso "Classificar por".
  2. Marque a caixa de seleção "Ordem inversa".
  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 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 a ser exibido" à direita.

  2. Observe o gráfico à direita de cada linha de recurso. O gráfico mostra o intervalo de comprimentos de 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:

Exibição de visão geral de facetas com recurso com listas de valores de recurso de comprimento zero

Grandes diferenças de escala entre recursos

Se seus recursos variam muito em escala, o modelo pode ter dificuldades de aprendizado. 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 de escala. Compare as colunas "max" e "min" entre os recursos para encontrar escalas muito variadas.

Considere normalizar os valores dos recursos para reduzir essas amplas 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 só funcionam com rótulos {0, 1}.

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