Tensorflow Veri Doğrulaması ile başlayın

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Tensorflow Veri Doğrulaması (TFDV), eğitim ve sunum verilerini şu amaçlarla analiz edebilir:

Çekirdek API, üstte oluşturulan ve dizüstü bilgisayarlar bağlamında çağrılabilen kolaylık yöntemleriyle her bir işlevsellik parçasını destekler.

Tanımlayıcı veri istatistiklerini hesaplama

TFDV, mevcut özellikler ve değer dağılımlarının şekilleri açısından verilere hızlı bir genel bakış sağlayan tanımlayıcı istatistikleri hesaplayabilir. Yönlere Genel Bakış gibi araçlar, kolay gezinme için bu istatistiklerin kısa ve öz bir görselleştirmesini sağlayabilir.

Örneğin, path TFRecord biçimindeki ( tensorflow.Example kayıtları tutan) bir dosyaya işaret ettiğini varsayalım. Aşağıdaki pasaj, TFDV kullanılarak istatistiklerin hesaplanmasını göstermektedir:

    stats = tfdv.generate_statistics_from_tfrecord(data_location=path)

Döndürülen değer, bir DatasetFeatureStatisticsList protokol arabelleğidir. Örnek not defteri , Yönlere Genel Bakış kullanılarak istatistiklerin bir görselleştirmesini içerir:

    tfdv.visualize_statistics(stats)

İstatistik görselleştirmesinin ekran görüntüsü

Önceki örnek, verilerin bir TFRecord dosyasında depolandığını varsayar. TFDV, diğer yaygın formatlar için genişletilebilirlik ile CSV giriş formatını da destekler. Mevcut veri kod çözücüleri burada bulabilirsiniz . Ek olarak, TFDV, bir panda DataFrame olarak temsil edilen bellek içi verilere sahip kullanıcılar için tfdv.generate_statistics_from_dataframe yardımcı program işlevini sağlar.

TFDV, varsayılan veri istatistikleri kümesini hesaplamaya ek olarak, anlamsal etki alanları (örneğin, resimler, metin) için istatistikleri de hesaplayabilir. Semantik etki alanı istatistiklerinin hesaplanmasını etkinleştirmek için, enable_semantic_domain_stats öğesi True olarak ayarlanmış bir tfdv.StatsOptions nesnesini enable_semantic_domain_stats tfdv.generate_statistics_from_tfrecord .

Google Cloud'da Çalıştırma

Dahili olarak, TFDV, büyük veri kümeleri üzerinde istatistiklerin hesaplanmasını ölçeklendirmek için Apache Beam'in veri paralel işleme çerçevesini kullanır. TFDV ile daha derin entegrasyon isteyen uygulamalar için (örneğin, bir veri oluşturma hattının sonuna istatistik üretimi eklemek, veriler için özel formatta istatistikler oluşturmak ), API ayrıca istatistik üretimi için bir Beam PTransform'u ortaya çıkarır.

TFDV'yi Google Cloud'da çalıştırmak için TFDV tekerlek dosyası indirilmeli ve Dataflow çalışanlarına sağlanmalıdır. Tekerlek dosyasını aşağıdaki gibi geçerli dizine indirin:

pip download tensorflow_data_validation \
  --no-deps \
  --platform manylinux2010_x86_64 \
  --only-binary=:all:

Aşağıdaki snippet, Google Cloud'da TFDV'nin örnek bir kullanımını göstermektedir:


import tensorflow_data_validation as tfdv
from apache_beam.options.pipeline_options import PipelineOptions, GoogleCloudOptions, StandardOptions, SetupOptions

PROJECT_ID = ''
JOB_NAME = ''
GCS_STAGING_LOCATION = ''
GCS_TMP_LOCATION = ''
GCS_DATA_LOCATION = ''
# GCS_STATS_OUTPUT_PATH is the file path to which to output the data statistics
# result.
GCS_STATS_OUTPUT_PATH = ''

PATH_TO_WHL_FILE = ''


# Create and set your PipelineOptions.
options = PipelineOptions()

# For Cloud execution, set the Cloud Platform project, job_name,
# staging location, temp_location and specify DataflowRunner.
google_cloud_options = options.view_as(GoogleCloudOptions)
google_cloud_options.project = PROJECT_ID
google_cloud_options.job_name = JOB_NAME
google_cloud_options.staging_location = GCS_STAGING_LOCATION
google_cloud_options.temp_location = GCS_TMP_LOCATION
options.view_as(StandardOptions).runner = 'DataflowRunner'

setup_options = options.view_as(SetupOptions)
# PATH_TO_WHL_FILE should point to the downloaded tfdv wheel file.
setup_options.extra_packages = [PATH_TO_WHL_FILE]

tfdv.generate_statistics_from_tfrecord(GCS_DATA_LOCATION,
                                       output_path=GCS_STATS_OUTPUT_PATH,
                                       pipeline_options=options)

Bu durumda, oluşturulan istatistik protokolü, GCS_STATS_OUTPUT_PATH'e yazılan bir GCS_STATS_OUTPUT_PATH dosyasında saklanır.

NOT Google Cloud'da tfdv.generate_statistics_... işlevlerinden (ör. tfdv.generate_statistics_from_tfrecord ) herhangi birini çağırırken, bir output_path sağlamanız gerekir. Hiçbirinin belirtilmesi bir hataya neden olabilir.

Veriler üzerinden bir şema çıkarımı

Şema , verilerin beklenen özelliklerini açıklar. Bu özelliklerden bazıları şunlardır:

  • hangi özelliklerin mevcut olması bekleniyor
  • onların türü
  • her örnekte bir özellik için değer sayısı
  • tüm örneklerde her özelliğin varlığı
  • özelliklerin beklenen etki alanları.

Kısacası şema, "doğru" veriler için beklentileri tanımlar ve bu nedenle verilerdeki hataları tespit etmek için kullanılabilir (aşağıda açıklanmıştır). Ayrıca, veri dönüşümleri için Tensorflow Transform'u kurmak için aynı şema kullanılabilir. Şemanın oldukça statik olmasının beklendiğini unutmayın; örneğin, birkaç veri kümesi aynı şemaya uyabilir, oysa istatistikler (yukarıda açıklanmıştır) veri kümesine göre değişebilir.

Bir şema yazmak, özellikle çok sayıda özelliğe sahip veri kümeleri için sıkıcı bir iş olabileceğinden, TFDV, tanımlayıcı istatistiklere dayalı olarak şemanın ilk sürümünü oluşturmak için bir yöntem sağlar:

    schema = tfdv.infer_schema(stats)

Genel olarak, TFDV, şemayı belirli veri kümesine fazla uydurmaktan kaçınmak için istatistiklerden kararlı veri özelliklerini çıkarmak için muhafazakar buluşsal yöntemler kullanır. TFDV'nin buluşsal yöntemlerinin gözden kaçırmış olabileceği veriler hakkında herhangi bir etki alanı bilgisini yakalamak için çıkarsanan şemayı gözden geçirmeniz ve gerektiği gibi düzeltmeniz şiddetle tavsiye edilir.

Varsayılan olarak, tfdv.infer_schema , özellik için value_count.max value_count.min eşitse, gerekli her özelliğin şeklini çıkarır. Şekil çıkarımını devre dışı bırakmak için infer_feature_shape bağımsız değişkenini False olarak ayarlayın.

Şemanın kendisi bir Şema protokol arabelleği olarak depolanır ve bu nedenle standart protokol arabelleği API'si kullanılarak güncellenebilir/düzenlenebilir. TFDV ayrıca bu güncellemeleri kolaylaştırmak için birkaç yardımcı yöntem sunar. Örneğin, şemanın, tek bir değer alan payment_type gerekli bir dize özelliğini açıklamak için aşağıdaki kıtayı içerdiğini varsayalım:

feature {
  name: "payment_type"
  value_count {
    min: 1
    max: 1
  }
  type: BYTES
  domain: "payment_type"
  presence {
    min_fraction: 1.0
    min_count: 1
  }
}

Özelliğin örneklerin en az %50'sinde doldurulması gerektiğini belirtmek için:

    tfdv.get_feature(schema, 'payment_type').presence.min_fraction = 0.5

Örnek not defteri , şemada kodlanmış olarak her bir özelliği ve ana özelliklerini listeleyen bir tablo olarak şemanın basit bir görselleştirmesini içerir.

Şema görselleştirmesinin ekran görüntüsü

Hatalar için verileri kontrol etme

Bir şema verildiğinde, bir veri kümesinin şemada belirlenen beklentilere uyup uymadığını veya herhangi bir veri anormalliği olup olmadığını kontrol etmek mümkündür. (a) veri kümesinin istatistiklerini şemayla eşleştirerek veya (b) örnek bazında hataları kontrol ederek tüm veri kümesi genelinde toplu olarak hata olup olmadığını kontrol edebilirsiniz.

Veri kümesinin istatistiklerini bir şemayla eşleştirme

Toplamdaki hataları kontrol etmek için TFDV, veri kümesinin istatistiklerini şemayla eşleştirir ve tüm tutarsızlıkları işaretler. Örneğin:

    # Assume that other_path points to another TFRecord file
    other_stats = tfdv.generate_statistics_from_tfrecord(data_location=other_path)
    anomalies = tfdv.validate_statistics(statistics=other_stats, schema=schema)

Sonuç, Anomaliler protokol arabelleğinin bir örneğidir ve istatistiklerin şema ile uyuşmadığı durumlarda hataları açıklar. Örneğin, other_path verilerin, şemada belirtilen etki alanının dışında payment_type özelliği için değerler içeren örnekler içerdiğini varsayalım.

Bu bir anomali üretir

   payment_type  Unexpected string values  Examples contain values missing from the schema: Prcard (<1%).

özellik değerlerinin < %1'inde istatistiklerde etki alanı dışında bir değer bulunduğunu belirtir.

Bu bekleniyorsa, şema aşağıdaki gibi güncellenebilir:

   tfdv.get_domain(schema, 'payment_type').value.append('Prcard')

Anormallik gerçekten bir veri hatasını gösteriyorsa, eğitim için kullanılmadan önce temel alınan veriler düzeltilmelidir.

Bu modül tarafından algılanabilen çeşitli anomali türleri burada listelenmiştir.

Örnek not defteri , hataların tespit edildiği özellikleri ve her bir hatanın kısa bir açıklamasını listeleyen bir tablo olarak anormalliklerin basit bir görselleştirmesini içerir.

Anomalilerin ekran görüntüsü

Örnek bazında hataları kontrol etme

TFDV, veri kümesi genelindeki istatistikleri şemayla karşılaştırmak yerine, verileri örnek bazında doğrulama seçeneği de sunar. TFDV, örnek bazında verileri doğrulamak ve ardından bulunan anormal örnekler için özet istatistikler oluşturmak için işlevler sağlar. Örneğin:

   options = tfdv.StatsOptions(schema=schema)
   anomalous_example_stats = tfdv.validate_examples_in_tfrecord(
       data_location=input, stats_options=options)

validate_examples_in_tfrecord döndürdüğü anomalous_example_stats , her veri kümesinin belirli bir anormallik sergileyen örnekler kümesinden oluştuğu bir DatasetFeatureStatisticsList protokol arabelleğidir. Bunu, veri kümenizde belirli bir anomali sergileyen örneklerin sayısını ve bu örneklerin özelliklerini belirlemek için kullanabilirsiniz.

Şema Ortamları

Varsayılan olarak doğrulamalar, bir işlem hattındaki tüm veri kümelerinin tek bir şemaya bağlı olduğunu varsayar. Bazı durumlarda, küçük şema varyasyonlarının tanıtılması gereklidir, örneğin etiket olarak kullanılan özellikler eğitim sırasında gereklidir (ve doğrulanmalıdır), ancak sunum sırasında eksiktir.

Bu tür gereksinimleri ifade etmek için ortamlar kullanılabilir. Özellikle, şemadaki özellikler default_environment, in_environment ve not_in_environment kullanan bir dizi ortamla ilişkilendirilebilir.

Örneğin, ipuçları özelliği eğitimde etiket olarak kullanılıyorsa ancak sunum verilerinde eksikse. Ortam belirtilmeden, bir anormallik olarak görünecektir.

    serving_stats = tfdv.generate_statistics_from_tfrecord(data_location=serving_data_path)
    serving_anomalies = tfdv.validate_statistics(serving_stats, schema)

Anormallikleri sunmanın ekran görüntüsü

Bunu düzeltmek için, tüm özellikler için varsayılan ortamı hem 'EĞİTİM' hem de 'HİZMET' olacak şekilde ayarlamamız ve 'ipuçları' özelliğini HİZMET ortamından çıkarmamız gerekiyor.

    # All features are by default in both TRAINING and SERVING environments.
    schema.default_environment.append('TRAINING')
    schema.default_environment.append('SERVING')

    # Specify that 'tips' feature is not in SERVING environment.
    tfdv.get_feature(schema, 'tips').not_in_environment.append('SERVING')

    serving_anomalies_with_env = tfdv.validate_statistics(
        serving_stats, schema, environment='SERVING')

Veri eğriliğini ve kaymasını kontrol etme

TFDV, bir veri kümesinin şemada belirlenen beklentilere uyup uymadığını kontrol etmenin yanı sıra şunları tespit etmek için işlevler de sağlar:

  • eğitim ve sunum verileri arasında çarpıklık
  • eğitim verilerinin farklı günleri arasında sürüklenme

TFDV, şemada belirtilen sapma/skew karşılaştırıcılarına dayalı olarak farklı veri kümelerinin istatistiklerini karşılaştırarak bu kontrolü gerçekleştirir. Örneğin, eğitim ve sunum veri kümesi içindeki 'ödeme_türü' özelliği arasında herhangi bir çarpıklık olup olmadığını kontrol etmek için:

    # Assume we have already generated the statistics of training dataset, and
    # inferred a schema from it.
    serving_stats = tfdv.generate_statistics_from_tfrecord(data_location=serving_data_path)
    # Add a skew comparator to schema for 'payment_type' and set the threshold
    # of L-infinity norm for triggering skew anomaly to be 0.01.
    tfdv.get_feature(schema, 'payment_type').skew_comparator.infinity_norm.threshold = 0.01
    skew_anomalies = tfdv.validate_statistics(
        statistics=train_stats, schema=schema, serving_statistics=serving_stats)

NOT L-sonsuz normu yalnızca kategorik özellikler için eğriliği algılar. Bir infinity_norm eşiği belirtmek yerine, skew_comparator bir jensen_shannon_divergence eşiği belirtmek, hem sayısal hem de kategorik özellikler için eğriliği algılar.

Bir veri kümesinin şemada belirlenen beklentilere uyup uymadığını kontrol etmekle aynı şekilde, sonuç aynı zamanda Anomaliler protokol arabelleğinin bir örneğidir ve eğitim ile hizmet veri kümeleri arasındaki herhangi bir çarpıklığı tanımlar. Örneğin, sunum verilerinin, Cash değerine sahip olan payement_type özelliğine sahip önemli ölçüde daha fazla örnek içerdiğini varsayalım, bu bir çarpık anormallik üretir.

   payment_type  High L-infinity distance between serving and training  The L-infinity distance between serving and training is 0.0435984 (up to six significant digits), above the threshold 0.01. The feature value with maximum difference is: Cash

Anormallik, eğitim ve sunum verileri arasında gerçekten bir çarpıklık olduğunu gösteriyorsa, bunun model performansı üzerinde doğrudan bir etkisi olabileceğinden daha fazla araştırma yapılması gerekir.

Örnek not defteri , eğriliğe dayalı anormallikleri kontrol etmenin basit bir örneğini içerir.

Eğitim verilerinin farklı günleri arasındaki kaymanın tespiti benzer şekilde yapılabilir.

    # Assume we have already generated the statistics of training dataset for
    # day 2, and inferred a schema from it.
    train_day1_stats = tfdv.generate_statistics_from_tfrecord(data_location=train_day1_data_path)
    # Add a drift comparator to schema for 'payment_type' and set the threshold
    # of L-infinity norm for triggering drift anomaly to be 0.01.
    tfdv.get_feature(schema, 'payment_type').drift_comparator.infinity_norm.threshold = 0.01
    drift_anomalies = tfdv.validate_statistics(
        statistics=train_day2_stats, schema=schema, previous_statistics=train_day1_stats)

NOT L-sonsuz normu yalnızca kategorik özellikler için eğriliği algılar. Bir infinity_norm eşiği belirtmek yerine, skew_comparator bir jensen_shannon_divergence eşiği belirtmek, hem sayısal hem de kategorik özellikler için eğriliği algılar.

Özel veri bağlayıcısı yazma

Veri istatistiklerini hesaplamak için, TFDV, çeşitli formatlarda (örneğin TFRecord of tf.train.Example , CSV, vb.) giriş verilerinin işlenmesi için birkaç uygun yöntem sağlar. Veri biçiminiz bu listede yoksa, giriş verilerini okumak için özel bir veri bağlayıcısı yazmanız ve veri istatistiklerini hesaplamak için bunu TFDV çekirdek API'sine bağlamanız gerekir.

Veri istatistiklerini hesaplamak için TFDV çekirdek API'si , girdi örnekleri yığınlarının PCollection'ını alan (bir grup girdi örneği, bir Arrow RecordBatch olarak temsil edilir) ve tek bir DatasetFeatureStatisticsList protokol arabelleği içeren bir PCollection çıktısı veren bir Beam PTransform'dur.

Bir Arrow RecordBatch'te girdi örneklerinizi gruplandıran özel veri bağlayıcısını uyguladıktan sonra, veri istatistiklerini hesaplamak için onu tfdv.GenerateStatistics API'sine bağlamanız gerekir. Örneğin TFRecord 'in tf.train.Example alın. tfx_bsl , TFExampleRecord veri bağlayıcısını sağlar ve aşağıda bunun tfdv.GenerateStatistics API'sine nasıl bağlanacağına ilişkin bir örnek verilmiştir.

import tensorflow_data_validation as tfdv
from tfx_bsl.public import tfxio
import apache_beam as beam
from tensorflow_metadata.proto.v0 import statistics_pb2

DATA_LOCATION = ''
OUTPUT_LOCATION = ''

with beam.Pipeline() as p:
    _ = (
    p
    # 1. Read and decode the data with tfx_bsl.
    | 'TFXIORead' >> (
          tfxio.TFExampleRecord(
              file_pattern=[DATA_LOCATION],
              telemetry_descriptors=['my', 'tfdv']).BeamSource())
    # 2. Invoke TFDV `GenerateStatistics` API to compute the data statistics.
    | 'GenerateStatistics' >> tfdv.GenerateStatistics()
    # 3. Materialize the generated data statistics.
    | 'WriteStatsOutput' >> WriteStatisticsToTFRecord(OUTPUT_LOCATION))

Veri dilimleri üzerinden istatistik hesaplama

TFDV, veri dilimleri üzerinden istatistikleri hesaplamak için yapılandırılabilir. Dilimleme, bir Arrow RecordBatch ve bir dizi form demeti (slice key, record batch) çıktısı alan dilimleme işlevleri sağlanarak etkinleştirilebilir. TFDV, istatistik tfdv.StatsOptions bir parçası olarak sağlanabilen özellik değerine dayalı dilimleme işlevleri oluşturmanın kolay bir yolunu sağlar.

Dilimleme etkinleştirildiğinde, çıktı DatasetFeatureStatisticsList protokolü, her dilim için bir tane olmak üzere birden çok DatasetFeatureStatistics protokolü içerir. Her dilim, DatasetFeatureStatistics protokolünde veri kümesi adı olarak ayarlanan benzersiz bir adla tanımlanır. Varsayılan olarak TFDV, yapılandırılmış dilimlere ek olarak genel veri kümesi için istatistikleri hesaplar.

import tensorflow_data_validation as tfdv
from tensorflow_data_validation.utils import slicing_util

# Slice on country feature (i.e., every unique value of the feature).
slice_fn1 = slicing_util.get_feature_value_slicer(features={'country': None})

# Slice on the cross of country and state feature (i.e., every unique pair of
# values of the cross).
slice_fn2 = slicing_util.get_feature_value_slicer(
    features={'country': None, 'state': None})

# Slice on specific values of a feature.
slice_fn3 = slicing_util.get_feature_value_slicer(
    features={'age': [10, 50, 70]})

stats_options = tfdv.StatsOptions(
    slice_functions=[slice_fn1, slice_fn2, slice_fn3])