Alibi Versions Save

Algorithms for explaining machine learning models

v0.6.4

2 years ago

v0.6.4 (2022-01-28)

Full Changelog

This is a patch release to correct a regression in AnchorImage introduced in v0.6.3.

Fixed

  • Fix a bug introduced in v0.6.3 where AnchorImage would ignore user segmentation_kwargs (#581).

Development

  • The maximum versions of Pillow and scikit-image have been bumped to 9.x and 0.19.x respectively.

v0.6.3

2 years ago

v0.6.3 (2022-01-18)

Full Changelog

Added

  • New feature A callback can now be passed to IntegratedGradients via the target_fn argument, in order to calculate the scalar target dimension from the model output. This is to bypass the requirement of passing target directly to explain when the target of interest may depend on the prediction output. See the example in the docs. (#523).
  • A new comprehensive Introduction to explainability added to the documentation (#510).

Changed

  • Python 3.6 has been deprecated from the supported versions as it has reached end-of-life.

Fixed

  • Fix a bug with passing background images to AnchorImage leading to an error (#542).
  • Fix a bug with rounding errors being introduced in CounterfactualRLTabular (#550).

Development

  • Docstrings have been updated and consolidated (#548). For developers, docstring conventions have been documented in CONTRIBUTING.md.
  • numpy typing has been updated to be compatible with numpy 1.22 (#543). This is a prerequisite for upgrading to tensorflow 2.7.
  • To further improve reliability, strict Optional type-checking with mypy has been reinstated (#541).
  • The Alibi CI tests now include Windows and MacOS platforms (#575).
  • The maximum tensorflow version has been bumped from 2.6 to 2.7 (#377).

v0.6.2

2 years ago

v0.6.2 (2021-11-18)

Full Changelog

Added

  • Documentation on using black-box and white-box models in the context of alibi, see here.
  • AnchorTabular, AnchorImage and AnchorText now expose an additional dtype keyword argument with a default value of np.float32. This is to ensure that whenever a user predictor is called internally with dummy data a correct data type can be ensured (#506).
  • Custom exceptions. A new public module alibi.exceptions defining the alibi exception hierarchy. This introduces two exceptions, AlibiPredictorCallException and AlibiPredictorReturnTypeError. See #520 for more details.

Changed

  • For AnchorImage, coerce image_shape argument into a tuple to implicitly allow passing a list input which eases use of configuration files. In the future the typing will be improved to be more explicit about allowed types with runtime type checking.
  • Updated the minimum shap version to the latest 0.40.0 as this fixes an installation issue if alibi and shap are installed with the same command.

Fixed

  • Fix a bug with version saving being overwritten on subsequent saves (#481).
  • Fix a bug in the Integrated Gradients notebook with transformer models due to a regression in the upstream transformers library (#528).
  • Fix a bug in IntegratedGradients with forward_kwargs not always being correctly passed (#525).
  • Fix a bug resetting TreeShap predictor (#534).

Development

  • Now using readthedocs Docker image in our CI to replicate the doc building environment exactly. Also enabled readthedocs build on PR feature which allows browsing the built docs on every PR.
  • New notebook execution testing framework via Github Actions. There are two new GA workflows, test_all_notebooks which is run once a week and can be triggered manually, and test_changed_notebooks which detects if any notebooks have been modified in a PR and executes only those. Not all notebooks are amenable to be tested automatically due to long running times or complex software/hardware dependencies. We maintain a list of notebooks to be excluded in the testing script under testing/test_notebooks.py.
  • Now using myst (a markdown superset) for more flexible documentation (#482).
  • Added a CITATION.cff file.

v0.6.1

2 years ago

v0.6.1 (2021-09-02)

Full Changelog

Added

Changed

  • Future breaking change The names of CounterFactual and CounterFactualProto classes have been changed to Counterfactual and CounterfactualProto respectively for consistency and correctness. The old class names continue working for now but emit a deprecation warning message and will be removed in an upcoming version.
  • dill behaviour was changed to not extend the pickle protocol so that standard usage of pickle in a session with alibi does not change expected pickle behaviour. See discussion.
  • AnchorImage internals refactored to avoid persistent state between explain calls.

Development

  • A PR checklist is available under CONTRIBUTING.md. In the future many of these may be turned into automated checks.
  • pandoc version for docs building updated to 1.19.2 which is what is used on readthedocs.
  • Citation updated to the JMLR paper.

v0.6.0

2 years ago

v0.6.0 (2021-07-08)

Full Changelog

Added

  • New feature AnchorText now supports sampling according to masked language models via the transformers library. See docs and the example for using the new functionality.
  • Breaking change due to the new masked language model sampling for AnchorText the public API for the constructor has changed. See docs for a full description of the new API.
  • AnchorTabular now supports one-hot encoded categorical variables in addition to the default ordinal/label encoded representation of categorical variables.
  • IntegratedGradients changes to allow explaining a wider variety of models. In particular, a new forward_kwargs argument to explain allows passing additional arguments to the model and attribute_to_layer_inputs flag to allow calculating attributions with respect to layer input instead of output if set to True. The API and capabilities now track more closely to the captum.ai PyTorch implementation.
  • Example of using IntegratedGradients to explain transformer models.
  • Python 3.9 support.

Fixed

  • IntegratedGradients - fix the path definition for attributions calculated with respect to an internal layer. Previously the paths were defined in terms of the inputs and baselines, now they are correctly defined in terms of the corresponding layer input/output.

v0.5.8

3 years ago

v0.5.8 (2021-04-29)

Full Changelog

Added

  • Experimental explainer serialization support using dill. See docs for more details.

Fixed

  • Handle layers which are not part of model.layers for IntegratedGradients.

Development

  • Update type hints to be compatible with numpy 1.20.
  • Separate licence build step in CI, only check licences against latest Python version.

v0.5.7

3 years ago

v0.5.7 (2021-03-31)

Full Changelog

Changed

  • Support for KernelShap and TreeShap now requires installing the shap dependency explicitly after installing alibi. This can be achieved by running pip install alibi && pip install alibi[shap]. The reason for this is that the build process for the upstream shap package is not well configured resulting in broken installations as detailed in https://github.com/SeldonIO/alibi/pull/376 and https://github.com/slundberg/shap/pull/1802. We expect this to be a temporary change until changes are made upstream.

Added

  • A reset_predictor method for black-box explainers. The intended use case for this is for deploying an already configured explainer to work with a remote predictor endpoint instead of the local predictor used in development.
  • alibi.datasets.load_cats function which loads a small sample of cat images shipped with the library to be used in examples.

Fixed

  • Deprecated the alibi.datasets.fetch_imagenet function as the Imagenet API is no longer available.
  • IntegratedGradients now works with subclassed TensorFlow models.
  • Removed support for calculating attributions wrt multiple layers in IntegratedGradients as this was not working properly and is difficult to do in the general case.

Development

  • Fixed an issue with AnchorTabular tests not being picked up due to a name change of test data fixtures.

v0.5.6

3 years ago

v0.5.6 (2021-02-18)

Full Changelog

Added

  • Breaking change IntegratedGradients now supports models with multiple inputs. For each input of the model, attributions are calculated and returned in a list. Also extends the method allowing to calculate attributions for multiple internal layers. If a list of layers is passed, a list of attributions is returned. See https://github.com/SeldonIO/alibi/pull/321.
  • ALE now supports selecting a subset of features to explain. This can be useful to reduce runtime if only some features are of interest and also indirectly helps dealing with categorical variables by being able to exclude them (as ALE does not support categorical variables).

Fixed

  • AnchorTabular coverage calculation was incorrect which was caused by incorrectly indexing a list, this is now resolved.
  • ALE was causing an error when a constant feature was present. This is now handled explicitly and the user has control over how to handle these features. See https://docs.seldon.io/projects/alibi/en/latest/api/alibi.explainers.ale.html#alibi.explainers.ale.ALE for more details.
  • Release of Spacy 3.0 broke the AnchorText functionality as the way lexeme_prob tables are loaded was changed. This is now fixed by explicitly handling the loading depending on the spacy version.
  • Fixed documentation to refer to the Explanation object instead of the old dict object.
  • Added warning boxes to CounterFactual, CounterFactualProto and CEM docs to explain the necessity of clearing the TensorFlow graph if switching to a new model in the same session.

Development

  • Introduced lower and upper bounds for library and development dependencies to limit the potential for breaking functionality upon new releases of dependencies.
  • Added dependabot support to automatically monitor new releases of dependencies (both library and development).
  • Switched from Travis CI to Github Actions as the former limited their free tier.
  • Removed unused CI provider configs from the repo to reduce clutter.
  • Simplified development dependencies to just two files, requirements/dev.txt and requirements/docs.txt.
  • Split out the docs building stage as a separate step on CI as it doesn't need to run on every Python version thus saving time.
  • Added .readthedocs.yml to control how user-facing docs are built directly from the repo.
  • Removed testing related entries to setup.py as the workflow is both unused and outdated.
  • Avoid shap==0.38.1 as a dependency as it assumes IPython is installed and breaks the installation.

v0.5.5

3 years ago

v0.5.5 (2020-10-20)

Full Changelog

Added

  • New feature Distributed backend using ray. To use, install ray using pip install alibi[ray].
  • New feature KernelShap distributed version using the new distributed backend.
  • For anchor methods added an explanation field data['raw']['instances'] which is a batch-wise version of the existing data['raw']['instance']. This is in preparation for the eventual batch support for anchor methods.
  • Pre-commit hook for pyupgrade via nbqa for formatting example notebooks using Python 3.6+ syntax.

Fixed

  • Flaky test for distributed anchors (note: this is the old non-batchwise implementation) by dropping the precision treshold.
  • Notebook string formatting upgraded to Python 3.6+ f-strings.

Changed

  • Breaking change For anchor methods, the returned explanation field data['raw']['prediction'] is now batch-wise, i.e. for AnchorTabular and AnchorImage it is a 1-dimensional numpy array whilst for AnchorText it is a list of strings. This is in preparation for the eventual batch support for anchor methods.
  • Removed dependency on prettyprinter and substituted with a slightly modified standard library version of PrettyPrinter. This is to prepare for a conda release which requires all dependencies to also be published on conda.

v0.5.4

3 years ago

v0.5.4 (2020-09-03)

Full Changelog

Added

  • update_metadata method for any Explainer object to enable easy book-keeping for algorithm parameters

Fixed

  • Updated KernelShap wrapper to work with the newest shap>=0.36 library
  • Fix some missing metadata parameters in KernelShap and TreeShap