Explainability Reports for NLP Models
Amazon SageMaker Clarify supports explanations for natural language processing (NLP) models. NLP models help you understand which sections of text are most important for the predictions made by your model. This functionality can be used to explain either an individual local prediction or the model’s expected predictions for overall global explanations. You can define the length of the text segment (tokens, phrases, sentences, paragraphs) to understand and visualize a model’s behavior at multiple levels of granularity.
For an example notebook with instructions on how to run a SageMaker Clarify processing job that
creates explanations for text data using NLP models, see Text Explainability with Amazon SageMaker Clarify
SageMaker Clarify NLP explainability is compatible with classification and regression models. You can also use Clarify to explain your model's behavior on multi-modal datasets that contain text, categorical, or numerical features. NLP explainability for multi-modal datasets can help you understand how important each feature is to the model's output. SageMaker Clarify supports 62 languages and can handle text which includes multiple languages.
To obtain feature importance for parts of an input text, create a
TextConfig
specifying the granularity
of the parts of the
text and the language
. Clarify then breaks the text down into tokens,
sentences, or paragraphs depending on your choice of granularity
. It
replaces subsets of these parts with the values from the baseline
. The
baseline
defaults to empty strings, meaning SageMaker Clarify drops parts of the
input text. SageMaker Clarify then replaces tokens (sentences and paragraphs, respectively) to
determine how these replacements affect the model’s prediction, in order to assess their
importance.
from sagemaker import clarify text_config = clarify.TextConfig( # Specify the language of your text or use "multi-language" for multi-language. language="english", # Choose the granularity of your explanations as tokens, sentences or paragraphs. granularity="token" ) shap_config = clarify.SHAPConfig( # For now, we don't support global aggregation, # so make sure you retrieve local explanations. save_local_shap_values=True, text_config=text_config, # Determine with what to replace tokens/sentences/paragraphs (based on your choice of granularity) with. baseline=[["<UNK>"]], # You can further specify num_samples and agg_method. )
The remainder of the explainability job is coded as usual.
explainability_output_path = 's3://{}/{}/clarify-explainability'.format(bucket, prefix) explainability_data_config = clarify.DataConfig( s3_data_input_path=train_uri, s3_output_path=explainability_output_path, # With text data sometimes detection of headers fails, # so we recommend explicitly setting it in the config. headers=["text"], dataset_type="text/csv") model_config = clarify.ModelConfig( model_name=model_name, # Specialized hardware is well-suited for NLP models. instance_type="ml.p2.xlarge", instance_count=1 ) clarify_processor = clarify.SageMakerClarifyProcessor( role=role, instance_count=1, instance_type="ml.m5.xlarge", sagemaker_session=session ) clarify_processor.run_explainability( data_config=explainability_data_config, model_config=model_config, explainability_config=shap_config)
View the local explanations in the explainability_output_path
S3 bucket.
SageMaker Clarify does not aggregate the importance of individual
tokens/sentences/paragraphs.
Extensions:
-
Multi-modal data - If your data contains more than text, such as categorical or numeric features, you can add more columns in your header and baseline to accommodate those features.
-
JSON - If the model input or output data is in JSON Lines format, specify the
dataset_type
in theDataConfig
or theaccept_type
andcontent_type
in theModelConfig
. -
Multi-class model output - If your model does multi-class or multi-label predictions, SageMaker Clarify computes the importance for each class.
-
Model output - Some model outputs contain more than a single score. A prediction of three examples returns a matrix of shape
[3, 1]
such as[[0.1], [-1.1], [10.2], [0.0], [3.2]]
. You can specifymodel_scores
inrun_explainability
. For example, if your model predicts probabilities of five classes and additionally outputs the winning class,["c1", [0.1, 0.4, 0.3, 0.2]]
, then you can setmodel_scores=1
.
Tips for fast results:
-
During the development phase, work with a small subset of examples for quick iterations.
-
To scale up for deployment, increase the
instance_count
for the processing job and the predictor. This instructs SageMaker Clarify to partition the data and work with multiple machines in parallel. For parallel processing, we recommend using the parquet data format because Spark can struggle with special characters in CSV files. -
Choose an appropriate
instance_type
for your model. GPU instances are often suitable for NLP models. -
To save unnecessary computation, consider truncating your text. Many models work with a maximum text length. By applying the truncation in a preprocessing step, SageMaker Clarify does not waste resources determining the feature importance for the parts of text that are disregarded by the model.