Esta página foi traduzida pela API Cloud Translation.
Switch to English

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

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

Há muitos motivos para analisar e transformar seus dados:

  • Para encontrar problemas nos seus dados. Problemas comuns incluem:
    • Dados ausentes, como recursos com valores vazios.
    • Etiquetas tratadas como recursos, para que seu modelo possa espreitar a resposta certa durante o treinamento.
    • Recursos com valores fora do intervalo esperado.
    • Anomalias de dados.
  • Projetar conjuntos de recursos mais eficazes. Por exemplo, você pode identificar:
    • Recursos especialmente informativos.
    • Recursos redundantes.
    • Recursos que variam tão amplamente em escala que podem retardar o aprendizado.
    • Recursos com pouca ou nenhuma informação preditiva exclusiva.

As ferramentas TFX podem ajudar a encontrar erros 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 na veiculaçã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 a inclinação da veiculação de treinamento comparando exemplos em dados de treinamento e veiculação.
  3. Detecte desvio de dados observando uma série de dados.

Documentamos cada uma dessas funcionalidades independentemente:

Validação de exemplo baseado em esquema

A validação de dados do TensorFlow identifica qualquer anomalia nos dados de entrada comparando as estatísticas de dados com um esquema. O esquema codifica 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.

Recursos avançados de esquema

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

Recursos esparsos

A codificação de recursos esparsos nos 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 índice e do recurso de valor deve corresponder a todos os exemplos. Esta restrição pode ser explicitada no esquema, definindo uma sparse_feature:
 
sparse_feature {
  name: 'WeightedCategories'
  index_feature { name: 'WeightedCategoriesIndex' }
  value_feature { name: 'WeightedCategoriesValue' }
}
 

A definição de recurso esparso requer um ou mais índices e um recurso de valor que se referem aos recursos que existem no esquema. A definição explícita dos recursos esparsos permite ao TFDV verificar se as valências de todos os recursos referidos correspondem.

Alguns casos de uso introduzem restrições de valência semelhantes entre os Recursos, mas não necessariamente codificam um recurso esparso. Usar o recurso esparso deve desbloqueá-lo, 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, é necessário introduzir pequenas variações de esquema, por exemplo, os recursos usados ​​como rótulos são necessários durante o treinamento (e devem ser validados), mas faltam durante a veiculação. Os ambientes podem ser usados ​​para expressar esses requisitos, em particular default_environment() , in_environment() , not_in_environment() .

Por exemplo, suponha que um recurso chamado 'LABEL' seja necessário para o treinamento, mas espera-se que esteja faltando 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 veiculaçã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 confiar na construção automática de esquema do TensorFlow Data Validation. Especificamente, a Validação de Dados do TensorFlow cria 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 o check-in em um sistema de controle de versão e enviá-lo explicitamente ao 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.

Nota: 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 inclinação de serviço de treinamento

Visão geral

O detector de inclinação de veiculação de treinamento é executado como um subcomponente da Validação de Dados TensorFlow e detecta a distorção entre dados de treinamento e veiculação.

Tipos de inclinação

Com base em vários pós-portais de produção, reduzimos os vários tipos de inclinação para quatro categorias principais. A seguir, discutimos cada uma dessas categorias, além de fornecer exemplos de cenários nos quais elas ocorrem.

  1. A inclinação do esquema ocorre quando os dados de treinamento e veiculação não estão em conformidade com o mesmo esquema. Como o esquema descreve as propriedades lógicas dos dados, espera-se que o treinamento e a veiculação de dados sigam o mesmo esquema. Quaisquer desvios esperados entre os dois (como o recurso de rótulo estar presente apenas nos dados de treinamento, mas não na veiculação) devem ser especificados através do campo de ambientes no esquema.

    Como a geração de dados de treinamento é uma etapa de processamento de dados em massa, enquanto a geração de dados (online) geralmente é uma etapa sensível à latência, é comum haver diferentes caminhos de código que geram dados de treinamento e exibição. Isto é um erro. Qualquer discrepância entre esses dois caminhos de código (devido a erro do desenvolvedor ou liberações binárias inconsistentes) pode levar à distorção do esquema.

    Cenário de exemplo

    Bob deseja adicionar um novo recurso ao modelo e adicioná-lo aos dados de treinamento. As métricas de treinamento offline parecem ótimas, mas as métricas online são muito piores. Após horas de depuração, Bob percebe que esqueceu de adicionar o mesmo recurso no caminho do código de veiculação. O modelo deu uma grande importância a esse novo recurso e, como não estava disponível no momento da veiculação, gerou previsões ruins, levando a piores métricas on-line.

  2. A inclinação do recurso ocorre quando os valores do recurso que um modelo treina são diferentes dos valores do recurso que ele vê no momento da veiculação. Isso pode acontecer devido a vários motivos, incluindo:

    • Se uma fonte de dados externa que fornece alguns valores de recurso for modificada entre o tempo de treinamento e a veiculação.

    • Lógica inconsistente para gerar recursos entre treinamento e veiculação. Por exemplo, se você aplicar alguma transformação apenas em um dos dois caminhos de código.

    Cenário de exemplo

    Alice possui um pipeline de aprendizado de máquina contínuo, no qual os dados de hoje são registrados e usados ​​para gerar os dados de treinamento do dia seguinte. Para economizar espaço, ela decide registrar apenas o ID do vídeo no momento da veiculação e buscar as propriedades do vídeo em um repositório de dados durante o treinamento da geração de dados.

    Ao fazer isso, ela inadvertidamente introduz uma inclinação que é especificamente perigosa para vídeos virais e recém-enviados, cujo tempo de exibição pode mudar substancialmente entre o tempo de veiculação e o treinamento (como mostrado abaixo).

     
     Serving Example           Training Example
     -------------------------  -------------------------
     features {                 features {
       feature {                  feature {
         key "vid"                  key "vid"
         value { int64_list {       value { int64_list {
           value 92392               value 92392
         } }                         } }
       }                          }
       feature {                  feature {
         key "views"               key "views"
         value { int_list {       value { bytes_list {
           value " 10 "                value " 10000 "  # skew
         } }                         } }
       }                          }
     }                          }
     

    Essa é uma instância de inclinação de recurso, pois os dados de treinamento veem um número inflado de visualizações.

  3. A distorção da distribuição ocorre quando a distribuição dos valores dos recursos para dados de treinamento é significativamente diferente da veiculação de dados. Uma das principais causas da distorção da distribuição é usar um corpus completamente diferente para treinar a geração de dados 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 veiculação para treinamento.

    Cenário de exemplo

    Por exemplo, para compensar uma fatia de dados sub-representada, se uma amostragem tendenciosa for usada sem ponderar adequadamente os exemplos de amostragem reduzida, a distribuição dos valores dos recursos entre os dados de treinamento e veiculação será distorcida aritificamente.

  4. A distorção de pontuação / exibição é mais difícil de detectar e ocorre quando apenas um subconjunto dos exemplos classificados é realmente exibido. Como os rótulos estão disponíveis apenas para os exemplos veiculados e não para os exemplos pontuados, somente esses exemplos são usados ​​para treinamento. Isso implicitamente faz com que o modelo preveja erros nos exemplos pontuados, pois eles são gradualmente sub-representados nos dados de treinamento.

    Cenário de exemplo

    Considere um sistema de anúncios que exibe os 10 principais anúncios. Desses 10 anúncios, apenas um deles pode ser clicado pelo usuário. Todos os 10 desses exemplos serviram são usados para os proximos dias de treinamento - 1 positivo e 9 negativo. No entanto, no momento da veiculação, o modelo treinado foi usado para pontuar 100s de anúncios. Os outros 90 anúncios que nunca foram veiculados são removidos implicitamente dos dados de treinamento. Isso resulta em um loop de feedback implícito que imprevisível ainda mais as coisas com classificação mais baixa, uma vez que elas não são vistas nos dados de treinamento.

Por que você deveria se importar?

A inclinação é difícil de detectar e prevalece em muitos dutos de ML. Houve vários incidentes em que isso causou degradações no desempenho e perda de receita.

O que é suportado atualmente?

Atualmente, a Validação de Dados TensorFlow suporta inclinação do esquema, inclinação do recurso e detecção de inclinação da distribuição.

Detecção de deriva

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

Usando visualizações para verificar seus dados

A validação de dados do TensorFlow fornece ferramentas para visualizar a distribuição dos valores dos recursos. Ao examinar essas distribuições em um bloco de anotações Jupyter usando Facets, você pode detectar problemas comuns com os dados.

Estatísticas de recursos

Identificando distribuições suspeitas

Você pode identificar erros 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 desequilibrado é um recurso para o qual predomina um valor. Recursos desequilibrados podem ocorrer naturalmente, mas se um recurso sempre tiver o mesmo valor, você poderá ter um erro de dados. Para detectar recursos desequilibrados 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 que é todos os zeros e um segundo que é altamente desequilibrado, na parte superior da lista "Recursos numéricos":

Visualização de dados não balanceados

Dados uniformemente distribuídos

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 os dados não balanceados, 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 inversa":

Histograma de dados uniformes

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

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

Erros que podem produzir dados uniformemente distribuídos

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

  • Usando cadeias para representar tipos de dados que não são de cadeia, 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". 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á totalmente ausente de valores:

  1. Escolha "Quantidade ausente / zero" no menu suspenso "Classificar por".
  2. Marque a caixa de seleção "Ordem inversa".
  3. Veja 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 recurso incompletos. Por exemplo, você pode esperar que a lista de valores de um recurso tenha sempre três elementos e descubra que às vezes ele possui apenas um. Para verificar valores incompletos ou outros casos em que as listas de valores de recursos não possuem o número esperado de elementos:

  1. Escolha "Comprimento da lista de valores" no menu suspenso "Gráfico a ser exibido" à direita.

  2. Veja o gráfico à direita de cada linha do 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 possui algumas listas de valores de comprimento zero:

Exibição de visão geral de facetas com recurso com listas de valor de tamanho zero

Grandes diferenças de escala entre os recursos

Se seus recursos variam amplamente em escala, o modelo pode ter dificuldades em aprender. 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" nos recursos para encontrar escalas muito variadas.

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

Etiquetas com etiquetas inválidas

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

Revise os valores dos rótulos na Visão geral das facetas e verifique se estão em conformidade com os requisitos dos estimadores .