Reputation: 73
I'm trying to use Watson Assistant predictions on LIME for explanation model. Is that work or just with sickit-learn models?
def get_watson_assistant_response(text=''):
print(text)
response = assistant.message_stateless(
input={
'message_type': 'text',
'text': text,
'options': {'alternate_intents': True }
},
assistant_id='xxx').get_result()
return response['output']['intents']
text_to_explain = "Gostaria de fazer uma transferência"
watson_response = get_watson_assistant_response(text_to_explain)
watson_response
OUTPUT:
[{'intent': 'xxa', 'confidence': 0.3107834756374359},
{'intent': 'xxb', 'confidence': 0.15369020402431488},
{'intent': 'xxc', 'confidence': 0.15228083729743958},
{'intent': 'xxd', 'confidence': 0.13980790972709656}]
And the using the LIME library from python:
classes = []
for i in watson_response:
classes.append(i['intent'])
explainer = LimeTextExplainer(class_names=classes)
explanation = explainer.explain_instance(
text_to_explain,
classifier_fn=get_watson_assistant_response(text_to_explain)
)
But there is an error:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[61], line 5
2 explainer = LimeTextExplainer(class_names=classes)
4 # Gera uma explicação para o modelo de classificação
----> 5 explanation = explainer.explain_instance(
6 text_to_explain,
7 get_watson_assistant_response(text=text_to_explain),
8 )
10 # # Imprime a explicação
11 # # print('Texto original:', text_to_explain)
12 # # print('Classificação do Watson Assistant:', watson_response)
13 # # print('\nExplicação LIME:')
14 # # for i in range(len(explanation.as_list())):
15 # # print(explanation.as_list()[i])
File /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/lime/lime_text.py:413, in LimeTextExplainer.explain_instance(self, text_instance, classifier_fn, labels, top_labels, num_features, num_samples, distance_metric, model_regressor)
406 indexed_string = (IndexedCharacters(
407 text_instance, bow=self.bow, mask_string=self.mask_string)
408 if self.char_level else
409 IndexedString(text_instance, bow=self.bow,
410 split_expression=self.split_expression,
411 mask_string=self.mask_string))
412 domain_mapper = TextDomainMapper(indexed_string)
--> 413 data, yss, distances = self.__data_labels_distances(
414 indexed_string, classifier_fn, num_samples,
415 distance_metric=distance_metric)
416 if self.class_names is None:
417 self.class_names = [str(x) for x in range(yss[0].shape[0])]
File /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/lime/lime_text.py:482, in LimeTextExplainer.__data_labels_distances(self, indexed_string, classifier_fn, num_samples, distance_metric)
480 data[i, inactive] = 0
481 inverse_data.append(indexed_string.inverse_removing(inactive))
--> 482 labels = classifier_fn(inverse_data)
483 distances = distance_fn(sp.sparse.csr_matrix(data))
484 return data, labels, distances
TypeError: 'list' object is not callable
On the documentation, I did not understand if LIME could be used just with scikit-learn models, is it?
Upvotes: 0
Views: 52