Model Card Toolkit:助力 TensorFlow 模型透明度的工具包

文 / Karan Shukla,软件工程师,Google Research

从医疗保健到个人金融再到就业等影响人们生活的广泛领域中,机器学习 (ML) 模型的透明度至关重要。出于对透明度的迫切需要,Google 开发出了能够以透明方式报告 ML 模型的性能、来源以及道德考量的框架 — Model Card(模型名片)。然而,汇集用于创建实用 Model Card 所需的信息可能会很耗时。为了解决这个问题,我们最近发布开源 Model Card Toolkit (MCT),ML 开发者可借助这一工具集汇聚 Model Card 所需的输入信息。

该工具包包括:

  • JSON 架构,指定了需包含在 Model Card 中的字段
  • ModelCard 数据 API,用于表示 JSON 架构 的实例并将其呈现为 Model Card
  • 一个组件,它可以使用存储在 ML Metadata (MLMD) 中的模型来源信息自动为 JSON 填充相关信息

我们对该工具包的设计初衷是采用模块化风格,这样一来,即使 Model Card 创建者的建模环境未与 MLMD 集成,仍可以利用 JSON 架构和 ModelCard 数据 API。在本文中,我们将向您展示如何使用这些组件来为由 Keras 构建、在 ImageNet 上训练并在 TensorFlow Datasets (TFDS) 提供的 cats_vs_dogs 数据集上进行调优的 MobileNet V2 模型创建 Model Card。尽管从透明度的角度而言,此模型和用例可能不太具代表性,但我们以此向您轻松展示 MCT 的组成部分。

Model Card 示例:点击放大查看清晰图片

Model Card Toolkit 速览

您可以按照说明,在 Colab notebook 中自行运行代码。在展示中,我们将额外介绍工具包使用注意事项的相关信息。

首先安装 Model Card Toolkit。

pip install 'model-card-toolkit>=0.1.1,<0.2'

现在,我们加载 MobileNet V2 模型和通过在 cats_vs_dogs 数据集中调优模型而生成的权重。有关如何调优模型的更多信息,您可以参阅相关主题的 TensorFlow 教程

URL = 'https://storage.googleapis.com/cats_vs_dogs_model/cats_vs_dogs_model.zip'
BASE_PATH = tempfile.mkdtemp()
ZIP_PATH = os.path.join(BASE_PATH, 'cats_vs_dogs_model.zip')
MODEL_PATH = os.path.join(BASE_PATH,'cats_vs_dogs_model')  

r = requests.get(URL, allow_redirects=True)
open(ZIP_PATH, 'wb').write(r.content)

with zipfile.ZipFile(ZIP_PATH, 'r') as zip_ref:
    zip_ref.extractall(BASE_PATH)

model = tf.keras.models.load_model(MODEL_PATH)

我们还将计算样本的数量(将其存储到“examples”对象中)以及准确率得分(按类分组)。稍后,我们将使用准确率和样本来构建要在 Model Card 中显示的图表。

examples = cats_vs_dogs.get_data()
accuracy = compute_accuracy(examples['combined'])
cat_accuracy = compute_accuracy(examples['cat'])
dog_accuracy = compute_accuracy(examples['dog'])

接下来,我们将使用 Model Card Toolkit 创建 Model Card。第一步是初始化 ModelCardToolkit 对象,该对象用于维护资源,包括 Model Card JSON 文件Model Card 文档。调用 ModelCardToolkit.scaffold_assets() 生成这些资源并返回 ModelCard 对象。

model_card_dir = tempfile.mkdtemp()
mct = ModelCardToolkit(model_card_dir)
model_card = mct.scaffold_assets()

然后填充 Model Card 的字段。首先,我们将填写 model_card.model_details 部分,其中包含基本的元数据字段。

先指定模型的 name,然后在 overview 部分对模型进行简述。

model_card.model_details.name = 'Fine-tuned MobileNetV2 Model for Cat vs. Dogs'
model_card.model_details.overview = (
   'This model distinguishes cat and dog images. It uses the MobileNetV2 '
   'architecture (https://arxiv.org/abs/1801.04381) and is trained on the '
   'Cats vs Dogs dataset '
   '(https://www.tensorflow.org/datasets/catalog/cats_vs_dogs). This model '
   'performed with high accuracy on both Cat and Dog images.'
  )

我们提供模型的 ownersversionreferences

model_card.model_details.owners = [
 {'name': 'Model Cards Team', 'contact': '[email protected]'}
]
model_card.model_details.version = {'name': 'v1.0', 'data': '08/28/2020'}
model_card.model_details.references = [
   'https://www.tensorflow.org/guide/keras/transfer_learning',
   'https://arxiv.org/abs/1801.04381',
  ]

最后,指定共享模型的 license,以及一个网址,如果未来用户选择在 citation 部分重用该模型,他们可以引用该网址。

model_card.model_details.license = 'Apache-2.0'
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'

model_card.quantitative_analysis 字段包含有关模型性能指标的信息。在这里,我们为基于数据集构建的假设模型创建了一些综合性能指标值。

model_card.quantitative_analysis.performance_metrics = [
 {'type': 'accuracy', 'value': accuracy},
 {'type': 'accuracy', 'value': cat_accuracy, 'slice': 'cat'},
 {'type': 'accuracy', 'value': dog_accuracy, 'slice': 'Dog'},
]

model_card.considerations 包含模型的定性信息。特别是,我们建议包括以下部分或全部信息:

用例:此模型的预期用例是什么?在本例中非常直观:

model_card.considerations.use_cases = [
   'This model classifies images of cats and dogs.'
]

限制:用户应注意哪些技术限制?哪些数据会导致您的模型失效或性能低下?在我们的用例中,非狗或猫的样本会导致我们的模型失效,因此我们表明这一点:

model_card.considerations.limitations = [
   'This model is not able to classify images of other animals.'
]

道德考量:用户在决定是否使用模型时应注意哪些道德方面的考量?模型在什么情况下会引起道德问题?您采取了哪些措施来缓解道德问题?

model_card.considerations.ethical_considerations = [{
   'name':
       'While distinguishing between cats and dogs is generally agreed to be '
       'a benign application of machine learning, harmful results can occur '
       'when the model attempts to classify images that don’t contain cats or '
       'dogs.',
   'mitigation_strategy':
       'Avoid application on non-dog and non-cat images.'
}]

最后,您可以在 Model Card 中添加图表。建议您添加能反映训练数据集和评估数据集中分布情况的图表,以及基于模型评估数据的性能图表。model_card 提供了以下图表:

  • model_card.model_parameters.data.train.graphics,用于训练数据集统计信息
  • model_card.model_parameters.data.eval.graphics,用于评估数据集统计信息
  • model_card.quantitative_analysis.graphics,用于模型性能的定量分析

对于此 Model Card ,我们添加了验证集大小和模型准确率的 Matplotlib 图表,二者均按类分组。如果您想查看 Matplotlib 代码,请访问 相关的 Colab。如果您使用的是 ML Metadata,将自动生成这些图表(如 本 Colab 中所示)。您还可以使用其他呈现库,例如 Seaborn。

将图表添加到 Model Card 中。

model_card.model_parameters.data.eval.graphics.collection = [

 {'name': 'Validation Set Size', 'image': validation_set_size_barchart},
]
model_card.quantitative_analysis.graphics.collection = [
 {'name': 'Accuracy', 'image': accuracy_barchart},
]

我们终于准备好生成自己的 Model Card 了!现在开始吧。首先,我们需要用最新的 ModelCard更新 ModelCardToolkit 对象。

mct.update_model_card_json(model_card)

最后,我们以指定的格式输出生成 Model Card 文档。

# Generate a model card document in HTML (default)
html_doc = mct.export_format()

# Display the model card document in HTML
display.display(display.HTML(html_doc))

# Generate a model card document in Markdown
md_path = os.path.join(model_card_dir, 'template/md/default_template.md.jinja')
md_doc = mct.export_format(md_path, 'model_card.md')

# Display the model card document in Markdown
display.display(display.Markdown(md_doc))

我们已经生成 Model Card!您可以与您的直属团队以及未参与项目的成员一起审查最终产品。我们特别建议您审查“道德考量”等定性字段,以确保您已充分了解所有用例及其潜在后果。您的 Model Card 是否解决了来自不同背景的人可能遇到的问题?开发者可以使用该语言吗?那么政策制定者或可能与模型互动的下游用户呢?今后,我们希望为 Model Card 创建者提供更多指导,以帮助他们回答这些问题,并针对如何填写 considerations 字段提供更详尽的说明。

如有任何问题,或者想要分享 Model Card ,请发送电子邮件至 [email protected] 与我们联系!

致谢

Huanming Fang、Hui Miao、Karan Shukla、Dan Nanas、Catherina Xu、Christina Greer、Neoklis Polyzotis、Tulsee Doshi、Tiffany Deng、Margaret Mitchell、Timnit Gebru、Andrew Zaldivar、Mahima Pushkarna、Meena Natarajan、Roy Kim、Parker Barnes、Tom Murray、Susanna Ricco、Lucy Vasserman 和 Simone Wu。

原文:Using Model Card Toolkit for TF Model Transparency
中文:TensorFlow 公众号