Skip to content

Commit 51dcbd3

Browse files
mdrevestf-model-analysis-team
authored and
tf-model-analysis-team
committed
Tag legacy extractors and evaluators with legacy_ in preparation for deprecation. Renamed V2 MetricsAndPlotsEvaluator to MetricsPlotsAndValidationsEvaluator for consistency with recent updates to writer and to allow export without collision with legacy name.
PiperOrigin-RevId: 340565141
1 parent 1cc0b2a commit 51dcbd3

31 files changed

+138
-114
lines changed

RELEASE.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@
5252
5353
## Deprecations
5454
55+
* `tfma.extractors.FeatureExtractor`, `tfma.extractors.PredictExtractor`,
56+
`tfma.extractors.InputExtractor`, and
57+
`tfma.evaluators.MetricsAndPlotsEvaluator` are deprecated and may be
58+
replaced with newer versions in upcoming releases.
59+
5560
# Version 0.24.3
5661
5762
## Major Features and Improvements

tensorflow_model_analysis/addons/fairness/post_export_metrics/fairness_indicators_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
from tensorflow_model_analysis.eval_saved_model import testutil
3333
from tensorflow_model_analysis.eval_saved_model.example_trainers import fixed_prediction_estimator_extra_fields
3434
from tensorflow_model_analysis.eval_saved_model.example_trainers import multi_head
35-
from tensorflow_model_analysis.evaluators import metrics_and_plots_evaluator
35+
from tensorflow_model_analysis.evaluators import legacy_metrics_and_plots_evaluator
3636
from tensorflow_model_analysis.post_export_metrics import post_export_metrics
3737
import tensorflow_model_analysis.post_export_metrics.metric_keys as metric_keys
3838
from tensorflow_model_analysis.proto import metrics_for_slice_pb2
@@ -79,7 +79,7 @@ def _runTestWithCustomCheck(self,
7979
| 'InputsToExtracts' >> model_eval_lib.InputsToExtracts()
8080
| 'Extract' >> tfma_unit.Extract(extractors=extractors) # pylint: disable=no-value-for-parameter
8181
| 'ComputeMetricsAndPlots' >>
82-
metrics_and_plots_evaluator.ComputeMetricsAndPlots(
82+
legacy_metrics_and_plots_evaluator.ComputeMetricsAndPlots(
8383
eval_shared_model=eval_shared_model,
8484
compute_confidence_intervals=self.compute_confidence_intervals,
8585
random_seed_for_testing=self.deterministic_test_seed))

tensorflow_model_analysis/api/model_eval_lib.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,16 @@
3737
from tensorflow_model_analysis import types
3838
from tensorflow_model_analysis.eval_saved_model import constants as eval_constants
3939
from tensorflow_model_analysis.evaluators import evaluator
40-
from tensorflow_model_analysis.evaluators import metrics_and_plots_evaluator
41-
from tensorflow_model_analysis.evaluators import metrics_and_plots_evaluator_v2
40+
from tensorflow_model_analysis.evaluators import legacy_metrics_and_plots_evaluator
41+
from tensorflow_model_analysis.evaluators import metrics_plots_and_validations_evaluator
4242
from tensorflow_model_analysis.extractors import batched_input_extractor
4343
from tensorflow_model_analysis.extractors import batched_predict_extractor_v2
4444
from tensorflow_model_analysis.extractors import extractor
45-
from tensorflow_model_analysis.extractors import input_extractor
46-
from tensorflow_model_analysis.extractors import predict_extractor
45+
from tensorflow_model_analysis.extractors import legacy_input_extractor
46+
from tensorflow_model_analysis.extractors import legacy_predict_extractor
47+
from tensorflow_model_analysis.extractors import legacy_tfjs_predict_extractor
48+
from tensorflow_model_analysis.extractors import legacy_tflite_predict_extractor
4749
from tensorflow_model_analysis.extractors import slice_key_extractor
48-
from tensorflow_model_analysis.extractors import tfjs_predict_extractor
49-
from tensorflow_model_analysis.extractors import tflite_predict_extractor
5050
from tensorflow_model_analysis.extractors import unbatch_extractor
5151
from tensorflow_model_analysis.post_export_metrics import post_export_metrics
5252
from tensorflow_model_analysis.proto import metrics_for_slice_pb2
@@ -445,7 +445,7 @@ def default_extractors( # pylint: disable=invalid-name
445445
eval_config = config.EvalConfig(
446446
slicing_specs=[s.to_proto() for s in slice_spec])
447447
return [
448-
custom_predict_extractor or predict_extractor.PredictExtractor(
448+
custom_predict_extractor or legacy_predict_extractor.PredictExtractor(
449449
eval_shared_model, materialize=materialize),
450450
slice_key_extractor.SliceKeyExtractor(
451451
eval_config=eval_config, materialize=materialize)
@@ -465,9 +465,9 @@ def default_extractors( # pylint: disable=invalid-name
465465
# TODO(b/163889779): Convert TFLite extractor to operate on batched
466466
# extracts. Then we can remove the input extractor.
467467
return [
468-
input_extractor.InputExtractor(eval_config=eval_config),
468+
legacy_input_extractor.InputExtractor(eval_config=eval_config),
469469
(custom_predict_extractor or
470-
tflite_predict_extractor.TFLitePredictExtractor(
470+
legacy_tflite_predict_extractor.TFLitePredictExtractor(
471471
eval_config=eval_config, eval_shared_model=eval_shared_model)),
472472
slice_key_extractor.SliceKeyExtractor(
473473
eval_config=eval_config, materialize=materialize)
@@ -479,9 +479,9 @@ def default_extractors( # pylint: disable=invalid-name
479479

480480
if model_types == set([constants.TF_JS]):
481481
return [
482-
input_extractor.InputExtractor(eval_config=eval_config),
482+
legacy_input_extractor.InputExtractor(eval_config=eval_config),
483483
(custom_predict_extractor or
484-
tfjs_predict_extractor.TFJSPredictExtractor(
484+
legacy_tfjs_predict_extractor.TFJSPredictExtractor(
485485
eval_config=eval_config, eval_shared_model=eval_shared_model)),
486486
slice_key_extractor.SliceKeyExtractor(
487487
eval_config=eval_config, materialize=materialize)
@@ -495,7 +495,7 @@ def default_extractors( # pylint: disable=invalid-name
495495
all(eval_constants.EVAL_TAG in m.model_loader.tags
496496
for m in eval_shared_models)):
497497
return [
498-
custom_predict_extractor or predict_extractor.PredictExtractor(
498+
custom_predict_extractor or legacy_predict_extractor.PredictExtractor(
499499
eval_shared_model,
500500
materialize=materialize,
501501
eval_config=eval_config),
@@ -590,7 +590,7 @@ def default_evaluators( # pylint: disable=invalid-name
590590
if eval_config.options.HasField('min_slice_size'):
591591
min_slice_size = eval_config.options.min_slice_size.value
592592
return [
593-
metrics_and_plots_evaluator.MetricsAndPlotsEvaluator(
593+
legacy_metrics_and_plots_evaluator.MetricsAndPlotsEvaluator(
594594
eval_shared_model,
595595
compute_confidence_intervals=compute_confidence_intervals,
596596
min_slice_size=min_slice_size,
@@ -599,7 +599,8 @@ def default_evaluators( # pylint: disable=invalid-name
599599
]
600600
else:
601601
return [
602-
metrics_and_plots_evaluator_v2.MetricsAndPlotsEvaluator(
602+
metrics_plots_and_validations_evaluator
603+
.MetricsPlotsAndValidationsEvaluator(
603604
eval_config=eval_config,
604605
eval_shared_model=eval_shared_model,
605606
schema=schema,

tensorflow_model_analysis/api/model_eval_lib_test.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@
3535
from tensorflow_model_analysis.eval_saved_model.example_trainers import fixed_prediction_estimator
3636
from tensorflow_model_analysis.eval_saved_model.example_trainers import linear_classifier
3737
from tensorflow_model_analysis.eval_saved_model.example_trainers import linear_regressor
38-
from tensorflow_model_analysis.evaluators import metrics_and_plots_evaluator
39-
from tensorflow_model_analysis.evaluators import metrics_and_plots_evaluator_v2
40-
from tensorflow_model_analysis.evaluators import query_based_metrics_evaluator
38+
from tensorflow_model_analysis.evaluators import legacy_metrics_and_plots_evaluator
39+
from tensorflow_model_analysis.evaluators import legacy_query_based_metrics_evaluator
40+
from tensorflow_model_analysis.evaluators import metrics_plots_and_validations_evaluator
4141
from tensorflow_model_analysis.evaluators.query_metrics import ndcg as legacy_ndcg
4242
from tensorflow_model_analysis.evaluators.query_metrics import query_statistics
43-
from tensorflow_model_analysis.extractors import feature_extractor
44-
from tensorflow_model_analysis.extractors import predict_extractor
43+
from tensorflow_model_analysis.extractors import legacy_feature_extractor
44+
from tensorflow_model_analysis.extractors import legacy_predict_extractor
4545
from tensorflow_model_analysis.extractors import slice_key_extractor
4646
from tensorflow_model_analysis.metrics import calibration_plot
4747
from tensorflow_model_analysis.metrics import metric_specs
@@ -230,9 +230,9 @@ def testRunModelAnalysisExtraFieldsPlusFeatureExtraction(self):
230230
eval_shared_model = model_eval_lib.default_eval_shared_model(
231231
eval_saved_model_path=model_location, example_weight_key='age')
232232
extractors_with_feature_extraction = [
233-
predict_extractor.PredictExtractor(
233+
legacy_predict_extractor.PredictExtractor(
234234
eval_shared_model, desired_batch_size=3, materialize=False),
235-
feature_extractor.FeatureExtractor(
235+
legacy_feature_extractor.FeatureExtractor(
236236
extract_source=constants.INPUT_KEY,
237237
extract_dest=constants.FEATURES_PREDICTIONS_LABELS_KEY),
238238
slice_key_extractor.SliceKeyExtractor(
@@ -392,7 +392,7 @@ def testRunModelAnalysisWithCustomizations(self):
392392
extractors = model_eval_lib.default_extractors(
393393
eval_shared_model=eval_shared_model,
394394
eval_config=eval_config,
395-
custom_predict_extractor=predict_extractor.PredictExtractor(
395+
custom_predict_extractor=legacy_predict_extractor.PredictExtractor(
396396
eval_shared_model=eval_shared_model, eval_config=eval_config))
397397
eval_result = model_eval_lib.run_model_analysis(
398398
eval_config=eval_config,
@@ -874,7 +874,8 @@ def testRunModelAnalysisWithQueryBasedMetrics(self):
874874
data_location=data_location,
875875
output_path=output_path,
876876
evaluators=[
877-
metrics_and_plots_evaluator_v2.MetricsAndPlotsEvaluator(
877+
metrics_plots_and_validations_evaluator
878+
.MetricsPlotsAndValidationsEvaluator(
878879
eval_config=eval_config, eval_shared_model=eval_shared_model)
879880
],
880881
schema=schema)
@@ -933,9 +934,9 @@ def testRunModelAnalysisWithLegacyQueryExtractor(self):
933934
data_location=data_location,
934935
output_path=self._getTempDir(),
935936
evaluators=[
936-
metrics_and_plots_evaluator.MetricsAndPlotsEvaluator(
937+
legacy_metrics_and_plots_evaluator.MetricsAndPlotsEvaluator(
937938
eval_shared_model),
938-
query_based_metrics_evaluator.QueryBasedMetricsEvaluator(
939+
legacy_query_based_metrics_evaluator.QueryBasedMetricsEvaluator(
939940
query_id='language',
940941
prediction_key='logistic',
941942
combine_fns=[

tensorflow_model_analysis/api/tfma_unit.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def testWithBeam(self):
7171
from tensorflow_model_analysis.api import model_eval_lib
7272
from tensorflow_model_analysis.eval_saved_model import load
7373
from tensorflow_model_analysis.eval_saved_model import testutil
74-
from tensorflow_model_analysis.evaluators import metrics_and_plots_evaluator
74+
from tensorflow_model_analysis.evaluators import legacy_metrics_and_plots_evaluator
7575
from tensorflow_model_analysis.extractors import extractor
7676
from tensorflow_model_analysis.slicer import slicer_lib as slicer
7777

@@ -287,7 +287,7 @@ def check_metrics(got):
287287
| 'CreateExamples' >> beam.Create(serialized_examples)
288288
| 'InputsToExtracts' >> model_eval_lib.InputsToExtracts()
289289
| 'Extract' >> Extract(extractors=extractors)
290-
| 'ComputeMetricsAndPlots' >> metrics_and_plots_evaluator
290+
| 'ComputeMetricsAndPlots' >> legacy_metrics_and_plots_evaluator
291291
.ComputeMetricsAndPlots(eval_shared_model=eval_shared_model))
292292
# pylint: enable=no-value-for-parameter
293293

@@ -378,7 +378,7 @@ def check_metrics(got):
378378
examples_pcollection
379379
| 'InputsToExtracts' >> model_eval_lib.InputsToExtracts()
380380
| 'Extract' >> Extract(extractors=extractors)
381-
| 'ComputeMetricsAndPlots' >> metrics_and_plots_evaluator
381+
| 'ComputeMetricsAndPlots' >> legacy_metrics_and_plots_evaluator
382382
.ComputeMetricsAndPlots(eval_shared_model=eval_shared_model))
383383
# pylint: enable=no-value-for-parameter
384384

tensorflow_model_analysis/contrib/model_eval_lib.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
from tensorflow_model_analysis.evaluators import analysis_table_evaluator
2727
from tensorflow_model_analysis.evaluators import evaluator
2828
from tensorflow_model_analysis.extractors import extractor
29-
from tensorflow_model_analysis.extractors import feature_extractor
30-
from tensorflow_model_analysis.extractors import predict_extractor
29+
from tensorflow_model_analysis.extractors import legacy_feature_extractor
30+
from tensorflow_model_analysis.extractors import legacy_predict_extractor
3131
from tensorflow_model_analysis.extractors import slice_key_extractor
3232
from tensorflow_model_analysis.slicer import slicer_lib as slicer
3333

@@ -70,9 +70,9 @@ def BuildAnalysisTable( # pylint: disable=invalid-name
7070

7171
if not extractors:
7272
extractors = [
73-
predict_extractor.PredictExtractor(eval_shared_model,
74-
desired_batch_size),
75-
feature_extractor.FeatureExtractor(),
73+
legacy_predict_extractor.PredictExtractor(eval_shared_model,
74+
desired_batch_size),
75+
legacy_feature_extractor.FeatureExtractor(),
7676
slice_key_extractor.SliceKeyExtractor(slice_spec)
7777
]
7878
if not evaluators:

tensorflow_model_analysis/evaluators/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@
1818
from tensorflow_model_analysis.evaluators.evaluator import Evaluation
1919
from tensorflow_model_analysis.evaluators.evaluator import Evaluator
2020
from tensorflow_model_analysis.evaluators.evaluator import verify_evaluator
21-
from tensorflow_model_analysis.evaluators.metrics_and_plots_evaluator import MetricsAndPlotsEvaluator
21+
from tensorflow_model_analysis.evaluators.legacy_metrics_and_plots_evaluator import MetricsAndPlotsEvaluator
22+
from tensorflow_model_analysis.evaluators.metrics_plots_and_validations_evaluator import MetricsPlotsAndValidationsEvaluator

tensorflow_model_analysis/evaluators/aggregate_test.py renamed to tensorflow_model_analysis/evaluators/legacy_aggregate_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from tensorflow_model_analysis import constants
2626
from tensorflow_model_analysis.eval_saved_model import testutil
2727
from tensorflow_model_analysis.eval_saved_model.example_trainers import linear_classifier
28-
from tensorflow_model_analysis.evaluators import aggregate
28+
from tensorflow_model_analysis.evaluators import legacy_aggregate as aggregate
2929
from tensorflow_model_analysis.evaluators import poisson_bootstrap
3030

3131

tensorflow_model_analysis/evaluators/metrics_and_plots_evaluator.py renamed to tensorflow_model_analysis/evaluators/legacy_metrics_and_plots_evaluator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
import apache_beam as beam
2525
from tensorflow_model_analysis import constants
2626
from tensorflow_model_analysis import types
27-
from tensorflow_model_analysis.evaluators import aggregate
2827
from tensorflow_model_analysis.evaluators import counter_util
2928
from tensorflow_model_analysis.evaluators import evaluator
29+
from tensorflow_model_analysis.evaluators import legacy_aggregate
3030
from tensorflow_model_analysis.evaluators import poisson_bootstrap
3131
from tensorflow_model_analysis.extractors import extractor
3232
from tensorflow_model_analysis.extractors import slice_key_extractor
@@ -155,7 +155,7 @@ def ComputeMetricsAndPlots( # pylint: disable=invalid-name
155155
# plots if applicable.
156156
| 'ComputePerSliceMetrics' >>
157157
poisson_bootstrap.ComputeWithConfidenceIntervals(
158-
aggregate.ComputePerSliceMetrics,
158+
legacy_aggregate.ComputePerSliceMetrics,
159159
num_bootstrap_samples=(poisson_bootstrap.DEFAULT_NUM_BOOTSTRAP_SAMPLES
160160
if compute_confidence_intervals else 1),
161161
random_seed_for_testing=random_seed_for_testing,

tensorflow_model_analysis/evaluators/metrics_and_plots_evaluator_test.py renamed to tensorflow_model_analysis/evaluators/legacy_metrics_and_plots_evaluator_test.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
from tensorflow_model_analysis.eval_saved_model.example_trainers import fixed_prediction_estimator
3131
from tensorflow_model_analysis.eval_saved_model.example_trainers import fixed_prediction_estimator_no_labels
3232
from tensorflow_model_analysis.eval_saved_model.example_trainers import linear_classifier
33-
from tensorflow_model_analysis.evaluators import metrics_and_plots_evaluator
34-
from tensorflow_model_analysis.extractors import predict_extractor
33+
from tensorflow_model_analysis.evaluators import legacy_metrics_and_plots_evaluator as metrics_and_plots_evaluator
34+
from tensorflow_model_analysis.extractors import legacy_predict_extractor
3535
from tensorflow_model_analysis.extractors import slice_key_extractor
3636
from tensorflow_model_analysis.post_export_metrics import metric_keys
3737
from tensorflow_model_analysis.post_export_metrics import metrics as metric_fns
@@ -94,7 +94,7 @@ def testEvaluateNoSlicing(self):
9494
eval_saved_model_path=eval_export_dir,
9595
add_metrics_callbacks=[_addExampleCountMetricCallback])
9696
extractors = [
97-
predict_extractor.PredictExtractor(eval_shared_model),
97+
legacy_predict_extractor.PredictExtractor(eval_shared_model),
9898
slice_key_extractor.SliceKeyExtractor()
9999
]
100100

@@ -143,7 +143,7 @@ def testEvaluateWithSlicingAndDifferentBatchSizes(self):
143143
eval_saved_model_path=eval_export_dir,
144144
add_metrics_callbacks=[_addExampleCountMetricCallback])
145145
extractors = [
146-
predict_extractor.PredictExtractor(eval_shared_model),
146+
legacy_predict_extractor.PredictExtractor(eval_shared_model),
147147
slice_key_extractor.SliceKeyExtractor([
148148
slicer.SingleSliceSpec(),
149149
slicer.SingleSliceSpec(columns=['slice_key'])
@@ -233,7 +233,7 @@ def testEvaluateWithSlicingAndUncertainty(self):
233233
eval_saved_model_path=eval_export_dir,
234234
add_metrics_callbacks=[_addExampleCountMetricCallback])
235235
extractors = [
236-
predict_extractor.PredictExtractor(eval_shared_model),
236+
legacy_predict_extractor.PredictExtractor(eval_shared_model),
237237
slice_key_extractor.SliceKeyExtractor([
238238
slicer.SingleSliceSpec(),
239239
slicer.SingleSliceSpec(columns=['slice_key'])
@@ -331,7 +331,7 @@ def testEvaluateNoSlicingAddPostExportAndCustomMetrics(self):
331331
post_export_metrics.example_weight(example_weight_key='age')
332332
])
333333
extractors = [
334-
predict_extractor.PredictExtractor(eval_shared_model),
334+
legacy_predict_extractor.PredictExtractor(eval_shared_model),
335335
slice_key_extractor.SliceKeyExtractor()
336336
]
337337

@@ -392,7 +392,7 @@ def testEvaluateNoSlicingAddPostExportAndCustomMetricsUnsupervisedModel(self):
392392
post_export_metrics.example_weight(example_weight_key='prediction')
393393
])
394394
extractors = [
395-
predict_extractor.PredictExtractor(eval_shared_model),
395+
legacy_predict_extractor.PredictExtractor(eval_shared_model),
396396
slice_key_extractor.SliceKeyExtractor()
397397
]
398398

@@ -441,7 +441,7 @@ def testEvaluateWithPlots(self):
441441
post_export_metrics.auc_plots()
442442
])
443443
extractors = [
444-
predict_extractor.PredictExtractor(eval_shared_model),
444+
legacy_predict_extractor.PredictExtractor(eval_shared_model),
445445
slice_key_extractor.SliceKeyExtractor()
446446
]
447447

tensorflow_model_analysis/evaluators/query_based_metrics_evaluator_test.py renamed to tensorflow_model_analysis/evaluators/legacy_query_based_metrics_evaluator_test.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
from tensorflow_model_analysis.api import tfma_unit
2929
from tensorflow_model_analysis.eval_saved_model import testutil
3030
from tensorflow_model_analysis.eval_saved_model.example_trainers import fixed_prediction_estimator_extra_fields
31-
from tensorflow_model_analysis.evaluators import query_based_metrics_evaluator
31+
from tensorflow_model_analysis.evaluators import legacy_query_based_metrics_evaluator as query_based_metrics_evaluator
3232
from tensorflow_model_analysis.evaluators.query_metrics import min_label_position
3333
from tensorflow_model_analysis.evaluators.query_metrics import ndcg
3434
from tensorflow_model_analysis.evaluators.query_metrics import query_statistics
35-
from tensorflow_model_analysis.extractors import predict_extractor
35+
from tensorflow_model_analysis.extractors import legacy_predict_extractor
3636
from tensorflow_model_analysis.extractors import slice_key_extractor
3737

3838

@@ -122,7 +122,7 @@ def testEvaluateQueryBasedMetrics(self):
122122
eval_shared_model = self.createTestEvalSharedModel(
123123
eval_saved_model_path=eval_export_dir)
124124
extractors = [
125-
predict_extractor.PredictExtractor(eval_shared_model),
125+
legacy_predict_extractor.PredictExtractor(eval_shared_model),
126126
slice_key_extractor.SliceKeyExtractor()
127127
]
128128

0 commit comments

Comments
 (0)