সাইন টিএফএক্স-অ্যাডনস সম্প্রদায়টিতে যোগদান করুন এবং টিএফএক্স আরও উন্নত করতে সহায়তা করুন!
This page was translated by the Cloud Translation API.
Switch to English

টেনসরফ্লো ডেটা বৈধকরণ

টেনসরফ্লো প্রসারিত একটি মূল উপাদান একটি উদাহরণ

এই উদাহরণটি কোলাব নোটবুকটি ব্যাখ্যা করে যে কীভাবে টেনসরফ্লো ডেটা যাচাইকরণ (টিএফডিভি) আপনার ডেটাসেটটি তদন্ত এবং ভিজ্যুয়ালাইজ করতে ব্যবহার করা যেতে পারে। এর মধ্যে বর্ণনামূলক পরিসংখ্যানগুলি অনুসন্ধান করা, একটি স্কিমা অনুমান করা, ব্যর্থতাগুলি পরীক্ষা করা এবং ঠিক করা এবং আমাদের ডেটাসেটে ড্রিফট এবং স্কিউ পরীক্ষা করা অন্তর্ভুক্ত। আপনার ডেটাসেটের বৈশিষ্ট্যগুলি বোঝার জন্য এটি গুরুত্বপূর্ণ যে এটি আপনার উত্পাদন পাইপলাইনে সময়ের সাথে কীভাবে পরিবর্তিত হতে পারে including আপনার ডেটাতে অসঙ্গতিগুলি অনুসন্ধান করা এবং আপনার প্রশিক্ষণ, মূল্যায়ন এবং ডেটাসেটগুলি সুসংগত কিনা তা নিশ্চিত করার জন্য এটির তুলনা করাও গুরুত্বপূর্ণ।

আমরা শিকাগো শহর দ্বারা প্রকাশিত ট্যাক্সি ট্রিপস ডেটাসেটের ডেটা ব্যবহার করব।

গুগল বিগকিউরিতে ডেটাসেট সম্পর্কে আরও পড়ুনবিগকোয়ারী ইউআই-তে সম্পূর্ণ ডেটাসেট অন্বেষণ করুন।

ডেটাসেটের কলামগুলি হ'ল:

পিকআপ_কমিনিটি_আরিয়া ভাড়া ট্রিপ_স্টার্ট_ম্যাথ
ট্রিপ_স্টার্ট_আর ট্রিপ_স্টার্ট_দিন ট্রিপ_স্টার্ট_টাইমস্ট্যাম্প
পিকআপ_লিটটিউড বাছাই_ দীর্ঘতা ড্রপ অফ_লিটটিউড
ড্রপ অফ ট্রিপ_মিলস পিকআপ_সেনসাস_ট্র্যাক্ট
ড্রপ অফ_সেনসাস_ট্র্যাক্ট শোধের ধরণ প্রতিষ্ঠান
ট্রিপ_সেকেন্ডস ড্রপ অফ কম্যুনিটি_আড়িয়া পরামর্শ

পাইপ আপগ্রেড করুন

স্থানীয়ভাবে চলাকালীন কোনও সিস্টেমে পিপ আপগ্রেড করা এড়াতে, নিশ্চিত হয়ে নিন যে আমরা কলাবে ছুটছি। স্থানীয় সিস্টেমগুলি অবশ্যই আলাদাভাবে আপগ্রেড করা যায়।

try:
  import colab
  !pip install --upgrade pip
except:
  pass

টেনসরফ্লো ইনস্টল করুন

pip install tensorflow==2.2.0

পাইথন সংস্করণ পরীক্ষা করুন

import sys

# Confirm that we're using Python 3
assert sys.version_info.major is 3, 'Oops, not running Python 3. Use Runtime > Change runtime type'

টিএফডিভি ইনস্টল করুন

এটি সমস্ত নির্ভরতা টানবে, যা এক মিনিট সময় নেয়। অসম্পূর্ণ নির্ভরতা সংস্করণ সম্পর্কিত সতর্কতা বা ত্রুটিগুলি উপেক্ষা করুন ignore

import tensorflow as tf

print('Installing TensorFlow Data Validation')
!pip install -q tensorflow_data_validation[visualization]

আপনি কি রানটাইম পুনরায় চালু করেছেন?

আপনি যদি গুগল কলাব ব্যবহার করেন, আপনি যখন প্রথমবারের উপরের সেলটি চালাচ্ছেন, আপনাকে অবশ্যই রানটাইম পুনরায় চালু করতে হবে (রানটাইম> রানটাইম পুনরায় চালু করুন ...)। এটি কলব প্যাকেজ লোড করার কারণে।

ফাইলগুলি লোড করুন

আমরা গুগল ক্লাউড স্টোরেজ থেকে আমাদের ডেটাসেটটি ডাউনলোড করব।

import os
import tempfile, urllib, zipfile

# Set up some globals for our file paths
BASE_DIR = tempfile.mkdtemp()
DATA_DIR = os.path.join(BASE_DIR, 'data')
OUTPUT_DIR = os.path.join(BASE_DIR, 'chicago_taxi_output')
TRAIN_DATA = os.path.join(DATA_DIR, 'train', 'data.csv')
EVAL_DATA = os.path.join(DATA_DIR, 'eval', 'data.csv')
SERVING_DATA = os.path.join(DATA_DIR, 'serving', 'data.csv')

# Download the zip file from GCP and unzip it
zip, headers = urllib.request.urlretrieve('https://storage.googleapis.com/artifacts.tfx-oss-public.appspot.com/datasets/chicago_data.zip')
zipfile.ZipFile(zip).extractall(BASE_DIR)
zipfile.ZipFile(zip).close()

print("Here's what we downloaded:")
!ls -R {os.path.join(BASE_DIR, 'data')}
Here's what we downloaded:
/tmp/tmp9ac2o66s/data:
eval  serving  train

/tmp/tmp9ac2o66s/data/eval:
data.csv

/tmp/tmp9ac2o66s/data/serving:
data.csv

/tmp/tmp9ac2o66s/data/train:
data.csv

সংস্করণটি পরীক্ষা করুন

import tensorflow_data_validation as tfdv
print('TFDV version: {}'.format(tfdv.version.__version__))
TFDV version: 0.27.0

পরিসংখ্যান গণনা এবং ভিজ্যুয়ালাইজ করুন

প্রথমে আমরা আমাদের প্রশিক্ষণ ডেটার জন্য পরিসংখ্যান গণনা করতে tfdv.generate_statistics_from_csv ব্যবহার করব। (চটজলদি সতর্কতাগুলি উপেক্ষা করুন)

টিএফডিভি বর্ণনামূলক পরিসংখ্যানগুলি গণনা করতে পারে যা উপস্থিত বৈশিষ্ট্যগুলি এবং তাদের মান বিতরণের আকারগুলির ক্ষেত্রে ডেটাটির দ্রুত ওভারভিউ সরবরাহ করে।

অভ্যন্তরীণভাবে, টিএফডিভি বড় ডেটাসেটের উপরের পরিসংখ্যানের গণনা স্কেল করতে অ্যাপাচি বিমের ডেটা সমান্তরাল প্রক্রিয়াকরণ কাঠামো ব্যবহার করে। TFDV- এর সাথে গভীর সংহত করতে ইচ্ছুক অ্যাপ্লিকেশনগুলির জন্য (উদাহরণস্বরূপ, ডেটা-প্রজন্মের পাইপলাইনের শেষে পরিসংখ্যান উত্পন্ন করুন), এপিআই পরিসংখ্যান উত্পন্নকরণের জন্য একটি বিম পি ট্রান্সফর্মটিও প্রকাশ করে।

train_stats = tfdv.generate_statistics_from_csv(data_location=TRAIN_DATA)
WARNING:apache_beam.runners.interactive.interactive_environment:Dependencies required for Interactive Beam PCollection visualization are not available, please use: `pip install apache-beam[interactive]` to install necessary dependencies to enable all data visualization features.
WARNING:apache_beam.io.tfrecordio:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/stats_util.py:247: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.
Instructions for updating:
Use eager execution and: 
`tf.data.TFRecordDataset(path)`
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/stats_util.py:247: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.
Instructions for updating:
Use eager execution and: 
`tf.data.TFRecordDataset(path)`

এখন ব্যবহার করতে দিন tfdv.visualize_statistics , যা ব্যবহার করে আরও বৈশিষ্ট্য আমাদের প্রশিক্ষণ ডেটার একটি সংক্ষিপ্ত ঠাহর তৈরি করতে:

  • লক্ষ্য করুন যে সংখ্যাসূচক বৈশিষ্ট্য এবং ক্যাটাগোরিকাল বৈশিষ্ট্যগুলি পৃথকভাবে ভিজ্যুয়ালাইজ করা হয় এবং প্রতিটি বৈশিষ্ট্যের জন্য বিতরণগুলি দেখানো চার্ট প্রদর্শিত হয়।
  • লক্ষ্য করুন যে নিখোঁজ বা শূন্য মানগুলির সাথে বৈশিষ্ট্যগুলি ভিজ্যুয়াল সূচক হিসাবে লাল হিসাবে একটি শতাংশ প্রদর্শন করে যে সেই বৈশিষ্ট্যগুলির উদাহরণগুলির সাথে সমস্যা থাকতে পারে। শতাংশটি হ'ল বৈশিষ্ট্যের জন্য নিখোঁজ বা শূন্য মান রয়েছে এমন উদাহরণগুলির শতাংশের পরিমাণ।
  • লক্ষ্য করুন যে pickup_census_tract মানগুলির সাথে কোনও উদাহরণ নেই। এটি মাত্রা হ্রাস জন্য একটি সুযোগ!
  • প্রদর্শন পরিবর্তন করতে চার্টের উপরে "প্রসারিত" ক্লিক করার চেষ্টা করুন
  • বালতি রেঞ্জ এবং গণনা প্রদর্শনের জন্য চার্টের বারগুলিতে ঘোরাফেরা করার চেষ্টা করুন
  • লগ এবং লিনিয়ার স্কেলগুলির মধ্যে স্যুইচ করার চেষ্টা করুন এবং লক্ষ্য করুন যে কীভাবে লগ স্কেল payment_type শ্রেণিবদ্ধ বৈশিষ্ট্য সম্পর্কে আরও বিস্তারিত প্রকাশ করে
  • "চার্টটি দেখানোর জন্য" মেনু থেকে "কোয়ান্টাইলস" নির্বাচন করার চেষ্টা করুন এবং কোয়ান্টাইল শতাংশগুলি দেখানোর জন্য চিহ্নিতকারীগুলিতে ঘুরে দেখুন
tfdv.visualize_statistics(train_stats)

একটি স্কিমা প্রবেশ করুন

এখন আসুন আমাদের ডেটাগুলির জন্য একটি স্কিমা তৈরি করতে tfdv.infer_schema ব্যবহার করুন। একটি স্কিমা এমএল এর জন্য প্রাসঙ্গিক ডেটাগুলির জন্য সীমাবদ্ধতাগুলি সংজ্ঞায়িত করে। উদাহরণসীমাবদ্ধতাগুলির মধ্যে প্রতিটি বৈশিষ্ট্যের ডেটা ধরণের অন্তর্ভুক্ত থাকে, তা তা সংখ্যাসূচক বা শ্রেণিবদ্ধ, বা ডেটাতে এর উপস্থিতির ফ্রিকোয়েন্সি। শ্রেণিবদ্ধ বৈশিষ্ট্যগুলির জন্য স্কিমাটি ডোমেনও সংজ্ঞায়িত করে - গ্রহণযোগ্য মানগুলির তালিকা। যেহেতু স্কিমা লেখাই একটি ক্লান্তিকর কাজ হতে পারে, বিশেষত প্রচুর বৈশিষ্ট্যযুক্ত ডেটাসেটের জন্য, টিএফডিভি বর্ণনামূলক পরিসংখ্যানের ভিত্তিতে স্কিমার প্রাথমিক সংস্করণ তৈরি করার একটি পদ্ধতি সরবরাহ করে।

স্কিমাটি সঠিকভাবে পাওয়া গুরুত্বপূর্ণ কারণ আমাদের বাকি উত্পাদন পাইপলাইন টিএফডিভি সঠিক হওয়ার জন্য যে স্কিমা তৈরি করেছে তার উপর নির্ভর করবে। স্কিমা ডেটার জন্য ডকুমেন্টেশনও সরবরাহ করে এবং তাই যখন বিভিন্ন বিকাশকারীরা একই ডেটাতে কাজ করে তখন তা কার্যকর হয়। tfdv.display_schema স্কিমা প্রদর্শন করতে tfdv.display_schema ব্যবহার করুন যাতে আমরা এটি পর্যালোচনা করতে পারি।

schema = tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/display_util.py:151: FutureWarning: Passing a negative integer is deprecated in version 1.0 and will not be supported in future version. Instead, use None to not limit the column width.
  pd.set_option('max_colwidth', -1)

ত্রুটির জন্য মূল্যায়ন ডেটা পরীক্ষা করুন

এখনও অবধি আমরা কেবল প্রশিক্ষণের ডেটা খুঁজছি। এটি গুরুত্বপূর্ণ যে আমাদের মূল্যায়ন ডেটা আমাদের প্রশিক্ষণের ডেটার সাথে সামঞ্জস্যপূর্ণ, এটি একই স্কিমা ব্যবহার করে। এটাও গুরুত্বপূর্ণ যে মূল্যায়নের ডেটাতে আমাদের সংখ্যার বৈশিষ্ট্যগুলির জন্য আমাদের প্রশিক্ষণের ডেটা হিসাবে একই মানের মূল্যগুলির উদাহরণ অন্তর্ভুক্ত রয়েছে, যাতে মূল্যায়নের সময় ক্ষতির পৃষ্ঠের আমাদের কভারেজ প্রশিক্ষণের সময় প্রায় একই রকম হয়। শ্রেণিবদ্ধ বৈশিষ্ট্যগুলির ক্ষেত্রেও এটি একই। অন্যথায়, আমাদের প্রশিক্ষণের সমস্যাগুলি থাকতে পারে যা মূল্যায়নের সময় সনাক্ত করা যায়নি, কারণ আমরা আমাদের ক্ষতির পৃষ্ঠের অংশটি মূল্যায়ন করি নি।

  • লক্ষ্য করুন যে প্রতিটি বৈশিষ্ট্যে এখন প্রশিক্ষণ এবং মূল্যায়ন উভয় ডেটাসেটের পরিসংখ্যান রয়েছে।
  • লক্ষ্য করুন যে চার্টগুলিতে এখন প্রশিক্ষণ এবং মূল্যায়ন উভয়ই ডেটাসেটগুলি ওভারলাইড করা হয়েছে, যাতে তাদের তুলনা করা সহজ হয়।
  • লক্ষ্য করুন যে চার্টগুলিতে এখন শতাংশের একটি ভিউ অন্তর্ভুক্ত রয়েছে, যা লগ বা ডিফল্ট লিনিয়ার স্কেলগুলির সাথে একত্রিত করা যেতে পারে।
  • লক্ষ্য করুন যে trip_miles গড় এবং মধ্যমাটি প্রশিক্ষণ বনাম মূল্যায়ন ডেটাসেটের জন্য আলাদা। এটা কি সমস্যার সৃষ্টি করবে?
  • বাহ, মূল্যায়ন ডেটাসেট বনাম প্রশিক্ষণের জন্য সর্বাধিক tips different এটা কি সমস্যার সৃষ্টি করবে?
  • সংখ্যা বৈশিষ্ট্য চার্টে প্রসারিত ক্লিক করুন, এবং লগ স্কেল নির্বাচন করুন। trip_seconds বৈশিষ্ট্যটি পর্যালোচনা করুন এবং সর্বাধিকের মধ্যে পার্থক্যটি লক্ষ্য করুন। মূল্যায়ন কি ক্ষয় পৃষ্ঠের অংশগুলি মিস করবে?
# Compute stats for evaluation data
eval_stats = tfdv.generate_statistics_from_csv(data_location=EVAL_DATA)

# Compare evaluation data with training data
tfdv.visualize_statistics(lhs_statistics=eval_stats, rhs_statistics=train_stats,
                          lhs_name='EVAL_DATASET', rhs_name='TRAIN_DATASET')

মূল্যায়ন অসঙ্গতিগুলির জন্য পরীক্ষা করুন

আমাদের মূল্যায়ন ডেটাসেটটি কি আমাদের প্রশিক্ষণ ডেটাসেট থেকে স্কিমার সাথে মেলে? শ্রেণীবদ্ধ বৈশিষ্ট্যগুলির জন্য এটি বিশেষত গুরুত্বপূর্ণ, যেখানে আমরা গ্রহণযোগ্য মানের মানের সীমা চিহ্নিত করতে চাই।

# Check eval data for errors by validating the eval data stats using the previously inferred schema.
anomalies = tfdv.validate_statistics(statistics=eval_stats, schema=schema)
tfdv.display_anomalies(anomalies)
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/display_util.py:186: FutureWarning: Passing a negative integer is deprecated in version 1.0 and will not be supported in future version. Instead, use None to not limit the column width.
  pd.set_option('max_colwidth', -1)

স্কিমে মূল্যায়ন ব্যতিক্রমগুলি ঠিক করুন

উফফফফ! দেখে মনে হচ্ছে আমাদের মূল্যায়নের ডেটাতে company জন্য আমাদের কিছু নতুন মান রয়েছে যা আমাদের প্রশিক্ষণের ডেটাতে ছিল না। payment_type জন্য payment_type একটি নতুন মান payment_type । এগুলি অসঙ্গতি হিসাবে বিবেচনা করা উচিত, তবে সেগুলি সম্পর্কে আমরা কী সিদ্ধান্ত নেব তা আমাদের ডোমেনের ডোমেন জ্ঞানের উপর নির্ভর করে। যদি কোনও অসঙ্গতি সত্যই কোনও ডেটা ত্রুটি নির্দেশ করে তবে অন্তর্নিহিত ডেটাটি ঠিক করা উচিত। অন্যথায়, আমরা খ্রিস্টীয় ডেটাসেটে মানগুলি অন্তর্ভুক্ত করার জন্য কেবল স্কিমা আপডেট করতে পারি।

আমরা যদি আমাদের মূল্যায়ণ ডেটাসেট পরিবর্তন না করি আমরা সমস্ত কিছু ঠিক করতে পারি না, তবে আমরা সেই স্কিমায় জিনিসগুলি ঠিক করতে পারি যা আমরা স্বীকার করতে স্বাচ্ছন্দ্য করি। এর মধ্যে নির্দিষ্ট বৈশিষ্ট্যগুলির জন্য কি অসাধারণতা নয় তা আমাদের দৃষ্টিভঙ্গি শিথিল করার পাশাপাশি শ্রেণিবদ্ধ বৈশিষ্ট্যগুলির জন্য অনুপস্থিত মানগুলি অন্তর্ভুক্ত করার জন্য আমাদের স্কিমা আপডেট করার অন্তর্ভুক্ত রয়েছে। আমাদের কী ঠিক করতে হবে তা আবিষ্কার করতে টিএফডিভি আমাদের সক্ষম করেছে।

আসুন এখনই এই সংশোধনগুলি করা যাক এবং তারপরে আরও একবার পর্যালোচনা করুন।

# Relax the minimum fraction of values that must come from the domain for feature company.
company = tfdv.get_feature(schema, 'company')
company.distribution_constraints.min_domain_mass = 0.9

# Add new value to the domain of feature payment_type.
payment_type_domain = tfdv.get_domain(schema, 'payment_type')
payment_type_domain.value.append('Prcard')

# Validate eval stats after updating the schema 
updated_anomalies = tfdv.validate_statistics(eval_stats, schema)
tfdv.display_anomalies(updated_anomalies)

এই যে, দেখুন! আমরা যাচাই করেছি যে প্রশিক্ষণ এবং মূল্যায়নের ডেটা এখন সুসংগত! ধন্যবাদ টিএফডিভি;)

স্কিমা এনভায়রনমেন্টস

আমরা এই উদাহরণের জন্য একটি 'পরিবেশনকারী' ডেটাসেটও বিভক্ত করেছি, সুতরাং আমাদের এটিও পরীক্ষা করা উচিত। ডিফল্টরূপে পাইপলাইনে সমস্ত ডেটাসেটের একই স্কিমা ব্যবহার করা উচিত, তবে ব্যতিক্রমগুলি প্রায়শই রয়েছে। উদাহরণস্বরূপ, তত্ত্বাবধানে শেখার ক্ষেত্রে আমাদের ডেটাসেটে লেবেল অন্তর্ভুক্ত করা দরকার, তবে আমরা যখন মডেলটিকে অনুক্রমের জন্য পরিবেশন করি তখন লেবেলগুলি অন্তর্ভুক্ত করা হবে না। কিছু ক্ষেত্রে সামান্য স্কিমা বৈচিত্রগুলি প্রবর্তন করা প্রয়োজন।

পরিবেশ যেমন এর প্রয়োজনীয়তা প্রকাশ করতে ব্যবহার করা যেতে পারে। বিশেষ করে, স্কিমা মধ্যে বৈশিষ্ট্যগুলি ব্যবহার পরিবেশের একটি সেট সঙ্গে সংযুক্ত হতে পারে default_environment , in_environment এবং not_in_environment

উদাহরণস্বরূপ, এই ডেটাসেটে tips বৈশিষ্ট্যটি প্রশিক্ষণের জন্য লেবেল হিসাবে অন্তর্ভুক্ত করা হয়েছে তবে এটি পরিবেশনকারী ডেটাতে অনুপস্থিত। পরিবেশ নির্দিষ্ট না করে এটি অসঙ্গতি হিসাবে প্রদর্শিত হবে।

serving_stats = tfdv.generate_statistics_from_csv(SERVING_DATA)
serving_anomalies = tfdv.validate_statistics(serving_stats, schema)

tfdv.display_anomalies(serving_anomalies)
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/display_util.py:186: FutureWarning: Passing a negative integer is deprecated in version 1.0 and will not be supported in future version. Instead, use None to not limit the column width.
  pd.set_option('max_colwidth', -1)

আমরা নীচের tips বৈশিষ্ট্য সাথে ডিল করব। আমাদের ট্রিপ সেকেন্ডে আমাদের একটি INT মানও রয়েছে, যেখানে আমাদের স্কিমাটি একটি ফ্লাট প্রত্যাশা করেছিল। আমাদের এই পার্থক্য সম্পর্কে সচেতন করে তোলার মাধ্যমে, টিএফডিভি প্রশিক্ষণ ও পরিবেশনের জন্য ডেটা যেভাবে উত্পন্ন হয় তাতে অসঙ্গতিগুলি মুক্ত করতে সহায়তা করে। মডেল পারফরম্যান্স, কখনও কখনও বিপর্যয়করভাবে ক্ষতিগ্রস্থ না হওয়া পর্যন্ত এ জাতীয় সমস্যার বিষয়ে অজানা হওয়া খুব সহজ। এটি উল্লেখযোগ্য সমস্যা হতে পারে বা নাও হতে পারে তবে যে কোনও ক্ষেত্রে এটি আরও তদন্তের কারণ হতে হবে।

এই ক্ষেত্রে, আমরা নিরাপদে আইএনটি মানগুলিকে ফ্লায়েটে রূপান্তর করতে পারি, তাই আমরা টিএফডিভিকে বলতে চাই যে প্রকারটি নির্ধারণের জন্য আমাদের স্কিমা ব্যবহার করতে। এখন এটি করা যাক।

options = tfdv.StatsOptions(schema=schema, infer_type_from_schema=True)
serving_stats = tfdv.generate_statistics_from_csv(SERVING_DATA, stats_options=options)
serving_anomalies = tfdv.validate_statistics(serving_stats, schema)

tfdv.display_anomalies(serving_anomalies)
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/display_util.py:186: FutureWarning: Passing a negative integer is deprecated in version 1.0 and will not be supported in future version. Instead, use None to not limit the column width.
  pd.set_option('max_colwidth', -1)

এখন আমাদের tips বৈশিষ্ট্য রয়েছে (যা আমাদের লেবেল) একটি অসাধারণতা হিসাবে দেখায় ('কলাম বাদ পড়েছে')। অবশ্যই আমরা আমাদের পরিবেশনকারী ডেটাতে লেবেল রাখার প্রত্যাশা করি না, তাই আসুন TFDV কে তা উপেক্ষা করতে বলি।

# 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')

tfdv.display_anomalies(serving_anomalies_with_env)

বামন এবং স্কু জন্য পরীক্ষা করুন

কোনও ডেটাসেট স্কিমাতে নির্ধারিত প্রত্যাশাগুলির সাথে সামঞ্জস্য করে কিনা তা যাচাই করা ছাড়াও, টিএফডিভি ড্রিফট এবং স্কিউ সনাক্ত করার জন্য কার্যকারিতাও সরবরাহ করে। টিএফডিভি স্কিমাতে উল্লিখিত ড্রিফ্ট / স্কিউ তুলনাকারীর উপর ভিত্তি করে বিভিন্ন ডেটাসেটের পরিসংখ্যান তুলনা করে এই চেকটি সম্পাদন করে।

ড্রিফট

ধারাবাহিক বৈশিষ্ট্যগুলির জন্য এবং ধারাবাহিক স্প্যান্সের ডেটা (অর্থাত স্প্যান এন এবং স্প্যান এন + 1 এর মধ্যে), যেমন ট্রেনিংয়ের ডেটার বিভিন্ন দিনের মধ্যে ড্রিফ্ট সনাক্তকরণ সমর্থিত। আমরা এল-ইনফিনিটি দূরত্বের ক্ষেত্রে ড্রিফটটি প্রকাশ করি এবং আপনি প্রান্তিক দূরত্বটি সেট করতে পারেন যাতে যখন বামনটি গ্রহণযোগ্যতার চেয়ে বেশি হয় তখন আপনি সতর্কতা পান। সঠিক দূরত্ব নির্ধারণ করা সাধারণত একটি পুনরাবৃত্তি প্রক্রিয়া যা ডোমেন জ্ঞান এবং পরীক্ষার প্রয়োজন হয়।

স্কেও

টিএফডিভি আপনার ডেটাতে তিন ধরণের স্কিউ সনাক্ত করতে পারে - স্কিমা স্কিউ, বৈশিষ্ট্য স্কিউ এবং বিতরণ স্কিউ w

স্কিমা স্কিউ

যখন প্রশিক্ষণ এবং পরিবেশন করা ডেটা একই স্কিমার সাথে খাপ খায় না তখন স্কিমা স্কিউ হয়। প্রশিক্ষণ এবং পরিবেশন করা উভয় ডেটা একই স্কিমা মেনে চলবে বলে আশা করা হচ্ছে। দুটির মধ্যে যে কোনও প্রত্যাশিত বিচ্যুতি (যেমন লেবেল বৈশিষ্ট্য কেবল প্রশিক্ষণের ডেটাতে উপস্থিত রয়েছে তবে পরিবেশে নয়) স্কিমাতে পরিবেশ ক্ষেত্রের মাধ্যমে নির্দিষ্ট করা উচিত be

ফিচার স্কিউ

যখন কোনও মডেল ট্রেন করে এমন বৈশিষ্ট্যটির মানগুলি এটি পরিবেশন করার সময় দেখায় এমন বৈশিষ্ট্যের মান থেকে আলাদা হয় তখন বৈশিষ্ট্য স্কিউ হয়। উদাহরণস্বরূপ, যখন এটি ঘটতে পারে:

  • একটি ডেটা উত্স যা কিছু বৈশিষ্ট্য মান সরবরাহ করে তা প্রশিক্ষণ এবং পরিবেশনের সময়কালের মধ্যে সংশোধিত হয়
  • প্রশিক্ষণ এবং পরিবেশনের মধ্যে বৈশিষ্ট্য উত্পন্ন করার জন্য বিভিন্ন যুক্তি রয়েছে। উদাহরণস্বরূপ, আপনি যদি দুটি কোড পাথের মধ্যে একটিতে কিছু রূপান্তর প্রয়োগ করেন।

বন্টন স্কিউ

প্রশিক্ষণ ডেটাসেটের বিতরণ যখন পরিবেশন করা ডেটাসেটের বিতরণ থেকে উল্লেখযোগ্যভাবে আলাদা হয় তখন বিতরণ স্কিউ হয়। বিতরণ স্কিউর মূল কারণগুলির মধ্যে একটি হ'ল প্রশিক্ষণ ডেটাসেট উত্পন্ন করতে বিভিন্ন কোড বা বিভিন্ন ডেটা উত্স ব্যবহার করা। অন্য কারণ হ'ল একটি ত্রুটিপূর্ণ নমুনা ব্যবস্থা যা প্রশিক্ষণ দেওয়ার জন্য পরিবেশন করা ডেটার একটি অ-প্রতিনিধি সাবম্যাম্পল বেছে নেয়।

# Add skew comparator for 'payment_type' feature.
payment_type = tfdv.get_feature(schema, 'payment_type')
payment_type.skew_comparator.infinity_norm.threshold = 0.01

# Add drift comparator for 'company' feature.
company=tfdv.get_feature(schema, 'company')
company.drift_comparator.infinity_norm.threshold = 0.001

skew_anomalies = tfdv.validate_statistics(train_stats, schema,
                                          previous_statistics=eval_stats,
                                          serving_statistics=serving_stats)

tfdv.display_anomalies(skew_anomalies)
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/display_util.py:186: FutureWarning: Passing a negative integer is deprecated in version 1.0 and will not be supported in future version. Instead, use None to not limit the column width.
  pd.set_option('max_colwidth', -1)

এই উদাহরণে আমরা কিছু প্রবাহ দেখতে পাচ্ছি, তবে এটি আমরা যে প্রান্তে স্থাপন করেছি তার ঠিক নীচে।

স্কিমা স্থির করুন

এখন যেহেতু স্কিমা পর্যালোচনা করা হয়েছে এবং কিউরেটেড হয়েছে, আমরা এর "হিমায়িত" অবস্থার প্রতিবিম্বিত করতে এটি একটি ফাইলে সংরক্ষণ করব।

from tensorflow.python.lib.io import file_io
from google.protobuf import text_format

file_io.recursive_create_dir(OUTPUT_DIR)
schema_file = os.path.join(OUTPUT_DIR, 'schema.pbtxt')
tfdv.write_schema_text(schema, schema_file)

!cat {schema_file}
feature {
  name: "payment_type"
  type: BYTES
  domain: "payment_type"
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  skew_comparator {
    infinity_norm {
      threshold: 0.01
    }
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "company"
  value_count {
    min: 1
    max: 1
  }
  type: BYTES
  domain: "company"
  presence {
    min_count: 1
  }
  distribution_constraints {
    min_domain_mass: 0.9
  }
  drift_comparator {
    infinity_norm {
      threshold: 0.001
    }
  }
}
feature {
  name: "pickup_community_area"
  type: INT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "fare"
  type: FLOAT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "trip_start_month"
  type: INT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "trip_start_hour"
  type: INT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "trip_start_day"
  type: INT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "trip_start_timestamp"
  type: INT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "pickup_latitude"
  type: FLOAT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "pickup_longitude"
  type: FLOAT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "dropoff_latitude"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_count: 1
  }
}
feature {
  name: "dropoff_longitude"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_count: 1
  }
}
feature {
  name: "trip_miles"
  type: FLOAT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "pickup_census_tract"
  type: BYTES
  presence {
    min_count: 0
  }
}
feature {
  name: "dropoff_census_tract"
  value_count {
    min: 1
    max: 1
  }
  type: INT
  presence {
    min_count: 1
  }
}
feature {
  name: "trip_seconds"
  type: INT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "dropoff_community_area"
  value_count {
    min: 1
    max: 1
  }
  type: INT
  presence {
    min_count: 1
  }
}
feature {
  name: "tips"
  type: FLOAT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  not_in_environment: "SERVING"
  shape {
    dim {
      size: 1
    }
  }
}
string_domain {
  name: "payment_type"
  value: "Cash"
  value: "Credit Card"
  value: "Dispute"
  value: "No Charge"
  value: "Pcard"
  value: "Unknown"
  value: "Prcard"
}
string_domain {
  name: "company"
  value: "0118 - 42111 Godfrey S.Awir"
  value: "0694 - 59280 Chinesco Trans Inc"
  value: "1085 - 72312 N and W Cab Co"
  value: "2733 - 74600 Benny Jona"
  value: "2809 - 95474 C & D Cab Co Inc."
  value: "3011 - 66308 JBL Cab Inc."
  value: "3152 - 97284 Crystal Abernathy"
  value: "3201 - C&D Cab Co Inc"
  value: "3201 - CID Cab Co Inc"
  value: "3253 - 91138 Gaither Cab Co."
  value: "3385 - 23210 Eman Cab"
  value: "3623 - 72222 Arrington Enterprises"
  value: "3897 - Ilie Malec"
  value: "4053 - Adwar H. Nikola"
  value: "4197 - 41842 Royal Star"
  value: "4615 - 83503 Tyrone Henderson"
  value: "4615 - Tyrone Henderson"
  value: "4623 - Jay Kim"
  value: "5006 - 39261 Salifu Bawa"
  value: "5006 - Salifu Bawa"
  value: "5074 - 54002 Ahzmi Inc"
  value: "5074 - Ahzmi Inc"
  value: "5129 - 87128"
  value: "5129 - 98755 Mengisti Taxi"
  value: "5129 - Mengisti Taxi"
  value: "5724 - KYVI Cab Inc"
  value: "585 - Valley Cab Co"
  value: "5864 - 73614 Thomas Owusu"
  value: "5864 - Thomas Owusu"
  value: "5874 - 73628 Sergey Cab Corp."
  value: "5997 - 65283 AW Services Inc."
  value: "5997 - AW Services Inc."
  value: "6488 - 83287 Zuha Taxi"
  value: "6743 - Luhak Corp"
  value: "Blue Ribbon Taxi Association Inc."
  value: "C & D Cab Co Inc"
  value: "Chicago Elite Cab Corp."
  value: "Chicago Elite Cab Corp. (Chicago Carriag"
  value: "Chicago Medallion Leasing INC"
  value: "Chicago Medallion Management"
  value: "Choice Taxi Association"
  value: "Dispatch Taxi Affiliation"
  value: "KOAM Taxi Association"
  value: "Northwest Management LLC"
  value: "Taxi Affiliation Services"
  value: "Top Cab Affiliation"
}
default_environment: "TRAINING"
default_environment: "SERVING"

টিএফডিভি কখন ব্যবহার করবেন

এখানে যেমনটি হয়েছিল তেমনি আপনার প্রশিক্ষণ পাইপলাইনটি শুরু করার জন্য কেবল টিএফডিভি ভাবা সহজ, তবে বাস্তবে এর অনেকগুলি ব্যবহার রয়েছে। আরও কয়েকটি এখানে:

  • অনুমানের জন্য নতুন ডেটা বৈধকরণ করা হচ্ছে তা নিশ্চিত করার জন্য যে আমরা হঠাৎ খারাপ বৈশিষ্ট্যগুলি পাওয়া শুরু করি নি
  • সিদ্ধান্তের পৃষ্ঠার সেই অংশটি সম্পর্কে আমাদের মডেল প্রশিক্ষণ নিয়েছে কিনা তা নিশ্চিত করতে নতুন ডেটা বৈধকরণ
  • আমরা কিছু ভুল না করে তা নিশ্চিত করার জন্য আমাদের ডেটাটিকে রূপান্তরিত করে ফিচার ইঞ্জিনিয়ারিং (সম্ভবত টেনসরফ্লো ট্রান্সফর্ম ব্যবহার করে) করার পরে আমাদের বৈধকরণ করা হচ্ছে