TensorFlow Data Validation (TFDV) สามารถวิเคราะห์การฝึกอบรมและให้บริการข้อมูลเพื่อ:
คำนวณ สถิติ เชิงพรรณนา
สรุป สคีมา
ตรวจจับ ความผิดปกติของข้อมูล
API หลักรองรับการทำงานแต่ละส่วนด้วยวิธีการอำนวยความสะดวกที่สร้างจากด้านบนและสามารถเรียกได้ในบริบทของโน้ตบุ๊ก
การคำนวณสถิติข้อมูลเชิงพรรณนา
TFDV สามารถคำนวณ สถิติ เชิงพรรณนาที่ให้ภาพรวมอย่างรวดเร็วของข้อมูลในแง่ของคุณสมบัติที่มีอยู่และรูปร่างของการกระจายค่า เครื่องมือต่างๆ เช่น ภาพรวมของ Facets สามารถแสดงข้อมูลสถิติเหล่านี้อย่างรวบรัดเพื่อการเรียกดูที่ง่ายดาย
ตัวอย่างเช่น สมมติว่า path
ชี้ไปที่ไฟล์ในรูปแบบ TFRecord
(ซึ่งเก็บเร็กคอร์ดประเภท tensorflow.Example
) ตัวอย่างต่อไปนี้แสดงการคำนวณสถิติโดยใช้ TFDV:
stats = tfdv.generate_statistics_from_tfrecord(data_location=path)
ค่าที่ส่งคืนคือบัฟเฟอร์โปรโตคอล DatasetFeatureStatisticsList สมุดบันทึกตัวอย่าง มีการแสดงสถิติโดยใช้ ภาพรวมของ Facets :
tfdv.visualize_statistics(stats)
ตัวอย่างก่อนหน้านี้ถือว่าข้อมูลถูกเก็บไว้ในไฟล์ TFRecord
TFDV ยังรองรับรูปแบบอินพุต CSV พร้อมความสามารถในการขยายสำหรับรูปแบบทั่วไปอื่นๆ คุณสามารถค้นหาตัวถอดรหัสข้อมูลที่มีอยู่ได้ ที่นี่ นอกจากนี้ TFDV ยังมีฟังก์ชันยูทิลิตี้ tfdv.generate_statistics_from_dataframe
สำหรับผู้ใช้ที่มีข้อมูลในหน่วยความจำซึ่งแสดงเป็น DataFrame แพนด้า
นอกเหนือจากการคำนวณชุดสถิติข้อมูลเริ่มต้นแล้ว TFDV ยังสามารถคำนวณสถิติสำหรับโดเมนความหมาย (เช่น รูปภาพ ข้อความ) หากต้องการเปิดใช้การคำนวณสถิติของโดเมนความหมาย ให้ส่งอ็อบเจ็กต์ tfdv.StatsOptions ที่มี enable_semantic_domain_stats
ตั้งค่าเป็น True ไปยัง tfdv.generate_statistics_from_tfrecord
ทำงานบน Google Cloud
ภายใน TFDV ใช้กรอบการประมวลผลแบบขนานข้อมูลของ Apache Beam เพื่อปรับขนาดการคำนวณสถิติในชุดข้อมูลขนาดใหญ่ สำหรับแอปพลิเคชันที่ต้องการผสานรวมกับ TFDV ให้ลึกยิ่งขึ้น (เช่น แนบการสร้างสถิติที่ส่วนท้ายของไปป์ไลน์ การสร้างข้อมูล สร้างสถิติสำหรับข้อมูลในรูปแบบที่กำหนดเอง ) API ยังเปิดเผย Beam PTransform สำหรับการสร้างสถิติอีกด้วย
หากต้องการเรียกใช้ TFDV บน Google Cloud จะต้องดาวน์โหลดไฟล์ล้อ TFDV และจัดเตรียมให้กับผู้ปฏิบัติงาน Dataflow ดาวน์โหลดไฟล์ wheel ไปยังไดเร็กทอรีปัจจุบันดังนี้:
pip download tensorflow_data_validation \
--no-deps \
--platform manylinux2010_x86_64 \
--only-binary=:all:
ตัวอย่างต่อไปนี้แสดงตัวอย่างการใช้งาน TFDV บน Google Cloud:
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)
ในกรณีนี้ โปรโตสถิติที่สร้างขึ้นจะถูกเก็บไว้ในไฟล์ TFRecord ที่เขียนไปยัง GCS_STATS_OUTPUT_PATH
หมายเหตุ เมื่อเรียกฟังก์ชัน tfdv.generate_statistics_...
ใดๆ (เช่น tfdv.generate_statistics_from_tfrecord
) บน Google Cloud คุณต้องระบุ output_path
การระบุไม่มีอาจทำให้เกิดข้อผิดพลาด
การอนุมานสคีมาเหนือข้อมูล
สคีมา อธิบายคุณสมบัติที่คาดหวังของข้อมูล บางส่วนของคุณสมบัติเหล่านี้คือ:
- คุณลักษณะใดที่คาดว่าจะมีอยู่
- ประเภทของพวกเขา
- จำนวนค่าสำหรับคุณลักษณะในแต่ละตัวอย่าง
- การมีอยู่ของแต่ละฟีเจอร์ในตัวอย่างทั้งหมด
- โดเมนของคุณสมบัติที่คาดหวัง
กล่าวโดยย่อ สคีมาจะอธิบายความคาดหวังสำหรับข้อมูลที่ "ถูกต้อง" และสามารถใช้เพื่อตรวจหาข้อผิดพลาดในข้อมูลได้ (อธิบายไว้ด้านล่าง) ยิ่งไปกว่านั้น สามารถใช้สคีมาเดียวกันในการตั้งค่า TensorFlow Transform สำหรับการแปลงข้อมูลได้ โปรดทราบว่าสคีมาที่คาดว่าจะค่อนข้างคงที่ เช่น ชุดข้อมูลหลายชุดอาจสอดคล้องกับสคีมาเดียวกัน ในขณะที่สถิติ (อธิบายไว้ด้านบน) อาจแตกต่างกันไปตามชุดข้อมูล
เนื่องจากการเขียนสคีมาอาจเป็นงานที่น่าเบื่อ โดยเฉพาะอย่างยิ่งสำหรับชุดข้อมูลที่มีคุณสมบัติมากมาย TFDV จึงมีวิธีสร้างเวอร์ชันเริ่มต้นของสคีมาตามสถิติเชิงพรรณนา:
schema = tfdv.infer_schema(stats)
โดยทั่วไป TFDV ใช้การวิเคราะห์พฤติกรรมแบบอนุรักษ์นิยมเพื่ออนุมานคุณสมบัติของข้อมูลที่คงที่จากสถิติ เพื่อหลีกเลี่ยงการใช้สคีมาที่ชุดข้อมูลเฉพาะมากเกินไป ขอแนะนำอย่างยิ่งให้ ตรวจสอบสคีมาที่อนุมานและปรับปรุงตามความจำเป็น เพื่อรวบรวมความรู้โดเมนใดๆ เกี่ยวกับข้อมูลที่การวิเคราะห์พฤติกรรมของ TFDV อาจพลาดไป
ตามค่าเริ่มต้น tfdv.infer_schema
จะอนุมานรูปร่างของคุณลักษณะที่จำเป็นแต่ละรายการ หาก value_count.min
เท่ากับ value_count.max
สำหรับคุณลักษณะนี้ ตั้งค่าอาร์กิวเมนต์ infer_feature_shape
เป็น False เพื่อปิดใช้งานการอนุมานรูปร่าง
สคีมาเองถูกจัดเก็บเป็น บัฟเฟอร์โปรโตคอลสคีมา ดังนั้นจึงสามารถอัปเดต/แก้ไขได้โดยใช้ API บัฟเฟอร์โปรโตคอลมาตรฐาน TFDV ยังมี วิธีการยูทิลิตี้บางอย่าง เพื่อทำให้การอัปเดตเหล่านี้ง่ายขึ้น ตัวอย่างเช่น สมมติว่า schema มี stanza ต่อไปนี้เพื่ออธิบายคุณลักษณะของสตริงที่จำเป็น payment_type
ที่รับค่าเดียว:
feature {
name: "payment_type"
value_count {
min: 1
max: 1
}
type: BYTES
domain: "payment_type"
presence {
min_fraction: 1.0
min_count: 1
}
}
เพื่อทำเครื่องหมายว่าคุณลักษณะนี้ควรมีการเติมข้อมูลอย่างน้อย 50% ของตัวอย่าง:
tfdv.get_feature(schema, 'payment_type').presence.min_fraction = 0.5
สมุดบันทึกตัวอย่าง มีการแสดงภาพอย่างง่ายของสคีมาเป็นตาราง โดยแสดงรายการคุณลักษณะแต่ละรายการและลักษณะสำคัญตามที่เข้ารหัสในสคีมา
กำลังตรวจสอบข้อมูลเพื่อหาข้อผิดพลาด
จากสคีมา คุณสามารถตรวจสอบว่าชุดข้อมูลเป็นไปตามความคาดหวังที่กำหนดไว้ในสคีมาหรือไม่ หรือมี ความผิดปกติของข้อมูล อยู่หรือไม่ คุณสามารถตรวจสอบข้อมูลของคุณเพื่อหาข้อผิดพลาด (ก) ในการรวมของชุดข้อมูลทั้งหมดโดยการจับคู่สถิติของชุดข้อมูลกับสคีมา หรือ (ข) โดยการตรวจสอบข้อผิดพลาดตามตัวอย่าง
จับคู่สถิติของชุดข้อมูลกับสคีมา
ในการตรวจสอบข้อผิดพลาดในการรวม TFDV จะจับคู่สถิติของชุดข้อมูลกับสคีมาและทำเครื่องหมายความคลาดเคลื่อนใดๆ ตัวอย่างเช่น:
# 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)
ผลลัพธ์คืออินสแตนซ์ของบัฟเฟอร์โปรโตคอล ความผิดปกติ และอธิบายถึงข้อผิดพลาดใดๆ ที่สถิติไม่สอดคล้องกับสคีมา ตัวอย่างเช่น สมมติว่าข้อมูลที่ other_path
มีตัวอย่างที่มีค่าสำหรับคุณลักษณะ payment_type
นอกโดเมนที่ระบุในสคีมา
สิ่งนี้ทำให้เกิดความผิดปกติ
payment_type Unexpected string values Examples contain values missing from the schema: Prcard (<1%).
ระบุว่าพบค่านอกโดเมนในสถิติ < 1% ของค่าคุณลักษณะ
หากเป็นไปตามที่คาดไว้ สคีมาสามารถอัปเดตได้ดังนี้:
tfdv.get_domain(schema, 'payment_type').value.append('Prcard')
หากความผิดปกติบ่งชี้ถึงข้อผิดพลาดของข้อมูลจริงๆ ควรแก้ไขข้อมูลพื้นฐานก่อนที่จะนำไปใช้ในการฝึกอบรม
ประเภทความผิดปกติต่างๆ ที่โมดูลนี้ตรวจจับได้แสดงไว้ ที่นี่
สมุดบันทึกตัวอย่าง มีการแสดงภาพความผิดปกติอย่างง่ายเป็นตาราง แสดงรายการคุณลักษณะที่ตรวจพบข้อผิดพลาดและคำอธิบายสั้นๆ ของข้อผิดพลาดแต่ละรายการ
ตรวจสอบข้อผิดพลาดตามตัวอย่าง
TFDV ยังมีตัวเลือกในการตรวจสอบข้อมูลตามตัวอย่าง แทนที่จะเปรียบเทียบสถิติทั้งชุดข้อมูลกับสคีมา TFDV มีฟังก์ชันสำหรับตรวจสอบความถูกต้องของข้อมูลตามตัวอย่าง จากนั้นจึงสร้างสถิติสรุปสำหรับตัวอย่างที่ผิดปกติที่พบ ตัวอย่างเช่น:
options = tfdv.StatsOptions(schema=schema)
anomalous_example_stats = tfdv.validate_examples_in_tfrecord(
data_location=input, stats_options=options)
anomalous_example_stats
ที่ validate_examples_in_tfrecord
ส่งคืนเป็นบัฟเฟอร์โปรโตคอล DatasetFeatureStatisticsList ซึ่งชุดข้อมูลแต่ละชุดประกอบด้วยชุดตัวอย่างที่แสดงความผิดปกติเฉพาะ คุณสามารถใช้สิ่งนี้เพื่อกำหนดจำนวนตัวอย่างในชุดข้อมูลของคุณที่แสดงความผิดปกติที่กำหนดและลักษณะของตัวอย่างเหล่านั้น
สภาพแวดล้อมสคีมา
ตามค่าเริ่มต้น การตรวจสอบจะถือว่าชุดข้อมูลทั้งหมดในไปป์ไลน์เป็นไปตามสคีมาเดียว ในบางกรณี การแนะนำรูปแบบสคีมาเล็กน้อยเป็นสิ่งที่จำเป็น เช่น ฟีเจอร์ที่ใช้เป็นป้ายกำกับนั้นจำเป็นระหว่างการฝึกอบรม (และควรได้รับการตรวจสอบความถูกต้อง) แต่ขาดหายไประหว่างการแสดงผล
สภาพแวดล้อม สามารถใช้เพื่อแสดงข้อกำหนดดังกล่าวได้ โดยเฉพาะอย่างยิ่ง คุณลักษณะในสคีมาสามารถเชื่อมโยงกับชุดของสภาพแวดล้อมโดยใช้ default_environment, in_environment และ not_in_environment
ตัวอย่างเช่น หากใช้ฟีเจอร์ ทิป เป็นป้ายกำกับในการฝึกซ้อม แต่ไม่มีข้อมูลการเสิร์ฟ หากไม่ได้ระบุสภาพแวดล้อม มันจะแสดงเป็นความผิดปกติ
serving_stats = tfdv.generate_statistics_from_tfrecord(data_location=serving_data_path)
serving_anomalies = tfdv.validate_statistics(serving_stats, schema)
ในการแก้ไขปัญหานี้ เราจำเป็นต้องตั้งค่าสภาพแวดล้อมเริ่มต้นสำหรับคุณลักษณะทั้งหมดให้เป็นทั้ง 'การฝึกอบรม' และ 'การให้บริการ' และแยกคุณลักษณะ 'เคล็ดลับ' ออกจากสภาพแวดล้อมการให้บริการ
# 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 ยังมีฟังก์ชันในการตรวจจับ:
- เบี่ยงเบนระหว่างข้อมูลการฝึกอบรมและการให้บริการ
- เลื่อนไปมาระหว่างวันต่างๆ ของข้อมูลการฝึกอบรม
TFDV ดำเนินการตรวจสอบนี้โดยการเปรียบเทียบสถิติของชุดข้อมูลต่างๆ ตามตัวเปรียบเทียบแบบเลื่อน/เอียงที่ระบุในสคีมา ตัวอย่างเช่น หากต้องการตรวจสอบว่ามีความคลาดเคลื่อนระหว่างคุณลักษณะ 'payment_type' ในชุดข้อมูลการฝึกอบรมและการให้บริการหรือไม่:
# 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)
หมายเหตุ บรรทัดฐาน L-infinity จะตรวจจับการเอียงสำหรับคุณสมบัติตามหมวดหมู่เท่านั้น แทนที่จะระบุเกณฑ์ infinity_norm
การระบุเกณฑ์ jensen_shannon_divergence
ใน skew_comparator
จะตรวจพบการเอียงสำหรับคุณลักษณะทั้งที่เป็นตัวเลขและหมวดหมู่
เช่นเดียวกับการตรวจสอบว่าชุดข้อมูลเป็นไปตามความคาดหวังที่กำหนดไว้ในสคีมาหรือไม่ ผลลัพธ์ยังเป็นอินสแตนซ์ของบัฟเฟอร์โปรโตคอล ความผิดปกติ และอธิบายความคลาดเคลื่อนใดๆ ระหว่างชุดข้อมูลการฝึกและการแสดง ตัวอย่างเช่น สมมติว่าข้อมูลการให้บริการมีตัวอย่างที่มากขึ้นด้วยคุณลักษณะ payement_type
ที่มีค่า Cash
ซึ่งจะทำให้เกิดความผิดปกติแบบเอียง
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
หากความผิดปกติบ่งชี้ความคลาดเคลื่อนระหว่างข้อมูลการฝึกและการแสดงข้อมูลจริงๆ จำเป็นต้องมีการตรวจสอบเพิ่มเติม เนื่องจากอาจมีผลกระทบโดยตรงต่อประสิทธิภาพของโมเดล
สมุดบันทึกตัวอย่าง ประกอบด้วยตัวอย่างง่ายๆ ในการตรวจสอบความผิดปกติตามความเอียง
การตรวจจับความคลาดเคลื่อนระหว่างวันต่างๆ ของข้อมูลการฝึกอบรมสามารถทำได้ในลักษณะเดียวกัน
# 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)
หมายเหตุ บรรทัดฐาน L-infinity จะตรวจจับการเอียงสำหรับคุณสมบัติตามหมวดหมู่เท่านั้น แทนที่จะระบุเกณฑ์ infinity_norm
การระบุเกณฑ์ jensen_shannon_divergence
ใน skew_comparator
จะตรวจพบการเอียงสำหรับคุณลักษณะทั้งที่เป็นตัวเลขและหมวดหมู่
การเขียนตัวเชื่อมต่อข้อมูลแบบกำหนดเอง
ในการคำนวณสถิติข้อมูล TFDV มี วิธีที่สะดวก หลายวิธีในการจัดการข้อมูลอินพุตในรูปแบบต่างๆ (เช่น TFRecord
ของ tf.train.Example , CSV เป็นต้น) หากรูปแบบข้อมูลของคุณไม่อยู่ในรายการนี้ คุณต้องเขียนตัวเชื่อมต่อข้อมูลแบบกำหนดเองสำหรับอ่านข้อมูลอินพุต และเชื่อมต่อกับ TFDV core API เพื่อคำนวณสถิติข้อมูล
API หลัก TFDV สำหรับการคำนวณสถิติข้อมูล คือ Beam PTransform ที่ใช้ PCcollection ของชุดตัวอย่างอินพุต (ชุดของตัวอย่างอินพุตจะแสดงเป็น Arrow RecordBatch) และส่งออก PCollection ที่มีบัฟเฟอร์โปรโตคอล DatasetFeatureStatisticsList
เดียว
เมื่อคุณติดตั้งเครื่องมือเชื่อมต่อข้อมูลแบบกำหนดเองที่รวมตัวอย่างอินพุตของคุณไว้ใน Arrow RecordBatch แล้ว คุณต้องเชื่อมต่อกับ tfdv.GenerateStatistics
API เพื่อคำนวณสถิติข้อมูล ใช้ TFRecord
ของ tf.train.Example
เช่น tfx_bsl
มีตัวเชื่อมต่อข้อมูล TFExampleRecord และด้านล่างคือตัวอย่างวิธีเชื่อมต่อกับ tfdv.GenerateStatistics
API
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))
การคำนวณสถิติในส่วนข้อมูล
สามารถกำหนดค่า TFDV เพื่อคำนวณสถิติผ่านชิ้นส่วนข้อมูลได้ การแบ่งส่วนสามารถเปิดใช้งานได้โดยจัดเตรียมฟังก์ชันการแบ่งส่วนซึ่งใช้ใน Arrow RecordBatch
และส่งออกลำดับของ tuples ของแบบฟอร์ม (slice key, record batch)
TFDV มอบวิธีง่ายๆ ในการ สร้างฟังก์ชันการแบ่งตามค่าคุณลักษณะ ซึ่งสามารถจัดเตรียมให้เป็นส่วนหนึ่งของ tfdv.StatsOptions
เมื่อคำนวณสถิติ
เมื่อเปิดใช้งานการแบ่งส่วน โปรโต DatasetFeatureStatisticsList เอาต์พุตจะมีโปรโต DatasetFeatureStatistics หลายรายการ หนึ่งรายการสำหรับแต่ละส่วน แต่ละส่วนจะถูกระบุด้วยชื่อเฉพาะซึ่งตั้งเป็น ชื่อชุดข้อมูลในโปรโต DatasetFeatureStatistics ตามค่าเริ่มต้น TFDV จะคำนวณสถิติสำหรับชุดข้อมูลโดยรวมนอกเหนือจากส่วนที่กำหนดค่าไว้
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])