使用模型卡片工具包实现 TF 模型透明度
2020 年 11 月 18 日
发布者 Karan Shukla,Google Research 软件工程师

机器学习 (ML) 模型透明度在影响人们生活的各种领域都很重要,从医疗保健到个人理财再到就业。在 Google,这种对透明度的渴望促使我们开发了 模型卡片,这是一个框架,用于透明地报告 ML 模型的性能、来源、伦理考虑以及更多内容。但是,编译创建有用模型卡片所需的信息可能很费时。为了解决这个问题,我们最近宣布开源发布 模型卡片工具包 (MCT),这是一个支持 ML 开发人员编译模型卡片中包含信息的工具集合。

该工具包包含以下内容:

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

我们希望该工具包是模块化的,这样即使模型卡片创建者的建模环境未与 MLMD 集成,他们仍然可以利用 JSON 模式和 ModelCard 数据 API。在这篇文章中,我们将向您展示如何使用这些组件为在 ImageNet 上训练并在 cats_vs_dogs 数据集(可用于 TensorFlow 数据集 (TFDS))上微调的 Keras MobileNetV2 模型 创建模型卡片。虽然从透明度的角度来看,这个模型和用例可能微不足道,但它使我们能够轻松地演示 MCT 的组件。

Model card for Fine-tuned MobileNetV2 Model for Cats vs Dogs
一个示例模型卡片。单击 此处 查看较大版本。

模型卡片工具包演练

您可以在 Colab 笔记本 中进行操作并自行运行代码。在本演练中,我们将包含一些有关使用工具包时需要牢记的注意事项的额外信息。

我们首先安装模型卡片工具包。

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

现在,我们同时加载 MobileNetV2 模型和在 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 = cats_vs_dogs.get_data()
accuracy = compute_accuracy(examples['combined'])
cat_accuracy = compute_accuracy(examples['cat'])
dog_accuracy = compute_accuracy(examples['dog'])

接下来,我们将使用模型卡片工具包创建我们的模型卡片。第一步是初始化一个 ModelCardToolkit 对象,它维护资产,包括一个 模型卡片 JSON 文件 和一个 模型卡片文档。调用 ModelCardToolkit.scaffold_assets() 生成这些资产并返回一个 ModelCard 对象。

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

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

我们首先指定模型的 名称,在 概述 部分中编写模型的简短描述。

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://tensorflowcn.cn/datasets/catalog/cats_vs_dogs). This model '
   'performed with high accuracy on both Cat and Dog images.'
  )

我们提供模型的 所有者版本参考

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://tensorflowcn.cn/guide/keras/transfer_learning',
   'https://arxiv.org/abs/1801.04381',
  ]

最后,我们分享模型的 许可证 信息,以及未来用户可以选择在 引用 部分中重新使用模型时可以引用的 URL。

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_parameters.data.train.graphics 用于训练数据集统计信息
  • model_card.model_parameters.data.eval.graphics 用于评估数据集统计信息
  • model_card.quantitative_analysis.graphics 用于模型性能的定量分析

对于此模型卡片,我们包含了验证集大小和模型精度的 Matplotlib 图表,两者都按类别分开。如果您想查看 Matplotlib 代码,请访问 关联的 Colab。如果您使用的是 ML Metadata,这些图表将自动生成(如 此 Colab 中所示)。您也可以使用其他可视化库,例如 Seaborn。

我们将图表添加到模型卡片中。

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},
]

我们终于准备好生成模型卡片了!现在就来做吧。首先,我们需要使用最新的 ModelCard 更新 ModelCardToolkit 对象。

mct.update_model_card_json(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 for Fine-tuned MobileNetV2 Model for Cats vs Dogs

我们已经生成了模型卡片!建议您与您的直接团队以及远离项目的人员一起审查最终产品。特别是,我们建议审查“伦理考虑”等定性字段,以确保您已充分涵盖所有潜在用例及其潜在后果。您的模型卡片是否回答了来自不同背景的人们可能提出的问题?语言对开发者来说是否易于理解?政策制定者或可能与模型交互的下游用户呢?将来,我们希望为模型卡片创建者提供更多指导,他们可以使用这些指导来帮助回答这些问题,并提供更详细的有关如何填写 考虑 字段的说明。

有问题吗?有模型卡片要分享吗?请发送电子邮件至 [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

发布者 Karan Shukla,Google Research 软件工程师

机器学习 (ML) 模型透明度在影响人们生活的各种领域都很重要,从医疗保健到个人理财再到就业。在 Google,这种对透明度的渴望促使我们开发了 模型卡片,这是一个框架,用于透明地报告 ML 模型的性能、来源、伦理考虑以及更多内容。但是,编译创建有用模型卡片所需的信息可能很费时。为了解决这个问题,我们最近宣布开源发布 模型卡片工具包 (MCT),这是一个支持 ML 开发人员编译模型卡片中包含信息的工具集合。