Exécution d'un exemple rasa_core à partir des documents avec
› python3 -m rasa_core.run -d models/dialogue -u models/nlu/default/current
et obtenez cette sortie d'erreur après chaque message dans la boîte de dialogue:
.../sklearn/...: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.
C'est un problème avec numpy qui a été corrigé mais n'a pas été publié dans la dernière version: https://github.com/scikit-learn/scikit-learn/issues/10449
Ce qui suit n'a pas fonctionné pour désactiver temporairement l'avertissement:
-W ignore
python3 -W ignore -m rasa_core.run -d models/dialogue -u models/nlu/default/current
warnings.simplefilter
python3
>>> warnings.simplefilter('ignore', DeprecationWarning)
>>> exit()
python3 -m rasa_core.run -d models/dialogue -u models/nlu/default/current
Cet avertissement est provoqué par numpy qui a déprécié le vérification de la valeur de vérité sur un tableau vide
La justification de ce changement est
Il est impossible de tirer parti du fait que les tableaux vides sont faux, car un tableau peut être faux pour d'autres raisons.
Vérifiez l'exemple suivant:
>>> import numpy as np
>>> bool(np.array([]))
False
>>> # but this is not a good way to test for emptiness, because...
>>> bool(np.array([0]))
False
Selon problème 10449 sur la bibliothèque scikit-learn, cela a été corrigé dans la branche principale de la bibliothèque. Cependant, cela sera disponible vers août 2018, donc une alternative possible est d'utiliser une version moindre de la bibliothèque numpy qui n'a pas ce problème, c'est-à-dire 1.13.3 puisque scikit-library par défaut ferait référence à la dernière version de numpy (qui est 1.14.2 à le temps d'écrire cette réponse)
Sudo pip install numpy==1.13.3
ou avec pip3 comme suit
Sudo pip3 install numpy==1.13.3
Dans le cas où nous voulons utiliser la dernière version de la bibliothèque (numpy dans ce cas) qui donne l'avertissement de dépréciation et voulons simplement faire taire l'avertissement de dépréciation, nous pouvons le faire en utilisant filterwarnings méthode de python - Avertissements module
L'exemple suivant ci-dessous produirait l'avertissement de dépréciation mentionné dans la question ci-dessus:
from sklearn import preprocessing
if __name__ == '__main__':
le = preprocessing.LabelEncoder()
le.fit([1, 2, 2, 6])
le.transform([1, 1, 2, 6])
le.inverse_transform([0, 0, 1, 2])
produit
/usr/local/lib/python2.7/dist-packages/sklearn/preprocessing/label.py:151: DeprecationWarning: la valeur de vérité d'un tableau vide est ambiguë. Renvoyer False, mais à l'avenir, cela entraînera une erreur. Utilisation
array.size > 0
pour vérifier qu'un tableau n'est pas vide.
Et pour en prendre soin, ajoutez des avertissements de filtre pour DeprecationWarning
from sklearn import preprocessing
import warnings
if __name__ == '__main__':
warnings.filterwarnings(action='ignore', category=DeprecationWarning)
le = preprocessing.LabelEncoder()
le.fit([1, 2, 2, 6])
le.transform([1, 1, 2, 6])
le.inverse_transform([0, 0, 1, 2])
Dans le cas où il y a plusieurs modules qui donnent un avertissement et que nous voulons un avertissement sélectivement silencieux, utilisez l'attribut module . par exemple. à l'avertissement de dépréciation silencieux du module d'apprentissage de scikit
warnings.filterwarnings(module='sklearn*', action='ignore', category=DeprecationWarning)