Skip to content
This repository was archived by the owner on Sep 27, 2024. It is now read-only.

Commit 0c6ee2b

Browse files
shuklak13ml-fairness-infra-github
authored andcommitted
MCT 1.0 release
Specifically, this commit... * updates RELEASE.md and verison.py to 1.0.0 * updates setup.py with explicitly-defined submodule paths (the `find_packages` function does not find the modoel_card_toolkit.proto submodule) * updates go/mct-release instructions * updates notebooks to work with schema v2 PiperOrigin-RevId: 388333574
1 parent 101bac0 commit 0c6ee2b

7 files changed

+71
-66
lines changed

RELEASE.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<!-- mdlint off(HEADERS_TOO_MANY_H1) -->
22

3-
# Current Version(Still in Development)
3+
# Release 1.0.0
44

55
## Major Features and Improvements
66

model_card_toolkit/documentation/examples/MLMD_Model_Card_Toolkit_Demo.ipynb

+16-16
Original file line numberDiff line numberDiff line change
@@ -1080,9 +1080,9 @@
10801080
},
10811081
"outputs": [],
10821082
"source": [
1083-
"from model_card_toolkit import ModelCardToolkit\n",
1083+
"import model_card_toolkit as mctlib\n",
10841084
"\n",
1085-
"mct = ModelCardToolkit(mlmd_store=mlmd_store, model_uri=model_uri)"
1085+
"mct = mctlib.ModelCardToolkit(mlmd_store=mlmd_store, model_uri=model_uri)"
10861086
]
10871087
},
10881088
{
@@ -1135,7 +1135,8 @@
11351135
" 'about the model’s intended uses, limitations, and ethical considerations.'\n",
11361136
")\n",
11371137
"model_card.model_details.owners = [\n",
1138-
" {'name': 'Model Cards Team', 'contact': '[email protected]'}\n",
1138+
" mctlib.Owner(name='Model Cards Team',\n",
1139+
" contact='[email protected]')\n",
11391140
"]"
11401141
]
11411142
},
@@ -1147,14 +1148,14 @@
11471148
},
11481149
"outputs": [],
11491150
"source": [
1150-
"model_card.considerations.use_cases = [\n",
1151+
"model_card.considerations.use_cases = [mctlib.UseCase(description=\n",
11511152
" 'This dataset that this model was trained on was originally created to '\n",
11521153
" 'support the machine learning community in conducting empirical analysis '\n",
11531154
" 'of ML algorithms. The Adult Data Set can be used in fairness-related '\n",
11541155
" 'studies that compare inequalities across sex and race, based on '\n",
1155-
" 'people’s annual incomes.'\n",
1156+
" 'people’s annual incomes.')\n",
11561157
"]\n",
1157-
"model_card.considerations.limitations = [\n",
1158+
"model_card.considerations.limitations = [mctlib.Limitation(description=\n",
11581159
" 'This is a class-imbalanced dataset across a variety of sensitive classes.'\n",
11591160
" ' The ratio of male-to-female examples is about 2:1 and there are far more'\n",
11601161
" ' examples with the “white” attribute than every other race combined. '\n",
@@ -1166,17 +1167,16 @@
11661167
" 'fewer female examples in the $50,000+ earner group, causing our model to '\n",
11671168
" 'overfit these examples. To avoid this, we can try various remediation '\n",
11681169
" 'strategies in future iterations (e.g. undersampling, hyperparameter '\n",
1169-
" 'tuning, etc), but we may not be able to fix all of the fairness issues.'\n",
1170+
" 'tuning, etc), but we may not be able to fix all of the fairness issues.')\n",
11701171
"]\n",
1171-
"model_card.considerations.ethical_considerations = [{\n",
1172-
" 'name':\n",
1173-
" 'We risk expressing the viewpoint that the attributes in this dataset '\n",
1174-
" 'are the only ones that are predictive of someone’s income, even '\n",
1175-
" 'though we know this is not the case.',\n",
1176-
" 'mitigation_strategy':\n",
1177-
" 'As mentioned, some interventions may need to be performed to address '\n",
1178-
" 'the class imbalances in the dataset.'\n",
1179-
"}]"
1172+
"model_card.considerations.ethical_considerations = [mctlib.Risk(\n",
1173+
" name= 'We risk expressing the viewpoint that the attributes in this dataset '\n",
1174+
" 'are the only ones that are predictive of someone’s income, even '\n",
1175+
" 'though we know this is not the case.',\n",
1176+
" mitigation_strategy= 'As mentioned, some interventions may need to be '\n",
1177+
" 'performed to address the class imbalances in the dataset.'\n",
1178+
" )\n",
1179+
"]"
11801180
]
11811181
},
11821182
{

model_card_toolkit/documentation/examples/Scikit_Learn_Model_Card_Toolkit_Demo.ipynb

+25-24
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@
122122
"from datetime import date\n",
123123
"from io import BytesIO\n",
124124
"from IPython import display\n",
125-
"from model_card_toolkit import ModelCardToolkit\n",
125+
"import model_card_toolkit as mctlib\n",
126126
"from sklearn.datasets import load_breast_cancer\n",
127127
"from sklearn.ensemble import GradientBoostingClassifier\n",
128128
"from sklearn.model_selection import train_test_split\n",
@@ -330,7 +330,7 @@
330330
},
331331
"outputs": [],
332332
"source": [
333-
"mct = ModelCardToolkit()\n",
333+
"mct = mctlib.ModelCardToolkit()\n",
334334
"\n",
335335
"model_card = mct.scaffold_assets()"
336336
]
@@ -357,45 +357,46 @@
357357
" 'This model predicts whether breast cancer is benign or malignant based on '\n",
358358
" 'image measurements.')\n",
359359
"model_card.model_details.owners = [\n",
360-
" {'name': 'Model Cards Team', 'contact': '[email protected]'}\n",
360+
" mctlib.Owner(name= 'Model Cards Team', contact='[email protected]')\n",
361361
"]\n",
362362
"model_card.model_details.references = [\n",
363-
" 'https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic)',\n",
364-
" 'https://minds.wisconsin.edu/bitstream/handle/1793/59692/TR1131.pdf'\n",
363+
" mctlib.Reference(reference='https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic)'),\n",
364+
" mctlib.Reference(reference='https://minds.wisconsin.edu/bitstream/handle/1793/59692/TR1131.pdf')\n",
365365
"]\n",
366366
"model_card.model_details.version.name = str(uuid.uuid4())\n",
367367
"model_card.model_details.version.date = str(date.today())\n",
368368
"\n",
369-
"model_card.considerations.ethical_considerations = [{\n",
370-
" 'name': ('Manual selection of image sections to digitize could create '\n",
369+
"model_card.considerations.ethical_considerations = [mctlib.Risk(\n",
370+
" name=('Manual selection of image sections to digitize could create '\n",
371371
" 'selection bias'),\n",
372-
" 'mitigation_strategy': 'Automate the selection process'\n",
373-
"}]\n",
374-
"model_card.considerations.limitations = ['Breast cancer diagnosis']\n",
375-
"model_card.considerations.use_cases = ['Breast cancer diagnosis']\n",
376-
"model_card.considerations.users = ['Medical professionals', 'ML researchers']\n",
372+
" mitigation_strategy='Automate the selection process'\n",
373+
")]\n",
374+
"model_card.considerations.limitations = [mctlib.Limitation(description='Breast cancer diagnosis')]\n",
375+
"model_card.considerations.use_cases = [mctlib.UseCase(description='Breast cancer diagnosis')]\n",
376+
"model_card.considerations.users = [mctlib.User(description='Medical professionals'), User(description='ML researchers')]\n",
377377
"\n",
378-
"\n",
379-
"model_card.model_parameters.data.train.graphics.description = (\n",
378+
"model_card.model_parameters.data.append(mctlib.Dataset())\n",
379+
"model_card.model_parameters.data[0].graphics.description = (\n",
380380
" f'{len(X_train)} rows with {len(X_train.columns)} features')\n",
381-
"model_card.model_parameters.data.train.graphics.collection = [\n",
382-
" {'image': mean_radius_train},\n",
383-
" {'image': mean_texture_train}\n",
381+
"model_card.model_parameters.data[0].graphics.collection = [\n",
382+
" mctlib.Graphic(image=mean_radius_train),\n",
383+
" mctlib.Graphic(image=mean_texture_train)\n",
384384
"]\n",
385-
"model_card.model_parameters.data.eval.graphics.description = (\n",
385+
"model_card.model_parameters.data.append(mctlib.Dataset())\n",
386+
"model_card.model_parameters.data[1].graphics.description = (\n",
386387
" f'{len(X_test)} rows with {len(X_test.columns)} features')\n",
387-
"model_card.model_parameters.data.eval.graphics.collection = [\n",
388-
" {'image': mean_radius_test},\n",
389-
" {'image': mean_texture_test}\n",
388+
"model_card.model_parameters.data[1].graphics.collection = [\n",
389+
" mctlib.Graphic(image=mean_radius_test),\n",
390+
" mctlib.Graphic(image=mean_texture_test)\n",
390391
"]\n",
391392
"model_card.quantitative_analysis.graphics.description = (\n",
392393
" 'ROC curve and confusion matrix')\n",
393394
"model_card.quantitative_analysis.graphics.collection = [\n",
394-
" {'image': roc_curve},\n",
395-
" {'image': confusion_matrix}\n",
395+
" mctlib.Graphic(image=roc_curve),\n",
396+
" mctlib.Graphic(image=confusion_matrix)\n",
396397
"]\n",
397398
"\n",
398-
"mct.update_model_card_json(model_card)"
399+
"mct.update_model_card(model_card)"
399400
]
400401
},
401402
{

model_card_toolkit/documentation/examples/Standalone_Model_Card_Toolkit_Demo.ipynb

+22-21
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@
140140
"source": [
141141
"import tensorflow as tf\n",
142142
"import numpy as np\n",
143-
"from model_card_toolkit import ModelCardToolkit\n",
143+
"import model_card_toolkit as mctlib\n",
144144
"from model_card_toolkit.documentation.examples import cats_vs_dogs\n",
145145
"from model_card_toolkit.utils.graphics import figure_to_base64str\n",
146146
"import tempfile\n",
@@ -335,15 +335,15 @@
335335
" 'performed with high accuracy on both Cat and Dog images.'\n",
336336
")\n",
337337
"model_card.model_details.owners = [\n",
338-
" {'name': 'Model Cards Team', 'contact': '[email protected]'}\n",
338+
" mctlib.Owner(name='Model Cards Team', contact='[email protected]')\n",
339339
"]\n",
340-
"model_card.model_details.version = {'name': 'v1.0', 'date': '08/28/2020'}\n",
340+
"model_card.model_details.version = mctlib.Version(name='v1.0', date='08/28/2020')\n",
341341
"model_card.model_details.references = [\n",
342-
" 'https://www.tensorflow.org/guide/keras/transfer_learning',\n",
343-
" 'https://arxiv.org/abs/1801.04381',\n",
342+
" mctlib.Reference(reference='https://www.tensorflow.org/guide/keras/transfer_learning'),\n",
343+
" mctlib.Reference(reference='https://arxiv.org/abs/1801.04381'),\n",
344344
"]\n",
345-
"model_card.model_details.license = 'Apache-2.0'\n",
346-
"model_card.model_details.citation = 'https://github.com/tensorflow/model-card-toolkit/blob/master/model_card_toolkit/documentation/examples/Standalone_Model_Card_Toolkit_Demo.ipynb'"
345+
"model_card.model_details.licenses = [mctlib.License(identifier='Apache-2.0')]\n",
346+
"model_card.model_details.citations = [mctlib.Citation(citation='https://github.com/tensorflow/model-card-toolkit/blob/master/model_card_toolkit/documentation/examples/Standalone_Model_Card_Toolkit_Demo.ipynb')]"
347347
]
348348
},
349349
{
@@ -368,9 +368,9 @@
368368
"outputs": [],
369369
"source": [
370370
"model_card.quantitative_analysis.performance_metrics = [\n",
371-
" {'type': 'accuracy', 'value': accuracy},\n",
372-
" {'type': 'accuracy', 'value': cat_accuracy, 'slice': 'cat'},\n",
373-
" {'type': 'accuracy', 'value': dog_accuracy, 'slice': 'Dog'},\n",
371+
" mctlib.PerformanceMetric(type='accuracy', value=str(accuracy)),\n",
372+
" mctlib.PerformanceMetric(type='accuracy', value=str(cat_accuracy), slice='cat'),\n",
373+
" mctlib.PerformanceMetric(type='accuracy', value=str(dog_accuracy), slice='Dog'),\n",
374374
"]"
375375
]
376376
},
@@ -394,20 +394,20 @@
394394
"outputs": [],
395395
"source": [
396396
"model_card.considerations.use_cases = [\n",
397-
" 'This model classifies images of cats and dogs.'\n",
397+
" mctlib.UseCase(description='This model classifies images of cats and dogs.')\n",
398398
"]\n",
399399
"model_card.considerations.limitations = [\n",
400-
" 'This model is not able to classify images of other classes.'\n",
400+
" mctlib.Limitation(description='This model is not able to classify images of other classes.')\n",
401401
"]\n",
402-
"model_card.considerations.ethical_considerations = [{\n",
403-
" 'name':\n",
402+
"model_card.considerations.ethical_considerations = [mctlib.Risk(\n",
403+
" name=\n",
404404
" 'While distinguishing between cats and dogs is generally agreed to be '\n",
405405
" 'a benign application of machine learning, harmful results can occur '\n",
406406
" 'when the model attempts to classify images that don’t contain cats or '\n",
407407
" 'dogs.',\n",
408-
" 'mitigation_strategy':\n",
408+
" mitigation_strategy=\n",
409409
" 'Avoid application on non-dog and non-cat images.'\n",
410-
"}]"
410+
")]"
411411
]
412412
},
413413
{
@@ -486,11 +486,12 @@
486486
},
487487
"outputs": [],
488488
"source": [
489-
"model_card.model_parameters.data.eval.graphics.collection = [\n",
490-
" {'name': 'Validation Set Size', 'image': validation_set_size_barchart},\n",
489+
"model_card.model_parameters.data.append(mctlib.Dataset())\n",
490+
"model_card.model_parameters.data[0].graphics.collection = [\n",
491+
" mctlib.Graphic(name='Validation Set Size', image=validation_set_size_barchart),\n",
491492
"]\n",
492493
"model_card.quantitative_analysis.graphics.collection = [\n",
493-
" {'name': 'Accuracy', 'image': accuracy_barchart},\n",
494+
" mctlib.Graphic(name='Accuracy', image=accuracy_barchart),\n",
494495
"]"
495496
]
496497
},
@@ -514,7 +515,7 @@
514515
},
515516
"outputs": [],
516517
"source": [
517-
"mct.update_model_card_json(model_card)"
518+
"mct.update_model_card(model_card)"
518519
]
519520
},
520521
{
@@ -560,7 +561,7 @@
560561
"source": [
561562
"# Generate a model card document in Markdown\n",
562563
"md_path = os.path.join(model_card_dir, 'template/md/default_template.md.jinja')\n",
563-
"md_doc = mct.export_format(md_path, 'model_card.md')\n",
564+
"md_doc = mct.export_format(template_path=md_path, 'model_card.md')\n",
564565
"\n",
565566
"# Display the model card document in Markdown\n",
566567
"display.display(display.Markdown(md_doc))"

model_card_toolkit/model_card.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
ModelCardsToolkit serves as an API to read and write MC properties by the users.
2121
"""
2222

23+
import dataclasses
2324
import json as json_lib
2425
from typing import Any, Dict, List, Optional, Text
2526

26-
import dataclasses
2727
from model_card_toolkit.base_model_card_field import BaseModelCardField
2828
from model_card_toolkit.proto import model_card_pb2
2929
from model_card_toolkit.utils import validation

model_card_toolkit/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@
1414
"""Contains the version string of the Model Card Toolkit."""
1515

1616
# Note that setup.py uses this version.
17-
__version__ = '0.1.3.dev'
17+
__version__ = '1.0.0'

setup.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import subprocess
2626

2727
from setuptools import Command
28-
from setuptools import find_packages
2928
from setuptools import setup
3029

3130
REQUIRED_PACKAGES = [
@@ -110,7 +109,11 @@ def run(self):
110109
url='https://github.com/tensorflow/model-card-toolkit',
111110
author='Google LLC',
112111
author_email='[email protected]',
113-
packages=find_packages(exclude=('bazel-model_card_toolkit*',)),
112+
packages=[
113+
'model_card_toolkit', 'model_card_toolkit.documentation',
114+
'model_card_toolkit.documentation.examples', 'model_card_toolkit.proto',
115+
'model_card_toolkit.utils'
116+
],
114117
package_data={
115118
'model_card_toolkit': ['schema/**/*.json', 'template/**/*.jinja']
116119
},

0 commit comments

Comments
 (0)